[petsc-users] Load Vec from 1D HDF5 dataset MATT READ THIS EMAIL!
Håkon Strandenes
haakon at hakostra.net
Fri Mar 20 16:02:04 CDT 2015
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