Start/restart handling in dynamicPolyRefinementFvMesh
If the constant/polyMesh/meshModifiers file is present, we simply neglect it and use the controls from dynamicMeshDict to avoid confusion.
This commit is contained in:
parent
44cef61dbe
commit
d5948f3fb7
1 changed files with 95 additions and 79 deletions
|
@ -117,89 +117,105 @@ Foam::dynamicPolyRefinementFvMesh::dynamicPolyRefinementFvMesh
|
||||||
// protectedInitialRefinement)
|
// protectedInitialRefinement)
|
||||||
refinementSelectionPtr_()
|
refinementSelectionPtr_()
|
||||||
{
|
{
|
||||||
// Only create topo modifiers if they haven't been read in
|
// Check whether we read polyMeshModifiers from
|
||||||
// HJ, 16/Oct/2018
|
// constant/polyMesh/meshModifiers file in the base class
|
||||||
if (topoChanger_.empty())
|
if (!topoChanger_.empty())
|
||||||
{
|
{
|
||||||
// Only one topo changer engine
|
// Already initialized, warn the user that we'll neglect it
|
||||||
topoChanger_.setSize(1);
|
WarningIn
|
||||||
|
(
|
||||||
|
"dynamicPolyRefinementFvMesh::dynamicPolyRefinementFvMesh"
|
||||||
|
"\n("
|
||||||
|
"\n const IOobject& io"
|
||||||
|
"\n const word subDictName"
|
||||||
|
"\n)"
|
||||||
|
) << "Using controls from constant/dynamicMeshDict instead of"
|
||||||
|
<< " constant/polyMesh/meshModifiers."
|
||||||
|
<< nl
|
||||||
|
<< "To supress this warning, delete meshModifiers file."
|
||||||
|
<< endl;
|
||||||
|
|
||||||
// Get number of valid geometric dimensions
|
// Clear the list
|
||||||
const label nGeometricDirs = this->nGeometricD();
|
topoChanger_.clear();
|
||||||
|
|
||||||
switch(nGeometricDirs)
|
|
||||||
{
|
|
||||||
case 3:
|
|
||||||
// Add the polyhedralRefinement engine for
|
|
||||||
// 3D isotropic refinement
|
|
||||||
Info<< "3D case detected. "
|
|
||||||
<< "Adding polyhedralRefinement topology modifier" << endl;
|
|
||||||
topoChanger_.set
|
|
||||||
(
|
|
||||||
0,
|
|
||||||
new polyhedralRefinement
|
|
||||||
(
|
|
||||||
"polyhedralRefinement",
|
|
||||||
refinementDict_,
|
|
||||||
0,
|
|
||||||
topoChanger_
|
|
||||||
)
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
// Add the prismatic2DRefinement engine for
|
|
||||||
// 2D isotropic refinement
|
|
||||||
Info<< "2D case detected. "
|
|
||||||
<< "Adding prismatic2DRefinement topology modifier" << endl;
|
|
||||||
topoChanger_.set
|
|
||||||
(
|
|
||||||
0,
|
|
||||||
new prismatic2DRefinement
|
|
||||||
(
|
|
||||||
"prismatic2DRefinement",
|
|
||||||
refinementDict_,
|
|
||||||
0,
|
|
||||||
topoChanger_
|
|
||||||
)
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"dynamicPolyRefinementFvMesh::dynamicPolyRefinementFvMesh"
|
|
||||||
"\n("
|
|
||||||
"\n const IOobject& io,"
|
|
||||||
"\n const word subDictName"
|
|
||||||
"\n)"
|
|
||||||
) << "1D case detected. No valid refinement strategy is"
|
|
||||||
<< " available for 1D cases."
|
|
||||||
<< abort(FatalError);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"dynamicPolyRefinementFvMesh::dynamicPolyRefinementFvMesh"
|
|
||||||
"\n("
|
|
||||||
"\n const IOobject& io,"
|
|
||||||
"\n const word subDictName"
|
|
||||||
"\n)"
|
|
||||||
) << "Invalid number of geometric meshes detected: "
|
|
||||||
<< nGeometricDirs
|
|
||||||
<< nl << "It appears that this mesh is neither 1D, 2D or 3D."
|
|
||||||
<< nl << " the mesh."
|
|
||||||
<< abort(FatalError);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write mesh and modifiers
|
|
||||||
topoChanger_.writeOpt() = IOobject::AUTO_WRITE;
|
|
||||||
topoChanger_.write();
|
|
||||||
write();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only one topo changer engine
|
||||||
|
topoChanger_.setSize(1);
|
||||||
|
|
||||||
|
// Get number of valid geometric dimensions
|
||||||
|
const label nGeometricDirs = this->nGeometricD();
|
||||||
|
|
||||||
|
switch(nGeometricDirs)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
// Add the polyhedralRefinement engine for
|
||||||
|
// 3D isotropic refinement
|
||||||
|
Info<< "3D case detected. "
|
||||||
|
<< "Adding polyhedralRefinement topology modifier" << endl;
|
||||||
|
topoChanger_.set
|
||||||
|
(
|
||||||
|
0,
|
||||||
|
new polyhedralRefinement
|
||||||
|
(
|
||||||
|
"polyhedralRefinement",
|
||||||
|
refinementDict_,
|
||||||
|
0,
|
||||||
|
topoChanger_
|
||||||
|
)
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
// Add the prismatic2DRefinement engine for
|
||||||
|
// 2D isotropic refinement
|
||||||
|
Info<< "2D case detected. "
|
||||||
|
<< "Adding prismatic2DRefinement topology modifier" << endl;
|
||||||
|
topoChanger_.set
|
||||||
|
(
|
||||||
|
0,
|
||||||
|
new prismatic2DRefinement
|
||||||
|
(
|
||||||
|
"prismatic2DRefinement",
|
||||||
|
refinementDict_,
|
||||||
|
0,
|
||||||
|
topoChanger_
|
||||||
|
)
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"dynamicPolyRefinementFvMesh::dynamicPolyRefinementFvMesh"
|
||||||
|
"\n("
|
||||||
|
"\n const IOobject& io,"
|
||||||
|
"\n const word subDictName"
|
||||||
|
"\n)"
|
||||||
|
) << "1D case detected. No valid refinement strategy is"
|
||||||
|
<< " available for 1D cases."
|
||||||
|
<< abort(FatalError);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"dynamicPolyRefinementFvMesh::dynamicPolyRefinementFvMesh"
|
||||||
|
"\n("
|
||||||
|
"\n const IOobject& io,"
|
||||||
|
"\n const word subDictName"
|
||||||
|
"\n)"
|
||||||
|
) << "Invalid number of geometric meshes detected: "
|
||||||
|
<< nGeometricDirs
|
||||||
|
<< nl << "It appears that this mesh is neither 1D, 2D or 3D."
|
||||||
|
<< abort(FatalError);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write mesh and modifiers
|
||||||
|
topoChanger_.writeOpt() = IOobject::AUTO_WRITE;
|
||||||
|
topoChanger_.write();
|
||||||
|
write();
|
||||||
|
|
||||||
// Initialize refinement selection algorithm after modifiers
|
// Initialize refinement selection algorithm after modifiers
|
||||||
refinementSelectionPtr_ = refinementSelection::New(*this, refinementDict_);
|
refinementSelectionPtr_ = refinementSelection::New(*this, refinementDict_);
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue