GemaCoreLib
The GeMA Core library
Loading...
Searching...
No Matches
gmXdmfHdf5.h
Go to the documentation of this file.
1/************************************************************************
2**
3** Copyright (C) 2014 by Carlos Augusto Teixera Mendes
4** All rights reserved.
5**
6** This file is part of the "GeMA" software. It's use should respect
7** the terms in the license agreement that can be found together
8** with this source code.
9** It is provided AS IS, with NO WARRANTY OF ANY KIND,
10** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
11** A PARTICULAR PURPOSE.
12**
13************************************************************************/
14
24#ifndef _GEMA_XDMF_HDF5_H_
25#define _GEMA_XDMF_HDF5_H_
26
27#include <QString>
28#include <functional>
29
30#include "gmValueInfo.h"
31#include "gmFileIO.h"
32#include "gmFileFilter.h"
33#include "gmFileIOUtils.h"
34
35class GmLogCategory;
36class GmTaskManager;
37
38namespace H5 {
39 class H5File;
40 class H5Object;
41 class PredType;
42}
43
45class GmMesh;
46class GmCellMesh;
47class GmElementMesh;
48class GmCell;
49class GmValueAccessor;
50class GmCellAccessor;
51class GmGaussAccessor;
53
54class GmFileFormat;
55class GmFileFilter;
56
57class UnitConverter;
58
71{
72 using TransformF = GmFileIOUtils::TransformF;
73public:
83
84 GmXdmfHdf5(const GmLogCategory& logger);
86
87 bool create(QString fileName, const GmFileFormat* fileFormat, const GmSimulationData* simData,
88 bool singlePrecision, int sequenceNumber);
89
90 static bool addSequenceInfo(QString fileName, int numSequenceFiles, double startTime, double endTime, QString timeUnit, const GmLogCategory& logger);
91
92 bool createGroups(const QStringList& groups);
93 bool createGroup (QString group, double time, QString timeUnit);
94
95 bool adjustTimeInfo(int sequenceNum, bool multiTime, double startTime, double endTime, QString timeUnit);
96
97 bool saveMeshNodeCoord(QString dsName, const GmMesh* mesh, const GmFileFilter* filter,
98 GmValueAccessor* nodeAc, const double* scaleFactor, const double* offset);
99
100 bool saveMeshGaussNodeCoord(QString dsName, const GmElementMesh* mesh, const GmFileFilter* filter, int ruleIndex,
101 GmValueAccessor* nodeAc, const double* scaleFactor, const double* offset);
102
103 bool saveMeshTopology(QString dsName, const GmCellMesh* mesh, const GmFileFilter* filter);
104
105 bool saveMeshPointCloudTopology(QString dsName, const GmMesh* mesh, const GmFileFilter* filter, int ruleIndex = -1);
106
107 bool saveMeshNodeData(QString dsName, const GmMesh* mesh, const GmFileFilter* filter,
108 GmValueAccessor* dataAc, int dimFilter, const QVector<int>& indexer, bool minMaxAttrib);
109
110 bool saveMeshNodeIdColumn(QString dsName, const GmMesh* mesh, const GmFileFilter* filter, GmFileIO::ExtraColumns column);
111
112 bool saveMeshCellData(QString dsName, const GmCellMesh* mesh, const GmFileFilter* filter,
113 GmCellAccessor* dataAc, int dimFilter, const QVector<int>& indexer, bool minMaxAttrib);
114
115 bool saveMeshGaussData(QString dsName, const GmElementMesh* mesh, const GmFileFilter* filter, int ruleIndex,
116 GmGaussAccessor* dataAc, int dimFilter, const QVector<GmFileFilter::Indexer>& preIndex,int maxCellEntries, bool minMaxAttrib);
117
118 bool saveDiscontinuitySetData(QString coordDsName, QString cellDsName, const GmDiscontinuitySet* discSet, bool original,
119 const UnitConverter* conv, const double* scaleFactor, const double* offset,
120 DsSizeInfo& sizeInfo);
121
122 bool saveMeshCellExtraColumn(QString dsName, const GmCellMesh* mesh, const GmFileFilter* filter,
123 GmFileIO::ExtraColumns column, int propertySet);
124
125 bool saveMeshGaussIdColumn(QString dsName, const GmElementMesh* mesh, const GmFileFilter* filter, int ruleIndex);
126
127private:
128
129
130 bool saveNodeData(QString dsName, const GmMesh* mesh, const GmFileFilter* filter, GmValueAccessor* dataAc,
131 int dimFilter, const TransformF& transformFunc, const QVector<int>& indexer);
132
133
134 template <class T>
135 bool fillDiscontinuityPolylineData(const GmDiscontinuitySet* discSet, bool original, const UnitConverter* conv,
136 const double* scaleFactor, const double* offset,
137 QVector<T>& nodes, QVector<int>& topology, int* nsegments) const;
138 template <class T>
139 bool fillDiscontinuityTriangleData(const GmDiscontinuitySet* discSet, bool original, const UnitConverter* conv,
140 const double* scaleFactor, const double* offset,
141 QVector<T>& nodes, QVector<int>& topology0, int* nsegments0,
142 QVector<int>& topology1, int* nsegments1) const;
143
144 const char* dataBuffer(GmValueAccessor* ac, const GmValueInfo* info) const;
145
146 const H5::PredType& hdf5Type(GmStorageType type) const;
147
148 void addTableAttributes(H5::H5Object* obj, const GmMesh* mesh, const char* type, const GmDiscontinuitySet* discSet = NULL);
149 void addNodeAttributes (H5::H5Object* obj, const GmMesh* mesh, const GmFileFilter* filter);
150 void addCellAttributes (H5::H5Object* obj, const GmCellMesh* mesh, const GmFileFilter* filter, int ruleIndex = -1);
151 void addAcAttributes (H5::H5Object* obj, const GmValueInfo* info, QString unit, int dimFilter, const double* scaleFactor = NULL, const double* offset = NULL, const double* min = NULL, const double* max = NULL);
152 void addPropertySetAttributes(H5::H5Object* obj, const GmCellMesh* mesh, int propertySet);
153 void addDiscSetNodeAttributes(H5::H5Object* obj, const GmDiscontinuitySet* discSet, bool original, const UnitConverter* conv,
154 const double* scaleFactor, const double* offset);
155 void addDiscSetTopologyAttributes(H5::H5Object* obj, const GmDiscontinuitySet* discSet, bool original);
156
159 H5::H5File* _fileh;
163};
164
165#endif
166
The GmCellAccessor class is a proxy object to a value accesor implementing a more convenient interfac...
Definition gmCellAccessor.h:67
Base interface for mesh cells.
Definition gmCell.h:88
Base interface class for CellMesh type plugins.
Definition gmCellMesh.h:40
Base interface for providing discontinuity geometry information for spatial indices.
Definition gmDiscontinuitySet.h:59
Base interface for FEM (finite element) meshes.
Definition gmElementMesh.h:42
A generic auxiliary class for managing the various options that can be used to define the set of node...
Definition gmFileFilter.h:47
Basic interface for describing high level file format capabilities.
Definition gmFileFormat.h:35
ExtraColumns
The set of extra columns that should be saved on file.
Definition gmFileIO.h:88
The GmGaussAccessor class is a proxy object to a value accessor implementing a more convenient interf...
Definition gmGaussAccessor.h:39
Class representing a category with multiple logging levels.
Definition gmLog.h:58
Base interface class for Mesh type plugins.
Definition gmMesh.h:48
Auxiliar class used to store the complete set of simulation data.
Definition gmSimulationData.h:55
Task manager used for handling parallel executions.
Definition gmTaskManager.h:84
Interface class for accessing and setting values from an "indexable" collection of values.
Definition gmValueAccessor.h:60
Auxiliar class used to store the definition of a value. It can be used to store informations about st...
Definition gmValueInfo.h:132
A support class for saving data to a HDF5 file. Hdf5 files are self-describing but do not have a fixe...
Definition gmXdmfHdf5.h:71
const GmLogCategory & _logger
The logger used to report errors.
Definition gmXdmfHdf5.h:157
bool saveMeshNodeIdColumn(QString dsName, const GmMesh *mesh, const GmFileFilter *filter, GmFileIO::ExtraColumns column)
Saves mesh node ids to a new HDF5 data set. Some basic mesh metadata is also saved in the form of att...
Definition gmXdmfHdf5.cpp:752
void addNodeAttributes(H5::H5Object *obj, const GmMesh *mesh, const GmFileFilter *filter)
Add metadata attributes to obj describing the set of saved nodes.
Definition gmXdmfHdf5.cpp:2082
GmXdmfHdf5(const GmLogCategory &logger)
Constructor.
Definition gmXdmfHdf5.cpp:72
bool fillDiscontinuityPolylineData(const GmDiscontinuitySet *discSet, bool original, const UnitConverter *conv, const double *scaleFactor, const double *offset, QVector< T > &nodes, QVector< int > &topology, int *nsegments) const
Helper function used by saveDiscontinuitySetData() to fill the nodes and topology vectors with the po...
Definition gmXdmfHdf5.cpp:1689
bool adjustTimeInfo(int sequenceNum, bool multiTime, double startTime, double endTime, QString timeUnit)
Saves to the root metadata the time step information. If sequenceNum is 0, saves the global simulatio...
Definition gmXdmfHdf5.cpp:166
bool saveMeshCellData(QString dsName, const GmCellMesh *mesh, const GmFileFilter *filter, GmCellAccessor *dataAc, int dimFilter, const QVector< int > &indexer, bool minMaxAttrib)
Saves mesh cell data to a new HDF5 data set. Some basic mesh metadata is also saved in the form of at...
Definition gmXdmfHdf5.cpp:856
const GmFileFormat * _fileFormat
The file format object specifying the desired topology order.
Definition gmXdmfHdf5.h:160
bool saveMeshGaussData(QString dsName, const GmElementMesh *mesh, const GmFileFilter *filter, int ruleIndex, GmGaussAccessor *dataAc, int dimFilter, const QVector< GmFileFilter::Indexer > &preIndex, int maxCellEntries, bool minMaxAttrib)
Saves mesh Gauss data to a new HDF5 data set. Some basic mesh metadata is also saved in the form of a...
Definition gmXdmfHdf5.cpp:977
void addAcAttributes(H5::H5Object *obj, const GmValueInfo *info, QString unit, int dimFilter, const double *scaleFactor=NULL, const double *offset=NULL, const double *min=NULL, const double *max=NULL)
Add metadata attributes to obj describing the saved data.
Definition gmXdmfHdf5.cpp:2123
const H5::PredType & hdf5Type(GmStorageType type) const
Returns the compatible HDF5 type for the given GmStorageType, obeying the _singlePrecision flag.
Definition gmXdmfHdf5.cpp:2050
bool saveMeshTopology(QString dsName, const GmCellMesh *mesh, const GmFileFilter *filter)
Saves mesh topology (cell node incidence list) to a new HDF5 data set. Some basic mesh metadata are a...
Definition gmXdmfHdf5.cpp:471
void addTableAttributes(H5::H5Object *obj, const GmMesh *mesh, const char *type, const GmDiscontinuitySet *discSet=NULL)
Add metadata attributes common to all tables.
Definition gmXdmfHdf5.cpp:2069
bool saveMeshGaussNodeCoord(QString dsName, const GmElementMesh *mesh, const GmFileFilter *filter, int ruleIndex, GmValueAccessor *nodeAc, const double *scaleFactor, const double *offset)
Saves the coordinates of the mesh Gauss points, as if they where mesh nodes, to a new HDF5 data set....
Definition gmXdmfHdf5.cpp:318
bool create(QString fileName, const GmFileFormat *fileFormat, const GmSimulationData *simData, bool singlePrecision, int sequenceNumber)
Creates a new HDF5 file. If it already exists, it will be replaced. The file is initialized with some...
Definition gmXdmfHdf5.cpp:94
static bool addSequenceInfo(QString fileName, int numSequenceFiles, double startTime, double endTime, QString timeUnit, const GmLogCategory &logger)
Adds to the given existing (and closed) HDF5 file a set of attributes with the total number of sequen...
Definition gmXdmfHdf5.cpp:136
bool saveMeshNodeCoord(QString dsName, const GmMesh *mesh, const GmFileFilter *filter, GmValueAccessor *nodeAc, const double *scaleFactor, const double *offset)
Saves mesh geometry (node coordinates) to a new HDF5 data set. Some basic mesh metadata is also saved...
Definition gmXdmfHdf5.cpp:260
void addDiscSetNodeAttributes(H5::H5Object *obj, const GmDiscontinuitySet *discSet, bool original, const UnitConverter *conv, const double *scaleFactor, const double *offset)
Add metadata attributes describing the discontinuity set nodes.
Definition gmXdmfHdf5.cpp:2174
~GmXdmfHdf5()
Destructor.
Definition gmXdmfHdf5.cpp:78
bool saveNodeData(QString dsName, const GmMesh *mesh, const GmFileFilter *filter, GmValueAccessor *dataAc, int dimFilter, const TransformF &transformFunc, const QVector< int > &indexer)
Fills a buffer with node data values obtained from a GmValueAccessor. It can be a partial write with ...
Definition gmXdmfHdf5.cpp:1523
bool saveDiscontinuitySetData(QString coordDsName, QString cellDsName, const GmDiscontinuitySet *discSet, bool original, const UnitConverter *conv, const double *scaleFactor, const double *offset, DsSizeInfo &sizeInfo)
Saves discontinuity set geometry data to a pair of new HDF5 data sets (one for node coordinates.
Definition gmXdmfHdf5.cpp:1106
QString _fileName
The hdf5 file name.
Definition gmXdmfHdf5.h:158
bool saveMeshGaussIdColumn(QString dsName, const GmElementMesh *mesh, const GmFileFilter *filter, int ruleIndex)
Saves mesh Gauss point ID data to a new HDF5 data set. Some basic mesh metadata is also saved in the ...
Definition gmXdmfHdf5.cpp:1404
bool createGroup(QString group, double time, QString timeUnit)
Adds the given group to the file, with added time attributes.
Definition gmXdmfHdf5.cpp:217
bool saveMeshCellExtraColumn(QString dsName, const GmCellMesh *mesh, const GmFileFilter *filter, GmFileIO::ExtraColumns column, int propertySet)
Saves mesh cell extra column (cell id, type, active or material) data to a new HDF5 data set....
Definition gmXdmfHdf5.cpp:1280
bool saveMeshNodeData(QString dsName, const GmMesh *mesh, const GmFileFilter *filter, GmValueAccessor *dataAc, int dimFilter, const QVector< int > &indexer, bool minMaxAttrib)
Saves mesh node data to a new HDF5 data set. Some basic mesh metadata is also saved in the form of at...
Definition gmXdmfHdf5.cpp:714
void addCellAttributes(H5::H5Object *obj, const GmCellMesh *mesh, const GmFileFilter *filter, int ruleIndex=-1)
Add metadata attributes to obj describing the set of saved cells.
Definition gmXdmfHdf5.cpp:2100
const char * dataBuffer(GmValueAccessor *ac, const GmValueInfo *info) const
If the given accessor is a tracked accessor with an underlying data buffer and the accessor does NOT ...
Definition gmXdmfHdf5.cpp:2029
GmTaskManager * _tm
Thread manager to run tasks.
Definition gmXdmfHdf5.h:162
bool createGroups(const QStringList &groups)
Adds the given groups to the file. The group list should be ordered in a way that when creating a gro...
Definition gmXdmfHdf5.cpp:195
bool saveMeshPointCloudTopology(QString dsName, const GmMesh *mesh, const GmFileFilter *filter, int ruleIndex=-1)
Saves a simple vector with size equal to the number of mesh nodes / number of gauss points (if ruleIn...
Definition gmXdmfHdf5.cpp:633
void addPropertySetAttributes(H5::H5Object *obj, const GmCellMesh *mesh, int propertySet)
Add metadata attributes describing the property set.
Definition gmXdmfHdf5.cpp:2160
H5::H5File * _fileh
The hdf5 file handle.
Definition gmXdmfHdf5.h:159
bool _singlePrecision
Should we force real data to be saved in single precision (floats instead of doubles)?
Definition gmXdmfHdf5.h:161
void addDiscSetTopologyAttributes(H5::H5Object *obj, const GmDiscontinuitySet *discSet, bool original)
Add metadata attributes describing the discontinuity set topology.
Definition gmXdmfHdf5.cpp:2207
Declaration of the GmFileFilter class.
Declaration of the GmFileIO class.
Declaration of the GmFileIOUtils class.
Declaration of the GmValueInfo class.
GmStorageType
The desired storage type for the data.
Definition gmValueInfo.h:55
Definition gmXdmfHdf5.h:74
int originalNodeCount
Original geometry number of nodes.
Definition gmXdmfHdf5.h:75
int originalElemCount
Original geometry number of elements.
Definition gmXdmfHdf5.h:76
int dataSize
Data size - used for 2D original geometry.
Definition gmXdmfHdf5.h:81
int intersectElemCount0
Intersection geometry number of elements for principal topology.
Definition gmXdmfHdf5.h:79
int intersectNodeCount
Intersection geometry number of nodes.
Definition gmXdmfHdf5.h:78
int originalExtElemCount
Extended geometry number of elements.
Definition gmXdmfHdf5.h:77
int intersectElemCount1
Intersection geometry number of elements for additional topology (3D geom)
Definition gmXdmfHdf5.h:80