15 std::ostream& infoStream)
19 infoStream <<
"Grids in two files do not have the same size." << std::endl;
23 infoStream <<
"Warning: grid presence is not consistent between files." << std::endl;
25 infoStream <<
"Warning: state presence is not consistent between files." << std::endl;
32 std::ostringstream Ostr;
33 Ostr << std::setfill(
'0') << std::setw(9) << inStep;
51 void Everyone(
const std::string &outString,std::ostream &outStream,
54 int myRank = comm.
Rank();
55 int numProc = comm.
Size();
57 for(
int iRank = 0;iRank < numProc;iRank++){
59 outStream << outString << std::endl;
66 std::vector<std::string> hdfFileExtensions;
67 hdfFileExtensions.push_back(
"h5");
68 hdfFileExtensions.push_back(
"hdf5");
69 hdfFileExtensions.push_back(
"he5");
70 hdfFileExtensions.push_back(
"hdf");
74 bool FileType(
const std::string &inFileName,
const std::string &fileType)
79 std::string::size_type lastDot = inFileName.find_last_of(
".");
80 if(lastDot == std::string::npos)
82 std::string fileExtension(inFileName.substr(lastDot+1));
84 std::vector<std::string>::iterator extensionsIt = fileTypeExtensions.begin();
85 while(extensionsIt != fileTypeExtensions.end()){
86 if(fileExtension == *extensionsIt++)
114 for(
int iGrid = 0;iGrid < numGrids;iGrid++){
124 for(
int iGeom = 0;iGeom < numGeom;iGeom++){
130 const std::vector<std::vector<size_t> > &lgridSizes(lhs.
geometryGridSizes[iGeom]);
131 const std::vector<std::vector<size_t> > &rgridSizes(rhs.
geometryGridSizes[iGeom]);
132 if(lgridSizes.size() != rgridSizes.size())
134 for(
int iGeomGrid = 0;iGeomGrid < numGeomGrids;iGeomGrid++)
135 if(lgridSizes[iGeomGrid] != rgridSizes[iGeomGrid])
147 for(
int iDomain = 0;iDomain < numDomains;iDomain++){
155 for(
int iGrid = 0;iGrid < numDomainGrids;iGrid++){
171 inStream >> numGrids;
174 int numGeometries = 0;
175 inStream >> numGeometries;
179 inStream >> numDomains;
186 inStream >> numAuxVars;
197 int numLegacyHeader = 0;
198 inStream >> numLegacyHeader;
200 for(
int iLeg = 0;iLeg < numLegacyHeader;iLeg++)
203 int paramDictSize = 0;
204 int stateDictSize = 0;
206 inStream >> paramDictSize;
207 if(paramDictSize > 0){
211 inStream >> stateDictSize;
212 if(stateDictSize > 0)
215 std::vector<std::string> &gridNames(fileInfo.
gridNames);
217 std::vector<std::string> &geometryNames(fileInfo.
geometryNames);
218 std::vector<std::vector<std::string> > &geometryGridNames(fileInfo.
geometryGridNames);
219 std::vector<std::vector<std::vector<size_t> > > &geometryGridSizes(fileInfo.
geometryGridSizes);
222 gridNames.resize(numGrids);
223 gridNumDimensions.resize(numGrids);
226 for(
int iGrid = 0;iGrid < numGrids;iGrid++){
228 inStream >> gridNames[iGrid];
231 gridNumDimensions[iGrid] = numDim;
232 std::vector<size_t> mySize;
234 mySize.resize(numDim,0);
235 for(
int iDim = 0;iDim < numDim;iDim++){
236 inStream >> mySize[iDim];
241 std::string &gridName(gridNames[iGrid]);
242 if(gridName ==
"[NULL]"){
247 if(geometryNames.size() != numGeometries)
248 geometryNames.resize(numGeometries);
249 if(geometryGridNames.size() != numGeometries)
250 geometryGridNames.resize(numGeometries);
251 if(geometryGridSizes.size() != numGeometries)
252 geometryGridSizes.resize(numGeometries);
254 for(
int iGeom = 0;iGeom < numGeometries;iGeom++){
255 inStream >> geometryNames[iGeom];
256 if(geometryNames[iGeom] ==
"[NULL]")
257 geometryNames[iGeom].erase();
259 inStream >> numGeomGrid;
260 std::vector<std::string> &geomGridNames(geometryGridNames[iGeom]);
261 std::vector<std::vector<size_t> > &geomGridSizes(geometryGridSizes[iGeom]);
262 geomGridNames.resize(numGeomGrid);
263 geomGridSizes.resize(numGeomGrid);
264 for(
int iGeomGrid = 0;iGeomGrid < numGeomGrid;iGeomGrid++){
265 int geomGridDimension = 0;
266 std::string geomGridName;
267 std::vector<size_t> &geomGridSize(geomGridSizes[iGeomGrid]);
268 inStream >> geomGridName >> geomGridDimension;
269 if(geomGridName !=
"[NULL]")
270 geomGridNames[iGeomGrid] = geomGridName;
271 for(
int iDim = 0;iDim < geomGridDimension;iDim++){
274 geomGridSize.push_back(dimSize);
279 std::vector<std::string> &domainNames(fileInfo.
domainNames);
281 inStream >> numDomains;
283 domainNames.resize(numDomains);
284 for(
int iDomain = 0;iDomain < numDomains;iDomain++)
285 inStream >> domainNames[iDomain];
289 std::vector<std::vector<std::string> > &domainGridNames(fileInfo.
domainGridNames);
290 int numDomainGridNames = 0;
291 inStream >> numDomainGridNames;
292 if(numDomainGridNames >= 0){
293 domainGridNames.resize(numDomainGridNames);
294 for(
int iDomain = 0;iDomain < numDomainGridNames;iDomain++){
295 std::vector<std::string> &domGridNames(domainGridNames[iDomain]);
296 int numGridNames = 0;
297 inStream >> numGridNames;
298 if(numGridNames > 0){
299 domGridNames.resize(numGridNames);
300 for(
int iName = 0;iName < numGridNames;iName++)
301 inStream >> domGridNames[iName];
306 std::vector<std::vector<std::string> > &domainGridPaths(fileInfo.
domainGridPaths);
307 int numDomainGridPaths = 0;
308 inStream >> numDomainGridPaths;
309 if(numDomainGridPaths >= 0){
310 domainGridPaths.resize(numDomainGridPaths);
311 for(
int iDomain = 0;iDomain < numDomainGridPaths;iDomain++){
312 std::vector<std::string> &domGridPaths(domainGridPaths[iDomain]);
313 int numGridPaths = 0;
314 inStream >> numGridPaths;
315 if(numGridPaths > 0){
316 domGridPaths.resize(numGridPaths);
317 for(
int iPath = 0;iPath < numGridPaths;iPath++)
318 inStream >> domGridPaths[iPath];
324 int numDomainParamDict = 0;
325 inStream >> numDomainParamDict;
326 if(numDomainParamDict >= 0){
327 domainParamDictionaries.resize(numDomainParamDict);
328 for(
int iDict = 0;iDict < numDomainParamDict;iDict++){
330 int dictionarySize = 0;
331 inStream >> dictionarySize;
332 if(dictionarySize > 0){
333 inStream >> paramDict;
339 int numDomainStateDict = 0;
340 inStream >> numDomainStateDict;
341 if(numDomainStateDict >= 0){
342 domainStateDictionaries.resize(numDomainStateDict);
343 for(
int iDict = 0;iDict < numDomainStateDict;iDict++){
345 int dictionarySize = 0;
346 inStream >> dictionarySize;
347 if(dictionarySize > 0){
348 inStream >> stateDict;
361 std::string fileName(fileInfo.
fileName);
365 outStream << fileName <<
" ";
367 const std::bitset<NUMFORMATBITS> &formatBits(fileInfo.
formatBits);
368 outStream << formatBits <<
" ";
371 outStream << numGrids <<
" ";
377 outStream << numGeometries <<
" ";
380 outStream << numDomains <<
" ";
383 outStream << numAuxVar <<
" ";
385 int simStep = fileInfo.
simStep;
386 outStream << simStep <<
" ";
388 double simTime = fileInfo.
simTime;
389 outStream << simTime <<
" ";
392 outStream << numLegacyHeader <<
" ";
393 for(
int iLeg = 0;iLeg < numLegacyHeader;iLeg++)
397 outStream << paramDictSize <<
" ";
398 if(paramDictSize > 0){
402 outStream << stateDictSize <<
" ";
403 if(stateDictSize > 0){
407 std::vector<std::string> gridNames(fileInfo.
gridNames);
408 if(gridNames.size() != numGrids){
409 gridNames.resize(numGrids,
"[NULL]");
413 if(gridNumDim.size() != numGrids){
414 gridNumDim.resize(numGrids,0);
418 if(gridSizes.size() != numGrids){
419 std::vector<size_t> gSize(3,0);
420 gridSizes.resize(numGrids,gSize);
423 for(
int iGrid = 0;iGrid < numGrids;iGrid++){
424 outStream << gridNames[iGrid] <<
" " 425 << gridNumDim[iGrid] <<
" ";
426 std::vector<size_t> &gridSize(gridSizes[iGrid]);
427 for(
int iDim = 0;iDim < gridNumDim[iGrid];iDim++){
428 outStream << gridSize[iDim] <<
" ";
432 std::vector<std::string> geometryNames(fileInfo.
geometryNames);
433 std::vector<std::vector<std::string> > geometryGridNames(fileInfo.
geometryGridNames);
434 std::vector<std::vector<std::vector<size_t> > > geometryGridSizes(fileInfo.
geometryGridSizes);
436 if(geometryNames.size() != numGeometries)
437 geometryNames.resize(numGeometries,
"[NULL]");
438 if(geometryGridNames.size() != numGeometries)
439 geometryGridNames.resize(numGeometries);
440 if(geometryGridSizes.size() != numGeometries)
441 geometryGridSizes.resize(numGeometries);
443 for(
int iGeom = 0;iGeom < numGeometries;iGeom++){
444 outStream << geometryNames[iGeom] <<
" ";
445 int numGeomGrid = geometryGridNames[iGeom].size();
446 outStream << numGeomGrid <<
" ";
447 std::vector<std::string> &geomGridNames(geometryGridNames[iGeom]);
448 if(geomGridNames.size() != numGeomGrid)
449 geomGridNames.resize(numGeomGrid,
"[NULL]");
450 std::vector<std::vector<size_t> > &geomGridSizes(geometryGridSizes[iGeom]);
451 if(geomGridSizes.size() != numGeomGrid)
452 geomGridSizes.resize(numGeomGrid);
453 for(
int iGeomGrid = 0;iGeomGrid < numGeomGrid;iGeomGrid++){
454 int geomGridDimension = geomGridSizes[iGeomGrid].size();
455 outStream << geomGridNames[iGeomGrid] <<
" " << geomGridDimension <<
" ";
456 for(
int iDim = 0;iDim < geomGridDimension;iDim++)
457 outStream << geomGridSizes[iGeomGrid][iDim] <<
" ";
461 const std::vector<std::string> &domainNames(fileInfo.
domainNames);
462 numDomains = domainNames.size();
463 outStream << numDomains <<
" ";
465 std::vector<std::string>::const_iterator dnIt = domainNames.begin();
466 while(dnIt != domainNames.end()){
467 outStream << *dnIt++ <<
" ";
471 const std::vector<std::vector<std::string> > &domainGridNames(fileInfo.
domainGridNames);
472 int numDomainGridNames = domainGridNames.size();
473 outStream << numDomainGridNames <<
" ";
474 if(numDomainGridNames > 0){
475 for(
int iDomain = 0;iDomain < numDomainGridNames;iDomain++){
476 const std::vector<std::string> &domGridNames(domainGridNames[iDomain]);
477 int numGridNames = domGridNames.size();
478 outStream << numGridNames <<
" ";
479 if(numGridNames > 0){
480 std::vector<std::string>::const_iterator dnIt = domGridNames.begin();
481 while(dnIt != domGridNames.end()){
482 outStream << *dnIt++ <<
" ";
488 const std::vector<std::vector<std::string> > &domainGridPaths(fileInfo.
domainGridPaths);
489 int numDomainGridPaths = domainGridPaths.size();
490 outStream << numDomainGridPaths <<
" ";
491 if(numDomainGridPaths > 0){
492 for(
int iDomain = 0;iDomain < numDomainGridPaths;iDomain++){
493 const std::vector<std::string> &domGridPaths(domainGridPaths[iDomain]);
494 int numGridPaths = domGridPaths.size();
495 outStream << numGridPaths <<
" ";
496 if(numGridPaths > 0){
497 std::vector<std::string>::const_iterator dnIt = domGridPaths.begin();
498 while(dnIt != domGridPaths.end()){
499 outStream << *dnIt++ <<
" ";
506 int numDomainParamDict = domainParamDictionaries.size();
507 outStream << numDomainParamDict <<
" ";
508 if(numDomainParamDict > 0){
509 for(
int iDict = 0;iDict < numDomainParamDict;iDict++){
511 int dictionarySize = paramDict.size();
512 outStream << dictionarySize <<
" ";
513 if(dictionarySize > 0){
514 outStream << std::endl << paramDict;
520 int numDomainStateDict = domainStateDictionaries.size();
521 outStream << numDomainStateDict <<
" ";
522 if(numDomainStateDict > 0){
523 for(
int iDict = 0;iDict < numDomainStateDict;iDict++){
525 int dictionarySize = stateDict.size();
526 outStream << dictionarySize <<
" ";
527 if(dictionarySize > 0){
528 outStream << std::endl << stateDict;
std::vector< pcpp::field::metadataset > domainStateDictionaries
std::ostream & operator<<(std::ostream &, const simfileinfo &)
std::string StepStamp(size_t inStep)
bool operator==(const pcpp::io::simfileinfo &, const pcpp::io::simfileinfo &)
bool Compatible(const pcpp::io::simfileinfo &fileInfo1, const pcpp::io::simfileinfo &fileInfo2, std::ostream &infoStream)
std::istream & operator>>(std::istream &, simfileinfo &)
std::vector< std::vector< std::string > > geometryGridNames
Grid names for each geometry.
pcpp::field::metadataset simulationParamDictionary
Dictionaries summarizing the attribute and datatsets in the file.
void const size_t const size_t * gridSizes
std::vector< std::vector< std::string > > domainGridPaths
Path to grid data (including file name, geometry and grid names)
std::vector< int > gridNumDimensions
std::bitset< NUMFORMATBITS > formatBits
void Everyone(const std::string &outString, std::ostream &outStream, fixtures::CommunicatorType &comm)
std::vector< std::vector< size_t > > gridSizes
Main encapsulation of MPI.
void InitializeFileTypes()
bool FileType(const std::string &inFileName, const std::string &fileType)
pcpp::field::metadataset simulationStateDictionary
std::vector< double > legacyHeader
Time Re Pr from PlasComCM.
std::vector< std::vector< std::string > > domainGridNames
Domain-specific grid names for which there is data.
std::vector< std::string > geometryNames
Names of all geometries in file.
std::vector< std::string > gridNames
Full grid names (geometryName:gridName)
std::vector< std::vector< std::vector< size_t > > > geometryGridSizes
Sizes for each geometry grid.
static std::map< std::string, std::vector< std::string > > fileTypeExtensions
std::vector< pcpp::field::metadataset > domainParamDictionaries
std::vector< std::string > domainNames