PlasCom2  1.0
XPACC Multi-physics simluation application
PC2Util.H
Go to the documentation of this file.
1 #ifndef __PC2_UTIL_H__
2 #define __PC2_UTIL_H__
3 
4 #include "PlasCom2.H"
5 #include "PC2IO.H"
6 #include "EulerUtil.H"
7 #include "Geometry.H"
8 
9 namespace plascom2 {
10  namespace util {
11 
12  struct legacybc {
13  legacybc() : gridID(-1), bcType(-1), bcDir(-1) {};
14  int gridID;
15  int bcType;
16  int bcDir;
17  int bcInterval[6];
18  };
19 
20  std::ostream &operator<<(std::ostream &outStream,const legacybc &bcDat);
21  std::istream &operator>>(std::istream &inStream,legacybc &bcDat);
22  bool operator==(const legacybc &lhs,const legacybc &rhs);
23  bool operator!=(const legacybc &lhs,const legacybc &rhs);
24 
25  int ReadLegacyBCDat(const std::string &bcFileName,std::vector<legacybc> &bcDat,
26  fixtures::CommunicatorType &inCommunicator,std::ostream &messageStream);
27 
29  fixtures::CommunicatorType &inCommunicator,
30  std::ostream &messageStream);
31 
32  // int SplitDomains(const ConfigurationType &inConfig,
33  // CommunicatorType &inCommunicator,
34  // simulation::DomainInfoType &domainPartitionInfo,
35  // std::vector<simulation::DomainType> &localDomains,
36  // std::ostream &messageStream);
37 
38  int PC2Compare(const std::string &redFileName,const std::string &blueFileName,
39  double errTolerance,std::ostream &outStream);
40 
41 
42  template<typename GridType>
44  const std::string &gridName,
45  GridType &inGrid,std::ostream &messageStream)
46  {
47  messageStream << "Configuring subregions of " << gridName << "." << std::endl;
48 
49  std::vector<simulation::grid::subregion> &gridSubRegions(inGrid.SubRegions());
50  const std::string subRegionKey(ConfigKey(gridName,"RegionNames"));
51  messageStream << "sub-Region Key: " << subRegionKey << std::endl;
52  std::vector<std::string> subRegionNames(inConfig.GetValueVector<std::string>(ConfigKey(gridName,"RegionNames")));
53  messageStream << "Found " << subRegionNames.size() << " sub-regions." << std::endl;
54  if(subRegionNames.empty())
55  return(0);
56 
57  std::vector<size_t> &gridSizes(inGrid.GridSizes()); // note grid sizes, *not* bufferSizes
58  if(gridSizes.empty()){
59  messageStream << "ERROR: Grid sizes not specified." << std::endl;
60  return(1);
61  } else {
62  size_t numPointsGrid = 1;
63  std::vector<size_t>::iterator gsIt = gridSizes.begin();
64  while(gsIt != gridSizes.end())
65  numPointsGrid *= *gsIt++;
66  if(numPointsGrid == 0){
67  messageStream << "ERROR: Grid sizes mis-configured, found zero points." << std::endl;
68  return(1);
69  }
70  }
71 
72  std::vector<std::string>::iterator regionNameIt = subRegionNames.begin();
73 
74  while(regionNameIt != subRegionNames.end()){
75 
77  std::string &regionName(*regionNameIt++);
78  messageStream << "Configuring sub-region [" << regionName << "]" << std::endl;
79 
80  std::string configKey(ConfigKey(gridName,regionName));
81  std::string configValue(inConfig.GetValue(configKey));
82  std::string configString(regionName+" "+configValue);
83 
84  messageStream << "ConfigKey: " << configKey << std::endl
85  << "ConfigValue: " << configValue << std::endl
86  << "ConfigString: " << configString << std::endl;
87 
88  if(simulation::grid::InitSubRegionFromString(configString,gridSizes,subRegion))
89  return(1);
90 
91  gridSubRegions.push_back(subRegion);
92 
93  } // while
94 
95  return(0);
96 
97  };
98 
99 
100  template<typename GridType>
102  const std::string &gridName,
103  GridType &inGrid,
104  std::ostream &messageStream)
105  {
106  messageStream << "Configuring grid [" << gridName << "]" << std::endl;
107  std::vector<size_t> gridSizes(inConfig.GetValueVector<size_t>(ConfigKey(gridName,"NumPoints")));
108  int numDim = gridSizes.size();
110  std::string defaultGridTypeName("Uniform-rectangular");
111  if(inConfig.IsSet(ConfigKey(gridName,"Type"))){
112  std::string typeName(inConfig.GetValue(ConfigKey(gridName,"Type")));
113  if(typeName == "Uniform") typeName = defaultGridTypeName;
114  int gType = simulation::grid::ResolveTopoName(typeName);
115  if(gType >= 0 && gType < simulation::grid::NUMTOPOTYPE)
116  gridType = gType;
117  else
118  messageStream << "Warning: Invalid grid type specified (" << typeName
119  << "). Defaulting to grid type (" << defaultGridTypeName
120  << ")." << std::endl;
121  }
122  std::string typeName(simulation::grid::ResolveTopoType(gridType));
123  messageStream << "Grid (" << gridName << ") Type: " << typeName << std::endl;
124  inGrid.SetGridSizes(gridSizes);
125  inGrid.SetType(gridType);
126  if(inConfig.IsSet(ConfigKey(gridName,"PhysicalExtent"))){
127  std::vector<double> physicalExtent(inConfig.GetValueVector<double>(ConfigKey(gridName,"PhysicalExtent")));
128  inGrid.SetPhysicalExtent(physicalExtent);
129  }
130  if(inConfig.IsSet(ConfigKey(gridName,"DecompDirs"))){
131  std::vector<int> decompDirs(inConfig.GetValueVector<int>(ConfigKey(gridName,"DecompDirs")));
132  inGrid.SetDecompDirs(decompDirs);
133  }
134  if(inConfig.IsSet(ConfigKey(gridName,"DecompSizes"))){
135  std::vector<int> decompSizes(inConfig.GetValueVector<int>(ConfigKey(gridName,"DecompSizes")));
136  inGrid.SetDecompSizes(decompSizes);
137  }
138  if(inConfig.IsSet(ConfigKey(gridName,"ThreadDecompDirs"))){
139  std::vector<int> threadDecompDirs(inConfig.GetValueVector<int>(ConfigKey(gridName,"ThreadDecompDirs")));
140  inGrid.SetThreadDecompDirs(threadDecompDirs);
141  }
142  if(inConfig.IsSet(ConfigKey(gridName,"PeriodicDirs"))){
143  std::vector<bool> periodicDirs(inConfig.GetValueVector<bool>(ConfigKey(gridName,"PeriodicDirs")));
144  inGrid.SetPeriodicDirs(periodicDirs);
145  }
146  if(inConfig.IsSet(ConfigKey(gridName,"PeriodicLengths"))){
147  std::vector<double> periodicLengths(inConfig.GetValueVector<double>(ConfigKey(gridName,"PeriodicLengths")));
148  inGrid.SetPeriodicLengths(periodicLengths);
149  }
150  return(ConfigureGridSubRegions(inConfig,gridName,inGrid,messageStream));
151  };
152 
154  const std::string &gridName,
156  std::ostream &messageStream);
157 
158  }
159 }
160 #endif
bool operator==(const legacybc &lhs, const legacybc &rhs)
Definition: PC2Util.C:378
int ReadLegacyBCDat(const std::string &bcFileName, std::vector< legacybc > &bcDat, fixtures::CommunicatorType &inCommunicator, std::ostream &messageStream)
Definition: PC2Util.C:411
std::ostream & operator<<(std::ostream &outStream, const legacybc &bcDat)
Definition: PC2Util.C:393
void const size_t const size_t * gridSizes
Definition: EulerKernels.H:10
int PC2Compare(const std::string &redFileName, const std::string &blueFileName, double errTolerance, std::ostream &outStream)
Read two HDF5 files and compare the state data therein.
Definition: PC2Util.C:30
bool operator!=(const legacybc &lhs, const legacybc &rhs)
Definition: PC2Util.C:389
std::istream & operator>>(std::istream &inStream, legacybc &bcDat)
Definition: PC2Util.C:402
void const size_t const size_t const size_t const int const int * gridType
Definition: EulerKernels.H:10
Definition: PC2IO.H:10
int ConfigureGridSubRegions(const fixtures::ConfigurationType &inConfig, const std::string &gridName, GridType &inGrid, std::ostream &messageStream)
Definition: PC2Util.H:43
int InitSubRegionFromString(const std::string &inString, const std::vector< size_t > &gridSizes, subregion &inSubRegion)
Definition: Grid.C:174
Main encapsulation of MPI.
Definition: COMM.H:62
int ResolveTopoName(const std::string &inName)
Definition: Grid.C:135
std::string GetValue(const std::string &key) const
Definition: Parameters.C:24
std::vector< std::string > GetValueVector(const std::string &key) const
Definition: Parameters.C:36
int ConvertLegacyConfiguration(fixtures::ConfigurationType &inConfig, fixtures::CommunicatorType &inCommunicator, std::ostream &messageStream)
Definition: PC2Util.C:471
std::string ConfigKey(const std::string &configName, const std::string &keyName)
Definition: PCPPUtil.C:191
int ConfigureGridInfo(const fixtures::ConfigurationType &inConfig, const std::string &gridName, simulation::geometry::gridinfo &gridInfo, std::ostream &messageStream)
Definition: PC2Util.C:805
std::string ResolveTopoType(int inType)
Definition: Grid.C:144
int ConfigureGrid(const fixtures::ConfigurationType &inConfig, const std::string &gridName, GridType &inGrid, std::ostream &messageStream)
Definition: PC2Util.H:101
bool IsSet(const std::string &Key) const
Definition: Parameters.C:115