Given a displacement moves the mesh by scaling the displacement back until there are no more mesh errors. More...
Public Member Functions | |
ClassName ("motionSmootherAlgo") | |
motionSmootherAlgo (polyMesh &, pointMesh &, indirectPrimitivePatch &pp, pointVectorField &displacement, pointScalarField &scale, pointField &oldPoints, const labelList &adaptPatchIDs, const dictionary ¶mDict, const bool dryRun=false) | |
Construct from mesh, patches to work on and smoothing parameters. More... | |
~motionSmootherAlgo () | |
Destructor. More... | |
const polyMesh & | mesh () const |
Reference to mesh. More... | |
const pointMesh & | pMesh () const |
Reference to pointMesh. More... | |
const indirectPrimitivePatch & | patch () const |
Reference to patch. More... | |
const labelList & | adaptPatchIDs () const |
Patch labels that are being adapted. More... | |
const dictionary & | paramDict () const |
pointVectorField & | pointDisplacement () |
Return reference to the point motion displacement field. More... | |
const pointVectorField & | pointDisplacement () const |
Return const reference to the point motion displacement field. More... | |
void | correct () |
Take over existing mesh position. More... | |
void | setDisplacementPatchFields () |
Set patch fields on displacement to be consistent with. More... | |
void | setDisplacement (pointField &patchDisp) |
void | correctBoundaryConditions (pointVectorField &) const |
Special correctBoundaryConditions which evaluates fixedValue. More... | |
void | modifyMotionPoints (pointField &newPoints) const |
Apply optional point constraint (2d correction) More... | |
tmp< pointField > | curPoints () const |
Get the current points (oldPoints+scale*displacement) More... | |
scalar | setErrorReduction (const scalar) |
Set the errorReduction (by how much to scale the displacement. More... | |
bool | scaleMesh (labelList &checkFaces, const bool smoothMesh=true, const label nAllow=0) |
Move mesh with given scale. Return true if mesh ok or has. More... | |
bool | scaleMesh (labelList &checkFaces, const List< labelPair > &baffles, const bool smoothMesh=true, const label nAllow=0) |
Move mesh (with baffles) with given scale. More... | |
bool | scaleMesh (labelList &checkFaces, const List< labelPair > &baffles, const dictionary ¶mDict, const dictionary &meshQualityDict, const bool smoothMesh=true, const label nAllow=0) |
Move mesh with externally provided mesh constraints. More... | |
void | movePoints () |
Update for new mesh geometry. More... | |
void | updateMesh () |
Update for new mesh topology. More... | |
template<class Type > | |
void | smooth (const GeometricField< Type, pointPatchField, pointMesh > &fld, const scalarField &edgeWeight, GeometricField< Type, pointPatchField, pointMesh > &newFld) const |
Fully explicit smoothing of fields (not positions) More... | |
template<class Type > | |
Foam::tmp< Foam::GeometricField< Type, Foam::pointPatchField, Foam::pointMesh > > | avg (const GeometricField< Type, pointPatchField, pointMesh > &fld, const scalarField &edgeWeight) const |
Static Public Member Functions | |
static void | setDisplacementPatchFields (const labelList &patchIDs, pointVectorField &pointDisplacement) |
Set patch fields on patchIDs to be consistent with. More... | |
static void | setDisplacement (const labelList &patchIDs, const indirectPrimitivePatch &pp, pointField &patchDisp, pointVectorField &displacement) |
Set displacement field from displacement on patch points. More... | |
static bool | checkMesh (const bool report, const polyMesh &mesh, const dictionary &dict, labelHashSet &wrongFaces, const bool dryRun=false) |
Check mesh with mesh settings in dict. Collects incorrect faces. More... | |
static bool | checkMesh (const bool report, const polyMesh &mesh, const dictionary &dict, const labelList &checkFaces, labelHashSet &wrongFaces, const bool dryRun=false) |
Check (subset of mesh) with mesh settings in dict. More... | |
static bool | checkMesh (const bool report, const polyMesh &mesh, const dictionary &dict, const labelList &checkFaces, const List< labelPair > &baffles, labelHashSet &wrongFaces, const bool dryRun=false) |
Check (subset of mesh including baffles) with mesh settings. More... | |
static bool | checkMesh (const bool report, const dictionary &dict, const polyMeshGeometry &, const pointField &, const labelList &checkFaces, labelHashSet &wrongFaces, const bool dryRun=false) |
Check part of mesh with mesh settings in dict. More... | |
static bool | checkMesh (const bool report, const dictionary &dict, const polyMeshGeometry &, const pointField &, const labelList &checkFaces, const List< labelPair > &baffles, labelHashSet &wrongFaces, const bool dryRun=false) |
Check part of mesh including baffles with mesh settings in dict. More... | |
template<class Type > | |
static Type | get (const dictionary &dict, const word &keyword, const bool noExit, enum keyType::option matchOpt, const Type &defaultValue=Zero) |
Wrapper around dictionary::get which does not exit. More... | |
Given a displacement moves the mesh by scaling the displacement back until there are no more mesh errors.
Holds displacement field (read upon construction since need boundary conditions) and scaling factor and optional patch number on which to scale back displacement.
E.g.
// Construct iterative mesh mover. motionSmoother meshMover(mesh, labelList(1, patchi)); // Set desired displacement: meshMover.displacement() = .. for (label iter = 0; iter < maxIter; iter++) { if (meshMover.scaleMesh(true)) { Info<< "Successfully moved mesh" << endl; return true; } }
Definition at line 100 of file motionSmootherAlgo.H.
motionSmootherAlgo | ( | polyMesh & | mesh, |
pointMesh & | pMesh, | ||
indirectPrimitivePatch & | pp, | ||
pointVectorField & | displacement, | ||
pointScalarField & | scale, | ||
pointField & | oldPoints, | ||
const labelList & | adaptPatchIDs, | ||
const dictionary & | paramDict, | ||
const bool | dryRun = false |
||
) |
Construct from mesh, patches to work on and smoothing parameters.
Definition at line 325 of file motionSmootherAlgo.C.
References motionSmootherAlgo::updateMesh().
~motionSmootherAlgo | ( | ) |
Destructor.
Definition at line 355 of file motionSmootherAlgo.C.
ClassName | ( | "motionSmootherAlgo" | ) |
const Foam::polyMesh & mesh | ( | ) | const |
Reference to mesh.
Definition at line 361 of file motionSmootherAlgo.C.
Referenced by motionSmootherAlgo::checkMesh().
const Foam::pointMesh & pMesh | ( | ) | const |
Reference to pointMesh.
Definition at line 367 of file motionSmootherAlgo.C.
Referenced by snappySnapDriver::smoothDisplacement().
const Foam::indirectPrimitivePatch & patch | ( | ) | const |
Reference to patch.
Definition at line 373 of file motionSmootherAlgo.C.
Referenced by snappySnapDriver::smoothDisplacement().
const Foam::labelList & adaptPatchIDs | ( | ) | const |
Patch labels that are being adapted.
Definition at line 379 of file motionSmootherAlgo.C.
const Foam::dictionary & paramDict | ( | ) | const |
Definition at line 385 of file motionSmootherAlgo.C.
|
inline |
Return reference to the point motion displacement field.
Definition at line 339 of file motionSmootherAlgo.H.
Referenced by snappySnapDriver::preSmoothPatch().
|
inline |
Return const reference to the point motion displacement field.
Definition at line 345 of file motionSmootherAlgo.H.
void correct | ( | ) |
Take over existing mesh position.
Definition at line 391 of file motionSmootherAlgo.C.
Referenced by snappySnapDriver::doSnap(), and snappySnapDriver::preSmoothPatch().
|
static |
Set patch fields on patchIDs to be consistent with.
all other boundary conditions
Definition at line 403 of file motionSmootherAlgo.C.
References GeometricField< Type, PatchField, GeoMesh >::boundaryFieldRef(), GeometricBoundaryField< Type, PatchField, GeoMesh >::evaluate(), HashTable< T, Key, Hash >::found(), DimensionedField< Type, GeoMesh >::mesh(), Time::New(), and UPstream::scheduled.
void setDisplacementPatchFields | ( | ) |
Set patch fields on displacement to be consistent with.
internal values.
Definition at line 461 of file motionSmootherAlgo.C.
|
static |
Set displacement field from displacement on patch points.
Modify provided displacement to be consistent with actual boundary conditions on displacement. Note: resets the displacement to be 0 on coupled patches beforehand to make sure shared points partially on pp (on some processors) and partially not (on other processors) get the value from pp.
Definition at line 467 of file motionSmootherAlgo.C.
References globalMeshData::coupledPatch(), IOobject::db(), Foam::endl(), forAll, polyMesh::globalData(), Foam::mag(), mesh, DimensionedField< Type, GeoMesh >::mesh(), PrimitivePatch< FaceList, PointField >::meshPoints(), OFstream::name(), primitiveMesh::nPoints(), IOobject::path(), polyMesh::points(), Foam::Pout, syncTools::syncPointList(), bitSet::test(), Foam::meshTools::writeOBJ(), and Foam::Zero.
Referenced by snappyLayerDriver::addLayers(), snappySnapDriver::doSnap(), and snappySnapDriver::preSmoothPatch().
void setDisplacement | ( | pointField & | patchDisp | ) |
Definition at line 562 of file motionSmootherAlgo.C.
void correctBoundaryConditions | ( | pointVectorField & | displacement | ) | const |
Special correctBoundaryConditions which evaluates fixedValue.
patches first so they get overwritten with any constraint bc's.
Definition at line 569 of file motionSmootherAlgo.C.
References UPstream::blocking, GeometricField< Type, PatchField, GeoMesh >::boundaryFieldRef(), GeometricBoundaryField< Type, PatchField, GeoMesh >::evaluate(), HashTable< T, Key, Hash >::found(), DimensionedField< Type, GeoMesh >::mesh(), Time::New(), and syncTools::syncPointList().
void modifyMotionPoints | ( | pointField & | newPoints | ) | const |
Apply optional point constraint (2d correction)
Definition at line 636 of file motionSmootherAlgo.C.
References twoDPointCorrector::correctPoints(), e, UList< T >::end(), Foam::endl(), forAll, Foam::Info, Time::New(), twoDPointCorrector::normalEdgeIndices(), twoDPointCorrector::planeNormal(), Foam::Pout, twoDPointCorrector::required(), and WarningInFunction.
Foam::tmp< Foam::pointField > curPoints | ( | ) | const |
Get the current points (oldPoints+scale*displacement)
Definition at line 748 of file motionSmootherAlgo.C.
References pointMesh::boundary(), correctBoundaryConditions(), e, Foam::endl(), forAll, Foam::isA(), pointBoundaryMesh::mesh(), IOobject::NO_READ, IOobject::NO_WRITE, Foam::Pout, GeometricField< Type, PatchField, GeoMesh >::primitiveField(), tmp< T >::ref(), List< T >::setSize(), and UPtrList< T >::size().
Foam::scalar setErrorReduction | ( | const scalar | errorReduction | ) |
Set the errorReduction (by how much to scale the displacement.
at error locations) parameter. Returns the old value. Set to 0 (so revert to old mesh) grows out one cell layer from error faces.
Definition at line 696 of file motionSmootherAlgo.C.
Referenced by snappySnapDriver::preSmoothPatch(), and snappySnapDriver::scaleMesh().
Move mesh with given scale. Return true if mesh ok or has.
less than nAllow errors, false otherwise and locally update scale. Smoothmesh=false means only patch points get moved. Parallel ok (as long as displacement field is consistent across patches)
Definition at line 710 of file motionSmootherAlgo.C.
Referenced by snappySnapDriver::preSmoothPatch(), and snappySnapDriver::scaleMesh().
bool scaleMesh | ( | labelList & | checkFaces, |
const List< labelPair > & | baffles, | ||
const bool | smoothMesh = true , |
||
const label | nAllow = 0 |
||
) |
Move mesh (with baffles) with given scale.
Definition at line 728 of file motionSmootherAlgo.C.
bool scaleMesh | ( | labelList & | checkFaces, |
const List< labelPair > & | baffles, | ||
const dictionary & | paramDict, | ||
const dictionary & | meshQualityDict, | ||
const bool | smoothMesh = true , |
||
const label | nAllow = 0 |
||
) |
Move mesh with externally provided mesh constraints.
Definition at line 821 of file motionSmootherAlgo.C.
References coupled(), Foam::endl(), Foam::exit(), Foam::FatalError, FatalErrorInFunction, forAll, coupledPolyPatch::forwardT(), Foam::gMax(), Foam::gMin(), Foam::Info, HashSet< Key, Hash >::insert(), Foam::mag(), patchIdentifier::name(), Foam::nl, coupledPolyPatch::parallel(), patches, Foam::Pout, keyType::REGEX_RECURSIVE, Foam::returnReduce(), coupledPolyPatch::separated(), HashTable< T, Key, Hash >::size(), UList< T >::size(), faceSet::sync(), pointSet::sync(), and syncTools::syncPointList().
void movePoints | ( | ) |
Update for new mesh geometry.
Definition at line 687 of file motionSmootherAlgo.C.
Referenced by processorFaPatch::initMovePoints(), processorPolyPatch::initMovePoints(), cyclicAMIPolyPatch::initMovePoints(), velocityDisplacementMotionSolver::movePoints(), fvMesh::movePoints(), displacementMeshMoverMotionSolver::movePoints(), displacementMotionSolverMeshMover::movePoints(), medialAxisMeshMover::movePoints(), triSurfaceMesh::movePoints(), polyMesh::movePoints(), momentum::movePoints(), cyclicFaPatch::movePoints(), mappedPolyPatch::movePoints(), mappedWallPolyPatch::movePoints(), cyclicPolyPatch::movePoints(), oldCyclicPolyPatch::movePoints(), polyPatch::movePoints(), and cyclicACMIPolyPatch::movePoints().
void updateMesh | ( | ) |
Update for new mesh topology.
Definition at line 1032 of file motionSmootherAlgo.C.
References Foam::exit(), Foam::FatalError, FatalErrorInFunction, syncTools::getMasterEdges(), IOobject::name(), Foam::nl, and patches.
Referenced by motionSmootherAlgo::motionSmootherAlgo(), PatchFlowRateInjection< CloudType >::PatchFlowRateInjection(), PatchInjection< CloudType >::PatchInjection(), PatchFlowRateInjection< CloudType >::updateMesh(), PatchInjection< CloudType >::updateMesh(), componentDisplacementMotionSolver::updateMesh(), componentVelocityMotionSolver::updateMesh(), points0MotionSolver::updateMesh(), velocityDisplacementMotionSolver::updateMesh(), velocityMotionSolver::updateMesh(), momentum::updateMesh(), displacementComponentLaplacianFvMotionSolver::updateMesh(), velocityComponentLaplacianFvMotionSolver::updateMesh(), displacementLaplacianFvMotionSolver::updateMesh(), displacementSBRStressFvMotionSolver::updateMesh(), solidBodyDisplacementLaplacianFvMotionSolver::updateMesh(), velocityLaplacianFvMotionSolver::updateMesh(), displacementMeshMoverMotionSolver::updateMesh(), undoableMeshCutter::updateMesh(), displacementLayeredMotionMotionSolver::updateMesh(), fvMesh::updateMesh(), processorFaPatch::updateMesh(), cyclicACMIPointPatch::updateMesh(), cyclicACMIPolyPatch::updateMesh(), cyclicAMIPointPatch::updateMesh(), cyclicAMIPolyPatch::updateMesh(), mappedPolyPatch::updateMesh(), mappedWallPolyPatch::updateMesh(), cyclicPolyPatch::updateMesh(), oldCyclicPolyPatch::updateMesh(), processorPolyPatch::updateMesh(), and processorCyclicPolyPatch::updateMesh().
|
static |
Check mesh with mesh settings in dict. Collects incorrect faces.
in set. Returns true if one or more faces in error. Parallel ok.
Definition at line 461 of file motionSmootherAlgoCheck.C.
References dict, Foam::identity(), mesh, and primitiveMesh::nFaces().
Referenced by motionSmootherAlgo::checkMesh().
|
static |
Check (subset of mesh) with mesh settings in dict.
Collects incorrect faces in set. Returns true if one or more faces in error. Parallel ok.
Definition at line 35 of file motionSmootherAlgoCheck.C.
References motionSmootherAlgo::checkMesh(), dict, and motionSmootherAlgo::mesh().
|
static |
Check (subset of mesh including baffles) with mesh settings.
in dict. Collects incorrect faces in set. Returns true if one or more faces in error. Parallel ok.
Definition at line 58 of file motionSmootherAlgoCheck.C.
References polyMeshGeometry::affectedCells(), primitiveMesh::cellCentres(), primitiveMesh::cellVolumes(), polyMeshGeometry::checkCellDeterminant(), polyMeshGeometry::checkFaceAngles(), polyMeshGeometry::checkFaceArea(), polyMeshGeometry::checkFaceDotProduct(), polyMeshGeometry::checkFaceFlatness(), polyMeshGeometry::checkFacePyramids(), polyMeshGeometry::checkFaceSkewness(), polyMeshGeometry::checkFaceTets(), polyMeshGeometry::checkFaceTwist(), polyMeshGeometry::checkFaceWeights(), polyMeshGeometry::checkTriangleTwist(), polyMeshGeometry::checkVolRatio(), error::clear(), dict, Foam::endl(), primitiveMesh::faceAreas(), primitiveMesh::faceCentres(), Foam::FatalError, Foam::FatalIOError, dictionary::getOrDefault(), Foam::Info, IOWarningInFunction, mesh, error::message(), Foam::nl, polyMesh::points(), keyType::REGEX_RECURSIVE, Foam::returnReduce(), Foam::setw(), and HashTable< T, Key, Hash >::size().
|
static |
Check part of mesh with mesh settings in dict.
Collects incorrect faces in set. Returns true if one or more faces in error. Parallel ok.
Definition at line 481 of file motionSmootherAlgoCheck.C.
|
static |
Check part of mesh including baffles with mesh settings in dict.
Collects incorrect faces in set. Returns true if one or more faces in error. Parallel ok.
Definition at line 508 of file motionSmootherAlgoCheck.C.
References polyMeshGeometry::affectedCells(), polyMeshGeometry::cellCentres(), polyMeshGeometry::checkCellDeterminant(), polyMeshGeometry::checkFaceAngles(), polyMeshGeometry::checkFaceArea(), polyMeshGeometry::checkFaceDotProduct(), polyMeshGeometry::checkFaceFlatness(), polyMeshGeometry::checkFacePyramids(), polyMeshGeometry::checkFaceSkewness(), polyMeshGeometry::checkFaceTets(), polyMeshGeometry::checkFaceTwist(), polyMeshGeometry::checkFaceWeights(), polyMeshGeometry::checkTriangleTwist(), polyMeshGeometry::checkVolRatio(), error::clear(), dict, Foam::endl(), polyMeshGeometry::faceAreas(), polyMeshGeometry::faceCentres(), Foam::FatalError, Foam::FatalIOError, Foam::Info, polyMeshGeometry::mesh(), error::message(), Foam::nl, Foam::Perr, points, dictionary::readIfPresent(), keyType::REGEX_RECURSIVE, Foam::returnReduce(), Foam::setw(), and HashTable< T, Key, Hash >::size().
void smooth | ( | const GeometricField< Type, pointPatchField, pointMesh > & | fld, |
const scalarField & | edgeWeight, | ||
GeometricField< Type, pointPatchField, pointMesh > & | newFld | ||
) | const |
Fully explicit smoothing of fields (not positions)
of internal points with varying diffusivity.
Definition at line 232 of file motionSmootherAlgoTemplates.C.
References fld(), forAll, and Time::New().
Referenced by snappySnapDriver::smoothDisplacement().
|
static |
Wrapper around dictionary::get which does not exit.
Definition at line 294 of file motionSmootherAlgoTemplates.C.
References dict, Foam::endl(), Foam::FatalIOError, dictionary::name(), and dictionary::readEntry().
Foam::tmp< Foam::GeometricField< Type, Foam::pointPatchField, Foam::pointMesh > > avg | ( | const GeometricField< Type, pointPatchField, pointMesh > & | fld, |
const scalarField & | edgeWeight | ||
) | const |
Definition at line 141 of file motionSmootherAlgoTemplates.C.
References e, primitiveMesh::edges(), fld(), forAll, Foam::mag(), mesh, Time::New(), Foam::New(), IOobject::NO_READ, IOobject::NO_WRITE, primitiveMesh::nPoints(), syncTools::syncPointList(), and Foam::Zero.