Minor modification to allow motion-only cases (like the moveDynamicMesh tutorial). Tutorial has been updated to include re-meshing options.
This commit is contained in:
parent
50a408df89
commit
bbd3e5e396
3 changed files with 158 additions and 29 deletions
|
@ -1197,10 +1197,12 @@ void dynamicTopoFvMesh::readOptionalParameters(bool reRead)
|
|||
// Read from disk
|
||||
dict_.readIfModified();
|
||||
|
||||
const dictionary& meshSubDict = dict_.subDict("dynamicTopoFvMesh");
|
||||
|
||||
// Enable/disable run-time debug level
|
||||
if (dict_.found("debug") || mandatory_)
|
||||
if (meshSubDict.found("debug") || mandatory_)
|
||||
{
|
||||
debug = readLabel(dict_.lookup("debug"));
|
||||
debug = readLabel(meshSubDict.lookup("debug"));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1216,8 +1218,6 @@ void dynamicTopoFvMesh::readOptionalParameters(bool reRead)
|
|||
polyMesh::debug = true;
|
||||
}
|
||||
|
||||
const dictionary& meshSubDict = dict_.subDict("dynamicTopoFvMesh");
|
||||
|
||||
// Re-read edge-refinement options, if necessary
|
||||
if (edgeRefinement_ && reRead)
|
||||
{
|
||||
|
|
|
@ -58,7 +58,47 @@ void dynamicTopoFvMesh::computeMapping
|
|||
const label cellSize
|
||||
)
|
||||
{
|
||||
// Compute cell mapping
|
||||
for (label cellI = cellStart; cellI < (cellStart + cellSize); cellI++)
|
||||
{
|
||||
label cIndex = cellsFromCells_[cellI].index();
|
||||
|
||||
if (skipMapping)
|
||||
{
|
||||
// Set empty mapping parameters
|
||||
const labelList& mo = cellParents_[cIndex];
|
||||
|
||||
cellsFromCells_[cellI].masterObjects() = mo;
|
||||
cellWeights_[cellI].setSize(mo.size(), (1.0/(mo.size() + VSMALL)));
|
||||
cellCentres_[cellI].setSize(mo.size(), vector::zero);
|
||||
}
|
||||
}
|
||||
|
||||
// Compute face mapping
|
||||
for (label faceI = faceStart; faceI < (faceStart + faceSize); faceI++)
|
||||
{
|
||||
label fIndex = facesFromFaces_[faceI].index();
|
||||
label patchIndex = whichPatch(fIndex);
|
||||
|
||||
// Skip mapping for internal faces.
|
||||
if (patchIndex == -1)
|
||||
{
|
||||
// Set dummy masters, so that the conventional
|
||||
// faceMapper doesn't incur a seg-fault.
|
||||
facesFromFaces_[faceI].masterObjects() = labelList(1, 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (skipMapping)
|
||||
{
|
||||
// Set empty mapping parameters
|
||||
const labelList& mo = faceParents_[fIndex];
|
||||
|
||||
facesFromFaces_[faceI].masterObjects() = mo;
|
||||
faceWeights_[faceI].setSize(mo.size(), (1.0/(mo.size() + VSMALL)));
|
||||
faceCentres_[faceI].setSize(mo.size(), vector::zero);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -16,29 +16,27 @@ FoamFile
|
|||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
// Select the type of dynamicFvMesh, and load custom library
|
||||
dynamicFvMesh dynamicMotionSolverFvMesh;
|
||||
|
||||
// Load custom libraries
|
||||
motionSolverLibs ("libmesquiteMotionSolver.so");
|
||||
//- Select the type of dynamicFvMesh
|
||||
dynamicFvMesh dynamicTopoFvMesh;
|
||||
|
||||
//- Select the type of motionSolver
|
||||
solver mesquiteMotionSolver;
|
||||
|
||||
mesquiteOptions
|
||||
{
|
||||
// Optimization metric
|
||||
//- Optimization metric
|
||||
optMetric AspectRatioGamma;
|
||||
|
||||
// Objective function
|
||||
//- Objective function
|
||||
objFunction LPtoP;
|
||||
|
||||
// Optimization algorithm
|
||||
//- Optimization algorithm
|
||||
optAlgorithm FeasibleNewton;
|
||||
|
||||
// Termination criteria sub-dictionary
|
||||
// (takes default values if not specified)
|
||||
// Specifying an empty sub-dictionary
|
||||
// terminates with available options
|
||||
//- Termination criteria sub-dictionaries
|
||||
//- (takes default values if not specified)
|
||||
//- Specifying an empty sub-dictionary
|
||||
//- terminates with available options
|
||||
tcInner
|
||||
{
|
||||
absGradL2 1e-4;
|
||||
|
@ -48,34 +46,35 @@ mesquiteOptions
|
|||
// tcOuter
|
||||
// {}
|
||||
|
||||
// For composite functions, two objectives need to be specified
|
||||
//- For composite functions, two objectives need to be specified
|
||||
// firstFunction LPtoP;
|
||||
// secondFunction LInf;
|
||||
|
||||
// For scaled functions, scale and objective needs to be specified
|
||||
//- For scaled functions, scale and objective needs to be specified
|
||||
// scaleFunction PMeanP;
|
||||
// scale 1.5;
|
||||
|
||||
// Power value for the LPtoP objective function
|
||||
//- Power value for the LPtoP objective function
|
||||
pValue 2;
|
||||
power 2;
|
||||
|
||||
// Specify a tolerance for the surface-smoothing CG solver
|
||||
//- Specify a tolerance for the surface-smoothing CG solver
|
||||
tolerance 1e-2;
|
||||
|
||||
// Specify number of CG sweeps for surface-smoothing
|
||||
//- Specify number of CG sweeps for surface-smoothing
|
||||
nSweeps 2;
|
||||
|
||||
// Specify slip patches for the motionSolver
|
||||
//- Specify slip patches for the motionSolver
|
||||
slipPatches
|
||||
{
|
||||
sideWall;
|
||||
topWall;
|
||||
}
|
||||
|
||||
//- Constrain surface mesh-motion on a specified cylinder
|
||||
cylindricalConstraints
|
||||
{
|
||||
// Specify options per slip patch
|
||||
//- Specify options per slip patch
|
||||
sideWall
|
||||
{
|
||||
axisPoint (0.0 0.0 0.0);
|
||||
|
@ -84,15 +83,15 @@ mesquiteOptions
|
|||
}
|
||||
}
|
||||
|
||||
// Specify fixedValue patches for the motionSolver
|
||||
//- Specify fixedValue patches for the motionSolver
|
||||
fixedValuePatches
|
||||
{
|
||||
topWall
|
||||
{
|
||||
//type angularOscillatingDisplacement;
|
||||
//amplitude -0.0125;
|
||||
type oscillatingDisplacement;
|
||||
amplitude (0 0 -0.01);
|
||||
type angularOscillatingDisplacement;
|
||||
amplitude -0.0125;
|
||||
//type oscillatingDisplacement;
|
||||
//amplitude (0 0 -0.01);
|
||||
axis (1 0 0);
|
||||
origin (0 0 3);
|
||||
angle0 0.0;
|
||||
|
@ -101,9 +100,99 @@ mesquiteOptions
|
|||
}
|
||||
}
|
||||
|
||||
// Specify interval for surface smoothing
|
||||
//- Specify interval for surface smoothing
|
||||
surfInterval 1;
|
||||
}
|
||||
|
||||
//- Options for dynamicTopoFvMesh
|
||||
dynamicTopoFvMesh
|
||||
{
|
||||
//- Should all options be made mandatory?
|
||||
//- Useful for first-time use.
|
||||
allOptionsMandatory no;
|
||||
|
||||
//- Set run-time debug level [0-5]
|
||||
// debug 0;
|
||||
|
||||
//- Specify the number of threads
|
||||
threads 1;
|
||||
|
||||
//- Specify re-meshing interval
|
||||
//- Negative value implies no re-meshing
|
||||
interval 1;
|
||||
|
||||
//- Specify whether the length-scale field
|
||||
//- should be dumped to disk
|
||||
dumpLengthScale false;
|
||||
|
||||
//- sliverThreshold specifies the
|
||||
//- quality criteria for sliver removal.
|
||||
sliverThreshold 0.35;
|
||||
|
||||
//- Should the tool attempt to remove slivers
|
||||
//- that fall below the sliverThreshold value?
|
||||
removeSlivers false;
|
||||
|
||||
//- Skip mapping step. Useful while using
|
||||
//- this tool as a pre-processor
|
||||
skipMapping true;
|
||||
|
||||
// Toggle edgeRefinement on/off
|
||||
edgeRefinement yes;
|
||||
|
||||
//- Options for edge-bisection/collapse.
|
||||
//- The edgeRefinement flag must be set for
|
||||
//- the following options to have effect
|
||||
refinementOptions
|
||||
{
|
||||
collapseRatio 0.5;
|
||||
bisectionRatio 1.5;
|
||||
growthFactor 1.03;
|
||||
|
||||
//- By default, existing boundary edge-lengths
|
||||
//- are used for length-scales.
|
||||
//- Length-scale can be fixed for certain patches.
|
||||
fixedLengthScalePatches
|
||||
{
|
||||
topWall 0.2;
|
||||
bottomWall 0.2;
|
||||
sideWall 0.2;
|
||||
outlet 0.2;
|
||||
}
|
||||
|
||||
//- Avoid refinement on certain patches, if necessary
|
||||
noModificationPatches
|
||||
{}
|
||||
|
||||
//- Set floating length-scale values on certain patches
|
||||
freeLengthScalePatches
|
||||
{}
|
||||
|
||||
//- Limit lengthScales to specified values, if necessary
|
||||
// minLengthScale 0.1;
|
||||
// maxLengthScale 0.3;
|
||||
|
||||
//- Field-based refinement options
|
||||
// fieldRefinement gamma;
|
||||
// fieldLengthScale 0.005;
|
||||
// lowerRefineLevel 0.001;
|
||||
// upperRefineLevel 0.999;
|
||||
// maxRefineLevel 4;
|
||||
// meanScale 0.015;
|
||||
}
|
||||
|
||||
//- If the number of modifications are to be limited, set this option
|
||||
// maxModifications 1000;
|
||||
|
||||
//- Load custom libraries for metrics
|
||||
// tetMetricLibs ("libtetMetrics.so");
|
||||
|
||||
//- Tetrahedral mesh quality metric
|
||||
tetMetric Knupp;
|
||||
|
||||
//- Avoid 2-2 swapping on certain patches
|
||||
noSwapPatches
|
||||
{}
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
|
|
Reference in a new issue