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"));
97 word turbulenceType(
"none");
99 if (fieldModels.readIfPresent(
"turbulenceModel", turbulenceType))
101 if (turbulenceType ==
"turbulenceModel")
103 IOdictionary turbPropDict
107 "turbulenceProperties",
117 const word modelType(turbPropDict.get<word>(
"simulationType"));
119 if (modelType ==
"laminar")
123 else if (modelType ==
"RAS")
125 turbPropDict.subDict(modelType)
128 else if (modelType ==
"LES")
130 turbPropDict.subDict(modelType)
136 <<
"Unhandled turbulence model option " << modelType
137 <<
". Valid options are laminar, RAS, LES"
144 <<
"Unhandled turbulence model option " << turbulenceType
145 <<
". Valid options are turbulenceModel"
153 IOdictionary turbModelDict
164 fieldTemplates.merge(turbModelDict.subDict(
"fluidFields"));
169 case stIncompressible:
171 fieldTemplates.merge(turbModelDict.subDict(
"incompressibleFields"));
177 fieldTemplates.merge(turbModelDict.subDict(
"compressibleFields"));
186 return fieldTemplates;
193 const dictionary& solverDict
200 return solverDict.subDict(
"solidFields");
204 void Foam::solverTemplate::setRegionProperties
206 const dictionary& fieldDict,
207 const word& regionType,
212 regionTypes_[regionI] = regionType,
214 fieldNames_[regionI] = fieldDict.toc();
215 fieldTypes_[regionI].setSize(fieldNames_[regionI].size());
216 fieldDimensions_[regionI].setSize(fieldNames_[regionI].size());
218 forAll(fieldNames_[regionI], i)
220 const word& fieldName = fieldNames_[regionI][i];
221 const dictionary&
dict = fieldDict.
subDict(fieldName);
224 fieldDimensions_[regionI].set
227 new dimensionSet(
dict,
"dimensions")
237 const fileName& baseDir,
239 const word& solverName
242 solverType_(stUnknown),
249 IOdictionary solverDict
253 fileName(baseDir/
"solvers"/solverName),
259 Info<<
"Selecting " << solverName <<
": ";
261 solverType_ = solverTypeNames_.get(
"solverType", solverDict);
262 multiRegion_ = solverDict.get<
bool>(
"multiRegion");
264 Info<< solverTypeNames_[solverType_];
267 Info<<
", multi-region";
271 Info<<
", single-region";
286 regionTypes_.setSize(nRegion);
287 regionNames_.setSize(nRegion);
288 fieldNames_.setSize(nRegion);
289 fieldTypes_.setSize(nRegion);
290 fieldDimensions_.setSize(nRegion);
298 const dictionary fieldDict
300 readFluidFieldTemplates
309 setRegionProperties(fieldDict,
"fluid",
fluidNames[i], regionI++);
314 const dictionary fieldDict
316 readSolidFieldTemplates
322 setRegionProperties(fieldDict,
"solid",
solidNames[i], regionI++);
327 regionTypes_.setSize(1);
328 regionNames_.setSize(1);
329 fieldNames_.setSize(1);
330 fieldTypes_.setSize(1);
331 fieldDimensions_.setSize(1);
336 const dictionary fieldDict
338 readFluidFieldTemplates
347 setRegionProperties(fieldDict,
"fluid",
word::null, 0);
356 return solverTypeNames_[solverType_];
368 return regionTypes_.size();
374 return regionTypes_[regionI];
380 return regionNames_[regionI];
389 return fieldNames_[regionI];
398 return fieldTypes_[regionI];
407 return fieldDimensions_[regionI];