31 void Foam::snappyHexMeshConfiguration::writeSnappySwitches()
33 dictionary
dict(
"switches");
35 dict.add(
"castellatedMesh",
"on",
true);
36 dict.add(
"snap",
"on",
true);
40 layers_ == 0 ?
"off" :
"on",
49 void Foam::snappyHexMeshConfiguration::writeGeometrySurface(
const label surfID)
51 beginDict(os_, surfaces_[surfID].
name());
53 os_ <<
indent <<
"type triSurfaceMesh;" <<
nl
54 <<
indent <<
"file " << surfaces_[surfID].file() <<
";" <<
endl;
56 const wordList& inletRegions = surfaces_[surfID].inletRegions();
57 const wordList& outletRegions = surfaces_[surfID].outletRegions();
59 if (!inletRegions.empty() || !outletRegions.empty())
61 beginDict(os_,
"regions");
65 const word& region = inletRegions[i];
68 region ==
"<inletRegion>" || inletRegions.size() == 1
73 os_ <<
indent << region <<
" { name " << patch <<
"; }" <<
endl;
78 const word& region = outletRegions[i];
81 region ==
"<outletRegion>" || outletRegions.size() == 1
86 os_ <<
indent << region <<
" { name " << patch <<
"; }" <<
endl;
96 void Foam::snappyHexMeshConfiguration::writeSearchableBox(
const label i)
98 beginDict(os_,
"box" + std::to_string(i));
100 os_ <<
indent <<
"type searchableBox;" <<
nl
101 <<
indent <<
"min " << refinementBoxes_[i].first() <<
";" <<
nl
102 <<
indent <<
"max " << refinementBoxes_[i].second() <<
";" <<
endl;
108 void Foam::snappyHexMeshConfiguration::writeSnappyGeometry()
110 beginDict(os_,
"geometry");
119 writeGeometrySurface(i);
122 forAll(refinementBoxes_, i)
125 writeSearchableBox(i);
132 void Foam::snappyHexMeshConfiguration::writeFeatures()
134 beginList(os_,
"features");
136 if (!implicitFeatures_)
140 fileName eMeshFile(surfaces_[i].
name() +
".eMesh");
141 os_ <<
indent <<
"{ file " << eMeshFile
142 <<
"; level 1; }" <<
endl;
150 void Foam::snappyHexMeshConfiguration::writeRefinementSurfacesLevel
155 os_ <<
indent <<
"level (" << rl <<
" " << rl <<
");" <<
endl;
159 void Foam::snappyHexMeshConfiguration::writeRefinementSurfacesLevel()
161 writeRefinementSurfacesLevel(refinementLevel_);
165 void Foam::snappyHexMeshConfiguration::writeRefinementSurfacesLevel
170 label rl(refinementLevel_);
176 rl = surfaceLevels_[i].second();
181 writeRefinementSurfacesLevel(rl);
185 void Foam::snappyHexMeshConfiguration::writePatchInfo
197 beginDict(os_,
"patchInfo");
205 void Foam::snappyHexMeshConfiguration::writeRefinementSurfacesRegion
208 const List<word>& regions
211 switch (regions.size())
229 writeRefinementSurfacesLevel();
232 if (regions.size() == 1 && regions[0] ==
regionName)
237 writePatchInfo(
"patch",
group);
243 void Foam::snappyHexMeshConfiguration::writeRefinementSurfacesRegions
249 if (inletRegions.empty() && outletRegions.empty())
255 beginDict(os_,
"regions");
256 writeRefinementSurfacesRegion(
"inlet", inletRegions);
257 writeRefinementSurfacesRegion(
"outlet", outletRegions);
262 void Foam::snappyHexMeshConfiguration::writeRefinementSurfaces()
264 beginDict(os_,
"refinementSurfaces");
273 const word&
name = surfaces_[i].name();
275 beginDict(os_,
name);
277 writeRefinementSurfacesLevel(
name);
279 const wordList& inletRegions = surfaces_[i].inletRegions();
280 const wordList& outletRegions = surfaces_[i].outletRegions();
282 switch (surfaces_[i].
type())
284 case surfaceType::wall:
286 writePatchInfo(
"wall");
287 writeRefinementSurfacesRegions(inletRegions, outletRegions);
291 case surfaceType::external:
293 writePatchInfo(
"wall",
"externalWall");
294 writeRefinementSurfacesRegions(inletRegions, outletRegions);
298 case surfaceType::cellZone:
299 case surfaceType::rotatingZone:
301 os_ <<
indent <<
"faceZone "
302 << surfaces_[i].
name() <<
";" <<
nl
304 << surfaces_[i].
name() <<
";" <<
nl
310 case surfaceType::baffle:
312 writePatchInfo(
"wall");
314 os_ <<
indent <<
"faceZone "
315 << surfaces_[i].
name() <<
";" <<
nl
329 void Foam::snappyHexMeshConfiguration::writeRefinementRegion
335 beginDict(os_,
name);
337 os_ <<
indent <<
"mode inside;" <<
nl
338 <<
indent <<
"level " << level <<
";" <<
endl;
344 void Foam::snappyHexMeshConfiguration::writeRefinementRegions()
348 refinementRegions_.empty()
349 && refinementBoxes_.empty()
350 && refinementDists_.empty()
354 <<
"// delete \"-disabled\" below to enable refinementRegions"
357 beginDict(os_,
"refinementRegions-disabled");
358 writeRefinementRegion(
"<surface>", refinementLevel_);
363 beginDict(os_,
"refinementRegions");
365 forAll(refinementRegions_, i)
367 writeRefinementRegion
369 refinementRegions_[i].
first(),
370 refinementRegions_[i].
second()
374 forAll(refinementBoxes_, i)
376 writeRefinementRegion
378 "box" + std::to_string(i),
379 refinementBoxes_[i].third()
383 forAll(refinementDists_, i)
385 beginDict(os_, refinementDists_[i].
first());
387 os_ <<
indent <<
"mode distance;" <<
nl
389 << refinementDists_[i].second() <<
" "
390 << refinementDists_[i].third() <<
"));" <<
endl;
400 void Foam::snappyHexMeshConfiguration::writeCastellatedMeshControls()
402 beginDict(os_,
"castellatedMeshControls");
405 writeRefinementSurfaces();
406 writeRefinementRegions();
409 os_ <<
indent <<
"insidePoint "
410 << insidePoint_ <<
";" <<
endl;
412 os_ <<
indent <<
"nCellsBetweenLevels "
413 << nCellsBetweenLevels_
420 void Foam::snappyHexMeshConfiguration::writeSnapControls()
422 beginDict(os_,
"snapControls");
424 os_ <<
indent <<
"explicitFeatureSnap "
425 << (implicitFeatures_ ?
"off" :
"on") <<
";" <<
endl;
426 os_ <<
indent <<
"implicitFeatureSnap "
427 << (implicitFeatures_ ?
"on" :
"off") <<
";" <<
endl;
433 void Foam::snappyHexMeshConfiguration::writeAddLayersControls()
440 beginDict(os_,
"addLayersControls");
442 beginDict(os_,
"layers");
446 switch (surfaces_[i].
type())
448 case surfaceType::wall:
449 case surfaceType::external:
450 case surfaceType::baffle:
453 <<
".*\" { nSurfaceLayers "
454 << layers_ <<
"; }" <<
endl;
464 os_ <<
indent <<
"relativeSizes on; "
465 <<
"// off, usually with firstLayerThickness" <<
nl
466 <<
indent <<
"expansionRatio 1.2;" <<
nl
467 <<
indent <<
"finalLayerThickness 0.5;" <<
nl
468 <<
indent <<
"minThickness 1e-3;" <<
nl
469 <<
indent <<
"firstLayerThickness-disabled 0.01;" <<
nl <<
nl
470 <<
indent <<
"maxThicknessToMedialRatio-disabled 0.3;" <<
endl;
476 void Foam::snappyHexMeshConfiguration::writeWriteFlags()
478 os_ <<
"// delete \"-disabled\" to output mesh data, e.g. for layers"
481 beginList(os_,
"writeFlags-disabled");
493 const fileName&
name,
496 const meshingSurfaceList& surfaces,
497 const label refinementLevel,
498 const List<Tuple2<word, label>>& surfaceLevels,
499 const List<Tuple2<word, label>>& refinementRegions,
500 const List<Tuple3<vector, vector, label>>& refinementBoxes,
501 const List<Tuple3<word, scalar, label>>& refinementDists,
502 const bool implicitFeatures,
504 const point& insidePoint,
505 const label nCellsBetweenLevels
508 caseFileConfiguration(
name, dir, time),
510 refinementLevel_(refinementLevel),
511 surfaceLevels_(surfaceLevels),
512 refinementRegions_(refinementRegions),
513 refinementBoxes_(refinementBoxes),
514 refinementDists_(refinementDists),
515 implicitFeatures_(implicitFeatures),
517 insidePoint_(insidePoint),
518 nCellsBetweenLevels_(nCellsBetweenLevels)
532 dict_.writeHeader(os_, word(
"dictionary"));
533 os_ <<
"#includeEtc \"caseDicts/mesh/generation/snappyHexMeshDict.cfg\""
535 writeSnappySwitches();
536 writeSnappyGeometry();
537 writeCastellatedMeshControls();
539 writeAddLayersControls();
542 os_ <<
"mergeTolerance 1e-6;";
544 dict_.writeEndDivider(os_);
#define forAll(list, i)
Loop across all elements in list.
virtual const fileName & name() const
Return the name of the stream.
OFstream os_
Output file stream to write file content.
snappyHexMeshConfiguration(const fileName &name, const fileName &dir, const Time &time, const meshingSurfaceList &surfaces, const label refinementLevel, const List< Tuple2< word, label >> &surfaceLevels, const List< Tuple2< word, label >> &refinementRegions, const List< Tuple3< vector, vector, label >> &refinementBoxes, const List< Tuple3< word, scalar, label >> &refinementDists, const bool implicitFeatures, const label layers, const point &insidePoint, const label nCellsBetweenLevels)
Construct from components.
~snappyHexMeshConfiguration()
Destructor.
const char *const group
Group name for atomic constants.
List< word > wordList
A List of words.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
word name(const bool)
Return a word representation of a bool.
labelList second(const UList< labelPair > &p)
vector point
Point is a vector.
labelList first(const UList< labelPair > &p)
Ostream & indent(Ostream &os)
Indent stream.
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.