[petsc-users] Skipping data when reading from binary file

Peder Jørgensgaard Olesen pjool at mek.dtu.dk
Mon Oct 4 11:19:31 CDT 2021


I believe figured out how to get it to work, though it seems that in order to skip two integers I must use PETSC_BINARY_INT_SIZE*4; in other words, an integer appears to take twice the number of bytes given by PETSC_BINARY_INT_SIZE. Not sure what could be causing this.


Also, I had somehow led myself to believe that the output parameter of the seek routine could be set to NULL. Writing output to the null pointer didn't produce the desired effects, much to the astonishment of no one whatsoever.


-Peder

________________________________
Fra: Matthew Knepley <knepley at gmail.com>
Sendt: 4. oktober 2021 18:05:57
Til: Peder Jørgensgaard Olesen
Cc: Barry Smith; petsc-users at mcs.anl.gov
Emne: Re: [petsc-users] Skipping data when reading from binary file

On Mon, Oct 4, 2021 at 11:27 AM Peder Jørgensgaard Olesen via petsc-users <petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>> wrote:

In theory it should be relatively simple to write up a routine to skip a given number of objects. I'm not getting PetscBinarySeek() to work even on a header-less array of integers, however. I suppose that

> PetscBinarySeek(fd, PETSC_BINARY_INT_SIZE*array_size, PETSC_BINARY_SEEK_CUR, NULL);

The VecView code is here:

  https://gitlab.com/petsc/petsc/-/blob/main/src/vec/vec/utils/vecio.c#L32

you can see that it writes 2 integers and then the scalar data. So, first you skip the 2 integers, and then you skip the array_size scalars (so you want PETSC_BINARY_SCALAR_SIZE).

  Thanks,

     Matt

ought to do the trick, but that does not seem to be the case.


Am I somehow using this routine incorrectly?


Peder

________________________________
Fra: Barry Smith <bsmith at petsc.dev<mailto:bsmith at petsc.dev>>
Sendt: 4. oktober 2021 16:38:10
Til: Peder Jørgensgaard Olesen
Cc: petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>
Emne: Re: [petsc-users] Skipping data when reading from binary file


  To minimize code changes you could add a PETSc viewer format that caused skipping reading in an object. Then each object load would need a skip-read method that mimicked the reading but actually just skipped over the parts of the data of the object (using the correct sizes). For vectors this is trivial since you just skip the single known array. For sparse matrices it is not difficult but you will need to read in the number of nonzeros so you know how much to skip etc.

  Barry


On Oct 4, 2021, at 9:58 AM, Peder Jørgensgaard Olesen via petsc-users <petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>> wrote:


Thank you for your quick reply.


I've had to change away from HDF5 to Binary format at an earlier stage in my work due to the former not working well with what I needed, so I would prefer to stick with the binary format.

I had a quick view at the code for some of the Viewer-routines, but I'm not well versed in gleaning information about header sizes from that. Hints about what I'm looking for there would be appreciated.


Best regards

Peder

________________________________
Fra: Matthew Knepley <knepley at gmail.com<mailto:knepley at gmail.com>>
Sendt: 4. oktober 2021 15:37:08
Til: Peder Jørgensgaard Olesen
Cc: petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>
Emne: Re: [petsc-users] Skipping data when reading from binary file

On Mon, Oct 4, 2021 at 9:26 AM Peder Jørgensgaard Olesen via petsc-users <petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>> wrote:

Hello

I have a binary file in which a mix of different objects is stored (Vecs, Mats, PetscInts). I can read each element just fine using VecLoad, MatLoad, and PetscIntView, provided they're read in the order in which they were put in the binary. What I would like to do is to skip the reading of any unneeded element, instead proceeding directly to the next one. I tried using PetscBinarySeek() for this, as shown in the attached code. This produces segmentation faults, suggesting that the file pointer isn't going where I want it to.

There is header information you also have to skip for each object.

We can go over the sizes  for that (it is best just to look at the code), but that is fragile. A more robust way to achieve this random
access is to use HDF5 and name the objects.

  Thanks,

     Matt

Any suggestions as to what I'm doing wrong here?


Best regards,

Peder


[http://www.dtu.dk/-/media/DTU_Generelt/Andet/mail-signature-logo.png]

Peder Jørgensgaard Olesen
PhD student
Department of Mechanical Engineering

pjool at mek.dtu.dk<mailto:pjool at mek.dtu.dk>
Koppels Allé
Building 403, room 105
2800 Kgs. Lyngby
www.dtu.dk/english<https://www.dtu.dk/english>





--
What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<http://www.cse.buffalo.edu/~knepley/>



--
What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20211004/4db0b95e/attachment.html>


More information about the petsc-users mailing list