snappyHexMesh: Simplified and rationalised the region refinement level specification
The inside or outside region refinement level is now specified using the simple
"level <level>" entry in refinementRegions e.g.
refinementRegions
{
refinementBox
{
mode inside;
level 5;
}
}
rather than
refinementRegions
{
refinementBox
{
mode inside;
levels ((1E15 5));
}
}
where the spurious "1E15" number is not used and the '((...))' is unnecessary clutter.
This commit is contained in:
@ -77,8 +77,8 @@ castellatedMeshControls
|
||||
{
|
||||
CAD
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 2));
|
||||
mode inside;
|
||||
level 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -49,8 +49,8 @@ castellatedMeshControls
|
||||
{
|
||||
CAD
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 2));
|
||||
mode inside;
|
||||
level 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -75,8 +75,8 @@ castellatedMeshControls
|
||||
/*
|
||||
rotatingZone
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 2));
|
||||
mode inside;
|
||||
level 2;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@ -77,8 +77,8 @@ castellatedMeshControls
|
||||
{
|
||||
CAD
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 2));
|
||||
mode inside;
|
||||
level 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -77,8 +77,8 @@ castellatedMeshControls
|
||||
{
|
||||
CAD
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 2));
|
||||
mode inside;
|
||||
level 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -104,8 +104,8 @@ castellatedMeshControls
|
||||
/*
|
||||
rotatingZone
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 2));
|
||||
mode inside;
|
||||
level 2;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@ -96,8 +96,8 @@ castellatedMeshControls
|
||||
{
|
||||
CAD
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 1));
|
||||
mode inside;
|
||||
level 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -57,74 +57,56 @@ const Foam::NamedEnum<Foam::shellSurfaces::refineMode, 5>
|
||||
void Foam::shellSurfaces::setAndCheckLevels
|
||||
(
|
||||
const label shelli,
|
||||
const List<Tuple2<scalar, label>>& distLevels
|
||||
const dictionary& dict
|
||||
)
|
||||
{
|
||||
if (modes_[shelli] != refineMode::distance && distLevels.size() != 1)
|
||||
const searchableSurface& shell = allGeometry_[shells_[shelli]];
|
||||
|
||||
if
|
||||
(
|
||||
modes_[shelli] == refineMode::inside
|
||||
|| modes_[shelli] == refineMode::outside
|
||||
)
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "For refinement mode "
|
||||
<< refineModeNames_[modes_[shelli]]
|
||||
<< " specify only one distance+level."
|
||||
<< " (its distance gets discarded)"
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
// Extract information into separate distance and level
|
||||
distances_[shelli].setSize(distLevels.size());
|
||||
levels_[shelli].setSize(distLevels.size());
|
||||
|
||||
forAll(distLevels, j)
|
||||
{
|
||||
distances_[shelli][j] = distLevels[j].first();
|
||||
levels_[shelli][j] = distLevels[j].second();
|
||||
|
||||
// Check in incremental order
|
||||
if (j > 0)
|
||||
if (!allGeometry_[shells_[shelli]].hasVolumeType())
|
||||
{
|
||||
if
|
||||
(
|
||||
(distances_[shelli][j] <= distances_[shelli][j-1])
|
||||
|| (levels_[shelli][j] > levels_[shelli][j-1])
|
||||
)
|
||||
WarningInFunction
|
||||
<< "Shell " << shell.name()
|
||||
<< " is not closed so testing for '"
|
||||
<< refineModeNames_[modes_[shelli]]
|
||||
<< "' may fail." << endl;
|
||||
}
|
||||
|
||||
distances_[shelli].setSize(0);
|
||||
levels_[shelli].setSize(1);
|
||||
|
||||
if (dict.found("levels") && !(dict.found("level")))
|
||||
{
|
||||
// Support 'levels' for backward compatibility
|
||||
const List<Tuple2<scalar, label>> distLevels(dict.lookup("levels"));
|
||||
|
||||
if (distLevels.size() != 1)
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "For refinement mode "
|
||||
<< refineModeNames_[modes_[shelli]]
|
||||
<< " : Refinement should be specified in order"
|
||||
<< " of increasing distance"
|
||||
<< " (and decreasing refinement level)." << endl
|
||||
<< "Distance:" << distances_[shelli][j]
|
||||
<< " refinementLevel:" << levels_[shelli][j]
|
||||
<< " specify only one distance+level."
|
||||
<< " (its distance gets discarded)"
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
levels_[shelli][0] = distLevels[0].second();
|
||||
}
|
||||
}
|
||||
|
||||
const searchableSurface& shell = allGeometry_[shells_[shelli]];
|
||||
|
||||
if (modes_[shelli] == refineMode::distance)
|
||||
{
|
||||
Info<< "Refinement level according to distance to "
|
||||
<< shell.name() << endl;
|
||||
|
||||
forAll(levels_[shelli], j)
|
||||
else
|
||||
{
|
||||
Info<< " level " << levels_[shelli][j]
|
||||
<< " for all cells within " << distances_[shelli][j]
|
||||
<< " metre." << endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!allGeometry_[shells_[shelli]].hasVolumeType())
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Shell " << shell.name()
|
||||
<< " does not support testing for "
|
||||
<< refineModeNames_[modes_[shelli]] << endl
|
||||
<< "Probably it is not closed."
|
||||
<< exit(FatalError);
|
||||
if (dict.found("levels"))
|
||||
{
|
||||
IOWarningInFunction(dict)
|
||||
<< "Found both 'level' and 'levels' entries, using 'level'."
|
||||
<< endl;
|
||||
}
|
||||
|
||||
levels_[shelli][0] = readLabel(dict.lookup("level"));
|
||||
}
|
||||
|
||||
if (modes_[shelli] == refineMode::inside)
|
||||
@ -138,6 +120,88 @@ void Foam::shellSurfaces::setAndCheckLevels
|
||||
<< " for all cells outside " << shell.name() << endl;
|
||||
}
|
||||
}
|
||||
else if
|
||||
(
|
||||
modes_[shelli] == refineMode::insideSpan
|
||||
|| modes_[shelli] == refineMode::outsideSpan
|
||||
)
|
||||
{
|
||||
if (!allGeometry_[shells_[shelli]].hasVolumeType())
|
||||
{
|
||||
WarningInFunction
|
||||
<< "Shell " << shell.name()
|
||||
<< " is not closed so testing for '"
|
||||
<< refineModeNames_[modes_[shelli]]
|
||||
<< "' may fail." << endl;
|
||||
}
|
||||
|
||||
distances_[shelli].setSize(1);
|
||||
levels_[shelli].setSize(1);
|
||||
const Tuple2<scalar, label> distLevel(dict.lookup("level"));
|
||||
distances_[shelli][0] = distLevel.first();
|
||||
levels_[shelli][0] = distLevel.second();
|
||||
|
||||
if (modes_[shelli] == refineMode::insideSpan)
|
||||
{
|
||||
Info<< "Refinement level " << levels_[shelli][0]
|
||||
<< " for all cells inside " << shell.name()
|
||||
<< " within distance " << distances_[shelli][0] << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "Refinement level " << levels_[shelli][0]
|
||||
<< " for all cells outside " << shell.name()
|
||||
<< " within distance " << distances_[shelli][0] << endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const List<Tuple2<scalar, label>> distLevels(dict.lookup("levels"));
|
||||
|
||||
// Extract information into separate distance and level
|
||||
distances_[shelli].setSize(distLevels.size());
|
||||
levels_[shelli].setSize(distLevels.size());
|
||||
|
||||
forAll(distLevels, j)
|
||||
{
|
||||
distances_[shelli][j] = distLevels[j].first();
|
||||
levels_[shelli][j] = distLevels[j].second();
|
||||
|
||||
// Check in incremental order
|
||||
if (j > 0)
|
||||
{
|
||||
if
|
||||
(
|
||||
(distances_[shelli][j] <= distances_[shelli][j-1])
|
||||
|| (levels_[shelli][j] > levels_[shelli][j-1])
|
||||
)
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "For refinement mode "
|
||||
<< refineModeNames_[modes_[shelli]]
|
||||
<< " : Refinement should be specified in order"
|
||||
<< " of increasing distance"
|
||||
<< " (and decreasing refinement level)." << endl
|
||||
<< "Distance:" << distances_[shelli][j]
|
||||
<< " refinementLevel:" << levels_[shelli][j]
|
||||
<< exit(FatalError);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (modes_[shelli] == refineMode::distance)
|
||||
{
|
||||
Info<< "Refinement level according to distance to "
|
||||
<< shell.name() << endl;
|
||||
|
||||
forAll(levels_[shelli], j)
|
||||
{
|
||||
Info<< " level " << levels_[shelli][j]
|
||||
<< " for all cells within " << distances_[shelli][j]
|
||||
<< " metre." << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -499,7 +563,7 @@ Foam::shellSurfaces::shellSurfaces
|
||||
modes_[shelli] = refineModeNames_.read(dict.lookup("mode"));
|
||||
|
||||
// Read pairs of distance+level
|
||||
setAndCheckLevels(shelli, dict.lookup("levels"));
|
||||
setAndCheckLevels(shelli, dict);
|
||||
|
||||
if
|
||||
(
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -103,11 +103,7 @@ private:
|
||||
// Private Member Functions
|
||||
|
||||
//- Helper function for initialisation.
|
||||
void setAndCheckLevels
|
||||
(
|
||||
const label shelli,
|
||||
const List<Tuple2<scalar, label>>&
|
||||
);
|
||||
void setAndCheckLevels(const label shelli, const dictionary& dict);
|
||||
|
||||
//- Specifically orient triSurfaces using a calculated point outside.
|
||||
// Done since quite often triSurfaces not of consistent orientation
|
||||
|
||||
@ -229,13 +229,13 @@ castellatedMeshControls
|
||||
{
|
||||
innerCylinder
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 4));
|
||||
mode inside;
|
||||
level 4;
|
||||
}
|
||||
middleCylinder
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 3));
|
||||
mode inside;
|
||||
level 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -138,8 +138,8 @@ castellatedMeshControls
|
||||
{
|
||||
refinementBox
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 5));
|
||||
mode inside;
|
||||
level 5;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -92,20 +92,20 @@ castellatedMeshControls
|
||||
{
|
||||
body
|
||||
{
|
||||
mode distance;
|
||||
levels ((0.2 5));
|
||||
mode distance;
|
||||
levels ((0.2 5));
|
||||
}
|
||||
|
||||
"(wake|underbody)"
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 4));
|
||||
mode inside;
|
||||
level 4;
|
||||
}
|
||||
|
||||
".*stream"
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 3));
|
||||
mode inside;
|
||||
level 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -145,8 +145,8 @@ castellatedMeshControls
|
||||
{
|
||||
refinementBox
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 4));
|
||||
mode inside;
|
||||
level 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -56,8 +56,8 @@ castellatedMeshControls
|
||||
{
|
||||
refinementBox
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 2));
|
||||
mode inside;
|
||||
level 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -145,8 +145,8 @@ castellatedMeshControls
|
||||
{
|
||||
// refinementBox
|
||||
// {
|
||||
// mode inside;
|
||||
// levels ((1E15 4));
|
||||
// mode inside;
|
||||
// level 4;
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
@ -126,8 +126,8 @@ castellatedMeshControls
|
||||
{
|
||||
refineHole
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 3));
|
||||
mode inside;
|
||||
level 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -131,8 +131,8 @@ castellatedMeshControls
|
||||
{
|
||||
refineHole
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 3));
|
||||
mode inside;
|
||||
level 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -61,8 +61,8 @@ castellatedMeshControls
|
||||
{
|
||||
pipeWall
|
||||
{
|
||||
mode insideSpan;
|
||||
levels ((1000 2));
|
||||
mode insideSpan;
|
||||
level (1000 2);
|
||||
cellsAcrossSpan 40;
|
||||
}
|
||||
}
|
||||
|
||||
@ -229,13 +229,13 @@ castellatedMeshControls
|
||||
{
|
||||
innerCylinder
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 4));
|
||||
mode inside;
|
||||
level 4;
|
||||
}
|
||||
middleCylinder
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 3));
|
||||
mode inside;
|
||||
level 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -48,8 +48,8 @@ castellatedMeshControls
|
||||
{
|
||||
sloshingCylinder
|
||||
{
|
||||
mode inside;
|
||||
levels ((1E15 1));
|
||||
mode inside;
|
||||
level 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user