Loading...
Searching...
No Matches
displacementMethoddisplacementLaplacian.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-2019 PCOpt/NTUA
9 Copyright (C) 2013-2019 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 displacementMethoddisplacementLaplacian,
47);
48
49// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
50
51displacementMethoddisplacementLaplacian::displacementMethoddisplacementLaplacian
52(
53 fvMesh& mesh,
54 const labelList& patchIDs
55)
56:
57 displacementMethod(mesh, patchIDs),
59 (
61 (
63 ).pointDisplacement()
64 ),
66 (
68 (
70 ).cellDisplacement()
71 ),
72 /*
73 // Getting a reference from the database is dangerous since multiple
74 // fields with the same name might be registered
75 pointDisplacement_
76 (
77 const_cast<pointVectorField&>
78 (
79 mesh_.lookupObject<pointVectorField>("pointDisplacement")
80 )
81 ),
82 cellDisplacement_
83 (
84 const_cast<volVectorField&>
85 (
86 mesh_.lookupObject<volVectorField>("cellDisplacement")
87 )
88 ),
89 */
91 (
92 IOdictionary::readContents
93 (
95 (
96 "dynamicMeshDict",
97 mesh.time().constant(),
98 mesh,
99 IOobject::MUST_READ
100 )
101 ).subDict("displacementLaplacianCoeffs").getOrDefault<bool>
102 (
103 "resetFields",
104 true
106 )
107{}
108
109
110// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
111
113(
114 const pointVectorField& pointMovement
115)
116{
117 Info<< "Resetting mesh motion fields to zero " << endl;
118
119 if (resetFields_)
120 {
124 }
125
126 // Set boundary mesh movement and calculate
127 // max current boundary displacement
128 for (label patchI : patchIDs_)
129 {
130 // Set boundary field. Needed for the motionSolver class
132 pointMovement.boundaryField()[patchI].patchInternalField()();
133
134 // Set boundary field values as seen from the internalField!
135 // Needed for determining the max displacement
136 pointDisplacement_.boundaryFieldRef()[patchI].setInInternalField
137 (
139 pointMovement.boundaryField()[patchI].patchInternalField()()
140 );
141
142 // Find max value
144 max
145 (
147 gMax
148 (
149 mag
150 (
152 patchInternalField()
154 )
155 );
156 }
157}
158
159
161(
162 const volVectorField& cellMovement
163)
164{
166}
167
168
170(
171 const vectorField& controlField
172)
173{
175}
176
177
179(
180 const scalarField& controlField
181)
182{
184}
185
186
187// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
188
189} // End namespace Foam
190
191// ************************************************************************* //
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
static const Form zero
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
Mesh motion solver for an fvMesh. Based on solving the cell-centre Laplacian for the motion displacem...
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 displacementLaplacian motion solver.
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
#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
messageStream Info
Information stream (stdout output on master, null elsewhere).
GeometricField< vector, pointPatchField, pointMesh > pointVectorField
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition Ostream.H:519
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
Field< vector > vectorField
Specialisation of Field<T> for vector.
Type gMax(const FieldField< Field, Type > &f)