44 laplacianMotionSolver,
60 if (isA<fixedValueFvPatchVectorField>(bField))
75 Foam::laplacianMotionSolver::laplacianMotionSolver
78 const IOdictionary&
dict 90 IOobject::READ_IF_PRESENT,
95 fixedValuePointPatchVectorField::typeName
104 IOobject::READ_IF_PRESENT,
109 pointMotionU_.boundaryField().types()
113 coeffDict().
found(
"interpolation")
114 ? motionInterpolation::
New(fvMesh_, coeffDict().lookup(
"interpolation"))
115 : motionInterpolation::
New(fvMesh_)
117 nIters_(this->coeffDict().
get<label>(
"iters")),
118 tolerance_(this->coeffDict().
get<scalar>(
"tolerance"))
126 interpolationPtr_->interpolate
134 fvMesh_.points() + pointMotionU_.internalField()
137 twoDCorrectPoints(tcurPoints.ref());
145 setBoundaryConditions();
148 for (label iter = 0; iter < nIters_; ++iter)
150 Info<<
"Iteration " << iter <<
endl;
156 scalar residual =
mag(dEqn.
solve().initialResidual());
159 fvMesh_.time().printExecutionTime(
Info);
162 if (residual < tolerance_)
164 Info<<
"\n***Reached mesh movement convergence limit at" 165 <<
" iteration " << iter <<
"***\n\n";
List< ReturnType > get(const UPtrList< T > &list, const AccessOp &aop)
List of values generated by applying the access operation to each list item.
virtual void movePoints(const pointField &)
Update local data for geometry changes.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
A list of keyword definitions, which are a keyword followed by a number of values (eg...
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
Ostream & endl(Ostream &os)
Add newline and flush stream.
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tf1, const word &name, const dimensionSet &dimensions, const bool initCopy=false)
Global function forwards to reuseTmpDimensionedField::New.
virtual void solve()
Solve for motion.
Calculate the matrix for the laplacian of the field.
const fvMesh & fvMesh_
The fvMesh to be moved.
const dimensionSet dimless
Dimensionless.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Macros for easy insertion into run-time selection tables.
virtual const pointField & points() const
Return raw points.
volVectorField cellMotionU_
#define forAll(list, i)
Loop across all elements in list.
pointVectorField pointMotionU_
const polyBoundaryMesh & boundaryMesh() const noexcept
Return boundary mesh.
A special matrix type and solver, designed for finite volume solutions of scalar equations. Face addressing is used to make all matrix assembly and solution loops vectorise.
void updateCoeffs()
Update the boundary condition coefficients.
SolverPerformance< Type > solve(const dictionary &)
Solve returning the solution statistics.
virtual void updateMesh(const mapPolyMesh &)
Update the mesh corresponding to given map.
defineTypeNameAndDebug(combustionModel, 0)
addToRunTimeSelectionTable(decompositionMethod, kahipDecomp, dictionary)
tmp< fvMatrix< Type > > laplacian(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
virtual tmp< pointField > curPoints() const
Return point location obtained from the current motion field.
const std::string patch
OpenFOAM patch number as a std::string.
Boundary & boundaryFieldRef(const bool updateAccessTime=true)
Return a reference to the boundary field.
messageStream Info
Information stream (stdout output on master, null elsewhere)
void setBoundaryConditions()
Set boundary conditions of cellMotionU based on pointMotionU.
A class for managing temporary objects.
A patch is a list of labels that address the faces in the global face list.
const Boundary & boundaryField() const noexcept
Return const-reference to the boundary field.
static constexpr const zero Zero
Global zero (0)