15 static void setDefaults(Input& in)
17 in.timeStepNumber = 0;
19 in.ensa_melas_dof = 0;
20 in.outMeshFileName =
"";
24 in.preAdaptBalanceMethod =
"parma";
25 in.midAdaptBalanceMethod =
"zoltan";
26 in.postAdaptBalanceMethod =
"zoltan";
27 in.prePhastaBalanceMethod =
"parma-gap";
28 in.adaptStrategy = -1;
29 in.adaptErrorThreshold = 1e-6;
30 in.adaptErrorFieldName =
"errors";
31 in.adaptErrorFieldIndex = 5;
35 in.internalBCNodes = 0;
36 in.writeDebugFiles = 0;
38 in.partitionMethod =
"rib";
40 in.solutionMigration = 1;
41 in.useAttachedFields = 0;
44 in.tetrahedronize = 0;
46 in.displacementMigration = 0;
49 in.elementsPerMigration = 1000*1000;
52 in.bubbleFileName =
"bubbles.inp";
53 in.formElementGraph = 0;
54 in.restartFileName =
"restart";
57 in.transferParametric = 0;
58 in.splitAllLayerEdges = 0;
62 in.parmaVerbosity = 1;
63 in.writeGeomBCFiles = 0;
64 in.writeRestartFiles = 0;
67 in.elementImbalance = 1.03;
68 in.vertexImbalance = 1.05;
72 in.maxAdaptIterations = 3;
73 in.adaptShrinkLimit = 10000;
74 in.validQuality = 1.0e-10;
85 in.gradingFactor = 2.0;
86 in.simCooperation = 1;
88 in.simCFLUpperBound = 1.0e16;
89 in.simSizeLowerBound = 0.0;
90 in.simSizeUpperBound = 1.0e16;
91 in.simMaxAdaptMeshElements = 1.0e16;
99 typedef std::map<std::string, std::string*> StringMap;
100 typedef std::map<std::string, int*> IntMap;
101 typedef std::map<std::string, double*> DblMap;
103 static void formMaps(Input& in, StringMap& stringMap, IntMap& intMap, DblMap& dblMap)
105 intMap[
"timeStepNumber"] = &in.timeStepNumber;
106 intMap[
"ensa_dof"] = &in.ensa_dof;
107 intMap[
"ensa_melas_dof"] = &in.ensa_melas_dof;
108 stringMap[
"restartFileName"] = &in.restartFileName;
109 stringMap[
"attributeFileName"] = &in.attributeFileName;
110 stringMap[
"meshFileName"] = &in.meshFileName;
111 stringMap[
"outMeshFileName"] = &in.outMeshFileName;
112 stringMap[
"modelFileName"] = &in.modelFileName;
113 stringMap[
"outputFormat"] = &in.outputFormat;
114 stringMap[
"partitionMethod"] = &in.partitionMethod;
115 stringMap[
"preAdaptBalanceMethod"] = &in.preAdaptBalanceMethod;
116 stringMap[
"midAdaptBalanceMethod"] = &in.midAdaptBalanceMethod;
117 stringMap[
"postAdaptBalanceMethod"] = &in.postAdaptBalanceMethod;
118 stringMap[
"prePhastaBalanceMethod"] = &in.prePhastaBalanceMethod;
119 intMap[
"adaptFlag"] = &in.adaptFlag;
120 intMap[
"rRead"] = &in.rRead;
121 intMap[
"rStart"] = &in.rStart;
122 intMap[
"AdaptStrategy"] = &in.adaptStrategy;
123 intMap[
"RecursiveUR"] = &in.recursiveUR;
124 intMap[
"Periodic"] = &in.periodic;
125 intMap[
"prCD"] = &in.prCD;
126 intMap[
"timing"] = &in.timing;
127 intMap[
"internalBCNodes"] = &in.internalBCNodes;
128 intMap[
"WRITEASC"] = &in.writeDebugFiles;
129 intMap[
"phastaIO"] = &in.phastaIO;
130 intMap[
"splitFactor"] = &in.splitFactor;
131 intMap[
"SolutionMigration"] = &in.solutionMigration;
132 intMap[
"UseAttachedFields"] = &in.useAttachedFields;
133 intMap[
"DisplacementMigration"] = &in.displacementMigration;
134 intMap[
"isReorder"] = &in.isReorder;
135 intMap[
"Tetrahedronize"] = &in.tetrahedronize;
136 intMap[
"LocalPtn"] = &in.localPtn;
137 intMap[
"dwalMigration"] = &in.dwalMigration;
138 intMap[
"buildMapping"] = &in.buildMapping;
139 intMap[
"elementsPerMigration"] = &in.elementsPerMigration;
140 intMap[
"threaded"] = &in.threaded;
141 intMap[
"initBubbles"] = &in.initBubbles;
142 stringMap[
"bubbleFileName"] = &in.bubbleFileName;
143 intMap[
"formElementGraph"] = &in.formElementGraph;
144 intMap[
"snap"] = &in.snap;
145 intMap[
"transferParametric"] = &in.transferParametric;
146 intMap[
"splitAllLayerEdges"] = &in.splitAllLayerEdges;
147 intMap[
"filterMatches"] = &in.filterMatches;
148 intMap[
"axisymmetry"] = &in.axisymmetry;
149 intMap[
"parmaLoops"] = &in.parmaLoops;
150 intMap[
"parmaVerbosity"] = &in.parmaVerbosity;
151 intMap[
"writeGeomBCFiles"] = &in.writeGeomBCFiles;
152 intMap[
"writeRestartFiles"] = &in.writeRestartFiles;
153 intMap[
"ramdisk"] = &in.ramdisk;
154 dblMap[
"validQuality"] = &in.validQuality;
155 dblMap[
"meshqCrtn"] = &in.meshqCrtn;
156 dblMap[
"elementImbalance"] = &in.elementImbalance;
157 dblMap[
"vertexImbalance"] = &in.vertexImbalance;
158 dblMap[
"adaptShrinkLimit"] = &in.adaptShrinkLimit;
159 intMap[
"formEdges"] = &in.formEdges;
160 intMap[
"simmetrixMesh"] = &in.simmetrixMesh;
161 intMap[
"maxAdaptIterations"] = &in.maxAdaptIterations;
162 intMap[
"printIOtime"] = &in.printIOtime;
163 intMap[
"mesh2geom"] = &in.mesh2geom;
164 dblMap[
"alphaDist"] = &in.alphaDist;
165 dblMap[
"alphaSize"] = &in.alphaSize;
166 dblMap[
"betaDist"] = &in.betaDist;
167 dblMap[
"betaSize"] = &in.betaSize;
168 dblMap[
"gammaDist"] = &in.gammaDist;
169 dblMap[
"gammaSize"] = &in.gammaSize;
170 intMap[
"nRigidBody"] = &in.nRigidBody;
171 intMap[
"nRBParam"] = &in.nRBParam;
172 dblMap[
"gradingFactor"] = &in.gradingFactor;
173 intMap[
"simCooperation"] = &in.simCooperation;
174 intMap[
"writeSimLog"] = &in.writeSimLog;
175 dblMap[
"simCFLUpperBound"] = &in.simCFLUpperBound;
176 dblMap[
"simSizeLowerBound"] = &in.simSizeLowerBound;
177 dblMap[
"simSizeUpperBound"] = &in.simSizeUpperBound;
178 dblMap[
"simMaxAdaptMeshElements"] = &in.simMaxAdaptMeshElements;
182 static bool tryReading(std::string
const& name,
184 std::map<std::string, T*>& map)
186 typename std::map<std::string, T*>::iterator it = map.find(name);
193 typedef std::set<std::string> stringset;
195 static void makeDeprecated(stringset& old)
197 old.insert(
"globalP");
198 old.insert(
"numSplit");
199 old.insert(
"ParmaPtn");
200 old.insert(
"RecursivePtn");
201 old.insert(
"RecursivePtnStep");
202 old.insert(
"writePhastaFiles");
205 static bool deprecated(stringset& old, std::string
const& name)
207 if( old.count(name) ) {
209 lion_eprint(1,
"WARNING deprecated input \"%s\" ... "
210 "carefully check stderr and stdout for unexpected behavior\n",
218 static void readInputFile(
219 const char* filename,
220 StringMap& stringMap,
226 std::ifstream f(filename);
228 fail(
"could not open \"%s\"", filename);
231 if (name[0] ==
'#' || deprecated(old,name)) {
232 std::getline(f, name,
'\n');
235 if (tryReading(name, f, stringMap))
237 if (tryReading(name, f, intMap))
239 if (tryReading(name, f, dblMap))
241 fail(
"unknown variable \"%s\" in %s\n", name.c_str(), filename);
245 static void validate(Input& in)
247 PCU_ALWAYS_ASSERT(in.elementImbalance > 1.0 && in.elementImbalance <= 2.0);
248 PCU_ALWAYS_ASSERT(in.vertexImbalance > 1.0 && in.vertexImbalance <= 2.0);
249 PCU_ALWAYS_ASSERT( ! (in.buildMapping && in.adaptFlag));
252 void Input::load(
const char* filename)
258 formMaps(*
this, stringMap, intMap, dblMap);
259 readInputFile(filename, stringMap, intMap, dblMap);
266 int countNaturalBCs(Input& in)
268 return in.ensa_dof + 1;
271 int countEssentialBCs(Input& in)
273 if(!in.ensa_melas_dof)
274 return in.ensa_dof + 7;
279 int countScalarBCs(Input& in)
281 return in.ensa_dof - 5;
void fail(const char *why) __attribute__((noreturn))
Declare failure of code inside APF.
int PCU_Comm_Self(void)
Returns the communication rank of the calling thread.