oscillatingVelocityPointPatchVectorField.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2022 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 
27 #include "pointPatchFields.H"
29 #include "Time.H"
30 #include "polyMesh.H"
31 
32 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
33 
34 namespace Foam
35 {
36 
37 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
38 
41 (
42  const pointPatch& p,
44 )
45 :
47  amplitude_(Zero),
48  omega_(0.0),
49  p0_(p.localPoints())
50 {}
51 
52 
55 (
56  const pointPatch& p,
58  const dictionary& dict
59 )
60 :
62  amplitude_(dict.lookup("amplitude")),
63  omega_(dict.lookup<scalar>("omega"))
64 {
65  if (!dict.found("value"))
66  {
67  updateCoeffs();
68  }
69 
70  if (dict.found("p0"))
71  {
72  p0_ = vectorField("p0", dict , p.size());
73  }
74  else
75  {
76  p0_ = p.localPoints();
77  }
78 }
79 
80 
83 (
85  const pointPatch& p,
87  const pointPatchFieldMapper& mapper
88 )
89 :
90  fixedValuePointPatchField<vector>(ptf, p, iF, mapper),
91  amplitude_(ptf.amplitude_),
92  omega_(ptf.omega_),
93  p0_(mapper(ptf.p0_))
94 {}
95 
96 
99 (
102 )
103 :
105  amplitude_(ptf.amplitude_),
106  omega_(ptf.omega_),
107  p0_(ptf.p0_)
108 {}
109 
110 
111 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
112 
114 (
115  const pointPatchFieldMapper& m
116 )
117 {
119 
120  m(p0_, p0_);
121 }
122 
123 
125 (
126  const pointPatchField<vector>& ptf,
127  const labelList& addr
128 )
129 {
131  refCast<const oscillatingVelocityPointPatchVectorField>(ptf);
132 
134 
135  p0_.rmap(oVptf.p0_, addr);
136 }
137 
138 
140 (
141  const pointPatchField<vector>& ptf
142 )
143 {
145  refCast<const oscillatingVelocityPointPatchVectorField>(ptf);
146 
148 
149  p0_.reset(oVptf.p0_);
150 }
151 
152 
154 {
155  if (this->updated())
156  {
157  return;
158  }
159 
160  const polyMesh& mesh = this->internalField().mesh()();
161  const Time& t = mesh.time();
162  const pointPatch& p = this->patch();
163 
165  (
166  (p0_ + amplitude_*sin(omega_*t.value()) - p.localPoints())
167  /t.deltaTValue()
168  );
169 
171 }
172 
173 
175 {
177  writeEntry(os, "amplitude", amplitude_);
178  writeEntry(os, "omega", omega_);
179  writeEntry(os, "p0", p0_);
180  writeEntry(os, "value", *this);
181 }
182 
183 
184 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
185 
187 (
190 );
191 
192 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
193 
194 } // End namespace Foam
195 
196 // ************************************************************************* //
dictionary dict
bool found(const word &, bool recursive=false, bool patternMatch=true) const
Search dictionary for given keyword.
Definition: dictionary.C:663
virtual void reset(const pointPatchField< vector > &)
Reset the pointPatchField to the given pointPatchField.
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:156
oscillatingVelocityPointPatchVectorField(const pointPatch &, const DimensionedField< vector, pointMesh > &)
Construct from patch and internal field.
Foam::pointPatchFieldMapper.
label size() const
Return size.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
fvMesh & mesh
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:69
Macros for easy insertion into run-time selection tables.
Pre-declare SubField and related Field type.
Definition: Field.H:56
const pointPatch & patch() const
Return patch.
scalar deltaTValue() const
Return time step value.
Definition: TimeStateI.H:34
const Type & value() const
Return const reference to value.
virtual void rmap(const pointPatchField< vector > &, const labelList &)
Reverse map the given pointPatchField onto this pointPatchField.
static const zero Zero
Definition: zero.H:97
virtual void autoMap(const pointPatchFieldMapper &)
Map (and resize as needed) from self given a mapping object.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:54
dimensionedScalar sin(const dimensionedScalar &ds)
const Time & time() const
Return time.
void writeEntry(Ostream &os, const HashTable< T, Key, Hash > &ht)
Definition: HashTableIO.C:96
virtual const vectorField & localPoints() const =0
Return mesh points.
const DimensionedField< vector, pointMesh > & internalField() const
Return dimensioned internal field reference.
virtual void write(Ostream &) const
Write.
Basic pointPatch represents a set of points from the mesh.
Definition: pointPatch.H:56
virtual void reset(const pointPatchField< Type > &)
Reset the pointPatchField to the given pointPatchField.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
bool updated() const
Return true if the boundary condition has already been updated.
makePointPatchTypeField(pointPatchVectorField, solidBodyMotionDisplacementPointPatchVectorField)
virtual void autoMap(const pointPatchFieldMapper &)
Map (and resize as needed) from self given a mapping object.
Field< vector > vectorField
Specialisation of Field<T> for vector.
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:76
volScalarField & p
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
virtual void rmap(const pointPatchField< Type > &, const labelList &)
Reverse map the given pointPatchField onto this pointPatchField.
Namespace for OpenFOAM.
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
Definition: dictionary.C:864