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 Foam_lumpedPointDisplacementPointPatchVectorField_H
55 #define Foam_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 {
81  // typedef DimensionedField<vector, pointMesh> internal_type;
82 
83  // Private Data
84 
85  //- Names of the movement controller(s) in use
86  wordList controllers_;
87 
88  //- Times when data (forces) were written
89  // With first=time, second=prevTime
90  Tuple2<scalar, scalar> dataWritten_;
91 
92  //- Backup method for getting "points0" without a motion solver
93  mutable autoPtr<pointIOField> points0Ptr_;
94 
95 
96 protected:
97 
98  // Protected Member Functions
99 
100  //- The starting locations (obtained from the motionSolver).
101  const pointField& points0() const;
102 
103  //- The auto-vivifying singleton for movement.
104  const lumpedPointMovement& movement() const;
105 
106 
107 public:
108 
109  //- Runtime type information
110  TypeName("lumpedPointDisplacement");
111 
112 
113  // Constructors
114 
115  //- Construct from patch and internal field
117  (
118  const pointPatch& p,
120  );
121 
122  //- Construct from patch, internal field and dictionary
124  (
125  const pointPatch& p,
127  const dictionary& dict
128  );
129 
130  //- Construct by mapping onto a new patch
132  (
133  const this_bctype& rhs,
134  const pointPatch& p,
136  const pointPatchFieldMapper& mapper
137  );
138 
139  //- Construct as copy setting internal field reference
141  (
142  const this_bctype& rhs,
144  );
145 
146  //- No copy without an internal field
148  (
149  const this_bctype&
150  ) = delete;
151 
152  //- Clone with an internal field reference
154  (
156  ) const
157  {
158  return pointPatchField<vector>::Clone(*this, iF);
159  }
160 
161 
162  //- Destructor. De-register movement if in use and managed by this patch
164 
165 
166  // Member Functions
167 
168  //- The controller names for this patch
169  const wordList& controllers() const
170  {
171  return controllers_;
172  }
173 
174  //- Set all patch controls for patches of this type
175  static label setPatchControls
176  (
177  const pointVectorField& pvf,
178  const pointField& points0
179  );
180 
181  //- Set all patch controls for patches of this type
182  static label setInterpolators
183  (
184  const pointVectorField& pvf,
185  const pointField& points0
186  );
187 
188  //- The ids for all patches of this type
189  static labelList patchIds(const pointVectorField& pvf);
190 
191  //- Update the coefficients associated with the patch field
192  virtual void updateCoeffs();
194  //- Write
195  virtual void write(Ostream& os) const;
196 
197 
198  // Member Operators
199 
200  //- Inherit assignment
202 };
203 
204 
205 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
206 
207 } // End namespace Foam
208 
209 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
210 
211 #endif
212 
213 // ************************************************************************* //
dictionary dict
const pointField & points0() const
The starting locations (obtained from the motionSolver).
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:130
A FixedValue boundary condition for pointField.
static label setInterpolators(const pointVectorField &pvf, const pointField &points0)
Set all patch controls for patches of this type.
virtual ~lumpedPointDisplacementPointPatchVectorField()
Destructor. De-register movement if in use and managed by this patch.
Foam::pointPatchFieldMapper.
virtual autoPtr< pointPatchField< vector > > clone() const
No clone without an internal field reference.
Forwards and collection of common point field types.
friend Ostream & operator(Ostream &, const pointPatchField< vector > &)
This is the point-patch responsible for managing the force integration on a &#39;lumped-point&#39; basis...
void rhs(fvMatrix< typename Expr::value_type > &m, const Expr &expression)
const wordList & controllers() const
The controller names for this patch.
TypeName("lumpedPointDisplacement")
Runtime type information.
static labelList patchIds(const pointVectorField &pvf)
The ids for all patches of this type.
static autoPtr< pointPatchField< Type > > Clone(const DerivedPatchField &pf, Args &&... args)
Clone a patch field, optionally with internal field reference etc.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:56
static label setPatchControls(const pointVectorField &pvf, const pointField &points0)
Set all patch controls for patches of this type.
const lumpedPointMovement & movement() const
The auto-vivifying singleton for movement.
Basic pointPatch represents a set of points from the mesh.
Definition: pointPatch.H:64
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Definition: HashPtrTable.H:48
volScalarField & p
The movement driver that describes initial point locations, the current state of the points/rotations...
lumpedPointDisplacementPointPatchVectorField(const pointPatch &p, const DimensionedField< vector, pointMesh > &iF)
Construct from patch and internal field.
Namespace for OpenFOAM.