[petsc-users] reading petsc binary vec in python.

Ethan Coon ecoon at lanl.gov
Tue Jul 19 10:38:43 CDT 2011



On Tue, 2011-07-19 at 09:49 -0500, Ataollah Mesgarnejad wrote:
> Dear Ethan,
> 
> I started deciphering your code for some reason it tries to read header two times and the error comes from the second try! 

That is the expected behavior.  The code cannot know, a priori, how many
vecs you have in your file.  The first pass reads the first vec, and the
second pass tries to read a second PETSc object but gets an empty file.
This is expected to error.  Line 119, the except line that I asked you
to change, is supposed to catch that error and tell the program that the
file is empty.  

However, I screwed up the line in my last email -- it should read:

except (MemoryError, IndexError):

That should fix your problem, and will be fixed in dev.

Ethan

> Is it normal for PetscBinaryRead to try to read header twice?
> 
> 
> Best,
> Ata
> On Jul 18, 2011, at 6:28 PM, Ethan Coon wrote:
> 
> > Hi Ata,
> > 
> > Can you tell me what version of numpy you're using?  In some older
> > versions of numpy, a "fromfile" called on a file with no data left to
> > read did not error, but instead returned an empty list.  This
> > implementation, since it doesn't know how many objects are in the file,
> > tries to read objects until it gets an error saying the file is empty.
> > Try something for me:
> > 
> > change line 119 of PetscBinaryRead.py to read:
> > 
> > except MemoryError, IndexError:
> > 
> > Does that fix it?  
> > 
> > Thanks,
> > 
> > Ethan
> > 
> > 
> > On Mon, 2011-07-18 at 17:56 -0500, Ataollah Mesgarnejad wrote:
> >> Thanks Ethan,
> >> 
> >> I did as you said but when I try to read the file using:
> >> 
> >> petsc_objs = PetscBinaryRead.readBinaryFile('V-018.bin')
> >> 
> >> I get the following error:
> >> 
> >> Traceback (most recent call last):
> >>  File "./petscvec.py", line 4, in <module>
> >>    petsc_objs = PetscBinaryRead.readBinaryFile('V-018.bin')
> >>  File "/Users/ataollahmesgarnejad/Software/petsc-3.1/bin/python/PetscBinaryRead.py", line 118, in readBinaryFile
> >>    header = np.fromfile(fid, dtype=IntType, count=1)[0]
> >> IndexError: index out of bounds
> >> 
> >> Which is peculiar since when I try to read the header myself using:
> >> 
> >> header=numpy.fromfile('V-018.bin',dtype='>i4',count=1) 
> >> print header[0]
> >> 
> >> I get:
> >> 
> >> 1211214
> >> 
> >> which is a Vec identifier.
> >> 
> >> Any thoughts on what goes wrong?
> >> 
> >> Best,
> >> Ata
> > 
> > -- 
> > ------------------------------------
> > Ethan Coon
> > Post-Doctoral Researcher
> > Applied Mathematics - T-5
> > Los Alamos National Laboratory
> > 505-665-8289
> > 
> > http://www.ldeo.columbia.edu/~ecoon/
> > ------------------------------------
> > 
> 

-- 
------------------------------------
Ethan Coon
Post-Doctoral Researcher
Applied Mathematics - T-5
Los Alamos National Laboratory
505-665-8289

http://www.ldeo.columbia.edu/~ecoon/
------------------------------------



More information about the petsc-users mailing list