lumpedPointDisplacementPointPatchVectorField.H
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-2020 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 Class
27  Foam::lumpedPointDisplacementPointPatchVectorField
28 
29 Description
30  This is the point-patch responsible for managing the force
31  integration on a 'lumped-point' basis, waiting for the external
32  application, reading back the response from the external program
33  and updating the locations of the associated patch points
34  accordingly.
35 
36  The internal patch type name is 'lumpedPointDisplacement'.
37 
38  \heading Patch usage
39  Example:
40  \verbatim
41  walls
42  {
43  type lumpedPointDisplacement;
44  value uniform (0 0 0);
45  controllers ( controllerName1 controllerName2 );
46  }
47  \endverbatim
48 
49 SourceFiles
50  lumpedPointDisplacementPointPatchVectorField.C
51 
52 \*---------------------------------------------------------------------------*/
53 
54 #ifndef lumpedPointDisplacementPointPatchVectorField_H
55 #define lumpedPointDisplacementPointPatchVectorField_H
56 
58 #include "lumpedPointMovement.H"
59 #include "lumpedPointIOMovement.H"
60 #include "pointField.H"
61 #include "pointFieldsFwd.H"
62 
63 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
64 
65 namespace Foam
66 {
67 
68 // Forward Declarations
69 class interpolationWeights;
70 
71 /*---------------------------------------------------------------------------*\
72  Class lumpedPointDisplacementPointPatchVectorField Declaration
73 \*---------------------------------------------------------------------------*/
74 
76 :
77  public fixedValuePointPatchField<vector>
78 {
79  // Private Data
80 
81  //- Names of the movement controller(s) in use
82  wordList controllers_;
83 
84  //- Times when data (forces) were written
85  // With first=time, second=prevTime
86  Tuple2<scalar, scalar> dataWritten_;
87 
88  //- Backup method for getting "points0" without a motion solver
89  mutable autoPtr<pointIOField> points0Ptr_;
90 
91 
92  // Convenience typedefs
93 
96 
97 
98 protected:
99 
100  // Protected Member Functions
101 
102  //- The starting locations (obtained from the motionSolver).
103  const pointField& points0() const;
104 
105  //- The auto-vivifying singleton for movement.
106  const lumpedPointMovement& movement() const;
107 
108 
109 public:
110 
111  //- Runtime type information
112  TypeName("lumpedPointDisplacement");
113 
114 
115  // Constructors
116 
117  //- Construct from patch and internal field
119  (
120  const pointPatch& p,
122  );
123 
124  //- Construct from patch, internal field and dictionary
126  (
127  const pointPatch& p,
129  const dictionary& dict
130  );
131 
132  //- Construct by mapping given patchField<vector> onto a new patch
134  (
136  const pointPatch& p,
138  const pointPatchFieldMapper& mapper
139  );
140 
141  //- Construct and return a clone
142  virtual autoPtr<pointPatchField<vector>> clone() const
143  {
145  (
147  (
148  *this
149  )
150  );
151  }
152 
153  //- Construct as copy setting internal field reference
155  (
158  );
159 
160  //- Construct and return a clone setting internal field reference
162  (
164  ) const
165  {
167  (
169  (
170  *this,
171  iF
172  )
173  );
174  }
175 
176 
177  //- Destructor. De-register movement if in use and managed by this patch
179 
180 
181  // Member Functions
182 
183  //- The controller names for this patch
184  const wordList& controllers() const
185  {
186  return controllers_;
187  }
188 
189  //- Set all patch controls for patches of this type
190  static label setPatchControls
191  (
192  const pointVectorField& pvf,
193  const pointField& points0
194  );
195 
196  //- Set all patch controls for patches of this type
197  static label setInterpolators
198  (
199  const pointVectorField& pvf,
200  const pointField& points0
201  );
202 
203  //- The ids for all patches of this type
204  static labelList patchIds(const pointVectorField& pvf);
205 
206  //- Update the coefficients associated with the patch field
207  virtual void updateCoeffs();
208 
209  //- Write
210  virtual void write(Ostream& os) const;
211 };
212 
213 
214 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
215 
216 } // End namespace Foam
217 
218 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
219 
220 #endif
221 
222 // ************************************************************************* //
Foam::lumpedPointDisplacementPointPatchVectorField::setInterpolators
static label setInterpolators(const pointVectorField &pvf, const pointField &points0)
Set all patch controls for patches of this type.
Definition: lumpedPointDisplacementPointPatchVectorField.C:89
p
volScalarField & p
Definition: createFieldRefs.H:8
Foam::lumpedPointDisplacementPointPatchVectorField::controllers
const wordList & controllers() const
The controller names for this patch.
Definition: lumpedPointDisplacementPointPatchVectorField.H:183
Foam::lumpedPointDisplacementPointPatchVectorField::setPatchControls
static label setPatchControls(const pointVectorField &pvf, const pointField &points0)
Set all patch controls for patches of this type.
Definition: lumpedPointDisplacementPointPatchVectorField.C:54
Foam::pointPatch
Basic pointPatch represents a set of points from the mesh.
Definition: pointPatch.H:58
Foam::lumpedPointDisplacementPointPatchVectorField::patchIds
static labelList patchIds(const pointVectorField &pvf)
The ids for all patches of this type.
Definition: lumpedPointDisplacementPointPatchVectorField.C:123
Foam::lumpedPointDisplacementPointPatchVectorField
This is the point-patch responsible for managing the force integration on a 'lumped-point' basis,...
Definition: lumpedPointDisplacementPointPatchVectorField.H:74
Foam::pointPatchFieldMapper
Foam::pointPatchFieldMapper.
Definition: pointPatchFieldMapper.H:48
Foam::fixedValuePointPatchField
A FixedValue boundary condition for pointField.
Definition: fixedValuePointPatchField.H:51
Foam::Field< vector >
Foam::pointPatchField< vector >::patchType
const word & patchType() const
Optional patch type.
Definition: pointPatchField.H:287
fixedValuePointPatchField.H
Foam::lumpedPointDisplacementPointPatchVectorField::clone
virtual autoPtr< pointPatchField< vector > > clone() const
Construct and return a clone.
Definition: lumpedPointDisplacementPointPatchVectorField.H:141
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
os
OBJstream os(runTime.globalPath()/outputName)
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
lumpedPointIOMovement.H
Foam::lumpedPointDisplacementPointPatchVectorField::TypeName
TypeName("lumpedPointDisplacement")
Runtime type information.
Foam::lumpedPointDisplacementPointPatchVectorField::~lumpedPointDisplacementPointPatchVectorField
virtual ~lumpedPointDisplacementPointPatchVectorField()
Destructor. De-register movement if in use and managed by this patch.
Definition: lumpedPointDisplacementPointPatchVectorField.C:278
Foam::lumpedPointDisplacementPointPatchVectorField::lumpedPointDisplacementPointPatchVectorField
lumpedPointDisplacementPointPatchVectorField(const pointPatch &p, const DimensionedField< vector, pointMesh > &iF)
Construct from patch and internal field.
Definition: lumpedPointDisplacementPointPatchVectorField.C:205
pointField.H
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
Foam::lumpedPointDisplacementPointPatchVectorField::write
virtual void write(Ostream &os) const
Write.
Definition: lumpedPointDisplacementPointPatchVectorField.C:433
Foam::List< word >
Foam::lumpedPointMovement
The movement driver that describes initial point locations, the current state of the points/rotations...
Definition: lumpedPointMovement.H:269
pointFieldsFwd.H
Forwards and collection of common point field types.
Foam::lumpedPointDisplacementPointPatchVectorField::points0
const pointField & points0() const
The starting locations (obtained from the motionSolver).
Definition: lumpedPointDisplacementPointPatchVectorField.C:147
Foam::lumpedPointDisplacementPointPatchVectorField::movement
const lumpedPointMovement & movement() const
The auto-vivifying singleton for movement.
Definition: lumpedPointDisplacementPointPatchVectorField.C:182
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
Foam::Tuple2< scalar, scalar >
Foam::GeometricField< vector, pointPatchField, pointMesh >
lumpedPointMovement.H
Foam::lumpedPointDisplacementPointPatchVectorField::updateCoeffs
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
Definition: lumpedPointDisplacementPointPatchVectorField.C:298
Foam::DimensionedField
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Definition: DimensionedField.H:54