35 #include <boost/core/ignore_unused.hpp> 46 namespace LibUtilities
75 m_Id = H5I_INVALID_HID;
181 H5_CALL(H5Pset_chunk, (
m_Id, dims.size(), &dims[0]));
187 #ifdef NEKTAR_USE_MPI 190 H5_CALL(H5Pset_dxpl_mpio, (
m_Id, H5FD_MPIO_COLLECTIVE));
194 H5_CALL(H5Pset_dxpl_mpio, (
m_Id, H5FD_MPIO_INDEPENDENT));
199 ASSERTL0(mpi_comm,
"Can't convert communicator to MPI communicator.")
201 MPI_Info info = MPI_INFO_NULL;
202 H5_CALL(H5Pset_fapl_mpio, (
m_Id, mpi_comm->GetComm(), info));
207 ASSERTL0(
false,
"Trying to use parallel HDF5 without MPI!");
211 ASSERTL0(
false,
"Trying to use parallel HDF5 without MPI!");
215 ASSERTL0(
false,
"Trying to use parallel HDF5 without MPI!");
225 createPL->GetId(), accessPL->GetId()));
238 (
m_Id, name.c_str(), type->GetId(), space->GetId(),
239 H5P_DEFAULT, createPL->GetId(), accessPL->GetId()));
269 for(
auto it = begin(); it != end(); ++it)
271 if(it.GetName() == nm)
297 : m_grp(grp), m_idx(-1), m_next(idx), m_size(grp->GetNumElements())
312 H5_CALL(H5Literate, (
m_grp->GetId(), H5_INDEX_NAME, H5_ITER_NATIVE,
323 const H5L_info_t * info,
326 boost::ignore_unused(g_id, info);
349 return info.num_attrs;
383 H5_CALL(H5Aiterate2, (
m_obj->GetId(), H5_INDEX_CRT_ORDER, H5_ITER_INC,
395 const H5A_info_t * info,
398 boost::ignore_unused(g_id, info);
421 H5_CONSTRUCT(ans->m_Id, H5Screate_simple, (1, &size, NULL));
435 int rank = dims.size();
441 const hsize_t *max_p = NULL;
442 if (max != (H5S_UNLIMITED - 1))
448 const std::vector<hsize_t> &max_dims)
451 int rank = dims.size();
463 m_Id = H5I_INVALID_HID;
468 (
m_Id, H5S_SELECT_SET, &start, NULL, &count, NULL));
473 (
m_Id, H5S_SELECT_OR, &start, NULL, &count, NULL));
476 const std::vector<hsize_t> count)
479 (
m_Id, H5S_SELECT_SET, &start[0], NULL, &count[0], NULL));
482 const std::vector<hsize_t> count)
485 (
m_Id, H5S_SELECT_OR, &start[0], NULL, &count[0], NULL));
488 const std::vector<hsize_t> &coords)
497 (
m_Id, H5S_SELECT_SET, num_elmt, &coords[0]));
508 return H5Sget_simple_extent_npoints(
m_Id);
513 int ndims = H5Sget_simple_extent_ndims(
m_Id);
514 std::vector<hsize_t> ret(ndims, 0);
515 H5Sget_simple_extent_dims(
m_Id, &ret[0], NULL);
530 H5_CALL(H5Tset_size, (ans->GetId(), len));
537 m_Id = H5I_INVALID_HID;
543 m_Id = H5I_INVALID_HID;
548 hid_t ans_id = H5I_INVALID_HID;
561 return std::shared_ptr<CompoundDataType>(
576 m_Id = H5I_INVALID_HID;
602 H5_CONSTRUCT(
id, H5Acreate2, (parent, name.c_str(), type->GetId(),
603 space->GetId(), H5P_DEFAULT, H5P_DEFAULT));
610 H5_CONSTRUCT(
id, H5Aopen, (parent, name.c_str(), H5P_DEFAULT));
621 m_Id = H5I_INVALID_HID;
636 H5_CONSTRUCT(
id, H5Fcreate, (filename.c_str(), mode, createPL->GetId(),
644 H5_CONSTRUCT(
id, H5Fopen, (filename.c_str(), mode, accessPL->GetId()));
650 if (
m_Id != H5I_INVALID_HID)
659 m_Id = H5I_INVALID_HID;
664 return root->GetNumElements();
672 if (
m_Id != H5I_INVALID_HID)
681 m_Id = H5I_INVALID_HID;
693 std::vector<std::string> ret;
697 H5Gget_objname_by_idx(
m_Id, (
size_t)i, name, 50 );
698 ret.push_back(std::string(name));
715 m_Id = H5I_INVALID_HID;
#define H5_CALL(func, args)
static PListSharedPtr DatatypeCreate()
Properties for datatype creation.
#define ASSERTL0(condition, msg)
DataSetSharedPtr OpenDataSet(const std::string &name, PListSharedPtr accessPL=PList::Default()) const
CanHaveAttributesSharedPtr m_obj
const std::string & operator*()
static DataTypeSharedPtr CS1()
static FileSharedPtr Create(const std::string &filename, unsigned mode, PListSharedPtr createPL=PList::Default(), PListSharedPtr accessPL=PList::Default())
DataTypeSharedPtr Copy() const
void SelectRange(const hsize_t start, const hsize_t count)
static AttributeSharedPtr Create(hid_t parent, const std::string &name, DataTypeSharedPtr type, DataSpaceSharedPtr space)
bool ContainsDataSet(std::string nm)
LinkIterator(CanHaveGroupsDataSetsSharedPtr grp, hsize_t idx=0)
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
PredefinedDataType(hid_t)
static herr_t helper(hid_t g_id, const char *name, const H5L_info_t *info, void *op_data)
#define H5_CONSTRUCT(ans, func, args)
AttrIterator(CanHaveAttributesSharedPtr obj, hsize_t idx=0)
DataSetSharedPtr CreateDataSet(const std::string &name, DataTypeSharedPtr type, DataSpaceSharedPtr space, PListSharedPtr createPL=PList::Default(), PListSharedPtr accessPL=PList::Default())
std::shared_ptr< DataSpace > DataSpaceSharedPtr
static DataTypeSharedPtr String(size_t len=0)
static PListSharedPtr GroupAccess()
Properties for group access.
Mixin for objects that can have attributes (Group, DataSet, DataType)
AttrIterator & operator++()
std::vector< std::string > GetElementNames()
std::shared_ptr< DataSet > DataSetSharedPtr
static PListSharedPtr DatasetCreate()
Properties for dataset creation.
void SetDxMpioIndependent()
std::shared_ptr< DataType > DataTypeSharedPtr
void AppendRange(const hsize_t start, const hsize_t count)
std::shared_ptr< PList > PListSharedPtr
static PListSharedPtr GroupCreate()
Properties for group creation.
AttrIterator attr_begin()
GroupSharedPtr OpenGroup(const std::string &name, PListSharedPtr accessPL=PList::Default()) const
const std::string & operator*()
void SetSelection(const hsize_t num_elmt, const std::vector< hsize_t > &coords)
Wrap and HDF5 data type object. Technically this can have attributes, but not really bothered...
static CompoundDataTypeSharedPtr Create(size_t sz)
static DataSpaceSharedPtr OneD(hsize_t size)
std::shared_ptr< File > FileSharedPtr
std::shared_ptr< CanHaveGroupsDataSets > CanHaveGroupsDataSetsSharedPtr
static FileSharedPtr Open(const std::string &filename, unsigned mode, PListSharedPtr accessPL=PList::Default())
void SetChunk(const std::vector< hsize_t > &dims)
static PListSharedPtr ObjectCreate()
Properties for object creation.
Traits class for HDF5 data types.
static DataSpaceSharedPtr Null()
static PListSharedPtr DatasetXfer()
Properties for raw data transfer.
bool operator==(const LinkIterator &other) const
DataSpaceSharedPtr GetSpace() const
static PListSharedPtr FileCreate()
Properties for file creation.
void SetDxMpioCollective()
GroupSharedPtr CreateGroup(const std::string &name, PListSharedPtr createPL=PList::Default(), PListSharedPtr accessPL=PList::Default())
static PListSharedPtr DatatypeAccess()
Properties for datatype access.
static DataSpaceSharedPtr Scalar()
LinkIterator & operator++()
Mixin for objects that contain groups and datasets (Group and File)
static herr_t helper(hid_t g_id, const char *name, const H5A_info_t *info, void *op_data)
void SetMpio(CommSharedPtr comm)
DataSpaceSharedPtr GetSpace() const
AttributeSharedPtr CreateAttribute(const std::string &name, DataTypeSharedPtr type, DataSpaceSharedPtr space)
virtual hsize_t GetNumElements()
std::vector< hsize_t > GetDims()
virtual hsize_t GetNumElements()
CanHaveGroupsDataSetsSharedPtr m_grp
static PListSharedPtr StringCreate()
Properties for character encoding when encoding strings or object names.
std::shared_ptr< CommMpi > CommMpiSharedPtr
Pointer to a Communicator object.
static PListSharedPtr LinkCreate()
Properties governing link creation.
static PListSharedPtr DatasetAccess()
Properties for dataset access.
std::shared_ptr< CompoundDataType > CompoundDataTypeSharedPtr
std::shared_ptr< Group > GroupSharedPtr
static PListSharedPtr FileAccess()
Properties for file access.
std::string m_currentName
std::shared_ptr< Attribute > AttributeSharedPtr
std::string m_currentName
std::shared_ptr< CanHaveAttributes > CanHaveAttributesSharedPtr
static PListSharedPtr AttributeCreate()
Properties for attribute creation.
static PListSharedPtr LinkAccess()
Properties governing link traversal when accessing objects.
AttributeSharedPtr OpenAttribute(const std::string &name)
void SetDeflate(const unsigned level=1)
static PListSharedPtr ObjectCopy()
Properties governing the object copying process.
Predefined HDF data types that must not be closed when done with.
bool operator==(const AttrIterator &other) const
static PListSharedPtr Default()
Default options.
static PListSharedPtr FileMount()
Properties for file mounting.
static AttributeSharedPtr Open(hid_t parent, const std::string &name)