33 dictionary
dict(
"switches");
35 dict.add(
"castellatedMesh",
"on",
true);
36 dict.add(
"snap",
"on",
true);
51 beginDict(os_, surfaces_[surfID].
name());
53 os_ <<
indent <<
"type triSurface;" <<
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;
98 beginDict(os_,
"box" + std::to_string(i));
101 <<
indent <<
"min " << refinementBoxes_[i].first() <<
";" <<
nl
102 <<
indent <<
"max " << refinementBoxes_[i].second() <<
";" <<
endl;
110 beginDict(os_,
"geometry");
119 writeGeometrySurface(i);
122 forAll(refinementBoxes_, i)
125 writeSearchableBox(i);
134 beginList(os_,
"features");
136 if (explicitFeatures_)
140 fileName eMeshFile(surfaces_[i].
name() +
".eMesh");
141 os_ <<
indent <<
"{ file " << eMeshFile
142 <<
"; level 1; }" <<
endl;
155 os_ <<
indent <<
"level (" << rl <<
" " << rl <<
");" <<
endl;
161 writeRefinementSurfacesLevel(refinementLevel_);
170 label rl(refinementLevel_);
176 rl = surfaceLevels_[i].second();
181 writeRefinementSurfacesLevel(rl);
197 beginDict(os_,
"patchInfo");
208 const List<word>& regions
211 switch (regions.size())
229 writeRefinementSurfacesLevel();
232 if (regions.size() == 1 && regions[0] ==
regionName)
237 writePatchInfo(
"patch",
group);
249 if (inletRegions.empty() && outletRegions.empty())
255 beginDict(os_,
"regions");
256 writeRefinementSurfacesRegion(
"inlet", inletRegions);
257 writeRefinementSurfacesRegion(
"outlet", outletRegions);
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
335 beginDict(os_,
name);
337 os_ <<
indent <<
"mode inside;" <<
nl
338 <<
indent <<
"level " << level <<
";" <<
endl;
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;
402 beginDict(os_,
"castellatedMeshControls");
405 writeRefinementSurfaces();
406 writeRefinementRegions();
409 if (insidePointsOpt_)
411 beginList(os_,
"insidePoints");
422 os_ <<
indent <<
"insidePoint "
423 << insidePoints_[0] <<
";" <<
endl;
426 os_ <<
indent <<
"nCellsBetweenLevels "
427 << nCellsBetweenLevels_
436 beginDict(os_,
"snapControls");
438 os_ <<
indent <<
"explicitFeatureSnap "
439 << (explicitFeatures_ ?
"on" :
"off") <<
";" <<
endl;
440 os_ <<
indent <<
"implicitFeatureSnap "
441 << (explicitFeatures_ ?
"off" :
"on") <<
";" <<
endl;
452 beginDict(os_,
"addLayersControls");
454 beginDict(os_,
"layers");
461 switch (surfaces_[i].
type())
463 case surfaceType::wall:
464 case surfaceType::external:
465 case surfaceType::baffle:
468 <<
".*\" { nSurfaceLayers 0; }" <<
endl;
480 os_ <<
indent <<
"\"" << layers_[i].first()
481 <<
".*\" { nSurfaceLayers "
482 << layers_[i].second() <<
"; }" <<
endl;
488 bool relativeSizes(firstLayerThickness_ == 0);
491 os_ <<
indent <<
"relativeSizes "
494 ?
"on; // off, usually with firstLayerThickness"
495 :
"off; // on, usually with finalLayerThickness"
499 os_ <<
indent <<
"expansionRatio "<< layerExpansionRatio_
503 os_ <<
indent <<
"finalLayerThickness"
504 << (relativeSizes ?
" " :
"-disabled ") <<
"0.5;" <<
endl;
507 os_ <<
indent <<
"minThickness "
508 << (relativeSizes ? scalar(0.001) : 0.5*firstLayerThickness_)
512 os_ <<
indent <<
"firstLayerThickness"
513 << (relativeSizes ?
"-disabled " :
" ")
514 << firstLayerThickness_ <<
";" <<
endl;
517 os_ <<
indent <<
"maxThicknessToMedialRatio-disabled 0.3;" <<
endl;
525 os_ <<
"// delete \"-disabled\" to output mesh data, e.g. for layers"
528 beginList(os_,
"writeFlags-disabled");
540 const fileName&
name,
543 const meshingSurfaceList& surfaces,
544 const label refinementLevel,
545 const List<Tuple2<word, label>>& surfaceLevels,
546 const List<Tuple2<word, label>>& refinementRegions,
547 const List<Tuple3<vector, vector, label>>& refinementBoxes,
548 const List<Tuple3<word, scalar, label>>& refinementDists,
549 const bool explicitFeatures,
550 const List<Tuple2<word, label>>& layers,
551 const scalar firstLayerThickness,
552 const scalar layerExpansionRatio,
553 const bool insidePointsOpt,
555 const label nCellsBetweenLevels
558 caseFileConfiguration(
name, dir, time),
560 refinementLevel_(refinementLevel),
561 surfaceLevels_(surfaceLevels),
562 refinementRegions_(refinementRegions),
563 refinementBoxes_(refinementBoxes),
564 refinementDists_(refinementDists),
565 explicitFeatures_(explicitFeatures),
567 firstLayerThickness_(firstLayerThickness),
568 layerExpansionRatio_(layerExpansionRatio),
569 insidePointsOpt_(insidePointsOpt),
571 nCellsBetweenLevels_(nCellsBetweenLevels)
585 dict_.writeHeader(os_, word(
"dictionary"));
586 os_ <<
"#includeEtc \"caseDicts/mesh/generation/snappyHexMeshDict.cfg\""
588 writeSnappySwitches();
589 writeSnappyGeometry();
590 writeCastellatedMeshControls();
592 writeAddLayersControls();
595 os_ <<
"mergeTolerance 1e-6;";
597 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.
void writeFeatures()
Write features list in castellatedMeshControls.
void writePatchInfo(const word &type, const word &group="")
Write refinementSurfaces wall patchInfo entry.
void writeRefinementSurfacesLevel()
Write refinementSurfaces level entry using refinementLevel_.
void writeSnappySwitches()
Write switches.
void writeRefinementSurfacesRegion(const word regionName, const List< word > ®ions)
Write a refinement surface region.
~snappyHexMeshConfiguration()
Destructor.
void writeRefinementRegions()
Write refinementRegions.
void writeSearchableBox(const label i)
Write searchableBox entry for geometry sub-dictionary.
void writeRefinementSurfaces()
Write refinementSurfaces.
const List< Tuple2< word, label > > layers_
Number of layers on specified surfaces.
void writeRefinementSurfacesRegions(const wordList &inletRegions, const wordList &outletRegions)
Write refinement surface region information.
void writeSnapControls()
Write snapControls.
void writeSnappyGeometry()
Write geometry sub-dictionary.
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 explicitFeatures, const List< Tuple2< word, label >> &layers, const scalar firstLayerThickness, const scalar layerExpansionRatio, const bool insidePointsOpt, const List< point > &insidePoints, const label nCellsBetweenLevels)
Construct from components.
void writeRefinementRegion(const word &name, const label level)
Write a refinement region.
void writeWriteFlags()
Write writeFlags.
void writeAddLayersControls()
Write addLayersControls.
void writeGeometrySurface(const label surfID)
Write surface entry for geometry sub-dictionary.
void writeCastellatedMeshControls()
Write castellatedMeshControls.
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.
const word & regionName(const solver ®ion)
labelList second(const UList< labelPair > &p)
labelList first(const UList< labelPair > &p)
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
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.