[petsc-users] Load Vec from 1D HDF5 dataset MATT READ THIS EMAIL!

Barry Smith bsmith at mcs.anl.gov
Fri Mar 20 13:08:26 CDT 2015


> On Mar 20, 2015, at 11:31 AM, Håkon Strandenes <haakon at hakostra.net> wrote:
> 
> Yes, in the HDF5 file. Currently a dof=1 DMDA Vec is saved as a NZ x NY x NX dataset, wile a dof > 1 is saved as NZ x NY x NX x dof in the HDF5 file.

  Actually a 1d DMDA is stored as a NX dataset, a 2d DMDA is stored as a NY x NX data set and a 3d DMDA is stored as a NZ x NY x NX data set and an extra dimension is added if dof > 1.   And I think this is great and intuitively obvious for users.

   I agree with Hakon and advocate NOT sticking the extra dimension in when bs is 1. Here is Matt's entire commit


   maxDims[dim] = dims[dim];
   chunkDims[dim] = dims[dim];
   ++dim;
-  if (bs > 1) {
+  if (bs >= 1) {
     dims[dim]    = bs;
     maxDims[dim] = dims[dim];
     chunkDims[dim] = dims[dim];
   }
   count[dim] = PetscHDF5IntCast(xin->map->n)/bs;
   ++dim;
-  if (bs > 1) {
+  if (bs >= 1) {
     count[dim] = bs;
     ++dim;
   }
   }
   offset[dim] = PetscHDF5IntCast(low/bs);
   ++dim;
-  if (bs > 1) {
+  if (bs >= 1) {
     offset[dim] = 0;
     ++dim;
   }

  (Then there is Karl's one line fix for reading HDF5 files.)

  Arguing that handling bs = 1 as a special case greatly (or even modestly) increases the complexity of the PETSc source code is nonsense.

  So I want a stronger case presented then

>> My rationale was to simplify our code path, and have one way to handle fields with components. I did not
>> want to special case a field with one component.

  otherwise I think we should undo Matt's change.

  Barry


  
> 
> In my humble opinion, it is best to leave the DMDA's as it is, and fix up the code related to the plain Vecs. That code is already full of "if (bs >= 1) dim++" etc. which is useless (as Barry points out).
> 
> My final point is that one should handle this in a CONSISTENT manner for both "plain Vecs" and "DMDA Vecs", i.e. decide wither one want to always add one dimension for bs and dof or leave that dimension out for the special case with bs=1/dof=1.
> 
> Håkon
> 
> 
> On 20. mars 2015 16:57, Jed Brown wrote:
>> Håkon Strandenes <haakon at hakostra.net> writes:
>>> I mean that if you decide to stick with the current way of
>>> reading/writing a "plain 1D" Vec with N elements as a N x 1
>>> array/dataset, you should treat a dof=1 DMDA Vec as an NZ x NY x NX x 1
>>> array/dataset.
>> 
>> In the HDF5 file?  I agree.
>> 



More information about the petsc-users mailing list