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 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  ).subDict(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  + pos
111  (
112  - (stationaryPoints_.component(vector::X))
113  - refPlaneX_
114  )*amplitude_*scalingFunction
115  )
116  );
117 
118  fvMesh::movePoints(newPoints);
119 
120  volVectorField& U =
121  const_cast<volVectorField&>(lookupObject<volVectorField>("U"));
123 
124  return true;
125 }
126 
127 
128 // ************************************************************************* //
tmp< Field< cmptType > > component(const direction) const
Return a component field of the field.
Definition: Field.C:578
messageStream Info
Namespace for OpenFOAM.
const Time & time() const
Return the top-level database.
Definition: fvMesh.H:243
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
stressControl lookup("compactNormalStress") >> compactNormalStress
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:91
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if succesful.
Definition: doubleScalar.H:63
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Definition: IOdictionary.H:53
dimensionedScalar cos(const dimensionedScalar &ds)
Macros for easy insertion into run-time selection tables.
void correctBoundaryConditions()
Correct boundary field.
Constant dispersed-phase particle diameter model.
virtual bool update()
Update the mesh for both mesh motion and topology change.
void replace(const direction, const UList< cmptType > &)
Replace a component field of the field.
Definition: Field.C:590
dimensionedScalar pos(const dimensionedScalar &ds)
Abstract base class for geometry and/or topology changing fvMesh.
Definition: dynamicFvMesh.H:51
const scalar twoPi(2 *pi)
addToRunTimeSelectionTable(ensightPart, ensightPartCells, istream)
bool movePoints()
Do what is neccessary if the mesh has moved.
U
Definition: pEqn.H:82
const Type & value() const
Return const reference to value.
defineTypeNameAndDebug(combustionModel, 0)