codedPoints0MotionSolver.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) 2017-2021 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 
29 #include "dictionary.H"
30 #include "Time.H"
31 #include "dynamicCode.H"
33 
34 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
35 
36 namespace Foam
37 {
38  defineTypeNameAndDebug(codedPoints0MotionSolver, 0);
39 
41  (
42  motionSolver,
45  );
46 }
47 
48 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
49 
51 {
52  return mesh().time().libs();
53 }
54 
55 
57 {
58  return "points0MotionSolver " + name();
59 }
60 
61 
63 {
64  redirectMotionSolverPtr_.reset(nullptr);
65 }
66 
67 
68 const Foam::dictionary&
70 {
71  return motionSolver::coeffDict();
72 }
73 
74 
76 (
77  dynamicCode& dynCode,
78  const dynamicCodeContext& context
79 ) const
80 {
81  // Set additional rewrite rules
82  dynCode.setFilterVariable("typeName", name_);
83 
84  // Compile filtered C template
85  dynCode.addCompileFile(codeTemplateC);
86 
87  // Copy filtered H template
88  dynCode.addCopyFile(codeTemplateH);
89 
90  #ifdef FULLDEBUG
91  dynCode.setFilterVariable("verbose", "true");
93  <<"compile " << name_ << " sha1: " << context.sha1() << endl;
94  #endif
95 
96  // Define Make/options
97  dynCode.setMakeOptions
98  (
99  "EXE_INC = -g \\\n"
100  "-I$(LIB_SRC)/finiteVolume/lnInclude \\\n"
101  "-I$(LIB_SRC)/meshTools/lnInclude \\\n"
102  "-I$(LIB_SRC)/dynamicMesh/lnInclude \\\n"
103  "-I$(LIB_SRC)/fvMotionSolvers/lnInclude \\\n"
104  + context.options()
105  + "\n\nLIB_LIBS = \\\n"
106  " -lfiniteVolume \\\n"
107  " -lmeshTools \\\n"
108  " -ldynamicMesh \\\n"
109  " -lfvMotionSolvers \\\n"
110  + context.libs()
111  );
112 }
113 
114 
115 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
116 
118 (
119  const polyMesh& mesh,
120  const IOdictionary& dict
121 )
122 :
123  motionSolver(mesh, dict, typeName),
124  codedBase(),
125  name_(dict.getCompat<word>("name", {{"redirectType", 1706}})),
126  redirectMotionSolverPtr_(nullptr)
127 {
128  updateLibrary(name_);
129  redirectMotionSolver();
130 }
131 
132 
133 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
134 
137 {
138  if (!redirectMotionSolverPtr_)
139  {
140  // Get the dictionary for the solver and override the
141  // solver name (in case it is not a subdictionary and contains
142  // the 'coded' as the motionSolver)
143  dictionary constructDict(motionSolver::coeffDict());
144  constructDict.set("solver", name_);
145  constructDict.set("motionSolver", name_);
146 
147  IOobject io(*this);
149 
150  redirectMotionSolverPtr_ = motionSolver::New
151  (
152  mesh(),
153  IOdictionary(io, constructDict)
154  );
155  }
156 
157  return *redirectMotionSolverPtr_;
158 }
159 
160 
162 {
163  updateLibrary(name_);
164  return redirectMotionSolver().curPoints();
165 }
166 
167 
169 {
170  updateLibrary(name_);
171  redirectMotionSolver().solve();
172 }
173 
174 
176 {
177  updateLibrary(name_);
178  return redirectMotionSolver().movePoints(fld);
179 }
180 
181 
183 {
184  updateLibrary(name_);
185  return redirectMotionSolver().updateMesh(mpm);
186 }
187 
188 
189 // ************************************************************************* //
dictionary dict
virtual const dictionary & codeDict() const
dlLibraryTable & libs() const noexcept
Mutable access to the loaded dynamic libraries.
Definition: Time.H:730
readOption readOpt() const noexcept
Get the read option.
motionSolver & redirectMotionSolver() const
Dynamically compiled motionSolver.
virtual tmp< pointField > curPoints() const
Return point location obtained from the current motion field.
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
void setMakeOptions(const std::string &content)
Define contents for Make/options.
Definition: dynamicCode.C:390
virtual void clearRedirect() const
Clear redirected object(s)
virtual dlLibraryTable & libs() const
Mutable access to the loaded dynamic libraries.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:531
Virtual base class for mesh motion solver.
Definition: motionSolver.H:54
static autoPtr< motionSolver > New(const polyMesh &)
Select constructed from polyMesh.
Definition: motionSolver.C:143
virtual void movePoints(const pointField &fld)
Update local data for geometry changes.
void addCompileFile(const fileName &name)
Add a file template name, which will be found and filtered.
Definition: dynamicCode.C:346
const dictionary & coeffDict() const
Const access to the coefficients dictionary.
Definition: motionSolver.H:173
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Definition: mapPolyMesh.H:157
Macros for easy insertion into run-time selection tables.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Definition: IOdictionary.H:50
dynamicFvMesh & mesh
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
Definition: exprTraits.C:127
const string & options() const noexcept
The code options (Make/options)
A class for handling words, derived from Foam::string.
Definition: word.H:63
const Time & time() const noexcept
Return time registry.
codedPoints0MotionSolver(const codedPoints0MotionSolver &)=delete
No copy construct.
Base class for function objects and boundary conditions using dynamic code that provides methods for ...
Definition: codedBase.H:62
#define DetailInfo
Definition: evalEntry.C:30
A table of dynamically loaded libraries.
defineTypeNameAndDebug(combustionModel, 0)
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< ' ';}gmvFile<< nl;for(const word &name :lagrangianScalarNames){ IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Tools for handling dynamic code compilation.
Definition: dynamicCode.H:56
Provides a general interface to enable dynamic code compilation of mesh motion solvers.
Encapsulation of dynamic code dictionaries.
void setFilterVariable(const word &key, const std::string &value)
Define a filter variable.
Definition: dynamicCode.C:381
virtual string description() const
Description (type + name) for the output.
virtual void solve()
Solve for motion.
Nothing to be read.
void addCopyFile(const fileName &name)
Add a file template name, which will be found and filtered.
Definition: dynamicCode.C:352
const string & libs() const noexcept
The code libs (LIB_LIBS)
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:74
const polyMesh & mesh() const
Return reference to mesh.
Definition: motionSolver.H:165
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, IOobject::NO_REGISTER)
A class for managing temporary objects.
Definition: HashPtrTable.H:50
Defines the attributes of an object for which implicit objectRegistry management is supported...
Definition: IOobject.H:172
A class for handling character strings derived from std::string.
Definition: string.H:72
virtual void prepare(dynamicCode &, const dynamicCodeContext &) const
Adapt the context for the current object.
Namespace for OpenFOAM.
addToRunTimeSelectionTable(functionObject, pointHistory, dictionary)
const SHA1 & sha1() const noexcept
The SHA1 calculated from options, libs, include, code, etc.
virtual void updateMesh(const mapPolyMesh &mpm)
Update local data for topology changes.