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

Håkon Strandenes haakon at hakostra.net
Sun Mar 29 07:57:58 CDT 2015


Thanks. Unfortuneatly, I am not in my office until april 7th or 8th, and 
am not able to test this out until then.

I have also seen the other replies to this post. I might have some ideas 
on how to solve this in a bit more flexible way, but again, I cannot 
work on this until I am back in office.

I will follow this up as soon as I am back. Thanks for your help so far.

Regards,
Håkon Strandenes


Den 2015-03-29 04:59, skrev Barry Smith:
> Hakon,
> 
>     I have pushed to the branch
> barry/feature-hdf5-flexible-initial-dimension and next the change so
> that Vecs and Vecs obtained from DMCreateGlobalVector() with a DMDA
> will NOT have the extra dimension if BS == 1. To add that extra
> dimension even when bs == 1 with VecView() or to handle a file with
> that extra dimension with VecLoad() one must call
> PetscViewerHDF5SetBaseDimension2() or -viewer_hdf5_base_dimension2
> true
> 
>    Please try it out and let me know if you have any trouble
> 
>    Thanks
> 
>   Barry
> 
>   Matt,
> 
>    Scream as much as you want but adding that extra dimension
> automatically is not intuitive so it cannot be the default.
> 
>> On Mar 25, 2015, at 10:36 AM, Håkon Strandenes <haakon at hakostra.net> 
>> wrote:
>> 
>> Did you come to any conclusion on this issue?
>> 
>> Regards,
>> Håkon
>> 
>> On 20. mars 2015 22:02, Håkon Strandenes wrote:
>>> On 20. mars 2015 20:48, Barry Smith wrote:
>>>> Why is 1 dimension a special case that is not worthy of its own
>>>> format? The same thing would hold for 2d and 3d. One could then 
>>>> argue
>>>> that we should have a single six dimensional format for the files 
>>>> for
>>>> all vectors that PETSc produces. Then a 1d problem has five of the
>>>> dimensions being 1.
>>> 
>>> This is a very good point, and support my view.
>>> 
>>> Let me come with two very simple example cases:
>>> 
>>> 
>>> Case 1:
>>> Create a list of grid points in an external preprocessor for the 
>>> purpose
>>> of loading this into a Vec later:
>>> 
>>>   x = np.linspace(0.0, 1.0, num=21)
>>>   f.create_dataset('/MESH/nodes/x', data=x)
>>> 
>>> vs.
>>> 
>>>   x = np.linspace(0.0, 1.0, num=21)
>>>   x = x.reshape((21,1))
>>>   f.create_dataset('/MESH/nodes/x', data=x)
>>> 
>>> 
>>> Case 2:
>>> Read three Vecs written to disk by PETSc, and calculate total 
>>> "bounding
>>> box volume" of the grid:
>>> 
>>>   g = h5py.File('grid.h5', 'r')
>>>   x = g['/MESH/nodes/x']
>>>   y = g['/MESH/nodes/y']
>>>   z = g['/MESH/nodes/z']
>>>   Vol = (xp[-1] - xp[0])*(yp[-1] - yp[0])*(zp[-1] - zp[0])
>>> 
>>> vs.
>>> 
>>>   g = h5py.File('grid.h5', 'r')
>>>   x = g['/MESH/nodes/x'][:,0]
>>>   y = g['/MESH/nodes/y'][:,0]
>>>   z = g['/MESH/nodes/z'][:,0]
>>>   Vol = (x[-1] - x[0])*(y[-1] - y[0])*(z[-1] - z[0])
>>> 
>>> 
>>> In both cases I think handling this extra, unnecessary dimension 
>>> makes
>>> the code less attractive. It's not that either way is difficult,
>>> problematic or impossible, but it's just that 1D Vecs should 
>>> intuitively
>>> be 1D datasets, and not 2D, 3D or 6D. This seriously confused me for
>>> quite a while until I figured this out, even after having written an
>>> entire Navier-Stokes DNS solver using the PETSc library for 
>>> everything
>>> except time integration and filling these simple 1D coordinate 
>>> arrays!
>>> 
>>> Regards,
>>> Håkon


More information about the petsc-users mailing list