Loading...
Searching...
No Matches
displacementMethodlaplacianMotionSolver.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2007-2023 PCOpt/NTUA
9 Copyright (C) 2013-2023 FOSS GP
10 Copyright (C) 2019-2020 OpenCFD Ltd.
11-------------------------------------------------------------------------------
12License
13 This file is part of OpenFOAM.
14
15 OpenFOAM is free software: you can redistribute it and/or modify it
16 under the terms of the GNU General Public License as published by
17 the Free Software Foundation, either version 3 of the License, or
18 (at your option) any later version.
19
20 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
21 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
27
28\*---------------------------------------------------------------------------*/
29
33
34// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
36namespace Foam
37{
38
39// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40
43(
44 displacementMethod,
45 displacementMethodlaplacianMotionSolver,
47);
48
49// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
50
51displacementMethodlaplacianMotionSolver::displacementMethodlaplacianMotionSolver
52(
53 fvMesh& mesh,
54 const labelList& patchIDs
55)
56:
57 displacementMethod(mesh, patchIDs),
61 (
62 IOdictionary::readContents
63 (
65 (
66 "dynamicMeshDict",
67 mesh.time().constant(),
68 mesh,
69 IOobject::MUST_READ
70 )
71 ).subDict("laplacianMotionSolverCoeffs").getOrDefault<bool>
72 (
73 "resetFields",
74 true
75 )
76 )
77{}
78
79
80// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
83{
84 return false;
85}
86
87
89(
90 const pointVectorField& pointMovement
91)
92{
93 if (resetFields_)
94 {
98 }
99
100 maxDisplacement_ = SMALL;
101
102 // Set boundary mesh movement and calculate
103 // max current boundary displacement
104 for (const label patchI : patchIDs_)
105 {
106 // Set boundary field. Needed for the motionSolver class
108 pointMovement.boundaryField()[patchI].patchInternalField()();
109
110 // Set boundary field values as seen from the internalField!
111 // Needed for determining the max displacement
112 pointMotionU_.boundaryFieldRef()[patchI].setInInternalField
113 (
115 pointMovement.boundaryField()[patchI].patchInternalField()()
116 );
117
118 // Find max value
120 max
121 (
123 gMax
124 (
125 mag
126 (
128 patchInternalField()
129 )
130 )
131 );
132 }
133 // Transfer movement to cellMotionU
134 refCast<laplacianMotionSolver>(motionPtr_()).setBoundaryConditions();
135}
136
137
139(
140 const volVectorField& cellMovement
141)
142{
143 if (resetFields_)
144 {
148 }
149
150 auto& cellMotionUbf = cellMotionU_.boundaryFieldRef();
151 // Set boundary mesh movement and calculate max current boundary
152 // displacement
153 for (const label patchI : patchIDs_)
154 {
155 cellMotionUbf[patchI] == cellMovement.boundaryField()[patchI];
156
157 // Find max value
159 max
160 (
162 gMax(mag(cellMotionUbf[patchI]))
163 );
164 }
165}
166
167
169(
170 const vectorField& controlField
171)
172{
174}
175
176
178(
179 const scalarField& controlField
180)
181{
183}
184
185
186// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
187
188} // End namespace Foam
189
190// ************************************************************************* //
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
labelList patchIDs
Internal::FieldType & primitiveFieldRef(const bool updateAccessTime=true)
Return a reference to the internal field values.
Boundary & boundaryFieldRef(const bool updateAccessTime=true)
Return a reference to the boundary field.
void correctBoundaryConditions()
Correct boundary field.
const Boundary & boundaryField() const noexcept
Return const-reference to the boundary field.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition IOobject.H:191
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
Abstract base class for displacement methods, which are a set or wrapper classes allowing to change t...
autoPtr< motionSolver > motionPtr_
labelList patchIDs_
IDs of the patches to be moved.
Wrapper class for the velocityLaplacian motion solver.
virtual bool preferPointField() const
Whether the motion solver prefers a point of a vol field as input.
void setMotionField(const pointVectorField &pointMovement)
Set motion filed related to model based on given motion.
void setControlField(const vectorField &controlField)
Set control field as a vectorField. For methods working with parameters (RBF etc).
Mesh data needed to do the Finite Volume discretisation.
Definition fvMesh.H:85
Similar to velocityLaplacian but iteratively solves the mesh displacement PDEs to account for non-ort...
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
Definition className.H:142
dynamicFvMesh & mesh
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition error.H:688
Different types of constants.
Namespace for OpenFOAM.
Type & refCast(U &obj)
A dynamic_cast (for references) to Type reference.
Definition typeInfo.H:172
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Definition hashSets.C:40
GeometricField< vector, fvPatchField, volMesh > volVectorField
List< label > labelList
A List of labels.
Definition List.H:62
GeometricField< vector, pointPatchField, pointMesh > pointVectorField
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
Field< vector > vectorField
Specialisation of Field<T> for vector.
static constexpr const zero Zero
Global zero (0).
Definition zero.H:127
Type gMax(const FieldField< Field, Type > &f)