21 int myRank = testComm.
Rank();
23 std::ostringstream messageStream;
25 std::string testFileName2D(
"HDF5Examples/MultipleGrids2D.h5");
26 std::string testFileName3D_1(
"HDF5Examples/SingleGrid3D.h5");
27 std::string testFileName3D_2(
"HDF5Examples/MultipleGrids3D.h5");
29 std::vector<size_t> expectedSizes1(2,61);
30 std::vector<std::vector<size_t> > expectedSizes(2,expectedSizes1);
31 expectedSizes[1][0] = 121;
32 expectedSizes[1][1] = 40;
34 std::bitset<pcpp::io::NUMFORMATBITS> expectedFormatBits;
35 expectedFormatBits.reset();
42 bool serialgetfileinfo2 =
true;
45 std::cout <<
"pcpp::io::hdf5::FileInfo failed: " << messageStream.str()
50 if(simFileInfo.
formatBits != expectedFormatBits){
51 serialgetfileinfo2 =
false;
56 std::cout <<
"TestHDF5LegacyFileInfo::Failed!! Skipping tests." << std::endl;
62 bool parallelgetfileinfo2 =
true;
64 std::cout <<
"TestHDF5LegacyFileInfo:Error: file info wrong." << std::endl;
65 parallelgetfileinfo2 =
false;
68 for(
int iGrid = 0;iGrid < simFileInfo.
numGrids;iGrid++){
69 std::string &gridName(simFileInfo.
gridNames[iGrid]);
70 std::ostringstream expectedGridName;
71 expectedGridName <<
"Group00" << iGrid+1;
73 if(gridName != expectedGridName.str()){
74 parallelgetfileinfo2 =
false;
78 parallelgetfileinfo2 =
false;
83 if(gridSizes != expectedSizes[iGrid]){
84 parallelgetfileinfo2 =
false;
88 if(!parallelgetfileinfo2)
89 serialgetfileinfo2 =
false;
96 serialgetfileinfo2 =
CheckResult(serialgetfileinfo2,testComm);
97 parallelgetfileinfo2 =
CheckResult(parallelgetfileinfo2,testComm);
99 parallelUnitResults.
UpdateResult(
"HDF5:Serial2DFileInfo",serialgetfileinfo2);
100 parallelUnitResults.
UpdateResult(
"HDF5:Parallel2DFileInfo",parallelgetfileinfo2);
102 std::vector<size_t> expectedSizes3D1(3,21);
107 bool serialgetfileinfo3 =
true;
108 bool parallelgetfileinfo3 =
true;
111 std::cout <<
"pcpp::io::hdf5::FileInfo failed: " << messageStream.str()
113 serialgetfileinfo3 =
false;
117 if(simFileInfo.
formatBits != expectedFormatBits){
118 serialgetfileinfo2 =
false;
127 parallelgetfileinfo3 =
false;
130 std::string &gridName(simFileInfo.
gridNames[0]);
131 std::string expectedGridName(
"Group001");
133 if(gridName != expectedGridName){
134 parallelgetfileinfo3 =
false;
138 parallelgetfileinfo3 =
false;
142 for(
int iDim = 0;iDim < numgDim;iDim++){
143 if(simFileInfo.
gridSizes[0][iDim] != expectedSizes3D1[iDim]){
144 parallelgetfileinfo3 =
false;
149 if(!parallelgetfileinfo3)
150 serialgetfileinfo3 =
false;
154 serialgetfileinfo3 =
CheckResult(serialgetfileinfo3,testComm);
155 parallelgetfileinfo3 =
CheckResult(parallelgetfileinfo3,testComm);
157 parallelUnitResults.
UpdateResult(
"HDF5:Serial3DFileInfo",serialgetfileinfo3);
158 parallelUnitResults.
UpdateResult(
"HDF5:Parallel3DFileInfo",parallelgetfileinfo3);
161 std::vector<size_t> expectedSizes3D2(3,20);
162 expectedSizes3D2[0] = 41;
164 bool serialgetfileinfo32 =
true;
165 bool parallelgetfileinfo32 =
true;
187 parallelgetfileinfo32 =
false;
190 for(
int iGrid = 0;iGrid < simFileInfo.
numGrids;iGrid++){
191 std::string &gridName(simFileInfo.
gridNames[iGrid]);
192 std::ostringstream expectedGridName;
193 expectedGridName <<
"Group00" << iGrid+1;
195 if(gridName != expectedGridName.str()){
196 parallelgetfileinfo32 =
false;
200 parallelgetfileinfo32 =
false;
204 if(simFileInfo.
gridSizes[iGrid] != expectedSizes3D2){
205 parallelgetfileinfo32 =
false;
209 if(!parallelgetfileinfo32)
210 serialgetfileinfo32 =
false;
215 serialgetfileinfo32 =
CheckResult(serialgetfileinfo32,testComm);
216 parallelgetfileinfo32 =
CheckResult(parallelgetfileinfo32,testComm);
218 parallelUnitResults.
UpdateResult(
"HDF5:Multi3DFileInfo",serialgetfileinfo32);
219 parallelUnitResults.
UpdateResult(
"HDF5:ParMulti3DFileInfo",parallelgetfileinfo32);
226 std::ostringstream messageStream;
227 std::string testFileName2D(
"HDF5Examples/MultipleGrids2D.h5");
241 std::vector<int> cartNeighbors;
245 int myRank = testComm.
Rank();
246 int nProc = testComm.
Size();
255 std::cout <<
"pcpp::io::hdf5::FileInfo failed: " << messageStream.str()
260 if(testComm.
Check()){
261 std::cout <<
"TestHDF5Read2DBSGrid:ERROR!! FileInfo failed. Skipping tests." 269 int numGrids = simFileInfo.
numGrids;
270 for(
int iGrid = 0;iGrid < simFileInfo.
numGrids;iGrid++){
272 std::string &gridName(simFileInfo.
gridNames[iGrid]);
280 messageStream <<
"TestHDF5Read2DBSGrid:Global size: ";
282 messageStream << std::endl;
286 std::cout <<
"TestHDF5Read2DBSGrid:Partitioning " << std::endl;
288 std::cout <<
"TestHDF5Read2DBSGrid: Partitioning failed for grid " 289 << iGrid <<
". Skipping tests." << std::endl;
293 messageStream <<
"Partition interval: ";
294 partitionExtent.PrettyPrint(messageStream);
295 messageStream << std::endl;
304 if(pcpp::io::hdf5::ParallelReadBlockStructuredGrid<grid_t>(gridName,
"/",testGrid,hdf5Config,testFileName2D,
305 testComm,messageStream)){
306 std::cout <<
"pcpp::io::hdf5::ParallelReadBlockStructuredGrid failed: " 307 << messageStream.str() << std::endl;
318 parallelUnitResults.
UpdateResult(
"HDF5:Basic:testran",result);
325 std::cout <<
"TestPCPPHDF5Read Start!" << std::endl;
327 std::ostringstream messageStream;
328 std::string testFileName2D(
"HDF5Examples/MultipleGrids2D.h5");
331 int myRank = testComm.
Rank();
334 bool serialOpen =
true;
335 bool serialOpenGroup =
true;
336 bool serialOpenGroupFail =
false;
337 bool globalExistence =
true;
338 bool scopeExistence =
true;
339 bool readAttribute =
true;
340 bool attExists =
true;
341 bool readAttributeVec =
true;
342 bool readLegacyHeader =
true;
343 bool legacyHeaderExists =
true;
344 bool dataDims =
true;
349 if(hdf5File.
Open(testFileName2D,
true)){
352 if(!hdf5File.
Exists(
"Group001"))
353 scopeExistence =
false;
354 if(!hdf5File.
Exists(
"/Group001"))
355 globalExistence =
false;
356 if(!hdf5File.
Exists(
"Group002/X"))
357 scopeExistence =
false;
358 if(!hdf5File.
Exists(
"/Group002/X"))
359 globalExistence =
false;
368 if(groupHeaderDims.size() != 1)
370 else if (groupHeaderDims[0] != 4)
373 std::vector<size_t> coordinateDimensions1(hdf5File.
DataDimensions(
"/Group001/X"));
374 std::vector<size_t> coordinateDimensions2(hdf5File.
DataDimensions(
"/Group002/X"));
375 if(coordinateDimensions1.size() != 2 ||
376 coordinateDimensions2.size() != 2){
379 if(coordinateDimensions1[0] != 61 ||
380 coordinateDimensions1[1] != 61){
383 if(coordinateDimensions2[0] != 40 ||
384 coordinateDimensions2[1] != 121){
392 int numberOfGrids = 0;
396 readAttribute =
false;
397 if(numberOfGrids != 2)
398 readAttribute =
false;
401 double headerSpace[] = {-1,-1,-1,-1};
404 legacyHeaderExists =
false;
407 if (!readLegacyHeader) {
408 std::cout <<
"Failed to correctly read the legacy PlasComCM HEADER" << std::endl;
409 std::cout <<
"This test is written to always fail. It is currently broken on Vulcan" << std::endl;
415 if(legacyHeaderExists){
417 readAttribute =
false;
418 time = headerSpace[0];
420 readAttribute =
false;
422 readAttribute =
false;
425 std::vector<double> gridHeader(4,-1);
431 readAttribute =
false;
432 if(gridHeader[0] != 0 ||
433 gridHeader[1] != 0 ||
434 gridHeader[2] != 0 ||
436 readAttribute =
false;
443 serialOpenGroupFail =
true;
446 if(!serialOpenGroupFail)
447 serialOpenGroup =
false;
455 if(hdf5File.
Exists(
"Configuration")){
456 globalExistence =
false;
460 serialOpenGroup =
false;
462 if(!hdf5File.
Exists(
"X")){
463 scopeExistence =
false;
467 if(hdf5File.
Exists(
"Group002")){
468 scopeExistence =
false;
472 if(!hdf5File.
Exists(
"/Group002")){
473 globalExistence =
false;
483 std::cout <<
"ReadAttribute using C-style array." << std::endl;
484 std::vector<size_t> gridSize(3,0);
485 if(hdf5File.
ReadAttribute(
"/Group001/gridSize",&gridSize[0]))
486 readAttribute =
false;
487 if(gridSize[0] != 61 ||
489 readAttribute =
false;
491 std::cout <<
"ReadAttribute using STL Vector." << std::endl;
492 std::vector<size_t> testSizeVec;
494 readAttributeVec =
false;
495 if(testSizeVec.size() != 2){
496 readAttributeVec =
false;
497 }
else if(testSizeVec[0] != 61 ||
498 testSizeVec[1] != 61){
499 readAttributeVec =
false;
502 std::cout <<
"Closing HDF5 file." << std::endl;
507 bool parallelOpen =
true;
508 if(hdf5File.
Open(testFileName2D,testComm,
true)){
512 parallelOpen =
false;
516 parallelUnitResults.
UpdateResult(
"HDF5:Object:SerialOpen",serialOpen);
517 parallelUnitResults.
UpdateResult(
"HDF5:Object:SerialOpenGroup",serialOpenGroup);
518 parallelUnitResults.
UpdateResult(
"HDF5:Object:ParallelOpen",parallelOpen);
519 parallelUnitResults.
UpdateResult(
"HDF5:Object:GlobalExistence",globalExistence);
520 parallelUnitResults.
UpdateResult(
"HDF5:Object:ScopeExistence",scopeExistence);
521 parallelUnitResults.
UpdateResult(
"HDF5:Object:AttributeExists",attExists);
522 parallelUnitResults.
UpdateResult(
"HDF5:Object:DataDimensions",dataDims);
523 parallelUnitResults.
UpdateResult(
"HDF5:Object:AttributeDimensions",attDims);
524 parallelUnitResults.
UpdateResult(
"HDF5:Object:ReadAttribute",readAttribute);
525 parallelUnitResults.
UpdateResult(
"HDF5:Object:ReadAttVector",readAttributeVec);
526 parallelUnitResults.
UpdateResult(
"HDF5:Object:LegacyHeaderExists",legacyHeaderExists);
527 parallelUnitResults.
UpdateResult(
"HDF5:Object:ReadLegacyHeader",readLegacyHeader);
535 int myRank = testComm.
Rank();
537 bool groupCreate =
true;
538 bool attCreate =
true;
539 bool dataCreate =
true;
540 bool stringAttRead =
true;
541 bool readDataSetVec =
true;
542 bool dataDims =
true;
543 bool configIO =
true;
545 std::string testFunctionName(
"TestPCPPHDF5Write");
547 std::ostringstream configStream;
551 std::cout << testFunctionName
552 <<
":Error:Failed to process configuration file Config/Examples/misc/advect1d.config." << std::endl;
554 configStream << testConfig;
568 std::string configString(configStream.str());
569 if(!configString.empty())
573 std::vector<size_t> attSize2(1,1);
574 testFile.
CreateAttribute(
"/Geometry/Grids/numGrids",attSize2,&numGrids);
575 std::string gridNames(
"Grid001 Grid002");
581 std::vector<size_t> gridSize(2,2);
583 std::vector<size_t> sizeAtt(1,2);
584 testFile.
CreateAttribute(
"/Geometry/Grids/Grid001/numDim",attSize2,&numDim);
585 testFile.
CreateAttribute(
"/Geometry/Grids/Grid002/numDim",attSize2,&numDim);
586 testFile.
CreateAttribute(
"/Geometry/Grids/Grid001/gridSize",sizeAtt,&gridSize[0]);
587 testFile.
CreateAttribute(
"/Geometry/Grids/Grid002/gridSize",sizeAtt,gridSize);
589 int numGridPoints = 1;
590 for(
int iDim = 0;iDim < numDim;iDim++)
591 numGridPoints *= gridSize[iDim];
592 std::vector<double> grid1(numGridPoints,0);
593 std::vector<double> grid2(numGridPoints,0);
594 for(
int iPoint = 0;iPoint < numGridPoints;iPoint++){
595 grid1[iPoint] = iPoint;
596 grid2[iPoint] = numGridPoints + iPoint;
599 testFile.
CreateDataSet(
"/Geometry/Grids/Grid001/X",gridSize,grid1);
600 testFile.
CreateDataSet(
"/Geometry/Grids/Grid001/Y",gridSize,grid1);
601 testFile.
CreateDataSet(
"/Geometry/Grids/Grid002/X",gridSize,grid2);
602 testFile.
CreateDataSet(
"/Geometry/Grids/Grid002/Y",gridSize,grid1);
606 testFile.
Open(
"tmptest.h5",
true);
608 if(!testFile.
Exists(
"/Geometry") ||
609 !testFile.
Exists(
"/Configuration") ||
610 !testFile.
Exists(
"/Geometry/Grids") ||
611 !testFile.
Exists(
"/Geometry/Grids/Grid001") ||
612 !testFile.
Exists(
"/Geometry/Grids/Grid002") ||
613 !testFile.
Exists(
"/Domains"))
624 if(!testFile.
Exists(
"/Geometry/Grids/Grid001/X") ||
625 !testFile.
Exists(
"/Geometry/Grids/Grid002/X") ||
626 !testFile.
Exists(
"/Geometry/Grids/Grid001/Y") ||
627 !testFile.
Exists(
"/Geometry/Grids/Grid002/Y"))
630 std::string gridNamesAtt;
631 testFile.
ReadAttribute(
"/Geometry/Grids/gridNames",gridNamesAtt);
632 if(gridNamesAtt !=
"Grid001 Grid002"){
633 std::cout <<
"Read GridNames = (" << gridNamesAtt
635 stringAttRead =
false;
639 std::string configString2;
640 testFile.
ReadAttribute(
"/Configuration/Parameters",configString2);
641 std::istringstream configStream(configString2);
642 configStream >> testConfig2;
643 if(testConfig2 != testConfig){
644 std::cout <<
"======= CONFIGURATION 1 ========" << std::endl
645 << testConfig << std::endl
646 <<
"======= CONFIGURATION 2 ========" << std::endl
647 << testConfig2 << std::endl;
651 std::vector<size_t> grid1Size(testFile.
DataDimensions(
"/Geometry/Grids/Grid001/X"));
652 if(grid1Size.size() != 2)
655 if(grid1Size[0] != 3 ||
658 std::cout <<
"SIZE PROBLEM: " << grid1Size[0]
659 <<
"," << grid1Size[1] << std::endl;
662 std::vector<double> grid1XData;
663 if(testFile.
ReadDataSet(
"/Geometry/Grids/Grid001/X",grid1XData))
664 std::cout <<
"ERROR!!!" << std::endl;
665 if(grid1XData.size() != numGridPoints)
666 readDataSetVec =
false;
667 for(
int iPoint = 0;iPoint < numGridPoints;iPoint++)
668 if(grid1XData[iPoint] != iPoint)
669 readDataSetVec =
false;
673 parallelUnitResults.
UpdateResult(
"HDF5:Object:CreateGroup",groupCreate);
674 parallelUnitResults.
UpdateResult(
"HDF5:Object:CreateAttribute",attCreate);
675 parallelUnitResults.
UpdateResult(
"HDF5:Object:CreateData",dataCreate);
676 parallelUnitResults.
UpdateResult(
"HDF5:Object:ReadStringAttribute",stringAttRead);
677 parallelUnitResults.
UpdateResult(
"HDF5:Object:ReadDataVector",readDataSetVec);
678 parallelUnitResults.
UpdateResult(
"HDF5:Object:DataDims",dataDims);
679 parallelUnitResults.
UpdateResult(
"HDF5:Object:ConfigIO",configIO);
685 int myRank = testComm.
Rank();
686 std::ostringstream messageStream;
689 std::vector<size_t> dataSize(numDim,0);
700 std::vector<size_t> rdataSize(dataSize);
701 std::reverse(rdataSize.begin(),rdataSize.end());
703 size_t numGlobalPoints = 1;
709 for(
int iDim = 0;iDim < numDim;iDim++)
710 numGlobalPoints *= dataSize[iDim];
711 std::vector<double> myData(numGlobalPoints,0);
713 for(
size_t iZ = 0;iZ < dataSize[2];iZ++){
714 for(
size_t iY = 0;iY < dataSize[1];iY++){
715 for(
size_t iX = 0;iX < dataSize[0];iX++){
716 myData[iPoint++] = iX+iY*100+iZ*1000;
736 std::vector<int> cartNeighbors;
744 std::cout <<
"Global interval: ";
746 std::cout << std::endl;
750 std::cout <<
"TestHDF5HyperSlab:ERROR: Partitioning failed." << std::endl;
754 messageStream <<
"Partition interval: ";
756 messageStream << std::endl;
761 int numLocalPoints = partitionExtent.
NNodes();
762 std::vector<size_t> localStart(partitionExtent.
Starts());
763 std::vector<size_t> rlocalStart(localStart);
764 std::reverse(rlocalStart.begin(),rlocalStart.end());
765 std::vector<size_t> localSize(partitionExtent.
Sizes());
766 std::vector<size_t> rlocalSize(localSize);
767 std::reverse(rlocalSize.begin(),rlocalSize.end());
768 std::vector<double> myData;
771 testFile.
ReadHyperSlab(
"/myData",rlocalStart,rlocalSize,myData);
773 bool readHyperSlab =
true;
774 if(myData.size() != numLocalPoints){
775 readHyperSlab =
false;
778 for(
size_t iZ = partitionExtent[2].first;iZ <= partitionExtent[2].second;iZ++){
779 for(
size_t iY = partitionExtent[1].first;iY <= partitionExtent[1].second;iY++){
780 for(
size_t iX = partitionExtent[0].first;iX <= partitionExtent[0].second;iX++){
781 double expectedValue = iX + 100*iY + 1000*iZ;
782 if(myData[iLocal] != expectedValue){
783 messageStream << myRank <<
"(local,[ix,iy,iz]) = (actual,expected) : (" 784 << iLocal <<
",[" << iX <<
"," << iY <<
"," << iZ <<
"]) = (" 785 << myData[iLocal] <<
"," << expectedValue <<
")" << std::endl;
786 readHyperSlab =
false;
794 bool writeHyperSlab =
false;
796 writeHyperSlab =
true;
801 testFile.
Create(
"tmptest2.h5",testComm);
802 for(
size_t iLocal = 0;iLocal < numLocalPoints;iLocal++){
803 myData[iLocal] = -1.0*myData[iLocal];
805 testFile.
WriteHyperSlab(
"/myData",rdataSize,rlocalStart,rlocalSize,myData);
807 testFile.
Open(
"tmptest2.h5",testComm);
809 testFile.
ReadHyperSlab(
"/myData",rlocalStart,rlocalSize,myData);
812 for(
size_t iZ = partitionExtent[2].first;iZ <= partitionExtent[2].second;iZ++){
813 for(
size_t iY = partitionExtent[1].first;iY <= partitionExtent[1].second;iY++){
814 for(
size_t iX = partitionExtent[0].first;iX <= partitionExtent[0].second;iX++){
815 double expectedValue = -1.0*(iX + 100*iY + 1000*iZ);
816 if(myData[iLocal] != expectedValue){
817 messageStream << myRank <<
"(local,[ix,iy,iz]) = (actual,expected) : (" 818 << iLocal <<
",[" << iX <<
"," << iY <<
"," << iZ <<
"]) = (" 819 << myData[iLocal] <<
"," << expectedValue <<
")" << std::endl;
820 writeHyperSlab =
false;
832 parallelUnitResults.
UpdateResult(
"HDF5:Object:ReadHyperSlab",readHyperSlab);
833 parallelUnitResults.
UpdateResult(
"HDF5:Object:WriteHyperSlab",writeHyperSlab);
848 int myRank = testComm.
Rank();
849 int numProc = testComm.
Size();
851 std::ostringstream messageStream;
853 pbsgrid_t euler3dGrid;
854 state_t simulationState;
864 std::vector<int> &periodicDirs(cartInfo.
isPeriodic);
865 std::vector<double> &realGridExtent(euler3dGrid.
PhysicalExtent());
866 std::vector<size_t> &numGlobalNodes(euler3dGrid.
GridSizes());
869 realGridExtent.resize(6,0.0);
870 realGridExtent[1] = 1.0;
871 realGridExtent[3] = 1.0;
872 realGridExtent[5] = 1.0;
874 numGlobalNodes.resize(3);
875 numGlobalNodes[0] = 16;
876 numGlobalNodes[1] = 8;
877 numGlobalNodes[2] = 4;
879 decompDirs.resize(3,1);
882 periodicDirs.resize(3,1);
883 euler3dGrid.
ParallelSetup(testComm,cartInfo,3,messageStream);
887 std::vector<int> &cartCoords(gridComm.CartCoordinates());
888 std::vector<int> &cartDims(gridComm.CartDimensions());
892 std::vector<int> cartNeighbors;
893 gridComm.CartNeighbors(cartNeighbors);
903 std::vector<double> dX(3,0.0);
904 dX[0] = (realGridExtent[1] - realGridExtent[0])/(static_cast<double>(numGlobalNodes[0]-1));
905 dX[1] = (realGridExtent[3] - realGridExtent[2])/(static_cast<double>(numGlobalNodes[1]-1));
906 dX[2] = (realGridExtent[5] - realGridExtent[4])/(static_cast<double>(numGlobalNodes[2]-1));
912 size_t totalGlobalNodes = numGlobalNodes[0]*numGlobalNodes[1]*numGlobalNodes[2];
913 size_t totalGlobalCells = (numGlobalNodes[0]-1)*(numGlobalNodes[1]-1)*(numGlobalNodes[2]-1);
919 dt = std::min(dt,cfl*dy);
920 dt = std::min(dt,cfl*dz);
925 messageStream <<
"Global size: ";
927 messageStream << std::endl
928 <<
"Partition interval: ";
929 partitionExtent.PrettyPrint(messageStream);
930 messageStream << std::endl;
934 size_t numX = partitionExtent.NNodes(0);
935 size_t numY = partitionExtent.NNodes(1);
936 size_t numZ = partitionExtent.NNodes(2);
937 size_t nNodes = partitionExtent.NNodes();
938 size_t nCells = (numX-1)*(numY-1)*(numZ-1);
939 size_t xyPlane = numX*numY;
941 const std::vector<size_t> &numPartitionNodes(euler3dGrid.
PartitionSizes());
951 simulationState.
AddField(
"rho",
'n',1,8,
"mass");
952 simulationState.
AddField(
"rhoV",
'n',3,8,
"momentum");
953 simulationState.
AddField(
"rhoE",
'n',1,8,
"energy");
954 simulationState.
AddField(
"pressure",
'n',1,8,
"pressure");
955 simulationState.
AddField(
"temperature",
'n',1,8,
"temperature");
956 simulationState.
AddField(
"simTime",
's',1,8,
"s");
957 simulationState.
AddField(
"inputDT",
's',1,8,
"s");
958 simulationState.
AddField(
"inputCFL",
's',1,8,
"");
959 simulationState.
AddField(
"gamma",
's',1,8,
"");
960 simulationState.
AddField(
"refSigma",
's',1,8,
"");
964 std::vector<int> stateFieldIndices(3,0);
965 stateFieldIndices[1] = 1;
966 stateFieldIndices[2] = 2;
968 simulationState.
Create(nNodes,0);
974 std::vector<double> rhoVector;
975 std::vector<double> rhoVVector;
976 std::vector<double> rhoEVector;
977 std::vector<double> tVector;
978 std::vector<double> pVector;
979 rhoVector.reserve(nNodes);
980 rhoVVector.reserve(3*nNodes);
981 rhoEVector.reserve(nNodes);
982 tVector.reserve(nNodes);
983 pVector.reserve(nNodes);
987 double *temperatureBuffer = &tVector[0];
1003 messageStream <<
"Problem setup: " << std::endl
1004 <<
"-------------------------------" << std::endl;
1006 messageStream <<
"Sigma: " << sigma << std::endl
1007 <<
"CFL: " << cfl << std::endl
1008 <<
"DX: " << dx << std::endl
1009 <<
"DY: " << dy << std::endl
1010 <<
"DZ: " << dz << std::endl
1011 <<
"DT: " << dt << std::endl
1012 <<
"Domain: [" << realGridExtent[0] <<
"," 1013 << realGridExtent[1] <<
"] x [" << realGridExtent[2]
1014 <<
"," << realGridExtent[3] <<
"] x [" << realGridExtent[4]
1015 <<
"," << realGridExtent[5] <<
"]" << std::endl
1016 <<
"Grid Points: (" << numGlobalNodes[0]
1017 <<
"," << numGlobalNodes[1] <<
"," << numGlobalNodes[2]
1018 <<
")" << std::endl;
1020 messageStream <<
"Partition Interval: ";
1022 messageStream << std::endl
1023 <<
"-------------------------------" << std::endl << std::endl;
1036 bool writeGridTest =
true;
1038 std::vector<size_t> attSize2(1,1);
1039 int numGeometries = 1;
1040 std::string geometryNames(
"Grids");
1041 gridFile.
CreateAttribute(
"/PlasCom2/Geometry/numGeometries",attSize2,&numGeometries);
1042 gridFile.
CreateAttribute(
"/PlasCom2/Geometry/geometryNames",geometryNames);
1043 gridFile.
CreateAttribute(
"/PlasCom2/Geometry/Grids/numGrids",attSize2,&numGrids);
1044 std::string gridNames(
"Grid001 Grid002");
1045 gridFile.
CreateAttribute(
"/PlasCom2/Geometry/Grids/gridNames",gridNames);
1046 std::vector<std::string> expectedGridNames(2,
"Grids:Grid001");
1047 expectedGridNames[1] =
"Grids:Grid002";
1051 std::cout <<
"Pre-Generation Dimension: ";
1053 std::cout << std::endl;
1059 std::vector<double> expectedCoordinates(euler3dGrid.
CoordinateData());
1066 std::cout <<
"Post-Generation Dimension: ";
1068 std::cout << std::endl;
1080 std::cout <<
"pcpp::io::hdf5::FileInfo failed: " << messageStream.str()
1086 if(testComm.
Check()){
1087 std::cout <<
"TestHDF5GridIO:ERROR!! FileInfo failed. Skipping tests." << std::endl;
1092 std::ostringstream infoStreamOut;
1093 infoStreamOut << simFileInfo;
1094 messageStream <<
"SIMFILEINFO PACKED:" << std::endl
1095 <<
"(" << infoStreamOut.str() <<
")" << std::endl;
1096 std::istringstream infoStreamIn(infoStreamOut.str());
1098 infoStreamIn >> info2;
1099 messageStream <<
"SIMFILEINFO UnPACKED:" << std::endl
1100 <<
"(" << info2 <<
")" << std::endl;
1110 messageStream <<
"REmote Unpacked:" << std::endl
1111 <<
"(" << simFileInfo <<
")" << std::endl;
1119 expectedDimension.
InitSimple(numGlobalNodes);
1120 messageStream <<
"Input Grid Dimension: ";
1122 messageStream << std::endl;
1127 messageStream <<
"Unexpected number of grids: " << simFileInfo.
numGrids 1128 <<
" != 2" << std::endl;
1129 writeGridTest =
false;
1131 if(simFileInfo.
gridNames != expectedGridNames){
1132 messageStream <<
"Unpexected grid names: (";
1134 messageStream <<
") != (";
1136 messageStream <<
")" << std::endl;
1137 writeGridTest =
false;
1139 for(
int iGrid = 0;iGrid < simFileInfo.
numGrids;iGrid++){
1141 messageStream <<
"Unexpected grid numDim for grid " << iGrid
1143 <<
" != 3" << std::endl;
1144 writeGridTest =
false;
1146 if(simFileInfo.
gridSizes[iGrid] != numGlobalNodes){
1147 messageStream <<
"Unpexected grid size for grid " << iGrid
1150 messageStream <<
") != (";
1152 messageStream <<
")" << std::endl;
1153 writeGridTest =
false;
1159 writeGridTest =
CheckResult(writeGridTest,testComm);
1160 parallelUnitResults.
UpdateResult(
"HDF5:Interface:WriteGrid",writeGridTest);
1165 bool readGridTest =
true;
1168 std::vector<double> &modifyCoordinateData(euler3dGrid.
CoordinateData());
1169 std::vector<double>::iterator cdIt = modifyCoordinateData.begin();
1170 while(cdIt != modifyCoordinateData.end())
1173 gridFile.
Open(
"gridtest.h5",gridComm,
true);
1175 std::cout <<
"Reading grid from gridtest.h5 failed!" << std::endl;
1176 readGridTest =
false;
1180 std::vector<double> &readCoordinates(euler3dGrid.
CoordinateData());
1181 if(readCoordinates != expectedCoordinates){
1182 readGridTest =
false;
1183 messageStream <<
"READ UNEXPECTED COORDS: " << std::endl;
1185 messageStream << std::endl
1186 <<
"--------WHICH IS NOT EQUAL TO EXPECTED:";
1188 messageStream << std::endl;
1193 readGridTest =
CheckResult(readGridTest,testComm);
1194 parallelUnitResults.
UpdateResult(
"HDF5:Interface:ReadGrid",readGridTest);
1206 std::ostringstream messageStream;
1219 myGlobal.
Init(
"TestPBSIO",testComm);
1223 int numProc = testComm.
Size();
1224 int myRank = testComm.
Rank();
1231 std::vector<size_t> gridSize(numDim,0);
1232 std::vector<double> dX(numDim,0);
1234 size_t numGlobalNodes = 1;
1235 size_t numGlobalCells = 1;
1236 for(
int iDim = 0;iDim < numDim;iDim++){
1238 gridSize[iDim] =
static_cast<size_t>(std::pow(2.0,(numDim-iDim-1)%numDim)*25);
1239 dX[iDim] = 1.0/
static_cast<double>(gridSize[iDim]-1);
1240 numGlobalNodes *= gridSize[iDim];
1241 numGlobalCells *= (gridSize[iDim]-1);
1253 operator_t sbpOperator;
1255 int boundaryDepth = (sbpOperator.
numStencils-1)/2;
1257 pbsGrid.
ParallelSetup(testComm,pbsCartInfo,boundaryDepth,messageStream);
1259 std::vector<int> haloDepths(2*numDim,boundaryDepth);
1260 std::vector<int> boundaryDepths(2*numDim,boundaryDepth);
1264 std::vector<int> &cartCoords(pbsGridComm.CartCoordinates());
1265 std::vector<int> &cartDims(pbsGridComm.CartDimensions());
1267 std::vector<int> cartNeighbors;
1268 pbsGridComm.CartNeighbors(cartNeighbors);
1275 myGlobal.
StdOut(messageStream.str(),2);
1278 interval_t globalInterval;
1299 size_t partStartX = pbsPartInterval[0].first;
1300 size_t partEndX = pbsPartInterval[0].second;
1301 size_t partStartY = pbsPartInterval[1].first;
1302 size_t partEndY = pbsPartInterval[1].second;
1303 size_t partStartZ = pbsPartInterval[2].first;
1304 size_t partEndZ = pbsPartInterval[2].second;
1305 size_t bufferStartX = localPartitionInterval[0].first;
1306 size_t bufferEndX = localPartitionInterval[0].second;
1307 size_t bufferStartY = localPartitionInterval[1].first;
1308 size_t bufferEndY = localPartitionInterval[1].second;
1309 size_t bufferStartZ = localPartitionInterval[2].first;
1310 size_t bufferEndZ = localPartitionInterval[2].second;
1312 size_t buffRow = bufferSizes[0];
1313 size_t iPartZ,iPartY,iPartX,iBufX, iBufY, iBufZ;
1314 for(iPartZ = partStartZ, iBufZ = bufferStartZ;
1315 iPartZ <= partEndZ;iPartZ++,iBufZ++){
1316 size_t bufZ = iBufZ*buffPlane;
1317 for(iPartY = partStartY, iBufY = bufferStartY;
1318 iPartY <= partEndY;iPartY++,iBufY++){
1319 size_t bufYZ = bufZ + iBufY*buffRow;
1320 for(iPartX = partStartX, iBufX = bufferStartX;
1321 iPartX <= partEndX;iPartX++,iBufX++){
1322 size_t bufIndex = bufYZ + iBufX;
1323 gridCoordinates[bufIndex] = iPartX;
1351 bool writeGridTest =
true;
1352 std::vector<size_t> attSize2(1,1);
1354 int numGeometries = 1;
1355 std::string geometryNames(
"Grids");
1356 gridFile.
CreateAttribute(
"/PlasCom2/Geometry/numGeometries",attSize2,&numGeometries);
1357 gridFile.
CreateAttribute(
"/PlasCom2/Geometry/geometryNames",geometryNames);
1360 gridFile.
CreateAttribute(
"/PlasCom2/Geometry/Grids/numGrids",attSize2,&numGrids);
1361 std::string gridNames(
"pbsgrid");
1362 gridFile.
CreateAttribute(
"/PlasCom2/Geometry/Grids/gridNames",gridNames);
1363 std::string expectedGridNames(
"Grids:pbsgrid");
1365 std::vector<double> expectedCoordinates(pbsGrid.
CoordinateData());
1374 std::cout <<
"pcpp::io::hdf5::FileInfo failed: " << messageStream.str()
1380 if(testComm.
Check()){
1381 std::cout <<
"TestPBSGridIO:ERROR!! FileInfo failed. Skipping tests." << std::endl;
1388 std::cout <<
"Input Grid Dimension: ";
1390 std::cout << std::endl;
1394 writeGridTest =
false;
1395 if(simFileInfo.
gridNames[0] != expectedGridNames)
1396 writeGridTest =
false;
1397 for(
int iGrid = 0;iGrid < simFileInfo.
numGrids;iGrid++){
1399 writeGridTest =
false;
1400 if(simFileInfo.
gridSizes[iGrid] != gridSize)
1401 writeGridTest =
false;
1404 writeGridTest =
CheckResult(writeGridTest,testComm);
1405 parallelUnitResults.
UpdateResult(
"HDF5:Interface:WritePBSGrid",writeGridTest);
1408 bool readGridTest =
true;
1411 std::vector<double> &modifyCoordinateData(pbsGrid.
CoordinateData());
1412 std::vector<double>::iterator cdIt = modifyCoordinateData.begin();
1413 while(cdIt != modifyCoordinateData.end())
1417 gridFile.
Open(
"pbsgridtest.h5",pbsGridComm,
true);
1420 std::cout <<
"Grid Reading failed for pbsgrid(" << returnCode
1421 <<
")." << std::endl;
1422 readGridTest =
false;
1434 if(gridCoordinates != expectedCoordinates)
1435 readGridTest =
false;
1437 readGridTest =
CheckResult(readGridTest,testComm);
1438 parallelUnitResults.
UpdateResult(
"HDF5:Interface:ReadPBSGrid",readGridTest);
1440 state_t simulationState;
1446 simulationState.
AddField(
"meshScalar",
'm',1,8,
"unit2");
1447 simulationState.
AddField(
"meshVector0",
'm',3,8,
"");
1448 simulationState.
AddField(
"meshVector1",
'm',3,8,
"unit1");
1449 simulationState.
AddField(
"nodeScalar",
'n',1,8,
"unit2");
1450 simulationState.
AddField(
"nodeVector0",
'n',3,8,
"");
1451 simulationState.
AddField(
"nodeVector1",
'n',3,8,
"unit1");
1452 simulationState.
AddField(
"nodeFlag",
'n',1,4,
"");
1453 simulationState.
AddField(
"simVector0",
's',10,8,
"");
1454 simulationState.
AddField(
"simVector1",
's',2,8,
"unit1");
1455 simulationState.
AddField(
"simScalar",
's',1,8,
"unit2");
1456 simulationState.
AddField(
"simBytes",
's',10,1,
"bytes");
1457 simulationState.
AddField(
"simInts",
's',5,4,
"ints");
1461 simulationState.
SetStateFields(
"nodeScalar nodeVector0 nodeVector1");
1462 size_t numBufferNodes = pbsGrid.
BufferSize();
1463 simulationState.
Create(numBufferNodes,0);
1465 std::vector<size_t> partitionSizes(pbsPartInterval.Sizes());
1466 std::vector<size_t> partitionStarts(pbsPartInterval.Starts());
1467 std::vector<size_t> partitionBufferStarts(localPartitionInterval.Starts());
1469 testState = simulationState;
1473 size_t iNode = 1024;
1474 double meshScalar = 12.0;
1475 double simScalar = 15.0;
1476 std::vector<double> meshVector0(3,24.0);
1477 std::vector<double> meshVector1(3,1.0);
1478 std::vector<double> nodeScalar(numBufferNodes,0.0);
1479 std::vector<double> nodeVector0(3*numBufferNodes,0.0);
1480 std::vector<double> nodeVector1(3*numBufferNodes,0.0);
1481 std::vector<int> nodeFlag(numBufferNodes,0);
1482 std::vector<double> simVector0(10,10.0);
1483 std::vector<double> simVector1(2,1.0);
1484 std::vector<char> simBytes(10,
'b');
1485 std::vector<int> simInts(5,13);
1488 for(
size_t iZ = 0;iZ < partitionSizes[2];iZ++){
1489 size_t nodeZ = iZ + partitionStarts[2];
1490 size_t bufferZ = iZ + partitionBufferStarts[2];
1491 for(
size_t iY = 0;iY < partitionSizes[1];iY++){
1492 size_t nodeY = iY + partitionStarts[1];
1493 size_t bufferY = iY + partitionBufferStarts[1];
1494 for(
size_t iX = 0;iX < partitionSizes[0];iX++){
1495 size_t nodeX = iX + partitionStarts[0];
1496 size_t bufferX = iX + partitionBufferStarts[0];
1497 size_t bufferIndex = bufferZ*(bufferSizes[0]*bufferSizes[1]) +
1498 bufferY*bufferSizes[0] + bufferX;
1499 nodeScalar[bufferIndex] = 27.0;
1500 nodeVector0[bufferIndex] = 2.0;
1503 nodeVector1[bufferIndex] = (myRank+1);
1506 nodeFlag[bufferIndex] = myRank;
1512 halo_t &testHalo(pbsGrid.
Halo());
1513 int nodeDataMessageId = testHalo.CreateMessageBuffers(numComponents);
1515 testHalo.PackMessageBuffers(nodeDataMessageId,0,1,&nodeScalar[0]);
1516 testHalo.PackMessageBuffers(nodeDataMessageId,1,3,&nodeVector0[0]);
1517 testHalo.PackMessageBuffers(nodeDataMessageId,4,3,&nodeVector1[0]);
1519 testHalo.SendMessage(nodeDataMessageId,cartNeighbors,pbsGridComm);
1520 testHalo.ReceiveMessage(nodeDataMessageId,cartNeighbors,pbsGridComm);
1521 testHalo.UnPackMessageBuffers(nodeDataMessageId,0,1,&nodeScalar[0]);
1522 testHalo.UnPackMessageBuffers(nodeDataMessageId,1,3,&nodeVector0[0]);
1523 testHalo.UnPackMessageBuffers(nodeDataMessageId,4,3,&nodeVector1[0]);
1527 double tmeshScalar = 0.0;
1528 double tsimScalar = 0.0;
1529 std::vector<double> tmeshVector0(3,0.0);
1530 std::vector<double> tmeshVector1(3,0.0);
1531 std::vector<double> tnodeScalar(numBufferNodes,0.0);
1532 std::vector<double> tnodeVector0(3*numBufferNodes,0.0);
1533 std::vector<double> tnodeVector1(3*numBufferNodes,0.0);
1534 std::vector<int> tnodeFlag(numBufferNodes,0);
1535 std::vector<double> tsimVector0(10,0);
1536 std::vector<double> tsimVector1(2,0);
1537 std::vector<char> tsimBytes(10,0);
1538 std::vector<int> tsimInts(5,0);
1554 testState.SetFieldBuffer(
"meshScalar",&tmeshScalar);
1555 testState.SetFieldBuffer(
"simScalar",&tsimScalar);
1556 testState.SetFieldBuffer(
"meshVector0",&tmeshVector0[0]);
1557 testState.SetFieldBuffer(
"meshVector1",&tmeshVector1[0]);
1558 testState.SetFieldBuffer(
"nodeScalar",&tnodeScalar[0]);
1559 testState.SetFieldBuffer(
"nodeVector0",&tnodeVector0[0]);
1560 testState.SetFieldBuffer(
"nodeVector1",&tnodeVector1[0]);
1561 testState.SetFieldBuffer(
"nodeFlag",&tnodeFlag[0]);
1562 testState.SetFieldBuffer(
"simVector0",&tsimVector0[0]);
1563 testState.SetFieldBuffer(
"simVector1",&tsimVector1[0]);
1564 testState.SetFieldBuffer(
"simInts",&tsimInts[0]);
1565 testState.SetFieldBuffer(
"simBytes",&tsimBytes[0]);
1567 std::ostringstream stateMetaDataStream;
1570 std::string stateMetaDataString(stateMetaDataStream.str());
1575 if(!stateMetaDataString.empty())
1580 metaFile.
Open(
"statemetadata.h5",pbsGridComm,
true);
1581 std::string inputMetaDataString;
1582 metaFile.
ReadAttribute(
"StateMetaData",inputMetaDataString);
1583 std::istringstream stateMetaDataInStream(inputMetaDataString);
1588 bool metaDataIO =
true;
1589 std::ostringstream inputMetaDataOutStream;
1590 inputMetaData.WriteToStream(inputMetaDataOutStream);
1591 std::string inputMetaString(inputMetaDataOutStream.str());
1592 if(inputMetaData != stateMetaData){
1593 std::cout <<
"MetaData: " << inputMetaString << std::endl;
1597 parallelUnitResults.
UpdateResult(
"HDF5:Interface:StateMetaDataIO",metaDataIO);
1608 stateFile.
Open(
"statedata.h5",pbsGridComm);
1613 bool stateAttributeIO =
true;
1614 if(tsimVector0 != simVector0)
1615 stateAttributeIO =
false;
1616 if(tsimVector1 != simVector1)
1617 stateAttributeIO =
false;
1618 if(tsimScalar != simScalar)
1619 stateAttributeIO =
false;
1620 if(tsimBytes != simBytes)
1621 stateAttributeIO =
false;
1622 if(tsimInts != simInts)
1623 stateAttributeIO =
false;
1624 if(tmeshScalar != meshScalar)
1625 stateAttributeIO =
false;
1626 if(tmeshVector0 != meshVector0)
1627 stateAttributeIO =
false;
1628 if(tmeshVector1 != meshVector1)
1629 stateAttributeIO =
false;
1631 stateAttributeIO =
CheckResult(stateAttributeIO,testComm);
1632 parallelUnitResults.
UpdateResult(
"HDF5:Interface:StateAttributeIO",stateAttributeIO);
1641 bufferSizes,partitionBufferStarts,
"/MeshData",nodeFile);
1645 nodeFile.
Open(
"statenodedata.h5",pbsGridComm);
1647 bufferSizes,partitionBufferStarts,
"/MeshData",nodeFile);
1650 testHalo.PackMessageBuffers(nodeDataMessageId,0,1,&tnodeScalar[0]);
1651 testHalo.PackMessageBuffers(nodeDataMessageId,1,3,&tnodeVector0[0]);
1652 testHalo.PackMessageBuffers(nodeDataMessageId,4,3,&tnodeVector1[0]);
1654 testHalo.SendMessage(nodeDataMessageId,cartNeighbors,pbsGridComm);
1655 testHalo.ReceiveMessage(nodeDataMessageId,cartNeighbors,pbsGridComm);
1656 testHalo.UnPackMessageBuffers(nodeDataMessageId,0,1,&tnodeScalar[0]);
1657 testHalo.UnPackMessageBuffers(nodeDataMessageId,1,3,&tnodeVector0[0]);
1658 testHalo.UnPackMessageBuffers(nodeDataMessageId,4,3,&tnodeVector1[0]);
1660 bool stateNodeDataIO =
true;
1661 if(tnodeScalar != nodeScalar)
1662 stateNodeDataIO =
false;
1663 if(tnodeVector0 != nodeVector0)
1664 stateNodeDataIO =
false;
1665 if(tnodeVector1 != nodeVector1)
1666 stateNodeDataIO =
false;
1667 if(tnodeFlag != nodeFlag)
1668 stateNodeDataIO =
false;
1671 stateNodeDataIO =
CheckResult(stateNodeDataIO,testComm);
1672 parallelUnitResults.
UpdateResult(
"HDF5:Interface:StateNodeDataIO",stateNodeDataIO);
1686 std::ostringstream messageStream;
1687 bool pc2OutputTest =
true;
1700 config_t testConfig;
1701 config_t domainConfig;
1702 config_t geomConfig;
1706 myGlobal.
Init(
"TestPC2Output",testComm);
1710 int numProc = testComm.
Size();
1711 int myRank = testComm.
Rank();
1714 std::ostringstream configMessageStream;
1716 pc2OutputTest =
false;
1718 pc2OutputTest =
CheckResult(pc2OutputTest,testComm);
1720 std::cout <<
"TestPlasCom2Output:ERROR!! ProcessConfigurationFile failed. Skipping tests." 1722 parallelUnitResults.
UpdateResult(
"HDF5:Output",pc2OutputTest);
1724 std::cout <<
"Failed processing Config/Examples/misc/plascom2.test.config: " 1726 << configMessageStream.str() << std::endl <<
"Skipping remaining tests." << std::endl;
1738 std::vector<std::string> domainNames = testConfig.GetValueVector<std::string>(
"Domain:Names");
1739 std::vector<std::string> geometryNames = testConfig.GetValueVector<std::string>(
"Geometry:Names");
1741 int numDomains = domainNames.size();
1742 int numGeometries = geometryNames.size();
1744 for(
int iDomain = 0;iDomain < numDomains;iDomain++){
1745 std::string &domainName(domainNames[iDomain]);
1748 std::cout <<
"SubConfig(" << domainName <<
"):" << std::endl;
1749 std::cout << domainConfig << std::endl;
1752 int numDomainGrids = 1;
1754 std::string domainName(domainNames[0]);
1755 std::string domainGridName(domainConfig.GetValue<std::string>(
"GridNames"));
1757 for(
int iGeom = 0;iGeom < numGeometries;iGeom++){
1758 std::string &geometryName(geometryNames[iGeom]);
1761 std::cout <<
"SubConfig(" << geometryName <<
"):" << std::endl;
1762 std::cout << geomConfig << std::endl;
1765 if(geometryNames.empty()){
1766 geometryNames.push_back(
"test-geometry");
1768 std::string geometryName(geometryNames[0]);
1769 std::vector<std::string> gridNames = geomConfig.GetValueVector<std::string>(
"GridNames");
1770 if(gridNames.empty()){
1771 pc2OutputTest =
false;
1773 pc2OutputTest =
CheckResult(pc2OutputTest,testComm);
1775 std::cout <<
"TestPlasCom2Output:ERROR!! Get gridnames fails. Skipping tests." 1777 parallelUnitResults.
UpdateResult(
"HDF5:Output",pc2OutputTest);
1779 std::cout <<
"Failed reading grid names, exiting" << std::endl;
1783 std::string gridName(gridNames[0]);
1786 int numDim = gridConfig.GetValue<
double>(
"Dimension");
1787 std::vector<double> physicalExtent(gridConfig.GetValueVector<
double>(
"PhysicalExtent"));
1789 std::cout <<
"Grid Physical Extent:(";
1791 std::cout <<
")" << std::endl;
1794 std::vector<size_t>
gridSizes(gridConfig.GetValueVector<
size_t>(
"NumPoints"));
1809 int operatorOrder = domainConfig.GetValue<
int>(
"SpatialOrder");
1810 operator_t sbpOperator;
1812 int boundaryDepth = (sbpOperator.numStencils-1)/2;
1813 std::vector<int> haloDepths(2*numDim,boundaryDepth);
1819 cartInfo.
isPeriodic = domainConfig.GetValueVector<
int>(
"PeriodicDirs");
1820 testGrid.
ParallelSetup(testComm,cartInfo,boundaryDepth,messageStream);
1825 std::vector<int> &cartCoords(gridComm.CartCoordinates());
1826 std::vector<int> &cartDims(gridComm.CartDimensions());
1829 std::vector<int> cartNeighbors;
1830 gridComm.CartNeighbors(cartNeighbors);
1834 myGlobal.
StdOut(messageStream.str(),2);
1837 interval_t globalInterval;
1842 std::ostringstream gridStream;
1852 halo_t &testHalo(testGrid.
Halo());
1855 const std::vector<pcpp::IndexIntervalType> &remoteHaloBufferExtents(testHalo.RemoteHaloBufferExtents());
1856 const std::vector<pcpp::IndexIntervalType> &localHaloBufferExtents(testHalo.LocalHaloBufferExtents());
1870 std::vector<double> &dX(testGrid.
DX());
1877 pc2OutputTest =
false;
1879 pc2OutputTest =
CheckResult(pc2OutputTest,testComm);
1881 std::cout <<
"TestPlasCom2Output:ERROR!! SetupEulerState failed. Skipping tests." 1883 parallelUnitResults.
UpdateResult(
"HDF5:Output",pc2OutputTest);
1885 std::cout <<
"Failed Euler state setup, exiting" << std::endl;
1897 paramState.
AddField(
"dX",
's',3,8,
"space");
1898 paramState.
Create(numPointsBuffer,0);
1907 std::vector<double> rho(numPointsBuffer,1.0);
1908 std::vector<double> rhoV(3*numPointsBuffer,0.0);
1909 std::vector<double> rhoE(3*numPointsBuffer,1.0/(gamma-1.0));
1911 std::vector<double> dRho(numPointsBuffer,1.0);
1912 std::vector<double> dRhoV(3*numPointsBuffer,0.0);
1913 std::vector<double> dRhoE(3*numPointsBuffer,1.0/(gamma-1.0));
1915 std::vector<double> T(numPointsBuffer,0.0);
1916 std::vector<double> p(numPointsBuffer,0.0);
1917 std::vector<double>
V(3*numPointsBuffer,0.0);
1919 std::vector<double> rhom1(numPointsBuffer,0.0);
1922 simState.SetFieldBuffer(
"simTime",&t);
1923 simState.SetFieldBuffer(
"rho",&rho[0]);
1924 simState.SetFieldBuffer(
"rhoV",&rhoV[0]);
1925 simState.SetFieldBuffer(
"rhoE",&rhoE[0]);
1927 simState.SetFieldBuffer(
"pressure",&p[0]);
1928 simState.SetFieldBuffer(
"temperature",&T[0]);
1929 simState.SetFieldBuffer(
"velocity",&V[0]);
1930 simState.SetFieldBuffer(
"rhom1",&rhom1[0]);
1932 state_t rhsState(simState);
1947 if(eulerRHS.Initialize(testGrid,simState,paramState,sbpOperator)){
1948 pc2OutputTest =
false;
1951 pc2OutputTest =
CheckResult(pc2OutputTest,testComm);
1953 std::cout <<
"TestPlasCom2Output:ERROR!! Failed EulerRHS::Initialize failed. Skipping tests." 1955 parallelUnitResults.
UpdateResult(
"HDF5:Output",pc2OutputTest);
1957 std::cout <<
"Failed Euler initialization, exiting" << std::endl;
1960 if(eulerRHS.SetupRHS(testGrid,simState,rhsState)){
1961 pc2OutputTest =
false;
1963 pc2OutputTest =
CheckResult(pc2OutputTest,testComm);
1965 std::cout <<
"TestPlasCom2Output:ERROR!! Failed EulerRHS::SetupRHS failed. Skipping tests." 1967 parallelUnitResults.
UpdateResult(
"HDF5:Output",pc2OutputTest);
1969 std::cout <<
"Failed Euler RHS setup, exiting" << std::endl;
1972 std::cout <<
"TestPlasCom2Output: Getting Euler RHS" << std::endl;
1973 if(eulerRHS.RHS(0)){
1974 pc2OutputTest =
false;
1976 std::cout <<
"TestPlasCom2Output: Euler RHS returned." << std::endl;
1977 pc2OutputTest =
CheckResult(pc2OutputTest,testComm);
1979 std::cout <<
"TestPlasCom2Output:ERROR!! Failed EulerRHS::RHS failed. Skipping tests." 1981 parallelUnitResults.
UpdateResult(
"HDF5:Output",pc2OutputTest);
1983 std::cout <<
"Failed Euler RHS setup 2, exiting" << std::endl;
1998 std::ostringstream configStream;
1999 configStream << testConfig;
2000 std::string configString(configStream.str());
2002 if(!configString.empty()){
2008 pc2File.
CreateAttribute(
"/PlasCom2/Configuration/Parameters",configString);
2012 std::vector<size_t> attSize(1,1);
2013 pc2File.
CreateAttribute(
"/PlasCom2/Geometry/numGeometries",attSize,&numGeometries);
2014 pc2File.
CreateAttribute(
"/PlasCom2/Geometry/geometryNames",geometryName);
2015 std::string geomGroupName(std::string(
"/PlasCom2/Geometry/")+geometryName);
2020 std::vector<double> expectedCoordinates(testGrid.
CoordinateData());
2024 pc2File.
CreateAttribute(
"/PlasCom2/Simulation/numDomains",attSize,&numDomains);
2025 pc2File.
CreateAttribute(
"/PlasCom2/Simulation/domainNames",domainName);
2028 std::string domainGroupName(std::string(
"/PlasCom2/Simulation/")+domainName);
2030 pc2File.
CreateGroup(domainGroupName+
"/Configuration");
2031 std::ostringstream domainConfigStream;
2032 domainConfigStream << domainConfig;
2033 std::string domainConfigString(domainConfigStream.str());
2034 if(!domainConfigString.empty())
2035 pc2File.
CreateAttribute(domainGroupName+
"/Configuration/Parameters",domainConfigString);
2036 pc2File.
CreateAttribute(domainGroupName+
"/numGrids",attSize,&numDomainGrids);
2040 std::string gridGroupName(domainGroupName+
"/"+domainGridName);
2042 std::vector<size_t> partitionSizes(partInterval.Sizes());
2043 std::vector<size_t> partitionStarts(partInterval.Starts());
2044 std::vector<size_t> partitionBufferStarts(partitionBufferInterval.Starts());
2046 bufferSizes,partitionBufferStarts,gridGroupName,pc2File);
2051 pc2OutputTest =
CheckResult(pc2OutputTest,testComm);
2054 std::cout <<
"Failed PlasCom2 output, exiting" << std::endl;
2056 parallelUnitResults.
UpdateResult(
"HDF5:Output",pc2OutputTest);
2079 std::string functionName(
"TestPlasCom2Input");
2082 myGlobal.
Init(functionName,testComm);
2086 int myRank = testComm.
Rank();
2088 myGlobal.
StdOut(std::string(
"TestFunction: ")+functionName+std::string(
"\n"));
2092 ix::sys::ChDir(
"InviscidTests/AcousticPulseFarfield2D/PlasCom2/");
2096 bool processConfigurationRestart =
true;
2098 std::ostringstream messageStream;
2099 std::string configFileName(
"curvilinear.config");
2103 myGlobal.
StdOut(std::string(
"Failed to process reference configuration from curvilinear.config.\nMessages:")+
2104 messageStream.str()+std::string(
"\n"));
2105 processConfigurationRestart =
false;
2119 std::ostringstream configStream;
2120 configStream << referenceConfig;
2121 std::string configString(configStream.str());
2122 if(!configString.empty())
2123 testFile.
CreateAttribute(
"/PlasCom2/Configuration/Parameters",configString);
2130 std::string testingFileName(
"tmptest.h5");
2132 myGlobal.
StdOut(std::string(
"Could not find testing file (")+testingFileName+
2133 std::string(
").\n"));
2134 processConfigurationRestart =
false;
2137 myGlobal.
StdOut(std::string(
"Failed to process restart file (")+testingFileName+
2138 std::string(
").\nMessages:\n")+messageStream.str()+std::string(
"\n"));
2139 processConfigurationRestart =
false;
2143 if(processConfigurationRestart){
2144 if(pc2Config != referenceConfig){
2145 myGlobal.
StdOut(
"Configuration did not match reference configuration. Test failed.\n");
2146 processConfigurationRestart =
false;
2147 std::ostringstream Ostr;
2148 Ostr << pc2Config << std::endl;
2149 myGlobal.
StdOut(Ostr.str());
2153 parallelUnitResults.
UpdateResult(
"HDF5:Restart:Configuration",processConfigurationRestart);
2157 bool fileInfoStreamTest =
true;
2159 std::string restartFileName(
"accepted/PlasCom2_000001000.h5");
2163 std::ostringstream errStream;
2165 messageStream <<
"ERROR: FileInfo failed for " << restartFileName
2166 <<
".\nHDF5 messages:" 2167 << errStream.str() << std::endl;
2168 myGlobal.
StdOut(messageStream.str());
2172 std::ostringstream infoOut;
2173 infoOut <<
"Original info for " << restartFileName <<
": " << std::endl;
2175 infoOut <<
"RAW stream output for info:" << std::endl;
2176 std::ostringstream infoStream;
2177 infoStream << restartFileInfo;
2178 infoOut << infoStream.str() << std::endl
2179 <<
"------------------" << std::endl;
2180 myGlobal.
StdOut(infoOut.str());
2181 std::istringstream infoInStream(infoStream.str());
2183 infoInStream >> testInfo;
2184 std::ostringstream testStream;
2185 testStream << testInfo;
2186 if(!(testInfo == restartFileInfo)){
2188 myGlobal.
StdOut(
"File info object failed stream tests.\n");
2190 myGlobal.
StdOut(
"RAW stream output for test:\n");
2191 myGlobal.
StdOut(testStream.str()+std::string(
"\n"));
2192 myGlobal.
StdOut(
"=========\n");
2197 if(testComm.
Check()){
2199 fileInfoStreamTest =
false;
2203 parallelUnitResults.
UpdateResult(
"HDF5:Restart:FileInfoStream",fileInfoStreamTest);
2205 bool fileInfoBroadcastTest =
true;
2208 if(fileInfoStreamTest){
2210 myGlobal.
ErrOut(std::string(
"Could not find required restart file: ")+restartFileName+
2213 fileInfoBroadcastTest =
false;
2215 std::ostringstream errStream;
2221 std::cout <<
"FileInfo failed on rank " << myRank << std::endl;
2223 if(!(restartFileInfo == myFileInfo)){
2224 std::cout <<
"My file info and broadcasted one do not match." << std::endl;
2227 std::cout <<
"info broadcast succeeded on rank " << myRank << std::endl;
2229 if(testComm.
Check())
2230 fileInfoBroadcastTest =
false;
2234 if(!fileInfoBroadcastTest){
2235 std::string testResultString;
2237 std::ostringstream infoOut;
2238 infoOut <<
"Original: " << std::endl;
2240 infoOut << std::endl <<
"Broadcast version: " << std::endl;
2242 infoOut << std::endl;
2243 infoOut <<
"Original RAW stream output:" << std::endl
2244 <<
"--------" << std::endl
2245 << myFileInfo << std::endl
2246 <<
"+++++++" << std::endl
2247 <<
"BC RAW stream output: " << std::endl
2248 <<
"------" << std::endl
2249 << restartFileInfo << std::endl
2250 <<
"=======" << std::endl;
2251 testResultString = infoOut.str();
2254 myGlobal.
StdOut(testResultString);
2257 myGlobal.
StdOut(
"File info broadcast test is skipped due to earlier errors.\n");
2258 fileInfoBroadcastTest =
false;
2261 parallelUnitResults.
UpdateResult(
"HDF5:Restart:FileInfoBroadCast",fileInfoBroadcastTest);
2267 bool readLegacyBCDat =
true;
2268 const std::string bcFileName(
"PlasComCM/inputs/legacy.bc.dat");
2269 std::vector<plascom2::util::legacybc> bcData;
2271 messageStream <<
"Read of legacy bc data failed." << std::endl;
2272 myGlobal.
StdOut(messageStream.str());
2274 readLegacyBCDat =
false;
2277 std::ostringstream expectedBCDat;
2280 <<
"1 21 1 1 1 1 -1 1 -1" << std::endl
2281 <<
"1 22 -1 -1 -1 1 -1 1 -1" << std::endl
2282 <<
"1 24 2 1 -1 1 1 1 -1" << std::endl
2283 <<
"1 24 -2 1 -1 -1 -1 1 -1" << std::endl
2284 <<
"1 24 3 1 -1 1 -1 1 1" << std::endl
2285 <<
"1 24 -3 1 -1 1 -1 -1 -1" << std::endl
2286 <<
"2 21 1 1 1 1 -1 1 -1" << std::endl
2287 <<
"2 22 -1 -1 -1 1 -1 1 -1" << std::endl
2288 <<
"2 24 2 1 -1 1 1 1 -1" << std::endl
2289 <<
"2 24 -2 1 -1 -1 -1 1 -1" << std::endl
2290 <<
"2 24 3 1 -1 1 -1 1 1" << std::endl
2291 <<
"2 24 -3 1 -1 1 -1 -1 -1" << std::endl
2292 <<
"2 99 3 1 -1 1 -1 1 20" << std::endl
2293 <<
"2 99 -3 1 -1 1 -1 -20 -1" << std::endl;
2295 std::istringstream expectedBCStream(expectedBCDat.str());
2297 std::vector<plascom2::util::legacybc> expectedBCData;
2298 while(expectedBCStream >> myBcDat)
2299 expectedBCData.push_back(myBcDat);
2300 if(bcData != expectedBCData)
2301 readLegacyBCDat =
false;
2303 parallelUnitResults.
UpdateResult(
"HDF5:Restart:ReadLegacyBCDat",readLegacyBCDat);
2307 bool processLegacyConfigurationFile =
true;
2308 std::string legacyConfigFileName(
"flowpastcylinder.inp");
2311 myGlobal.
StdOut(std::string(
"Failed to process legacy configuration from ")+
2312 legacyConfigFileName+std::string(
".\nMessages:")+
2313 messageStream.str()+std::string(
"\n"));
2315 processLegacyConfigurationFile =
false;
2317 myGlobal.
StdOut(messageStream.str());
2320 myGlobal.
StdOut(std::string(
"Failed to convert legacy configuration from ")+
2321 legacyConfigFileName+std::string(
".\nMessages:")+
2322 messageStream.str()+std::string(
"\n"));
2324 processLegacyConfigurationFile =
false;
2326 messageStream << legacyConfig << std::endl;
2327 myGlobal.
StdOut(messageStream.str());
2330 parallelUnitResults.
UpdateResult(
"HDF5:Restart:ProcessLegacyConfig",processLegacyConfigurationFile);
2334 bool fetchGridData =
true;
2335 restartFileName.assign(
"HDF5Examples/example_pc2_singlegrid.h5");
2338 myGlobal.
ErrOut(messageStream.str()+std::string(
"\n"));
2339 myGlobal.
ErrOut(std::string(
"Processing configuration from restart file (")+
2340 restartFileName+std::string(
") failed.\n"));
2343 if(testComm.
Check())
2347 bool parallelFileInfo =
true;
2352 if(singleGridFileInfo.
numGrids != 1)
2353 parallelFileInfo =
false;
2354 const std::string &gridName(singleGridFileInfo.
gridNames[0]);
2355 if(gridName !=
"box:grid3")
2356 parallelFileInfo =
false;
2357 std::vector<size_t> expectedGridSizes(2,101);
2358 if(singleGridFileInfo.
gridSizes[0] != expectedGridSizes)
2359 parallelFileInfo =
false;
2361 parallelFileInfo =
CheckResult(parallelFileInfo,testComm);
2363 parallelUnitResults.
UpdateResult(
"HDF5:Restart:ParallelFileInfo",parallelFileInfo);
2368 int numDim = gridSizes.size();
2377 size_t numGlobalNodes = 1;
2378 size_t numGlobalCells = 1;
2379 for(
int iDim = 0;iDim < numDim;iDim++){
2380 numGlobalNodes *= gridSizes[iDim];
2381 numGlobalCells *= (gridSizes[iDim]-1);
2385 messageStream <<
"Setting up grid with sizes: (";
2387 messageStream <<
")" << std::endl;
2388 myGlobal.
StdOut(messageStream.str());
2393 messageStream <<
"====== Grid Parallel Setup ========= " << std::endl;
2394 if(testGrid.
ParallelSetup(testComm,cartInfo,haloDepth,messageStream)){
2395 myGlobal.
ErrOut(
"Grid::ParallelSetup failed with messages:\n");
2396 myGlobal.
ErrOut(messageStream.str());
2400 messageStream <<
"==================================== " << std::endl;
2403 messageStream <<
"------- Grid & Topo Report --------- " << std::endl;
2406 <<
"------------------------------------ " << std::endl;
2407 myGlobal.
StdOut(messageStream.str());
2412 myGlobal.
ErrOut(std::string(
"Fetch grid data failed:\n")+messageStream.str()+std::string(
"\n"));
2415 myGlobal.
StdOut(std::string(
"Read grid data for (")+gridName+
2416 std::string(
") from ")+restartFileName+std::string(
".\n"),2);
2417 myGlobal.
StdOut(messageStream.str(),2);
2420 if(testComm.
Check())
2421 fetchGridData =
false;
2423 parallelUnitResults.
UpdateResult(
"HDF5:Restart:FetchSingleGrid:PC2",fetchGridData);
2428 bool fetchMultipleGridData =
true;
2429 restartFileName.assign(
"HDF5Examples/example_pc2_multiplegrids.h5");
2432 testComm,messageStream)){
2433 myGlobal.
ErrOut(messageStream.str()+std::string(
"\n"));
2434 myGlobal.
ErrOut(std::string(
"Processing configuration from restart file (")+
2435 restartFileName+std::string(
") failed.\n"));
2438 if(testComm.
Check())
2441 bool parallelFileInfo =
true;
2446 int numGrids = multipleGridFileInfo.
numGrids;
2448 parallelFileInfo =
false;
2450 const std::vector<std::string> &gridNames(multipleGridFileInfo.
gridNames);
2451 if(gridNames[0] !=
"box:grid3" ||
2452 gridNames[1] !=
"box:grid4")
2453 parallelFileInfo =
false;
2456 const std::vector<std::string> &gridNames(multipleGridFileInfo.
gridNames);
2457 std::vector<size_t> expectedGridSizes(2,101);
2459 for(
int iGrid = 0;iGrid < numGrids;iGrid++)
2460 if(multipleGridFileInfo.
gridSizes[iGrid] != expectedGridSizes)
2461 parallelFileInfo =
false;
2463 parallelFileInfo =
CheckResult(parallelFileInfo,testComm);
2465 parallelUnitResults.
UpdateResult(
"HDF5:Restart:MultipleGridFileInfo",parallelFileInfo);
2467 for(
int iGrid = 0;iGrid < numGrids;iGrid++){
2470 const std::string &gridName(gridNames[iGrid]);
2471 std::ostringstream Ostr;
2472 Ostr << gridName <<
":NumPoints";
2474 int numDim = gridSizes.size();
2483 size_t numGlobalNodes = 1;
2484 size_t numGlobalCells = 1;
2485 for(
int iDim = 0;iDim < numDim;iDim++){
2486 numGlobalNodes *= gridSizes[iDim];
2487 numGlobalCells *= (gridSizes[iDim]-1);
2491 messageStream <<
"Setting up grid with sizes: (";
2493 messageStream <<
")" << std::endl;
2494 myGlobal.
StdOut(messageStream.str());
2499 messageStream <<
"====== Grid Parallel Setup ========= " << std::endl;
2500 if(testGrid.
ParallelSetup(testComm,cartInfo,haloDepth,messageStream)){
2501 myGlobal.
ErrOut(
"Grid::ParallelSetup failed with messages:\n");
2502 myGlobal.
ErrOut(messageStream.str());
2506 messageStream <<
"==================================== " << std::endl;
2509 messageStream <<
"------- Grid & Topo Report --------- " << std::endl;
2512 <<
"------------------------------------ " << std::endl;
2513 myGlobal.
StdOut(messageStream.str());
2518 myGlobal.
ErrOut(std::string(
"Fetch grid data failed:\n")+messageStream.str()+std::string(
"\n"));
2521 myGlobal.
StdOut(std::string(
"Read grid data for (")+gridName+
2522 std::string(
") from ")+restartFileName+std::string(
".\n"),2);
2523 myGlobal.
StdOut(messageStream.str(),2);
2526 if(testComm.
Check())
2527 fetchMultipleGridData =
false;
2529 parallelUnitResults.
UpdateResult(
"HDF5:Restart:FetchMultipleGrids:PC2",fetchMultipleGridData);
std::vector< int > cartDecompDirections
simulation::state::base state_t
void SimFileInfo(std::ostream &outStream, const pcpp::io::simfileinfo &simFileInfo)
int ExchangeCoordinates()
int Remove(const std::string &fname)
virtual int ErrOut(const std::string &outstr)
int ReadAttribute(const std::string &inName, int *inBuf)
int SetStateFields(const std::vector< int > &inFieldIndices)
const std::vector< size_t > & PartitionSizes() const
int CartNeighbors(std::vector< int > &neighborRanks)
int ReadLegacyBCDat(const std::string &bcFileName, std::vector< legacybc > &bcDat, fixtures::CommunicatorType &inCommunicator, std::ostream &messageStream)
std::vector< size_t > DataDimensions(const std::string &inName)
void const size_t const size_t const size_t const int const int const double const double const double * rhoVBuffer
plascom2::operators::sbp::base operator_t
virtual bool Profiling()
Get profiling state.
int ProcessConfigurationFile(const std::string &configFileName, pcpp::ConfigType &plascomConfig, pcpp::CommunicatorType &globalCommunicator, std::ostream &messageStream)
Populate a configuration object from file in parallel.
const std::vector< double > & DX() const
pcpp::IndexIntervalType & PartitionInterval()
int GenerateCoordinates(std::ostream &)
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 CheckResult(bool &localResult, pcpp::CommunicatorType &testComm)
int ChDir(const std::string &path)
bool Exists(const std::string &linkName)
void TestPlasCom2Input(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
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 TestHDF5LegacyFileInfo(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
pcpp::CommunicatorType comm_t
void CartesianSetup(std::ostream &outStream, const std::vector< int > &cartCoords, const std::vector< int > &cartDims)
virtual size_t Create(size_t number_of_nodes=0, size_t number_of_cells=0)
int ProcessConfigurationRestart(const std::string &restartFileName, pcpp::ConfigType &inConfig, pcpp::CommunicatorType &configCommunicator, std::ostream &messageStream)
Populate a configuration object from an HDF5 restart file.
int FetchGridData(GridType &inGrid, const std::string &gridName, const std::string &gridFileName, std::ostream &messageStream)
pcpp::IndexIntervalType interval_t
int SetupEulerState(const GridType &inGrid, StateType &inState, StateType &inParams, int numScalars, bool withFluxes=false)
void SetGridSizes(const std::vector< size_t > &inSize)
int Create(const std::string &inFileName, fixtures::CommunicatorType &inComm, bool force=false)
pcpp::ParallelGlobalType global_t
std::vector< int > gridNumDimensions
virtual int Init(const std::string &name, CommunicatorType &incomm)
std::bitset< NUMFORMATBITS > formatBits
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 WriteGrid(const GridType &inGrid, const std::string &gridName, const std::string &parentPath, base &hdfFile)
const std::vector< size_t > & BufferSizes() const
void TestPCPPHDF5Write(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
int OpenGroup(const std::string &groupName)
Encapsulating class for collections of test results.
bool AttributeExists(const std::string &inName)
simulation::domain::base< grid_t, state_t > domain_t
void const size_t const size_t const size_t const int const int const double const double const double const double * rhoEBuffer
std::vector< int > isPeriodic
std::vector< size_t > Starts() const
void TestHDF5PBSGridIO(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
void Everyone(const std::string &outString, std::ostream &outStream, fixtures::CommunicatorType &comm)
int ReadHyperSlab(hid_t dataID, hid_t dataSpace, hid_t hyperSlab, hid_t xferProperties, double *dataBuffer)
pcpp::IndexIntervalType & PartitionBufferInterval()
const std::vector< size_t > & GridSizes() const
void const size_t const size_t const size_t const int const int const double const double const double const double const double const double * pressureBuffer
int Check(comm::Ops op=comm::MAXOP)
void SetGridSpacings(const std::vector< double > &inSpacing)
virtual int StdOut(const std::string &outstr, unsigned char inlev=1)
std::vector< std::vector< size_t > > gridSizes
int CreateGroup(const std::string &inName)
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 TestHDF5HyperSlab(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
std::string Grid(const GridType &inGrid)
Testing constructs for unit testing.
void TestHDF5Read2DBlockStructuredGrid(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
Encapsulation for a collection of operator stencils.
std::vector< std::string > GetValueVector(const std::string &key) const
int ConvertLegacyConfiguration(fixtures::ConfigurationType &inConfig, fixtures::CommunicatorType &inCommunicator, std::ostream &messageStream)
int PartitionCartesianExtent(const pcpp::IndexIntervalType &globalExtent, const std::vector< int > &cartDims, const std::vector< int > &cartCoords, pcpp::IndexIntervalType &partExtent, std::ostream &messageStream)
Get local sub-interval of an n-dimensional integer interval.
int ParallelSetup(fixtures::CommunicatorType &inComm, pcpp::ParallelTopologyInfoType &cartInfo, int haloDepth, std::ostream &messageStream)
Perform cartesian communicator initialization for a grid.
void const size_t const size_t * bufferSizes
void TestPCPPHDF5Read(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
int CreateDataSet(const std::string &inName, const std::vector< size_t > &spaceDimensions, size_t sizeInBytes=8)
void const size_t const size_t const size_t const int const double * V
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 size_t * bufferInterval
void UpdateResult(const std::string &name, const ValueType &result)
Updates an existing test result.
const std::vector< double > & PhysicalExtent() const
std::vector< double > & CoordinateData()
void TestHDF5GridIO(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
std::ostream & PrettyPrint(std::ostream &outStream) const
int SetupCartesianTopology(pcpp::CommunicatorType ¶llelCommunicator, pcpp::ParallelTopologyInfoType &topologyInfo, pcpp::CommunicatorType &topoCommunicator, std::ostream &messageStream)
Sets up a communicator with Cartesian topology.
int numStencils
The number of stencils (e.g. interior + boundary)
void AllocateCoordinateData()
virtual int Finalize()
Finalizes the global object, and it's profiler object.
std::vector< size_t > Sizes() const
void SetVerbLevel(unsigned char l)
simulation::grid::parallel_blockstructured pbsgrid_t
int ReadGrid(hid_t parentGroupID, const configuration &hdfConfig, const std::string &gridName, GridType &gridData, fixtures::CommunicatorType &inComm, std::ostream &messageStream)
int Initialize(base &stencilSet, int interiorOrder)
Initialize the sbp::base stencilset with the SBP operator of given order.
std::vector< size_t > AttributeDimensions(const std::string &inName)
void const size_t const size_t const size_t const int const int const double const double * rhoBuffer
simulation::grid::halo halo_t
pcpp::ConfigType GetSubConfig(const std::string &configName, const pcpp::ConfigType &plascomConfig)
Simple Block Structured Mesh object.
void AddField(const std::string &name, char loc, unsigned int ncomp, unsigned int dsize, const std::string &unit)
fixtures::CommunicatorType & Communicator() const
void size_t int * numComponents
simulation::grid::parallel_blockstructured grid_t
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)
std::vector< std::string > gridNames
Full grid names (geometryName:gridName)
int Open(const std::string &inFileName, fixtures::CommunicatorType &inComm, bool readOnly=false)
void SetFieldBuffer(const std::string &name, void *buf)
int StreamBroadCast(DataType &inData, int root_rank=0)
void TestPlasCom2Output(ix::test::results ¶llelUnitResults, pcpp::CommunicatorType &testComm)
int Finalize(bool allocateCoordinateData=false)
std::vector< int > & CartDimensions()
void InitSimple(const ContainerType &inSize)
size_t BufferSize() const
void const size_t * numPointsBuffer
int CreateAttribute(const std::string &inName, const std::vector< size_t > &spaceDimensions, size_t sizeInBytes=8)
int BroadCast(std::string &sval, int root_rank=0)
std::vector< int > & CartCoordinates()
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)
int ReadDataSet(const std::string &inName, int *inBuf)