1 #ifndef __PCPP_HDF5_H__ 2 #define __PCPP_HDF5_H__ 18 double inTime,std::ostream &outStream);
22 int WriteGridSection(
const std::string &topoType,
const std::string &geomType,
23 const std::string &fileName,
const std::string &gridPath,
24 const std::vector<size_t> &gridSize,std::ostream &outStream);
27 const std::string &fileName,
28 const std::string &gridPath,
29 const std::vector<size_t> &gridSize,
30 std::ostream &outStream);
32 int WriteGridData(
const std::string &fileName,
const std::string &dataName,
unsigned int dataSize,
33 const std::string &dataPath,
const std::vector<size_t> &gridSize,std::ostream &outStream);
37 template<
typename Gr
idType,
typename StateType>
39 const std::string &gridName,
40 const std::string &gridPath,
41 const std::string &dataPath,
42 const GridType &inGrid,
43 const StateType &inState)
46 std::string xdmfFileName(h5FileName.substr(0,h5FileName.find_last_of(
".")));
47 xdmfFileName +=
".xdmf";
49 std::string h5RelativeName = h5FileName.substr(h5FileName.find_last_of(
"/")+1);
51 std::ofstream xdmfStream;
52 xdmfStream.open(xdmfFileName.c_str());
56 int timeHandle = inState.GetDataIndex(
"simTime");
58 const double *timePtr = inState.template GetFieldBuffer<double>(
"simTime");
61 int numDim = inGrid.Dimension();
63 std::ostringstream topoTypeStream;
64 topoTypeStream << numDim <<
"DSMesh";
65 std::vector<size_t> rGridSizes(inGrid.GridSizes());
66 std::reverse(rGridSizes.begin(),rGridSizes.end());
68 rGridSizes,xdmfStream);
71 pcpp::field::metadataset::const_iterator mdIt = stateMetaData.begin();
72 while(mdIt != stateMetaData.end()){
74 if(fieldMetaData.
loc ==
'n'){
75 const std::string &fieldName(fieldMetaData.
name);
76 const std::string attributeName(dataPath+
"/"+fieldName);
77 size_t numData = fieldMetaData.
ncomp;
78 std::vector<size_t> attributeSize(1,numData);
80 for(
int iComp = 0;iComp < numData;iComp++){
81 std::ostringstream Ostr;
84 Ostr <<
"-" << iComp+1;
85 std::string componentName(Ostr.str());
86 std::string fieldPath(dataPath+
"/"+componentName);
88 fieldPath,rGridSizes,xdmfStream);
98 template<
typename DomainType>
100 DomainType &inDomain)
103 std::string xdmfFileName(h5FileName.substr(0,h5FileName.find_last_of(
".")));
104 xdmfFileName +=
".xdmf";
106 std::string h5RelativeName = h5FileName.substr(h5FileName.find_last_of(
"/")+1);
108 std::ofstream xdmfStream;
109 xdmfStream.open(xdmfFileName.c_str());
112 double simTime = inDomain.Time();
113 int numGrids = inDomain.NumberOfGrids();
114 const std::string domainName(inDomain.Name());
115 const std::vector<std::string>
scalarNames(inDomain.ScalarNames());
117 for(
int iGrid = 0;iGrid < numGrids;iGrid++){
118 std::ostringstream gridNameStream;
119 gridNameStream <<
"grid" << iGrid+1;
120 std::string gridName(gridNameStream.str());
121 typename DomainType::GridType ¤tGrid(inDomain.Grid(iGrid));
122 typename DomainType::StateType ¤tState(inDomain.State(iGrid));
123 int numDim = currentGrid.Dimension();
124 const std::string fullGridName(inDomain.GridName(iGrid));
125 std::string::size_type
x = fullGridName.find_last_of(
":");
126 const std::string geometryName(fullGridName.substr(0,x));
127 const std::string geomGridName(fullGridName.substr(x+1));
128 const std::string gridPath(
"/PlasCom2/Geometry/"+geometryName+
"/"+geomGridName);
129 const std::string dataPath(
"/PlasCom2/Simulation/"+domainName+
"/"+gridName);
131 std::ostringstream topoTypeStream;
132 topoTypeStream << numDim <<
"DSMesh";
133 std::vector<size_t> rGridSizes(currentGrid.GridSizes());
134 std::reverse(rGridSizes.begin(),rGridSizes.end());
136 rGridSizes,xdmfStream);
139 pcpp::field::metadataset::const_iterator mdIt = stateMetaData.begin();
140 while(mdIt != stateMetaData.end()){
142 if(fieldMetaData.
loc ==
'n'){
143 const std::string &fieldName(fieldMetaData.
name);
144 const std::string attributeName(dataPath+
"/"+fieldName);
145 size_t numData = fieldMetaData.
ncomp;
146 std::vector<size_t> attributeSize(1,numData);
147 bool renameField =
false;
148 std::vector<std::string> renameNames;
149 if(fieldName ==
"scalarVars"){
154 for(
int iComp = 0;iComp < numData;iComp++){
155 std::ostringstream Ostr;
158 Ostr <<
"-" << iComp+1;
159 std::string componentName(Ostr.str());
160 std::string fieldPath(dataPath+
"/"+componentName);
162 componentName = renameNames[iComp];
165 fieldPath,rGridSizes,xdmfStream);
182 base() : commPtr(NULL), dataTransferProperties(-1), globalSlab(-1),
183 localSlab(-1), collectiveMode(false)
185 messageStreamPtr = &messageStream;
189 globalSlab(-1), localSlab(-1), collectiveMode(true)
191 messageStreamPtr = &messageStream;
194 base(
const std::string &inName) : commPtr(NULL),dataTransferProperties(-1),
195 globalSlab(-1), localSlab(-1),
196 fileName(inName), collectiveMode(false)
198 messageStreamPtr = &messageStream;
206 base(
const std::string &inName,
bool readOnly) : commPtr(NULL),dataTransferProperties(-1),
207 globalSlab(-1), localSlab(-1),
208 fileName(inName), collectiveMode(false)
210 messageStreamPtr = &messageStream;
212 Open(inName,readOnly);
213 }
else if (!readOnly) {
219 commPtr(&inComm),dataTransferProperties(-1),
220 globalSlab(-1), localSlab(-1),
221 fileName(inName), collectiveMode(true)
223 messageStreamPtr = &messageStream;
231 std::string
Name() {
return(fileName); };
235 messageStreamPtr = &outStream;
239 return(messageStream.str());
247 collectiveMode = yesNo;
258 commPtr = &inCommunicator;
265 SetCommunicator(inComm);
266 return(Create(inFileName,force));
269 int Create(
const std::string &inFileName,
bool force=
false);
271 hid_t OpenAttribute(
const std::string &inName);
273 hid_t OpenDataSet(
const std::string &inName);
278 SetCommunicator(inComm);
279 return(Open(inFileName,readOnly));
282 int Open(
const std::string &inFileName,
bool readOnly =
false);
286 int OpenGroup(
const std::string &groupName);
290 H5Gclose(hdfScope.back());
295 bool AttributeExists(
const std::string &inName);
297 bool Exists(
const std::string &linkName);
299 int ResolveName(
const std::string &inName,std::string &attLocation,
300 std::string &attName,hid_t &parentId);
302 int ReadAttribute(
const std::string &inName,
int *inBuf);
304 int ReadAttribute(
const std::string &inName,
size_t *inBuf);
306 int ReadAttribute(
const std::string &inName,
double *inBuf);
308 int ReadAttribute(
const std::string &inName,
char *inBuf);
309 int ReadAttribute(
const std::string &inName,std::string &inString);
311 template<
typename DataType>
314 std::ostream &messageStream(*messageStreamPtr);
315 hid_t attID = OpenAttribute(inName);
318 hid_t attSpace = H5Aget_space(attID);
323 int numSpaceDim = H5Sget_simple_extent_ndims(attSpace);
324 if(numSpaceDim <= 0){
329 std::vector<hsize_t> spaceDims(numSpaceDim,0);
330 herr_t h5Status = H5Sget_simple_extent_dims(attSpace,&spaceDims[0],NULL);
337 for(
size_t iDim = 0;iDim < numSpaceDim;iDim++)
338 numPoints *= spaceDims[iDim];
339 inData.resize(numPoints);
342 return(ReadAttribute(inName,&inData[0]));
345 hid_t DataSpace(
const std::string &inName);
346 std::vector<size_t> DataDimensions(
const std::string &inName);
347 std::vector<size_t> AttributeDimensions(
const std::string &inName);
349 int InitializeHyperSlab(std::vector<size_t> &inGlobalSize,
350 std::vector<size_t> &inLocalSize,
351 std::vector<size_t> &inLocalStart);
353 int WriteHyperSlab(
const std::string &inName,
354 const std::vector<size_t> &globalSize,
355 const std::vector<size_t> &localStart,
356 const std::vector<size_t> &localSize,
357 std::vector<double> &inDataVec);
359 int WriteHyperSlab(
const std::string &inName,
360 const std::vector<size_t> &globalSize,
361 const std::vector<size_t> &localStart,
362 const std::vector<size_t> &localSize,
363 const double *inDataPtr);
365 int WriteHyperSlab(
const std::string &inName,
366 const std::vector<size_t> &globalSize,
367 const std::vector<size_t> &localStart,
368 const std::vector<size_t> &localSize,
369 const std::vector<size_t> &bufferStart,
371 const int *inDataPtr);
373 int WriteHyperSlab(
const std::string &inName,
374 const std::vector<size_t> &globalSize,
375 const std::vector<size_t> &localStart,
376 const std::vector<size_t> &localSize,
377 const std::vector<size_t> &bufferStart,
378 const std::vector<size_t> &bufferSize,
379 const char *inDataPtr);
381 int WriteHyperSlab(
const std::string &inName,
382 const std::vector<size_t> &globalSize,
383 const std::vector<size_t> &localStart,
384 const std::vector<size_t> &localSize,
385 const std::vector<size_t> &bufferStart,
386 const std::vector<size_t> &bufferSize,
387 const double *inDataPtr);
389 int WriteHyperSlab(
const std::string &inName,
390 const std::vector<size_t> &globalSize,
391 const std::vector<size_t> &localStart,
392 const std::vector<size_t> &localSize,
393 std::vector<int> &inDataVec);
395 int WriteHyperSlab(
const std::string &inName,
396 const std::vector<size_t> &globalSize,
397 const std::vector<size_t> &localStart,
398 const std::vector<size_t> &localSize,
399 std::vector<size_t> &inDataVec);
401 int WriteHyperSlab(
const std::string &inName,
402 const std::vector<size_t> &globalSize,
403 const std::vector<size_t> &localStart,
404 const std::vector<size_t> &localSize,
405 std::vector<char> &inDataVec);
407 int WriteHyperSlab(
const std::string &inName,
408 const std::vector<size_t> &localStart,
409 const std::vector<size_t> &localSize,
410 std::vector<double> &inDataVec);
412 int WriteHyperSlab(
const std::string &inName,
413 const std::vector<size_t> &localStart,
414 const std::vector<size_t> &localSize,
415 std::vector<int> &inDataVec);
417 int WriteHyperSlab(
const std::string &inName,
418 const std::vector<size_t> &localStart,
419 const std::vector<size_t> &localSize,
420 std::vector<size_t> &inDataVec);
422 int WriteHyperSlab(
const std::string &inName,
423 const std::vector<size_t> &localStart,
424 const std::vector<size_t> &localSize,
425 std::vector<char> &inDataVec);
427 int ReadDataSet(
const std::string &inName,
int *inBuf);
428 int ReadDataSet(
const std::string &inName,
double *inBuf);
429 int ReadDataSet(
const std::string &inName,
size_t *inBuf);
430 int ReadDataSet(
const std::string &inName,
char *inBuf);
433 hid_t hyperSlab,hid_t xferProperties,
436 return(H5Dread(dataID,H5T_NATIVE_DOUBLE,hyperSlab,
437 dataSpace,xferProperties,dataBuffer));
440 hid_t hyperSlab,hid_t xferProperties,
443 return(H5Dread(dataID,H5T_NATIVE_INT,hyperSlab,
444 dataSpace,xferProperties,dataBuffer));
447 hid_t hyperSlab,hid_t xferProperties,
450 return(H5Dread(dataID,H5T_NATIVE_HSIZE,hyperSlab,
451 dataSpace,xferProperties,dataBuffer));
454 hid_t hyperSlab,hid_t xferProperties,
457 return(H5Dread(dataID,H5T_NATIVE_CHAR,hyperSlab,
458 dataSpace,xferProperties,dataBuffer));
461 template<
typename DataType>
463 const std::vector<size_t> &localStart,
464 const std::vector<size_t> &localSize,
465 std::vector<DataType> &inDataVec)
467 std::ostream &messageStream(*messageStreamPtr);
469 hid_t dataID = OpenDataSet(inName);
473 size_t numDim = localStart.size();
474 if(localSize.size() != numDim){
479 hid_t dataSpace = H5Dget_space(dataID);
485 int numSpaceDim = H5Sget_simple_extent_ndims(dataSpace);
486 if(numSpaceDim != numDim){
491 if(numSpaceDim <= 0){
497 std::vector<hsize_t> h5LocalStart(localStart.begin(),localStart.end());
498 std::vector<hsize_t> h5LocalSize(localSize.begin(),localSize.end());
499 herr_t h5Status = H5Sselect_hyperslab(dataSpace,H5S_SELECT_SET,&h5LocalStart[0],
500 NULL,&h5LocalSize[0],NULL);
507 hid_t localMemSpace = H5Screate_simple(numDim,&h5LocalSize[0],NULL);
508 if(localMemSpace < 0){
514 size_t numLocalPoints = 1;
515 for(
size_t iDim = 0;iDim < numSpaceDim;iDim++)
516 numLocalPoints *= localSize[iDim];
517 inDataVec.resize(numLocalPoints,0);
519 hid_t xferProperties = H5Pcreate(H5P_DATASET_XFER);
520 if(collectiveMode && (commPtr != NULL)){
521 H5Pset_dxpl_mpio(xferProperties,H5FD_MPIO_COLLECTIVE);
524 h5Status = ReadHyperSlab(dataID,dataSpace,localMemSpace,xferProperties,&inDataVec[0]);
527 H5Sclose(localMemSpace);
528 H5Pclose(xferProperties);
538 template<
typename DataType>
540 const std::vector<size_t> &localStart,
541 const std::vector<size_t> &localSize,
542 const std::vector<size_t> &bufferStart,
543 const std::vector<size_t> &bufferSize,
544 std::vector<DataType> &inDataVec)
546 std::ostream &messageStream(*messageStreamPtr);
548 hid_t dataID = OpenDataSet(inName);
552 size_t numDim = localStart.size();
553 if(localSize.size() != numDim){
558 hid_t dataSpace = H5Dget_space(dataID);
564 int numSpaceDim = H5Sget_simple_extent_ndims(dataSpace);
565 if(numSpaceDim != numDim){
570 if(numSpaceDim <= 0){
576 std::vector<hsize_t> h5LocalStart(localStart.begin(),localStart.end());
577 std::vector<hsize_t> h5LocalSize(localSize.begin(),localSize.end());
578 herr_t h5Status = H5Sselect_hyperslab(dataSpace,H5S_SELECT_SET,&h5LocalStart[0],
579 NULL,&h5LocalSize[0],NULL);
586 std::vector<hsize_t> h5BufferStart(bufferStart.begin(),bufferStart.end());
587 std::vector<hsize_t> h5BufferSize(bufferSize.begin(),bufferSize.end());
588 hid_t localMemSpace = H5Screate_simple(numDim,&h5BufferSize[0],NULL);
589 if(localMemSpace < 0){
595 h5Status = H5Sselect_hyperslab(localMemSpace,H5S_SELECT_SET,&h5BufferStart[0],
596 NULL,&h5BufferSize[0],NULL);
598 H5Sclose(localMemSpace);
604 size_t numLocalPoints = 1;
605 for(
size_t iDim = 0;iDim < numSpaceDim;iDim++)
606 numLocalPoints *= localSize[iDim];
607 inDataVec.resize(numLocalPoints,0);
609 hid_t xferProperties = H5Pcreate(H5P_DATASET_XFER);
610 if(collectiveMode && (commPtr != NULL)){
611 H5Pset_dxpl_mpio(xferProperties,H5FD_MPIO_COLLECTIVE);
614 h5Status = ReadHyperSlab(dataID,dataSpace,localMemSpace,xferProperties,&inDataVec[0]);
617 H5Sclose(localMemSpace);
618 H5Pclose(xferProperties);
627 template<
typename DataType>
629 const std::vector<size_t> &localStart,
630 const std::vector<size_t> &localSize,
631 const std::vector<size_t> &bufferStart,
632 const std::vector<size_t> &bufferSize,
633 DataType *readBuffer)
654 std::ostream &messageStream(*messageStreamPtr);
656 hid_t dataID = OpenDataSet(inName);
660 size_t numDim = localStart.size();
661 if(localSize.size() != numDim){
666 hid_t dataSpace = H5Dget_space(dataID);
672 int numSpaceDim = H5Sget_simple_extent_ndims(dataSpace);
673 if(numSpaceDim != numDim){
678 if(numSpaceDim <= 0){
684 std::vector<hsize_t> h5LocalStart(localStart.begin(),localStart.end());
685 std::vector<hsize_t> h5LocalSize(localSize.begin(),localSize.end());
692 herr_t h5Status = H5Sselect_hyperslab(dataSpace,H5S_SELECT_SET,&h5LocalStart[0],
693 NULL,&h5LocalSize[0],NULL);
700 std::vector<hsize_t> h5BufferStart(bufferStart.begin(),bufferStart.end());
701 std::vector<hsize_t> h5BufferSize(bufferSize.begin(),bufferSize.end());
702 hid_t localMemSpace = H5Screate_simple(numDim,&h5BufferSize[0],NULL);
704 if(localMemSpace < 0){
715 h5Status = H5Sselect_hyperslab(localMemSpace,H5S_SELECT_SET,&h5BufferStart[0],
716 NULL,&h5LocalSize[0],NULL);
718 H5Sclose(localMemSpace);
724 hid_t xferProperties = H5Pcreate(H5P_DATASET_XFER);
725 if(collectiveMode && (commPtr != NULL)){
726 H5Pset_dxpl_mpio(xferProperties,H5FD_MPIO_COLLECTIVE);
729 h5Status = ReadHyperSlab(dataID,dataSpace,localMemSpace,xferProperties,readBuffer);
732 H5Sclose(localMemSpace);
733 H5Pclose(xferProperties);
742 template<
typename DataType>
744 const std::vector<size_t> &localStart,
745 const std::vector<size_t> &localSize,
746 DataType *readBuffer)
749 std::ostream &messageStream(*messageStreamPtr);
751 hid_t dataID = OpenDataSet(inName);
755 size_t numDim = localStart.size();
756 if(localSize.size() != numDim){
761 hid_t dataSpace = H5Dget_space(dataID);
767 int numSpaceDim = H5Sget_simple_extent_ndims(dataSpace);
768 if(numSpaceDim != numDim){
773 if(numSpaceDim <= 0){
779 std::vector<hsize_t> h5LocalStart(localStart.begin(),localStart.end());
780 std::vector<hsize_t> h5LocalSize(localSize.begin(),localSize.end());
781 herr_t h5Status = H5Sselect_hyperslab(dataSpace,H5S_SELECT_SET,&h5LocalStart[0],
782 NULL,&h5LocalSize[0],NULL);
789 hid_t localMemSpace = H5Screate_simple(numDim,&h5LocalSize[0],NULL);
790 if(localMemSpace < 0){
796 hid_t xferProperties = H5Pcreate(H5P_DATASET_XFER);
797 if(collectiveMode && (commPtr != NULL)){
798 H5Pset_dxpl_mpio(xferProperties,H5FD_MPIO_COLLECTIVE);
801 h5Status = ReadHyperSlab(dataID,dataSpace,localMemSpace,xferProperties,readBuffer);
804 H5Sclose(localMemSpace);
805 H5Pclose(xferProperties);
814 template<
typename DataType>
815 int ReadDataSet(
const std::string &inName,std::vector<DataType> &inDataVec)
817 std::ostream &messageStream(*messageStreamPtr);
818 hid_t dataID = OpenDataSet(inName);
822 hid_t dataSpace = H5Dget_space(dataID);
827 int numSpaceDim = H5Sget_simple_extent_ndims(dataSpace);
828 if(numSpaceDim <= 0){
833 std::vector<hsize_t> spaceDims(numSpaceDim,0);
834 herr_t h5Status = H5Sget_simple_extent_dims(dataSpace,&spaceDims[0],NULL);
841 for(
size_t iDim = 0;iDim < numSpaceDim;iDim++)
842 numPoints *= spaceDims[iDim];
843 inDataVec.resize(numPoints);
846 return(ReadDataSet(inName,&inDataVec[0]));
849 int CreateGroup(
const std::string &inName);
851 hid_t CreateDataSpace(
const std::vector<size_t> &spaceDimensions);
853 int CreateDataSet(
const std::string &inName,
854 const std::vector<size_t> &spaceDimensions,
855 size_t sizeInBytes=8);
857 int CreateDataSet(
const std::string &inName,
858 const std::vector<size_t> &spaceDimensions,
859 std::vector<double> &inData);
861 int CreateDataSet(
const std::string &inName,
862 const std::vector<size_t> &spaceDimensions,
863 std::vector<int> &inData);
865 int CreateAttribute(
const std::string &inName,
866 const std::vector<size_t> &spaceDimensions,
867 size_t sizeInBytes=8);
870 int CreateAttribute(
const std::string &inName,
871 const std::vector<size_t> &spaceDimensions,
874 int CreateAttribute(
const std::string &inName,
875 const std::vector<size_t> &spaceDimensions,
876 const std::vector<int> &inData);
878 int CreateAttribute(
const std::string &inName,
879 const std::vector<size_t> &spaceDimensions,
880 const double *inBuf);
882 int CreateAttribute(
const std::string &inName,
883 const std::vector<size_t> &spaceDimensions,
884 const std::vector<double> &inData);
886 int CreateAttribute(
const std::string &inName,
887 const std::vector<size_t> &spaceDimensions,
888 const size_t *inBuf);
890 int CreateAttribute(
const std::string &inName,
891 const std::vector<size_t> &spaceDimensions,
892 const std::vector<size_t> &inData);
894 int CreateAttribute(
const std::string &inName,
895 const std::vector<size_t> &spaceDimensions,
898 int CreateAttribute(
const std::string &inName,
const std::string &inData);
902 std::string fileName;
926 template<
typename Gr
idType>
929 const std::string &gridName,
932 std::ostream &messageStream)
942 std::string hdfGroupName(gridName);
948 if(H5Lexists(parentGroupID,hdfGroupName.c_str(),H5P_DEFAULT) <= 0){
949 messageStream <<
"Grid group (" << hdfGroupName <<
") does not exist in parent." 954 hid_t hdfGroupID = H5Gopen(parentGroupID,hdfGroupName.c_str(),H5P_DEFAULT);
956 messageStream <<
"Unable to open group: " << hdfGroupName << std::endl;
960 hsize_t
numPoints = gridData.BufferSize();
961 hsize_t numDim = gridData.Dimension();
962 const std::vector<size_t> &gridGlobalSizes(gridData.GridSizes());
963 const std::vector<size_t> &gridPartitionSizes(gridData.PartitionSizes());
966 std::vector<hsize_t> globalSize(numDim,1);
967 std::vector<hsize_t> localSize(numDim,1);
968 std::vector<hsize_t> localStart(numDim,0);
970 for(
int i = 0;i < numDim;i++){
971 globalSize[i] = gridGlobalSizes[i];
972 localSize[i] = gridPartitionSizes[i];
973 localStart[i] = gridPartitionInterval[i].first;
976 hid_t hdfGlobalGridID = H5Screate_simple(numDim,&globalSize[0],NULL);
977 if(hdfGlobalGridID < 0){
978 messageStream <<
"Unable to create HDF5 dataspace for global grid." 983 hid_t hdfLocalGridID = H5Screate_simple(numDim,&localSize[0],NULL);
984 if(hdfLocalGridID < 0){
985 messageStream <<
"Unable to create HDF5 dataspace for local grid." 990 if(H5Sselect_hyperslab(hdfGlobalGridID,H5S_SELECT_SET,
991 &localStart[0],NULL,&localSize[0],NULL) < 0){
992 messageStream <<
"Unable to select hyperslab." << std::endl;
996 hid_t hdfTransferPropertiesID = H5Pcreate(H5P_DATASET_XFER);
997 if(hdfTransferPropertiesID < 0){
998 messageStream <<
"Unable to create transfer properties object." 1004 messageStream <<
"Setting HDF5 to COLLECTIVE mode." << std::endl;
1005 if(H5Pset_dxpl_mpio(hdfTransferPropertiesID, H5FD_MPIO_COLLECTIVE) < 0){
1006 messageStream <<
"Unable to set HDF5 to COLLECTIVE mode." << std::endl;
1010 messageStream <<
"Leaving HDF5 in ASYNCHRONOUS mode." << std::endl;
1013 std::vector<std::string> coordinateLabels(4);
1014 coordinateLabels[0] =
"X";
1015 coordinateLabels[1] =
"Y";
1016 coordinateLabels[2] =
"Z";
1017 coordinateLabels[3] =
"XYZ";
1018 hid_t h5aplProperty = H5Pcreate(H5P_LINK_ACCESS);
1019 for(
int iLabel = 0;iLabel < 4;iLabel++){
1020 if(H5Lexists(hdfGroupID,coordinateLabels[iLabel].c_str(),h5aplProperty) > 0){
1021 std::string &coordinateLabel(coordinateLabels[iLabel]);
1022 std::ostringstream rdOut;
1023 messageStream << rdOut.str() << std::endl;
1024 double *coordinateData = NULL;
1025 if(coordinateLabel ==
"X")
1026 coordinateData = gridData.CoordinateData(0);
1027 else if (coordinateLabel ==
"Y")
1028 coordinateData = gridData.CoordinateData(1);
1029 else if(coordinateLabel ==
"Z")
1030 coordinateData = gridData.CoordinateData(2);
1031 else if (coordinateLabel ==
"XYZ")
1032 coordinateData =
new double [numDim*
numPoints];
1037 hid_t hdfCoordinateDataID = H5Dopen1(hdfGroupID,coordinateLabel.c_str());
1038 if(hdfCoordinateDataID < 0){
1039 messageStream <<
"Unable to open dataset for coordinate " 1040 << coordinateLabel <<
"." << std::endl;
1043 if(H5Dread(hdfCoordinateDataID,H5T_NATIVE_DOUBLE,hdfLocalGridID,
1044 hdfGlobalGridID,hdfTransferPropertiesID,coordinateData) < 0){
1045 messageStream <<
"Read of data failed for coordinate " << coordinateLabel
1046 <<
"." << std::endl;
1050 H5Dclose(hdfCoordinateDataID);
1051 if(coordinateLabel ==
"XYZ"){
1052 for(
int iDim = 0;iDim < numDim;iDim++){
1053 double *coordData(gridData.CoordinateData(iDim));
1054 for(
int iPoint = 0;iPoint <
numPoints;iPoint++){
1055 coordData[iPoint] = coordinateData[numDim*iPoint+iDim];
1058 delete [] coordinateData;
1062 std::string iblankLabel(
"IBLANK");
1063 if(H5Lexists(hdfGroupID,iblankLabel.c_str(),h5aplProperty) > 0){
1064 messageStream <<
"Reading IBLANK." << std::endl;
1065 std::vector<int> &flagData(gridData.FlagData());
1067 hid_t hdfIBLANKDataID = H5Dopen1(hdfGroupID,iblankLabel.c_str());
1068 if(hdfIBLANKDataID < 0){
1069 messageStream <<
"Unable to open dataset for IBLANK." << std::endl;
1072 if(H5Dread(hdfIBLANKDataID,H5T_NATIVE_INT,hdfLocalGridID,
1073 hdfGlobalGridID,hdfTransferPropertiesID,&flagData[0]) < 0){
1074 messageStream <<
"Reading IBLANK data failed." << std::endl;
1078 H5Dclose(hdfIBLANKDataID);
1080 H5Pclose(h5aplProperty);
1081 H5Pclose(hdfTransferPropertiesID);
1082 H5Sclose(hdfLocalGridID);
1083 H5Sclose(hdfGlobalGridID);
1084 H5Gclose(hdfGroupID);
1088 template<
typename Gr
idType>
1090 const std::string &parentGroupName,
1093 const std::string &hdfFileName,
1095 std::ostream &messageStream)
1097 hid_t propertyListID = H5Pcreate(H5P_FILE_ACCESS);
1098 if(propertyListID < 0){
1099 messageStream <<
"H5Pcreate failed." << std::endl;
1102 if(H5Pset_fapl_mpio(propertyListID,gridComm.
Comm(),MPI_INFO_NULL) < 0){
1103 messageStream <<
"H5Pset_fapl_mpio failed." << std::endl;
1106 hid_t hdfFileID = H5Fopen(hdfFileName.c_str(),H5F_ACC_RDONLY,propertyListID);
1108 std::ostringstream Ostr;
1109 Ostr <<
"Could not open HDF5 file: " << hdfFileName << std::endl;
1110 messageStream << Ostr.str();
1113 if(H5Pclose(propertyListID) < 0){
1114 messageStream <<
"Unable to close HDF5 property list." << std::endl;
1117 hid_t parentGroupID = hdfFileID;
1118 if(!parentGroupName.empty()){
1119 std::ostringstream Ostr;
1120 Ostr <<
"/" << parentGroupName;
1121 parentGroupID = H5Gopen(hdfFileID,Ostr.str().c_str(),H5P_DEFAULT);
1122 if(parentGroupID < 0){
1123 messageStream <<
"Could not open parent group for grid." << std::endl;
1127 return(ReadGrid<GridType>(parentGroupID,hdfConfig,gridName,gridData,gridComm,messageStream));
1130 template<
typename Gr
idType>
1131 int WriteGrid(
const GridType &inGrid,
const std::string &gridName,
1132 const std::string &parentPath,
base &hdfFile)
1135 if(!parentPath.empty())
1136 if(!hdfFile.
Exists(parentPath))
1139 std::ostringstream Ostr;
1140 Ostr << parentPath <<
"/" << gridName;
1141 std::string fullPath(Ostr.str());
1148 const std::vector<size_t> &gridSize(inGrid.GridSizes());
1149 const std::vector<size_t> &partitionSize(inGrid.PartitionSizes());
1151 const std::vector<size_t> &
bufferSize(inGrid.BufferSizes());
1155 int numDim = gridSize.size();
1157 std::vector<size_t> rGridSize(gridSize);
1159 std::reverse(rGridSize.begin(),rGridSize.end());
1163 std::vector<size_t> sizeAtt(1,numDim);
1164 std::vector<size_t> singleValueSize(1,1);
1166 Ostr << fullPath <<
"/numDim";
1170 Ostr << fullPath <<
"/gridSize";
1187 int numLocalPoints = partitionExtent.NNodes();
1189 std::vector<size_t> localStart(partitionExtent.Starts());
1190 std::vector<size_t> rlocalStart(localStart);
1191 std::reverse(rlocalStart.begin(),rlocalStart.end());
1192 std::vector<size_t> localSize(partitionExtent.Sizes());
1193 std::vector<size_t> rlocalSize(localSize);
1194 std::reverse(rlocalSize.begin(),rlocalSize.end());
1196 std::reverse(rBufferSize.begin(),rBufferSize.end());
1197 std::vector<size_t> rBufferStart;
1198 if(!
bufferSize.empty() && !partitionBufferInterval.empty())
1199 for(
int iDim = numDim-1;iDim >= 0;iDim--)
1200 rBufferStart.push_back(partitionBufferInterval[iDim].first);
1202 for(
int iDim = 0;iDim < numDim;iDim++){
1203 const double *coordinateData = inGrid.CoordinateData(iDim);
1209 }
else if (iDim == 1) {
1211 }
else if (iDim == 2) {
1232 if(!rBufferStart.empty())
1233 hdfFile.
WriteHyperSlab(Ostr.str(),rGridSize,rlocalStart,rlocalSize,rBufferStart,rBufferSize,coordinateData);
1235 hdfFile.
WriteHyperSlab(Ostr.str(),rGridSize,rlocalStart,rlocalSize,coordinateData);
1254 template<
typename Gr
idType>
1255 int ReadGrid(GridType &inGrid,
const std::string &gridPath,
base &hdfFile,
bool reverseRead=
true)
1258 if(!hdfFile.
Exists(gridPath))
1264 myRank = gridComm.
Rank();
1266 std::ostringstream Ostr;
1283 int numDim = inGrid.NumDim();
1285 const std::vector<size_t> &gridSize(inGrid.GridSizes());
1286 const std::vector<size_t> &partitionSize(inGrid.PartitionSizes());
1287 const std::vector<size_t> &
bufferSize(inGrid.BufferSizes());
1290 std::vector<size_t> bufferStarts(partitionBufferInterval.Starts());
1291 std::vector<size_t> partitionStarts(partitionInterval.Starts());
1293 bool useSimple =
false;
1294 if(bufferStarts.empty() ||
bufferSize.empty() ||
1296 std::cout <<
"switching to use simple" << std::endl;
1300 std::vector<size_t> rGridSize(gridSize);
1301 std::vector<size_t> rPartSize(partitionSize);
1302 std::vector<size_t> rPartStart(partitionStarts);
1304 std::vector<size_t> rBufferStart(bufferStarts);
1308 std::reverse(rBufferStart.begin(),rBufferStart.end());
1309 std::reverse(rGridSize.begin(),rGridSize.end());
1310 std::reverse(rBufferSize.begin(),rBufferSize.end());
1311 std::reverse(rPartStart.begin(),rPartStart.end());
1312 std::reverse(rPartSize.begin(),rPartSize.end());
1331 std::vector<size_t> fileGridSize(numDim,0);
1332 Ostr << gridPath <<
"/gridSize";
1334 if(rGridSize != fileGridSize){
1336 std::cout <<
"WARNING: Grid dimensions (";
1338 std::cout <<
") in file path " << Ostr.str()
1339 <<
" does not match requested grid (";
1341 std::cout <<
")" << std::endl;
1352 inGrid.AllocateCoordinateData();
1354 for(
int iDim = 0;iDim < numDim;iDim++){
1355 double *coordinateData = inGrid.CoordinateData(iDim);
1361 }
else if (iDim == 1) {
1363 }
else if (iDim == 2) {
1373 hdfFile.
ReadHyperSlab(Ostr.str(),rPartStart,rPartSize,coordinateData);
1384 hdfFile.
ReadHyperSlab(Ostr.str(),rPartStart,rPartSize,rBufferStart,rBufferSize,coordinateData);
1390 Ostr << gridPath <<
"/IBLANK";
1391 std::string flagPath(
"IBLANK");
1392 if(!hdfFile.
Exists(flagPath))
1393 flagPath = Ostr.str();
1394 if(hdfFile.
Exists(flagPath)){
1395 std::vector<int> &flagData(inGrid.FlagData());
1396 int *dataPtr = &flagData[0];
1398 hdfFile.
ReadHyperSlab(flagPath,rPartStart,rPartSize,dataPtr);
1400 hdfFile.
ReadHyperSlab(flagPath,rPartStart,rPartSize,rBufferStart,rBufferSize,dataPtr);
1410 template<
typename StateType>
1412 const std::string &filePath,
base &hdfFile)
1415 if(!hdfFile.
Exists(filePath))
1418 std::ostringstream Ostr;
1421 pcpp::field::metadataset::const_iterator mdIt = stateMetaData.begin();
1422 while(mdIt != stateMetaData.end()){
1424 if(fieldMetaData.
loc == attributeLocation){
1425 const std::string &fieldName(fieldMetaData.
name);
1426 const std::string attributeName(filePath+
"/"+fieldName);
1427 size_t numData = fieldMetaData.
ncomp;
1428 std::vector<size_t> attributeSize(1,numData);
1429 const char *stateByteData = NULL;
1430 const int *stateIntData = NULL;
1431 const double *stateRealData = NULL;
1433 switch(fieldMetaData.
dsize){
1436 stateByteData = inState.template GetFieldBuffer<char>(fieldName);
1441 stateIntData = inState.template GetFieldBuffer<int>(fieldName);
1446 stateRealData = inState.template GetFieldBuffer<double>(fieldName);
1465 template<
typename StateType>
1467 const std::string &filePath,
base &hdfFile)
1470 if(!hdfFile.
Exists(filePath))
1473 std::ostringstream Ostr;
1476 pcpp::field::metadataset::const_iterator mdIt = stateMetaData.begin();
1477 while(mdIt != stateMetaData.end()){
1479 if(fieldMetaData.
loc == attributeLocation){
1480 const std::string &fieldName(fieldMetaData.
name);
1481 const std::string attributeName(filePath+
"/"+fieldName);
1482 size_t numData = fieldMetaData.
ncomp;
1483 std::vector<size_t> attributeSize(1,numData);
1484 char *stateByteData = NULL;
1485 int *stateIntData = NULL;
1486 double *stateRealData = NULL;
1488 switch(fieldMetaData.
dsize){
1491 stateByteData = inState.template GetFieldBuffer<char>(fieldName);
1496 stateIntData = inState.template GetFieldBuffer<int>(fieldName);
1501 stateRealData = inState.template GetFieldBuffer<double>(fieldName);
1515 template<
typename StateType>
1518 const std::vector<size_t> &partitionSizes,
1519 const std::vector<size_t> &partitionStarts,
1521 const std::vector<size_t> &partitionBufferStarts,
1522 const std::string &filePath,
base &hdfFile)
1525 if(!hdfFile.
Exists(filePath)){
1526 std::cout <<
"ERROR: path does not exist: " << filePath << std::endl;
1531 std::cout <<
"ERROR: Failed to open existing path: " << filePath << std::endl;
1535 std::vector<size_t> rGridSizes(gridSizes);
1536 std::reverse(rGridSizes.begin(),rGridSizes.end());
1537 std::vector<size_t> rPartSizes(partitionSizes);
1538 std::reverse(rPartSizes.begin(),rPartSizes.end());
1539 std::vector<size_t> rPartStarts(partitionStarts);
1540 std::reverse(rPartStarts.begin(),rPartStarts.end());
1541 std::vector<size_t> rBufferSizes(bufferSizes);
1542 std::reverse(rBufferSizes.begin(),rBufferSizes.end());
1543 std::vector<size_t> rBufferStarts(partitionBufferStarts);
1544 std::reverse(rBufferStarts.begin(),rBufferStarts.end());
1547 std::vector<size_t>::const_iterator bsIt = bufferSizes.begin();
1548 while(bsIt != bufferSizes.end())
1549 numPointsBuffer *= *bsIt++;
1552 pcpp::field::metadataset::const_iterator mdIt = stateMetaData.begin();
1553 while(mdIt != stateMetaData.end()){
1555 if(fieldMetaData.
loc ==
'n'){
1556 const std::string &fieldName(fieldMetaData.
name);
1558 const std::string attributeName(filePath+
"/"+fieldName);
1559 size_t numData = fieldMetaData.
ncomp;
1560 std::vector<size_t> attributeSize(1,numData);
1561 const char *stateByteData = NULL;
1562 const int *stateIntData = NULL;
1563 const double *stateRealData = NULL;
1564 const char *ioByte = NULL;
1565 const int *ioInt = NULL;
1566 const double *ioReal = NULL;
1568 switch(fieldMetaData.
dsize)
1572 stateByteData = inState.template GetFieldBuffer<char>(fieldName);
1576 stateIntData = inState.template GetFieldBuffer<int>(fieldName);
1580 stateRealData = inState.template GetFieldBuffer<double>(fieldName);
1589 for(
int iComp = 0;iComp < numData;iComp++){
1590 std::ostringstream Ostr;
1591 Ostr << attributeName;
1593 Ostr <<
"-" << iComp+1;
1595 switch(fieldMetaData.
dsize)
1600 hdfFile.
WriteHyperSlab(Ostr.str(),rGridSizes,rPartStarts,rPartSizes,
1601 rBufferStarts,rBufferSizes,ioByte);
1606 hdfFile.
WriteHyperSlab(Ostr.str(),rGridSizes,rPartStarts,rPartSizes,
1607 rBufferStarts,rBufferSizes,ioInt);
1612 hdfFile.
WriteHyperSlab(Ostr.str(),rGridSizes,rPartStarts,rPartSizes,
1613 rBufferStarts,rBufferSizes,ioReal);
1628 template<
typename StateType>
1631 const std::vector<size_t> &partitionSizes,
1632 const std::vector<size_t> &partitionStarts,
1634 const std::vector<size_t> &partitionBufferStarts,
1635 const std::string &filePath,
base &hdfFile,
1636 bool reverseRead =
true)
1639 if(!hdfFile.
Exists(filePath))
1645 std::vector<size_t>::const_iterator bsIt = bufferSizes.begin();
1646 while(bsIt != bufferSizes.end())
1647 numPointsBuffer *= *bsIt++;
1649 std::vector<size_t> rGridSizes(gridSizes);
1650 std::vector<size_t> rPartSizes(partitionSizes);
1651 std::vector<size_t> rPartStarts(partitionStarts);
1652 std::vector<size_t> rBufferSizes(bufferSizes);
1653 std::vector<size_t> rBufferStarts(partitionBufferStarts);
1656 std::reverse(rBufferStarts.begin(),rBufferStarts.end());
1657 std::reverse(rGridSizes.begin(),rGridSizes.end());
1658 std::reverse(rBufferSizes.begin(),rBufferSizes.end());
1659 std::reverse(rPartStarts.begin(),rPartStarts.end());
1660 std::reverse(rPartSizes.begin(),rPartSizes.end());
1664 pcpp::field::metadataset::const_iterator mdIt = stateMetaData.begin();
1665 while(mdIt != stateMetaData.end()){
1667 if(fieldMetaData.
loc ==
'n'){
1668 const std::string &fieldName(fieldMetaData.
name);
1669 const std::string attributeName(filePath+
"/"+fieldName);
1670 size_t numData = fieldMetaData.
ncomp;
1671 std::vector<size_t> attributeSize(1,numData);
1672 char *stateByteData = NULL;
1673 int *stateIntData = NULL;
1674 double *stateRealData = NULL;
1675 char *ioByte = NULL;
1677 double *ioReal = NULL;
1679 switch(fieldMetaData.
dsize)
1683 stateByteData = inState.template GetFieldBuffer<char>(fieldName);
1687 stateIntData = inState.template GetFieldBuffer<int>(fieldName);
1691 stateRealData = inState.template GetFieldBuffer<double>(fieldName);
1701 for(
int iComp = 0;iComp < numData;iComp++){
1702 std::ostringstream Ostr;
1703 Ostr << attributeName;
1705 Ostr <<
"-" << iComp+1;
1707 switch(fieldMetaData.
dsize)
1712 readStatus = hdfFile.
ReadHyperSlab(Ostr.str(),rPartStarts,rPartSizes,
1713 rBufferStarts,rBufferSizes,ioByte);
1718 readStatus = hdfFile.
ReadHyperSlab(Ostr.str(),rPartStarts,rPartSizes,
1719 rBufferStarts,rBufferSizes,ioInt);
1724 readStatus = hdfFile.
ReadHyperSlab(Ostr.str(),rPartStarts,rPartSizes,
1725 rBufferStarts,rBufferSizes,ioReal);
1745 template<
typename Gr
idType>
1747 const std::string &gridName,
1748 const std::string &gridFileName,
1749 std::ostream &messageStream)
1752 int myRank = gridComm.
Rank();
1757 std::ostringstream errStream;
1760 messageStream <<
"ERROR: FileInfo failed for " << gridFileName
1761 <<
".\nHDF5 messages:" 1762 << errStream.str() << std::endl;
1765 const std::bitset<pcpp::io::NUMFORMATBITS> &formatBits(gridFileInfo.
formatBits);
1767 messageStream << gridFileName <<
" is a legacy file." << std::endl;
1771 messageStream <<
"Error: specified file (" << gridFileName <<
") has " 1772 <<
"no geometry data." << std::endl;
1780 gridComm.BroadCast(readMode,0);
1781 std::string gridPath;
1782 bool reverseData =
true;
1783 std::string geometryName;
1784 std::string geomGridName;
1785 std::string::size_type sepLoc = gridName.find_last_of(
":");
1786 if(sepLoc != std::string::npos){
1787 geometryName = gridName.substr(0,sepLoc);
1788 geomGridName = gridName.substr(sepLoc+1);
1789 gridPath = std::string(
"/PlasCom2/Geometry/")+
1790 geometryName+std::string(
"/")+geomGridName;
1792 gridPath = gridName;
1793 geomGridName = gridName;
1796 reverseData =
false;
1797 gridPath = geomGridName;
1800 gridFile.
Open(gridFileName,gridComm,
true);
1802 messageStream <<
"Reading grid from file:path=(" << gridFileName <<
"):(" 1803 << gridPath <<
") failed." << std::endl;
1806 messageStream <<
"Read grid from file:path=(" << gridFileName <<
"):(" 1807 << gridPath <<
")." << std::endl;
1815 template<
typename StateType,
typename Gr
idType>
1817 const std::string &domainName,
1820 std::ostream &messageStream)
1824 int myRank = gridComm.
Rank();
1831 std::ostringstream errStream;
1833 messageStream <<
"ERROR: FileInfo failed for " << fileName
1834 <<
".\nHDF5 messages:" 1835 << errStream.str() << std::endl;
1838 const std::bitset<pcpp::io::NUMFORMATBITS> &formatBits(gridFileInfo.
formatBits);
1840 messageStream << fileName <<
" is a legacy file." << std::endl;
1844 messageStream <<
"Error: specified file (" << fileName <<
") has " 1845 <<
"no simulation data." << std::endl;
1850 gridComm.StreamBroadCast(gridFileInfo);
1853 gridComm.BroadCast(readMode,0);
1854 bool reverseData =
true;
1856 stateFile.
Open(fileName,gridComm,
true);
1857 std::string pathToGridData;
1859 const std::string simulationPath(
"/PlasCom2/Simulation");
1860 const std::string domainPath(simulationPath+std::string(
"/")+domainName);
1863 pathToGridData = domainPath;
1865 if(!stateFile.
Exists(domainPath)){
1866 messageStream <<
"Error: HDF5 file (" << fileName <<
") has no " 1867 <<
"simulation data for domain (" << domainName <<
")." 1871 if(!stateFile.
Exists(pathToGridData)){
1872 messageStream <<
"Error: HDF5 file (" << fileName <<
") has no " 1873 <<
"path to grid data (" << pathToGridData <<
")." 1877 if(statusCode == 0){
1879 messageStream <<
"Error: Reading simulation-global attributes failed." << std::endl;
1883 if(statusCode == 0){
1885 messageStream <<
"Error: Reading domain-global attributes failed." << std::endl;
1889 if(statusCode == 0){
1891 messageStream <<
"Error: Reading grid-global attributes failed." << std::endl;
1896 reverseData =
false;
1897 pathToGridData = domainName;
1899 if(statusCode == 0) {
1904 const std::vector<size_t> &partitionSizes(partInterval.Sizes());
1905 const std::vector<size_t> &partitionStarts(partInterval.Starts());
1906 const std::vector<size_t> &partitionBufferStarts(partitionBufferInterval.Starts());
1907 const std::vector<size_t> &
bufferSizes(inGrid.BufferSizes());
1908 const std::vector<size_t> &
gridSizes(inGrid.GridSizes());
1912 stateFile,reverseData)){
1913 messageStream <<
"Error: Failed to read nodal state data attributes at path: " 1914 << pathToGridData <<
"." << std::endl;
1917 if(statusCode == 0 && readMode != 0){
1921 for(
int iDim = 0;iDim < numDim;iDim++)
int ReadHyperSlab(const std::string &inName, const std::vector< size_t > &localStart, const std::vector< size_t > &localSize, std::vector< DataType > &inDataVec)
void OpenFileTag(std::ostream &outStream)
void size_t int size_t int size_t int int int int double int int double double *void size_t int size_t int int int int int double int size_t size_t size_t double double *void size_t int size_t int size_t size_t int double int double double *void size_t size_t * bufferSize
void CloseFileTag(std::ostream &outStream)
int ReadHyperSlab(hid_t dataID, hid_t dataSpace, hid_t hyperSlab, hid_t xferProperties, int *dataBuffer)
void const size_t * numPoints
int ReadAttribute(const std::string &inName, int *inBuf)
std::ostream * messageStreamPtr
int ReadHyperSlab(hid_t dataID, hid_t dataSpace, hid_t hyperSlab, hid_t xferProperties, char *dataBuffer)
base(const std::string &inName)
std::vector< hid_t > hdfScope
void ConvertLegacyState(int numDim, size_t numPoints, StateType &inState)
void CloseGridTag(std::ostream &outStream)
void const size_t const size_t * gridSizes
int FileInfo(const std::string &hdfFileName, pcpp::io::simfileinfo &fileInfo, std::ostream &messageStream)
void RenewStream(std::ostringstream &outStream)
bool Exists(const std::string &linkName)
int WriteStateAttributes(const StateType &inState, const char attributeLocation, const std::string &filePath, base &hdfFile)
Writes state data matching attributeLocation into HDF5 attributes at filePath.
void const size_t const size_t const size_t const int const int * gridType
void SetMessageStream(std::ostream &outStream)
int FetchGridData(GridType &inGrid, const std::string &gridName, const std::string &gridFileName, std::ostream &messageStream)
void WriteSimulationFile(const std::string &h5FileName, const std::string &gridName, const std::string &gridPath, const std::string &dataPath, const GridType &inGrid, const StateType &inState)
void SetCommunicator(fixtures::CommunicatorType &inCommunicator)
int Create(const std::string &inFileName, fixtures::CommunicatorType &inComm, bool force=false)
std::bitset< NUMFORMATBITS > formatBits
int WriteGridData(const std::string &fileName, const std::string &dataName, unsigned int dataSize, const std::string &dataPath, const std::vector< size_t > &gridSize, std::ostream &outStream)
int WriteHyperSlab(const std::string &inName, const std::vector< size_t > &globalSize, const std::vector< size_t > &localStart, const std::vector< size_t > &localSize, std::vector< double > &inDataVec)
int ReadHyperSlab(const std::string &inName, const std::vector< size_t > &localStart, const std::vector< size_t > &localSize, const std::vector< size_t > &bufferStart, const std::vector< size_t > &bufferSize, DataType *readBuffer)
void const size_t const size_t const size_t const double const double * x
int WriteGrid(const GridType &inGrid, const std::string &gridName, const std::string &parentPath, base &hdfFile)
void OpenGridTag(const std::string &gridName, const std::string &gridType, double inTime, std::ostream &outStream)
std::ostringstream messageStream
int OpenGroup(const std::string &groupName)
void SetCollectiveMode(bool yesNo=true)
int FileInfo(const std::string &hdfFileName, pcpp::io::simfileinfo &fileInfo, fixtures::CommunicatorType &inComm, std::ostream &messageStream)
int ReadHyperSlab(hid_t dataID, hid_t dataSpace, hid_t hyperSlab, hid_t xferProperties, double *dataBuffer)
int PlasCom2FileInfo(pcpp::io::hdf5::base &hdf5File, simfileinfo &fileInfo, std::ostream &messageStream)
int ReadHyperSlab(const std::string &inName, const std::vector< size_t > &localStart, const std::vector< size_t > &localSize, DataType *readBuffer)
int ReadHyperSlab(hid_t dataID, hid_t dataSpace, hid_t hyperSlab, hid_t xferProperties, size_t *dataBuffer)
int ReadAttribute(const std::string &inName, std::vector< DataType > &inData)
int CreateGroup(const std::string &inName)
base(fixtures::CommunicatorType &inComm)
bool FILEEXISTS(const std::string &fname)
Main encapsulation of MPI.
int ReadStateAttributes(StateType &inState, const char attributeLocation, const std::string &filePath, base &hdfFile)
Reads state data matching attributeLocation into HDF5 attributes at filePath.
void WriteDomainFile(const std::string &h5FileName, DomainType &inDomain)
static const std::string scalarNames("scalarVars")
base(const std::string &inName, fixtures::CommunicatorType &inComm)
std::vector< hid_t > hdfAPL
fixtures::CommunicatorType * commPtr
base(const std::string &inName, bool readOnly)
void const size_t const size_t * bufferSizes
int ParallelReadBlockStructuredGrid(const std::string &gridName, const std::string &parentGroupName, GridType &gridData, configuration &hdfConfig, const std::string &hdfFileName, fixtures::CommunicatorType &gridComm, std::ostream &messageStream)
int ReadGrid(GridType &inGrid, const std::string &gridPath, base &hdfFile, bool reverseRead=true)
int WriteGridSection(const std::string &topoType, const std::string &geomType, const std::string &fileName, const std::string &gridPath, const std::vector< size_t > &gridSize, std::ostream &outStream)
int ReadHyperSlab(const std::string &inName, const std::vector< size_t > &localStart, const std::vector< size_t > &localSize, const std::vector< size_t > &bufferStart, const std::vector< size_t > &bufferSize, std::vector< DataType > &inDataVec)
int ReadGrid(hid_t parentGroupID, const configuration &hdfConfig, const std::string &gridName, GridType &gridData, fixtures::CommunicatorType &inComm, std::ostream &messageStream)
Simple Block Structured Mesh object.
int ReadStateNodeData(StateType &inState, const std::vector< size_t > &gridSizes, const std::vector< size_t > &partitionSizes, const std::vector< size_t > &partitionStarts, const std::vector< size_t > &bufferSizes, const std::vector< size_t > &partitionBufferStarts, const std::string &filePath, base &hdfFile, bool reverseRead=true)
int Open(const std::string &inFileName, fixtures::CommunicatorType &inComm, bool readOnly=false)
int ReadDataSet(const std::string &inName, std::vector< DataType > &inDataVec)
void InitSimple(const ContainerType &inSize)
void const size_t * numPointsBuffer
int CreateAttribute(const std::string &inName, const std::vector< size_t > &spaceDimensions, size_t sizeInBytes=8)
hid_t dataTransferProperties
int FetchStateData(const std::string &fileName, const std::string &domainName, GridType &inGrid, StateType &inState, std::ostream &messageStream)
int WriteStateNodeData(const StateType &inState, const std::vector< size_t > &gridSizes, const std::vector< size_t > &partitionSizes, const std::vector< size_t > &partitionStarts, const std::vector< size_t > &bufferSizes, const std::vector< size_t > &partitionBufferStarts, const std::string &filePath, base &hdfFile)