OpenFOAM
v2406
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-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
osOld.write(oldPoints());
119
120
OBJstream
osNew(
"newPts_"
+ time().
timeName
() +
".obj"
);
121
osNew.write(
points
());
122
}
123
}
124
else
125
{
126
// Calculate the new point positions using the motion solver
127
pointField
newPoints(motionPtr_->newPoints());
128
129
// The mesh now contains the cells with zero volume
130
Info
<<
"Executing mesh motion"
<<
endl
;
131
movePoints(newPoints);
132
}
133
134
return
true
;
135
}
136
137
138
// ************************************************************************* //
surfaceFields.H
Foam::surfaceFields.
dynamicMotionSolverTopoFvMesh.H
Time.H
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition:
Ostream.H:531
Foam::dynamicFvMesh::init
virtual bool init(const bool doInit)
Initialise all non-demand-driven data.
Definition:
dynamicFvMesh.C:84
Foam::motionSolver::New
static autoPtr< motionSolver > New(const polyMesh &)
Select constructed from polyMesh.
Definition:
motionSolver.C:143
mapPolyMesh.H
Foam::dynamicMotionSolverTopoFvMesh::update
virtual bool update()
Update the mesh for both mesh motion and topology change.
Definition:
dynamicMotionSolverTopoFvMesh.C:89
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam::dynamicMotionSolverTopoFvMesh::init
virtual bool init(const bool doInit)
Initialise all non-demand-driven data.
Definition:
dynamicMotionSolverTopoFvMesh.C:67
timeName
word timeName
Definition:
getTimeIndex.H:3
Foam::pointField
vectorField pointField
pointField is a vectorField.
Definition:
pointFieldFwd.H:38
points
const pointField & points
Definition:
gmvOutputHeader.H:1
Foam::Field< vector >
Foam::topoChangerFvMesh
Abstract base class for a topology changing fvMesh.
Definition:
topoChangerFvMesh.H:49
Foam::dynamicMotionSolverTopoFvMesh::~dynamicMotionSolverTopoFvMesh
virtual ~dynamicMotionSolverTopoFvMesh()
Destructor.
Definition:
dynamicMotionSolverTopoFvMesh.C:83
Foam::OBJstream
An OFstream that keeps track of vertices and provides convenience output methods for OBJ files...
Definition:
OBJstream.H:55
Foam::ensightOutput::debug
int debug
Static debugging option.
Foam::defineTypeNameAndDebug
defineTypeNameAndDebug(combustionModel, 0)
Foam::Info
messageStream Info
Information stream (stdout output on master, null elsewhere)
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Definition:
HashPtrTable.H:48
volFields.H
io
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, IOobject::NO_REGISTER)
OBJstream.H
Foam::IOobject
Defines the attributes of an object for which implicit objectRegistry management is supported...
Definition:
IOobject.H:180
Foam
Namespace for OpenFOAM.
Definition:
atmBoundaryLayer.C:26
Foam::addToRunTimeSelectionTable
addToRunTimeSelectionTable(functionObject, pointHistory, dictionary)
src
topoChangerFvMesh
dynamicMotionSolverTopoFvMesh
dynamicMotionSolverTopoFvMesh.C
Generated by
1.8.14