[petsc-users] Load Vec from 1D HDF5 dataset MATT READ THIS EMAIL!
Barry Smith
bsmith at mcs.anl.gov
Wed Mar 25 22:20:57 CDT 2015
> 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?
No. Different people think a different default is best for different reasons.
To get the conversation going again I'll propose an approach that allows both; PetscViewerHDF5SetSomething(viewer,PetscBool) where
Something could be BaseDimension2. And the Load would handle files with either 1 or 2 dimensions as the base as well.
Barry
>
> 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