43 { solverType::stCompressible,
"compressible" },
44 { solverType::stIncompressible,
"incompressible" },
45 { solverType::stBuoyant,
"buoyant" },
46 { solverType::stUnknown,
"unknown" },
58 if (!dictHeader.typeHeaderOk<IOdictionary>(
true))
61 <<
"Unable to open file "
62 << dictHeader.objectPath()
66 IOdictionary
dict(dictHeader);
67 return dict.get<word>(entryName);
74 const fileName& baseDir,
75 const dictionary& solverDict,
79 Info<<
" Reading fluid field templates";
90 dictionary fieldTemplates = solverDict.subDict(
"fluidFields");
92 const fileName turbModelDir(baseDir/
"models"/
"turbulence");
94 const dictionary fieldModels(solverDict.subDict(
"fluidModels"));
96 word turbModel(
"laminar");
97 word turbType(
"none");
99 if (fieldModels.readIfPresent(
"turbulenceModel", turbType))
101 if (turbType ==
"turbulenceModel")
103 IOdictionary turbPropDict
108 "turbulenceProperties",
118 const word modelType(turbPropDict.get<word>(
"simulationType"));
120 if (modelType ==
"laminar")
124 else if (modelType ==
"RAS")
127 turbPropDict.subDict(modelType)
128 .readCompat(
"model", {{
"RASModel", -2006}}, turbModel);
130 else if (modelType ==
"LES")
133 turbPropDict.subDict(modelType)
134 .readCompat(
"model", {{
"LESModel", -2006}}, turbModel);
139 <<
"Unhandled turbulence model option " << modelType
140 <<
". Valid options are laminar, RAS, LES"
147 <<
"Unhandled turbulence model option " << turbType
148 <<
". Valid options are turbulenceModel"
153 Info<<
" Selecting " << turbType <<
": " << turbModel <<
endl;
155 IOdictionary turbModelDict
159 fileName(turbModelDir/turbModel),
166 fieldTemplates.merge(turbModelDict.subDict(
"fluidFields"));
171 case stIncompressible:
173 fieldTemplates.merge(turbModelDict.subDict(
"incompressibleFields"));
179 fieldTemplates.merge(turbModelDict.subDict(
"compressibleFields"));
188 return fieldTemplates;
195 const dictionary& solverDict
202 return solverDict.subDict(
"solidFields");
206 void Foam::solverTemplate::setRegionProperties
208 const dictionary& fieldDict,
209 const word& regionType,
214 regionTypes_[regionI] = regionType,
216 fieldNames_[regionI] = fieldDict.toc();
217 fieldTypes_[regionI].setSize(fieldNames_[regionI].size());
218 fieldDimensions_[regionI].setSize(fieldNames_[regionI].size());
220 forAll(fieldNames_[regionI], i)
222 const word& fieldName = fieldNames_[regionI][i];
223 const dictionary&
dict = fieldDict.
subDict(fieldName);
226 fieldDimensions_[regionI].set
229 new dimensionSet(
dict,
"dimensions")
239 const fileName& baseDir,
241 const word& solverName
244 solverType_(stUnknown),
251 IOdictionary solverDict
255 fileName(baseDir/
"solvers"/solverName),
261 Info<<
"Selecting " << solverName <<
": ";
263 solverType_ = solverTypeNames_.get(
"solverType", solverDict);
264 multiRegion_ = solverDict.get<
bool>(
"multiRegion");
266 Info<< solverTypeNames_[solverType_];
269 Info<<
", multi-region";
273 Info<<
", single-region";
288 regionTypes_.setSize(nRegion);
289 regionNames_.setSize(nRegion);
290 fieldNames_.setSize(nRegion);
291 fieldTypes_.setSize(nRegion);
292 fieldDimensions_.setSize(nRegion);
300 const dictionary fieldDict
302 readFluidFieldTemplates
311 setRegionProperties(fieldDict,
"fluid",
fluidNames[i], regionI++);
316 const dictionary fieldDict
318 readSolidFieldTemplates
324 setRegionProperties(fieldDict,
"solid",
solidNames[i], regionI++);
329 regionTypes_.setSize(1);
330 regionNames_.setSize(1);
331 fieldNames_.setSize(1);
332 fieldTypes_.setSize(1);
333 fieldDimensions_.setSize(1);
338 const dictionary fieldDict
340 readFluidFieldTemplates
349 setRegionProperties(fieldDict,
"fluid",
word::null, 0);
358 return solverTypeNames_[solverType_];
370 return regionTypes_.size();
376 return regionTypes_[regionI];
382 return regionNames_[regionI];
391 return fieldNames_[regionI];
400 return fieldTypes_[regionI];
409 return fieldDimensions_[regionI];