mirror of https://github.com/QMCPACK/qmcpack.git
Implement hyperslab read.
git-svn-id: https://subversion.assembla.com/svn/qmcdev/trunk@6184 e5b18d87-469d-4833-9cc0-8cdfa06e9491
This commit is contained in:
parent
0d7d9dcfc9
commit
cc8c632869
|
@ -94,6 +94,33 @@ inline bool h5d_write(hid_t grp, const std::string& aname, hsize_t ndims, const
|
|||
return ret != -1;
|
||||
}
|
||||
|
||||
/** return true, if successful */
|
||||
template<typename T>
|
||||
bool h5d_read(hid_t grp, const std::string& aname, hsize_t ndims,
|
||||
const hsize_t* gcounts, const hsize_t* counts, const hsize_t* offsets,
|
||||
T* first , hid_t xfer_plist)
|
||||
{
|
||||
if(grp<0)
|
||||
return true;
|
||||
hid_t h1 = H5Dopen(grp, aname.c_str());
|
||||
if(h1<0)
|
||||
return false;
|
||||
//herr_t ret = H5Dread(h1, h5d_type_id, H5S_ALL, H5S_ALL, xfer_plist, first);
|
||||
|
||||
hid_t dataspace = H5Dget_space(h1);
|
||||
hid_t memspace = H5Screate_simple(ndims, counts, NULL);
|
||||
herr_t ret = H5Sselect_hyperslab(dataspace,H5S_SELECT_SET, offsets,NULL,counts,NULL);
|
||||
|
||||
hid_t h5d_type_id=get_h5_datatype(*first);
|
||||
ret = H5Dread(h1, h5d_type_id, memspace, dataspace, xfer_plist, first);
|
||||
|
||||
H5Sclose(dataspace);
|
||||
H5Sclose(memspace);
|
||||
|
||||
H5Dclose(h1);
|
||||
return ret != -1;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline bool h5d_write(hid_t grp, const std::string& aname, hsize_t ndims,
|
||||
const hsize_t* gcounts, const hsize_t* counts, const hsize_t* offsets,
|
||||
|
@ -106,7 +133,6 @@ inline bool h5d_write(hid_t grp, const std::string& aname, hsize_t ndims,
|
|||
herr_t ret=-1;
|
||||
if(h1<0) //missing create one
|
||||
{
|
||||
cout << "phdf write " << endl;
|
||||
hid_t dataspace=H5Screate_simple(ndims,gcounts,NULL);
|
||||
hid_t dataset=H5Dcreate(grp, aname.c_str(),h5d_type_id, dataspace, H5P_DEFAULT);
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@ struct hyperslab_proxy: public container_proxy<CT>
|
|||
slab_dims[slab_rank]=element_size;
|
||||
slab_rank+=1;
|
||||
}
|
||||
use_slab=true;
|
||||
}
|
||||
|
||||
/** return the size of the i-th dimension
|
||||
|
@ -88,12 +89,24 @@ struct h5data_proxy<hyperslab_proxy<CT,MAXDIM> >
|
|||
h5data_proxy(hyperslab_proxy<CT,MAXDIM>& a): ref_(a) {}
|
||||
inline bool read(hid_t grp, const std::string& aname, hid_t xfer_plist=H5P_DEFAULT)
|
||||
{
|
||||
int rank=ref_.slab_rank;
|
||||
if(!get_space(grp,aname,rank,ref_.slab_dims.data(),true))
|
||||
if(ref_.use_slab)
|
||||
{
|
||||
ref_.change_shape();
|
||||
return h5d_read(grp,aname.c_str(),
|
||||
ref_.slab_rank,
|
||||
ref_.slab_dims.data(),
|
||||
ref_.slab_dims_local.data(),
|
||||
ref_.slab_offset.data(),
|
||||
ref_.data(),xfer_plist);
|
||||
}
|
||||
else
|
||||
{
|
||||
int rank=ref_.slab_rank;
|
||||
if(!get_space(grp,aname,rank,ref_.slab_dims.data(),true))
|
||||
{
|
||||
ref_.change_shape();
|
||||
}
|
||||
return h5d_read(grp,aname,ref_.data(),xfer_plist);
|
||||
}
|
||||
return h5d_read(grp,aname,ref_.data(),xfer_plist);
|
||||
}
|
||||
inline bool write(hid_t grp, const std::string& aname, hid_t xfer_plist=H5P_DEFAULT)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue