PlasCom2  1.0
XPACC Multi-physics simluation application
PCPPReport.C
Go to the documentation of this file.
1 #include "PCPPReport.H"
2 
3 namespace pcpp {
4  namespace report {
5 
6  void SimFileInfo(std::ostream &outStream,
7  const pcpp::io::simfileinfo &simFileInfo)
8  {
9  std::string fileName(simFileInfo.fileName);
10  const std::bitset<pcpp::io::NUMFORMATBITS> &formatBits(simFileInfo.formatBits);
11  bool legacyFile = false;
12 
13  if(fileName.empty())
14  fileName = "[NULL]";
15  outStream << "---------------------------" << std::endl
16  << "XPACC File Information:" << std::endl
17  << "FileName = " << fileName << std::endl
18  << "Format = ";
19  if(formatBits.test(pcpp::io::ISLEGACY)){
20  outStream << "Legacy" << std::endl;
21  legacyFile = true;
22  outStream << "SimStep = " << simFileInfo.simStep << std::endl
23  << "SimTime = " << simFileInfo.simTime << std::endl
24  << "GridData = "
25  << (formatBits.test(pcpp::io::HASGRID) ?
26  "Yes" : "No") << std::endl
27  << "IBlankData = "
28  << (formatBits.test(pcpp::io::HASIBLANK) ?
29  "Yes" : "No") << std::endl
30  << "StateData = "
31  << (formatBits.test(pcpp::io::HASSTATE) ?
32  "Yes" : "No") << std::endl
33  << "TargetData = "
34  << (formatBits.test(pcpp::io::HASTARGDATA) ?
35  "Yes" : "No") << std::endl
36  << "AuxData = "
37  << (formatBits.test(pcpp::io::HASAUXDATA) ?
38  "Yes" : "No") << std::endl;
39  if(formatBits.test(pcpp::io::HASAUXDATA))
40  outStream << "NumAuxVar = "
41  << simFileInfo.numAuxVars << std::endl;
42  int numGrids = simFileInfo.numGrids;
43  if(numGrids > 0){
44  outStream << "====== Grid Information =====" << std::endl;
45  outStream << "NumGrids = " << simFileInfo.numGrids << std::endl;
46  std::vector<int> gridNumDim(simFileInfo.gridNumDimensions);
47  if(gridNumDim.size() != numGrids){
48  gridNumDim.resize(numGrids,0);
49  }
50  const std::vector<std::vector<size_t> > &gridSizes(simFileInfo.gridSizes);
51  if(gridSizes.size() != numGrids){
52  outStream << "ERROR with legacy grid sizes != number of grids" << std::endl;
53  return;
54  }
55  std::vector<std::string> gridNames(simFileInfo.gridNames);
56  if(gridNames.size() != numGrids){
57  gridNames.resize(numGrids,"[NULL]");
58  }
59  for(int iGrid = 0;iGrid < numGrids;iGrid++){
60  outStream << "- - - ( Grid " << iGrid << " ) - - -" << std::endl
61  << " Grid Name: " << gridNames[iGrid] << std::endl
62  << " Grid Dimension: " << gridNumDim[iGrid] << std::endl
63  << " Grid Size: (";
64  pcpp::io::DumpContents(outStream,gridSizes[iGrid],",");
65  outStream << ")" << std::endl;
66  }
67  }
68  outStream << "===== Simulation Information =====" << std::endl;
69  if(!simFileInfo.simulationParamDictionary.empty()){
70  outStream << " -- Simulation Parameters -- " << std::endl
71  << simFileInfo.simulationParamDictionary.Report()
72  << std::endl;
73  }
74  if(!simFileInfo.simulationStateDictionary.empty()){
75  outStream << " -- Simulation State Data -- " << std::endl
76  << simFileInfo.simulationStateDictionary.Report()
77  << std::endl;
78  }
79  } else {
80  outStream << "NextGen" << std::endl
81  << "Provenance = "
82  << (formatBits.test(pcpp::io::HASPROVENANCE) ?
83  "Yes" : "No") << std::endl
84  << "ConfigData = "
85  << (formatBits.test(pcpp::io::HASCONFIG) ?
86  "Yes" : "No") << std::endl
87  << "DataDict = "
88  << (formatBits.test(pcpp::io::HASDATADICT) ?
89  "Yes" : "No") << std::endl
90  << "Geometry = "
91  << (formatBits.test(pcpp::io::HASGEOMETRY) ?
92  "Yes" : "No") << std::endl
93  << "Simulation = "
94  << (formatBits.test(pcpp::io::HASSIMULATION) ?
95  "Yes" : "No") << std::endl;
96  int numGeometries = simFileInfo.numGeometries;
97  if(numGeometries > 0){
98  if(simFileInfo.geometryNames.size() != numGeometries ||
99  simFileInfo.geometryGridNames.size() != numGeometries ||
100  simFileInfo.geometryGridSizes.size() != numGeometries){
101  outStream << "Geometries improperly formatted." << std::endl;
102  return;
103  }
104  outStream << "====== Geometry Information ======" << std::endl;
105  outStream << "NumGeometries = " << numGeometries << std::endl;
106  for(int iGeom = 0;iGeom < numGeometries;iGeom++){
107  const std::string &geometryName(simFileInfo.geometryNames[iGeom]);
108  outStream << "Geometry(" << iGeom << ") = " << geometryName << std::endl;
109  int numGrids = simFileInfo.geometryGridNames[iGeom].size();
110  outStream << " Number of grids: " << numGrids << std::endl;
111  for(int iGrid = 0;iGrid < numGrids;iGrid++){
112  const std::string &gridName(simFileInfo.geometryGridNames[iGeom][iGrid]);
113  outStream << " Grid(" << iGrid << ") := " << gridName << std::endl;
114  int numDim = simFileInfo.geometryGridSizes[iGeom][iGrid].size();
115  outStream << " Dimension: " << numDim << std::endl
116  << " Size: (";
117  pcpp::io::DumpContents(outStream,simFileInfo.geometryGridSizes[iGeom][iGrid],",");
118  outStream << ")" << std::endl;
119  }
120  }
121  }
122  int numDomains = simFileInfo.numDomains;
123  if(numDomains > 0){
124  outStream << "===== Simulation Information =====" << std::endl
125  << "Simulation Step: " << simFileInfo.simStep << std::endl;
126  if(!simFileInfo.simulationParamDictionary.empty()){
127  outStream << " -- Simulation Parameters -- " << std::endl
128  << simFileInfo.simulationParamDictionary.Report()
129  << std::endl;
130  }
131  if(!simFileInfo.simulationStateDictionary.empty()){
132  outStream << " -- Simulation State Data -- " << std::endl
133  << simFileInfo.simulationStateDictionary.Report()
134  << std::endl;
135  }
136  outStream << "Number of Domains: " << numDomains << std::endl;
137  const std::vector<std::string> &domainNames(simFileInfo.domainNames);
138  const std::vector<std::vector<std::string> > &allDomainGridNames(simFileInfo.domainGridNames);
139  const std::vector<std::vector<std::string> > &allDomainGridPaths(simFileInfo.domainGridPaths);
140  if(domainNames.size() != numDomains ||
141  allDomainGridNames.size() != numDomains ||
142  allDomainGridPaths.size() != numDomains){
143  outStream << "Domain information improperly formatted." << std::endl;
144  return;
145  }
146  std::vector<std::string>::const_iterator domainNameIt = domainNames.begin();
147  std::vector<std::vector<std::string> >::const_iterator allDomainGridNamesIt =
148  allDomainGridNames.begin();
149  std::vector<std::vector<std::string> >::const_iterator allDomainGridPathsIt =
150  allDomainGridPaths.begin();
151  std::vector<pcpp::field::metadataset>::const_iterator domainParamDictionaryIt =
152  simFileInfo.domainParamDictionaries.begin();
153  std::vector<pcpp::field::metadataset>::const_iterator domainStateDictionaryIt =
154  simFileInfo.domainStateDictionaries.begin();
155  while(domainNameIt != domainNames.end()){
156  const pcpp::field::metadataset &domainParamDictionary(*domainParamDictionaryIt++);
157  const pcpp::field::metadataset &domainStateDictionary(*domainStateDictionaryIt++);
158  const std::vector<std::string> &domainGridNames(*allDomainGridNamesIt++);
159  const std::vector<std::string> &domainGridPaths(*allDomainGridPathsIt++);
160  const std::string &domainName(*domainNameIt++);
161  outStream << " --- " << domainName << " --- " << std::endl;
162  int numDomainGrids = domainGridNames.size();
163  std::vector<std::string>::const_iterator domainGridNameIt = domainGridNames.begin();
164  std::vector<std::string>::const_iterator domainGridPathIt = domainGridPaths.begin();
165  outStream << " Grids: ";
166  while(domainGridNameIt != domainGridNames.end()){
167  outStream << *domainGridNameIt++ << "@" << *domainGridPathIt++ << " ";
168  }
169  outStream << std::endl;
170  if(!domainParamDictionary.empty()){
171  outStream << " ---- Domain Parameters ----" << std::endl
172  << domainParamDictionary.Report()
173  << std::endl;
174  }
175  if(!domainStateDictionary.empty()){
176  outStream << " ---- Domain State ----" << std::endl
177  << domainStateDictionary.Report()
178  << std::endl;
179  }
180  }
181  }
182  }
183  outStream << "---------------------------" << std::endl;
184  };
185 
186  void Configuration(std::ostream &outStream,
187  const fixtures::ConfigurationType &inConfig)
188  {
189  outStream << "---------------------------" << std::endl
190  << "Configuration: " << std::endl;
191  fixtures::ConfigurationType::const_iterator configIt = inConfig.begin();
192  while(configIt != inConfig.end()){
193  const fixtures::ConfigurationType::ParamType &configParam(*configIt++);
194  outStream << configParam.first << " = " << configParam.second << std::endl;
195  }
196  outStream << "---------------------------" << std::endl;
197  }
198 
199  void CartesianSetup(std::ostream &outStream,
200  const std::vector<int> &cartCoords,
201  const std::vector<int> &cartDims)
202  {
203  outStream << "-------------------------"
204  << std::endl
205  << "Cartesian setup: " << std::endl
206  << "CartCoords: (";
207  pcpp::io::DumpContents(outStream,cartCoords,",");
208  outStream << ") CartDims: (";
209  pcpp::io::DumpContents(outStream,cartDims,",");
210  outStream << ")" << std::endl
211  << "-------------------------"
212  << std::endl;
213  }
214 
215  void CartesianSetup(std::ostream &outStream,pcpp::ParallelTopologyInfoType &inTopo)
216  {
217  outStream << "-------------------------"
218  << std::endl
219  << "Cartesian setup: " << std::endl
220  << "Number of dimensions: " << inTopo.numDimensions << std::endl
221  << "Topo rank: " << inTopo.rank << std::endl
222  << "Configuration---" << std::endl
223  << " Decomp directions: (";
224  pcpp::io::DumpContents(outStream,inTopo.cartDecompDirections,",");
225  outStream << ")" << std::endl
226  << " Cart decomp: (";
227  pcpp::io::DumpContents(outStream,inTopo.cartDecomposition,",");
228  outStream << ")" << std::endl
229  << " Periodic dirs: (";
230  pcpp::io::DumpContents(outStream,inTopo.isPeriodic,",");
231  outStream << ")" << std::endl
232  << "Topology info---" << std::endl
233  << " Cart Dimensions: (";
234  pcpp::io::DumpContents(outStream,inTopo.dimDir,",");
235  outStream << ")" << std::endl
236  << " Cart Coordinates: (";
237  pcpp::io::DumpContents(outStream,inTopo.topoCoords,",");
238  outStream << ")" << std::endl
239  << " Cart Neighbors: (";
240  pcpp::io::DumpContents(outStream,inTopo.neighborRanks,",");
241  outStream << ")" << std::endl
242  << "-------------------------"
243  << std::endl;
244  }
245 
246  };
247 };
std::vector< pcpp::field::metadataset > domainStateDictionaries
Definition: PCPPIO.H:74
std::vector< int > cartDecompDirections
Definition: PCPPCommUtil.H:22
std::vector< int > neighborRanks
Definition: PCPPCommUtil.H:26
void SimFileInfo(std::ostream &outStream, const pcpp::io::simfileinfo &simFileInfo)
Definition: PCPPReport.C:6
std::vector< std::vector< std::string > > geometryGridNames
Grid names for each geometry.
Definition: PCPPIO.H:58
pcpp::field::metadataset simulationParamDictionary
Dictionaries summarizing the attribute and datatsets in the file.
Definition: PCPPIO.H:71
void const size_t const size_t * gridSizes
Definition: EulerKernels.H:10
std::vector< int > topoCoords
Definition: PCPPCommUtil.H:25
std::vector< std::vector< std::string > > domainGridPaths
Path to grid data (including file name, geometry and grid names)
Definition: PCPPIO.H:67
void CartesianSetup(std::ostream &outStream, const std::vector< int > &cartCoords, const std::vector< int > &cartDims)
Definition: PCPPReport.C:199
std::vector< int > cartDecomposition
Definition: PCPPCommUtil.H:23
std::vector< int > gridNumDimensions
Definition: PCPPIO.H:51
std::bitset< NUMFORMATBITS > formatBits
Definition: PCPPIO.H:42
std::vector< int > isPeriodic
Definition: PCPPCommUtil.H:24
std::string fileName
Definition: PCPPIO.H:41
std::vector< std::vector< size_t > > gridSizes
Definition: PCPPIO.H:52
void Configuration(std::ostream &outStream, const fixtures::ConfigurationType &inConfig)
Definition: PCPPReport.C:186
pcpp::field::metadataset simulationStateDictionary
Definition: PCPPIO.H:72
void DumpContents(std::ostream &Ostr, const ContainerType &c, std::string del="\)
Dump container contents.
Definition: AppTools.H:117
std::string Report() const
std::vector< std::vector< std::string > > domainGridNames
Domain-specific grid names for which there is data.
Definition: PCPPIO.H:65
std::vector< std::string > geometryNames
Names of all geometries in file.
Definition: PCPPIO.H:56
std::vector< std::string > gridNames
Full grid names (geometryName:gridName)
Definition: PCPPIO.H:50
std::vector< std::vector< std::vector< size_t > > > geometryGridSizes
Sizes for each geometry grid.
Definition: PCPPIO.H:60
Simple key-value pair.
std::vector< pcpp::field::metadataset > domainParamDictionaries
Definition: PCPPIO.H:73
std::vector< std::string > domainNames
Definition: PCPPIO.H:63