<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Mar 19, 2015 at 8:00 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  MATT READ THIS EMAIL!<br>
<br>
  Ok here is the scoop.  In  VecView_MPI_HDF5() is the code (use meta x vc-annotate in emacs)<br>
<br>
df09a399 src/vec/vec/impls/mpi/pdvec.c (Matthew Knepley      2011-01-20 16:27:23 -0600  682)   if (bs >= 1) {<br>
272345b0 src/vec/vec/impls/mpi/pdvec.c (Karl Rupp            2013-01-26 20:27:50 -0600  683)     dims[dim]      = bs;<br>
272345b0 src/vec/vec/impls/mpi/pdvec.c (Karl Rupp            2013-01-26 20:27:50 -0600  684)     maxDims[dim]   = dims[dim];<br>
61ea93a1 src/vec/vec/impls/mpi/pdvec.c (Brad Aagaard         2010-11-06 15:31:18 -0700  685)     chunkDims[dim] = dims[dim];<br>
43c8710a src/vec/vec/impls/mpi/pdvec.c (Matthew Knepley      2010-11-05 19:21:58 -0500  686)     ++dim;<br>
5464dd29 src/vec/vec/impls/mpi/pdvec.c (Matthew Knepley      2010-10-31 19:04:52 -0500  687)   }  if (bs >= 1) {<br>
<br>
  then in PetscErrorCode VecLoad_HDF5(Vec xin, PetscViewer viewer)<br>
<br>
  f6e5521d src/vec/vec/utils/vecio.c     (Karl Rupp            2013-01-28 13:32:07 -0600 277) if (bs >= 1) ++dim;<br>
<br>
I check the commit message for df09a399 at <a href="http://bitbucket.com/petsc/petsc/" target="_blank">bitbucket.com/petsc/petsc/</a> and it is<br>
<br>
Small change to HDF5 output (now Vec always has blocksize dim)<br>
<br>
So what is happening is even the simplest vector (with a block size of 1) is treated as a 2d HDF5 object<br>
<br>
Matt, what was the rational for making vectors always have a dimension of block size even when it is one? Seems bad to me. Maybe makes HDF5 readers simpler since they don't need to handle bs 1 differently?<br></blockquote><div><br></div><div>My rationale was to simplify our code path, and have one way to handle fields with components. I did not</div><div>want to special case a field with one component.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 Barry<br>
<br>
<br>
<br>
<br>
> On Mar 19, 2015, at 12:31 PM, Håkon Strandenes <<a href="mailto:haakon@hakostra.net">haakon@hakostra.net</a>> wrote:<br>
><br>
> I'm sorry I didn't include this in the first email. Here is an example HDF5-file, together with a sample program that demonstrate the problem.<br>
><br>
> I have been trying to dig into VecLoad_HDF5() in vecio.c in order to suggest a solution myself, however, I do not think I fully understand the concept of the Vec block size and how that affects how the Vec is stored in memory and on disk (HDF5 file).<br>
><br>
> Regards,<br>
> Håkon Strandenes<br>
><br>
><br>
> On 19. mars 2015 18:17, Barry Smith wrote:<br>
>><br>
>>   Please email the file in.h5 so we can try to reproduce the problem and debug it. Are you using petsc version 3.5.?<br>
>><br>
>>   Barry<br>
>><br>
>>> On Mar 19, 2015, at 4:19 AM, Håkon Strandenes <<a href="mailto:haakon@hakostra.net">haakon@hakostra.net</a>> wrote:<br>
>>><br>
>>> Hi,<br>
>>><br>
>>> I am again in trouble with PETSc and its HDF5-related functions.<br>
>>><br>
>>> I have a code in which I want to read a 1D dataset from a HDF5 file into a PETSc Vec. The array are "small", and each MPI process should read the entire dataset and store it in its own sequential Vec.<br>
>>><br>
>>> Currently my code is as follows (somewhat simplified):<br>
>>><br>
>>> VecCreate(PETSC_COMM_SELF, &v);<br>
>>> VecSetType(v, VECSEQ);<br>
>>> PetscObjectSetName((PetscObject)v, "x");<br>
>>> PetscViewerHDF5Open(PETSC_COMM_WORLD, "in.h5", FILE_MODE_READ, &viewer);<br>
>>> VecLoad(v, viewer);<br>
>>><br>
>>> This works, but only if the dataset in the HDF5 file is a 2D dataset, of size Nx1, where N is the number of elements I read. If the dataset in the HDF5 file is of size N (i.e. a 1D dataset) this does not work.<br>
>>><br>
>>> The error message I get is the following:<br>
>>> [0]PETSC ERROR: Unexpected data in file<br>
>>> [0]PETSC ERROR: Dimension of array in file 1 not 2 as expected<br>
>>> etc. and it points back to the line 296 in file vecio.c, function VecLoad_HDF5().<br>
>>><br>
>>> Technically this is not a problem. I could of course just go ahead and "reshape" all my datasets into 2D datasets. I do however find this behaviour very un-logical. Why can't I read a 1D dataset into a Vec?<br>
>>><br>
>>> So my question are:<br>
>>> 1) Do I do anything wrong when creating my Vec and reading my datasets?<br>
>>> 2) Is there anything I can do to read my 1D datasets into Vecs?<br>
>>> 3) Could PETSc perhaps be a little less restrictive in these cases?<br>
>>><br>
>>> Thanks in advance.<br>
>>><br>
>>> Regards,<br>
>>> Håkon Strandenes<br>
>><br>
>><br>
> <VecLoadTest.tar.gz><br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>