OpenFOAM: API Guide
v2112
The open source CFD toolbox
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
-------------------------------------------------------------------------------
10
License
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
28
#include "
addToRunTimeSelectionTable.H
"
29
#include "
dynamicMotionSolverTopoFvMesh.H
"
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
38
namespace
Foam
39
{
40
defineTypeNameAndDebug
(
dynamicMotionSolverTopoFvMesh
, 0);
41
42
addToRunTimeSelectionTable
43
(
44
dynamicFvMesh
,
45
dynamicMotionSolverTopoFvMesh
,
46
IOobject
47
);
48
addToRunTimeSelectionTable
49
(
50
dynamicFvMesh
,
51
dynamicMotionSolverTopoFvMesh
,
52
doInit
53
);
54
}
55
56
57
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
58
59
Foam::dynamicMotionSolverTopoFvMesh::dynamicMotionSolverTopoFvMesh
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
74
bool
Foam::dynamicMotionSolverTopoFvMesh::init
(
const
bool
doInit)
75
{
76
if
(doInit)
77
{
78
topoChangerFvMesh::init
(doInit);
79
}
80
81
motionPtr_ =
motionSolver::New
(*
this
);
82
83
// Assume something changed
84
return
true
;
85
}
86
87
88
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
89
90
Foam::dynamicMotionSolverTopoFvMesh::~dynamicMotionSolverTopoFvMesh
()
91
{}
92
93
94
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
95
96
bool
Foam::dynamicMotionSolverTopoFvMesh::update
()
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
// ************************************************************************* //
OBJstream.H
Time.H
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
addToRunTimeSelectionTable
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
Definition:
addToRunTimeSelectionTable.H:42
Foam::Field< vector >
Foam::IOobject
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition:
IOobject.H:170
Foam::OBJstream
OFstream that keeps track of vertices.
Definition:
OBJstream.H:61
Foam::OBJstream::write
virtual Ostream & write(const char c)
Write character.
Definition:
OBJstream.C:78
Foam::Time::New
static autoPtr< Time > New()
Construct (dummy) Time - no functionObjects or libraries.
Definition:
Time.C:717
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition:
autoPtr.H:66
Foam::dynamicFvMesh
Abstract base class for geometry and/or topology changing fvMesh.
Definition:
dynamicFvMesh.H:81
Foam::dynamicMotionSolverTopoFvMesh
Sample topoChangerFvMesh that moves an object using a motion solver.
Definition:
dynamicMotionSolverTopoFvMesh.H:56
Foam::dynamicMotionSolverTopoFvMesh::init
virtual bool init(const bool doInit)
Initialise all non-demand-driven data.
Definition:
dynamicMotionSolverTopoFvMesh.C:74
Foam::dynamicMotionSolverTopoFvMesh::update
virtual bool update()
Update the mesh for both mesh motion and topology change.
Definition:
dynamicMotionSolverTopoFvMesh.C:96
Foam::dynamicMotionSolverTopoFvMesh::~dynamicMotionSolverTopoFvMesh
virtual ~dynamicMotionSolverTopoFvMesh()
Destructor.
Definition:
dynamicMotionSolverTopoFvMesh.C:90
Foam::topoChangerFvMesh
Abstract base class for a topology changing fvMesh.
Definition:
topoChangerFvMesh.H:56
defineTypeNameAndDebug
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
Definition:
className.H:121
dynamicMotionSolverTopoFvMesh.H
points
const pointField & points
Definition:
gmvOutputHeader.H:1
io
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, false)
mapPolyMesh.H
timeName
word timeName
Definition:
getTimeIndex.H:3
Foam
Namespace for OpenFOAM.
Definition:
atmBoundaryLayer.C:34
Foam::Info
messageStream Info
Information stream (stdout output on master, null elsewhere)
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition:
Ostream.H:372
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition:
stdFoam.H:333
Foam::lduScheduleEntry::init
bool init
Definition:
lduSchedule.H:60
surfaceFields.H
Foam::surfaceFields.
volFields.H
src
topoChangerFvMesh
dynamicMotionSolverTopoFvMesh
dynamicMotionSolverTopoFvMesh.C
Generated by
1.9.5
OPENFOAM® is a registered
trademark
of OpenCFD Ltd.