dynamicMotionSolverTopoFvMesh.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) 2016-2020,2022 OpenCFD Ltd
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
30#include "mapPolyMesh.H"
31#include "OBJstream.H"
32#include "Time.H"
33#include "surfaceFields.H"
34#include "volFields.H"
35
36// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
37
38namespace Foam
39{
41
43 (
47 );
49 (
52 doInit
53 );
54}
55
56
57// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
58
60(
61 const IOobject& io,
62 const bool doInit
63)
64:
65 topoChangerFvMesh(io, doInit)
66{
67 if (doInit)
68 {
69 init(false); // do not initialise lower levels
70 }
71}
72
73
75{
76 if (doInit)
77 {
79 }
80
81 motionPtr_ = motionSolver::New(*this);
82
83 // Assume something changed
84 return true;
85}
86
87
88// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
89
91{}
92
93
94// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
95
97{
98 // Clear moving flag. This is currently required since geometry calculation
99 // might get triggered when doing processor patches.
100 // (TBD: should be in changeMesh if no inflation?)
101 moving(false);
102 // Do mesh changes (not using inflation - points added directly into mesh)
103 autoPtr<mapPolyMesh> topoChangeMap = topoChanger_.changeMesh(false);
104
105 if (topoChangeMap)
106 {
107 Info << "Executing mesh topology update" << endl;
108 motionPtr_->updateMesh(topoChangeMap());
109
110 setV0() = V();
111
112 pointField newPoints(motionPtr_->newPoints());
113 movePoints(newPoints);
114
115 if (debug)
116 {
117 OBJstream osOld("oldPts_" + time().timeName() + ".obj");
118 const pointField& oldPts = oldPoints();
119 forAll(oldPts, i)
120 {
121 osOld.write(oldPts[i]);
122 }
123
124 OBJstream osNew("newPts_" + time().timeName() + ".obj");
125 forAll(points(), i)
126 {
127 osNew.write(points()[i]);
128 }
129 }
130 }
131 else
132 {
133 // Calculate the new point positions using the motion solver
134 pointField newPoints(motionPtr_->newPoints());
135
136 // The mesh now contains the cells with zero volume
137 Info << "Executing mesh motion" << endl;
138 movePoints(newPoints);
139 }
140
141 return true;
142}
143
144
145// ************************************************************************* //
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition: IOobject.H:170
OFstream that keeps track of vertices.
Definition: OBJstream.H:61
virtual Ostream & write(const char c)
Write character.
Definition: OBJstream.C:78
static autoPtr< Time > New()
Construct (dummy) Time - no functionObjects or libraries.
Definition: Time.C:717
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: autoPtr.H:66
Abstract base class for geometry and/or topology changing fvMesh.
Definition: dynamicFvMesh.H:81
Sample topoChangerFvMesh that moves an object using a motion solver.
virtual bool init(const bool doInit)
Initialise all non-demand-driven data.
virtual bool update()
Update the mesh for both mesh motion and topology change.
Abstract base class for a topology changing fvMesh.
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
Definition: className.H:121
const pointField & points
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, false)
word timeName
Definition: getTimeIndex.H:3
Namespace for OpenFOAM.
messageStream Info
Information stream (stdout output on master, null elsewhere)
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:372
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:333
Foam::surfaceFields.