dynamicInkJetFvMesh.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 | Copyright (C) 2011-2017 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
26 #include "dynamicInkJetFvMesh.H"
28 #include "volFields.H"
29 #include "mathematicalConstants.H"
30 
31 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
32 
33 namespace Foam
34 {
35  defineTypeNameAndDebug(dynamicInkJetFvMesh, 0);
36  addToRunTimeSelectionTable(dynamicFvMesh, dynamicInkJetFvMesh, IOobject);
37 }
38 
39 
40 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
41 
42 Foam::dynamicInkJetFvMesh::dynamicInkJetFvMesh(const IOobject& io)
43 :
44  dynamicFvMesh(io),
45  dynamicMeshCoeffs_
46  (
48  (
49  IOobject
50  (
51  "dynamicMeshDict",
52  io.time().constant(),
53  *this,
54  IOobject::MUST_READ_IF_MODIFIED,
55  IOobject::NO_WRITE,
56  false
57  )
58  ).optionalSubDict(typeName + "Coeffs")
59  ),
60  amplitude_(readScalar(dynamicMeshCoeffs_.lookup("amplitude"))),
61  frequency_(readScalar(dynamicMeshCoeffs_.lookup("frequency"))),
62  refPlaneX_(readScalar(dynamicMeshCoeffs_.lookup("refPlaneX"))),
63  stationaryPoints_
64  (
65  IOobject
66  (
67  "points",
68  io.time().constant(),
69  meshSubDir,
70  *this,
71  IOobject::MUST_READ,
72  IOobject::NO_WRITE
73  )
74  )
75 {
76  Info<< "Performing a dynamic mesh calculation: " << endl
77  << "amplitude: " << amplitude_
78  << " frequency: " << frequency_
79  << " refPlaneX: " << refPlaneX_ << endl;
80 }
81 
82 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
83 
85 {}
86 
87 
88 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
89 
91 {
92  scalar scalingFunction =
93  0.5*
94  (
95  ::cos(constant::mathematical::twoPi*frequency_*time().value())
96  - 1.0
97  );
98 
99  Info<< "Mesh scaling. Time = " << time().value() << " scaling: "
100  << scalingFunction << endl;
101 
102  pointField newPoints = stationaryPoints_;
103 
104  newPoints.replace
105  (
106  vector::X,
107  stationaryPoints_.component(vector::X)*
108  (
109  1.0
110  + pos0
111  (
112  - (stationaryPoints_.component(vector::X))
113  - refPlaneX_
114  )*amplitude_*scalingFunction
115  )
116  );
117 
118  fvMesh::movePoints(newPoints);
119 
120  lookupObjectRef<volVectorField>("U").correctBoundaryConditions();
121 
122  return true;
123 }
124 
125 
126 // ************************************************************************* //
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:253
bool movePoints()
Do what is neccessary if the mesh has moved.
const Time & time() const
Return the top-level database.
Definition: fvMesh.H:243
void replace(const direction, const UList< cmptType > &)
Replace a component field of the field.
Definition: Field.C:669
Macros for easy insertion into run-time selection tables.
virtual bool update()
Update the mesh for both mesh motion and topology change.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Definition: IOdictionary.H:52
stressControl lookup("compactNormalStress") >> compactNormalStress
dimensionedScalar cos(const dimensionedScalar &ds)
const Type & value() const
Return const reference to value.
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if succesful.
Definition: doubleScalar.H:63
const scalar twoPi(2 *pi)
tmp< Field< cmptType > > component(const direction) const
Return a component field of the field.
Definition: Field.C:657
dimensionedScalar pos0(const dimensionedScalar &ds)
addToRunTimeSelectionTable(ensightPart, ensightPartCells, istream)
defineTypeNameAndDebug(combustionModel, 0)
Constant dispersed-phase particle diameter model.
U correctBoundaryConditions()
Abstract base class for geometry and/or topology changing fvMesh.
Definition: dynamicFvMesh.H:51
messageStream Info
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:92
Namespace for OpenFOAM.