cyclicACMIPointPatchField.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) 2013-2017 OpenFOAM Foundation
9  Copyright (C) 2020 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 Class
28  Foam::cyclicACMIPointPatchField
29 
30 Description
31  Cyclic ACMI front and back plane patch field
32 
33 SourceFiles
34  cyclicACMIPointPatchField.C
35 
36 \*---------------------------------------------------------------------------*/
37 
38 #ifndef Foam_cyclicACMIPointPatchField_H
39 #define Foam_cyclicACMIPointPatchField_H
40 
41 #include "coupledPointPatchField.H"
42 #include "cyclicACMIPointPatch.H"
44 
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 
47 namespace Foam
48 {
49 
50 /*---------------------------------------------------------------------------*\
51  Class cyclicACMIPointPatchField Declaration
52 \*---------------------------------------------------------------------------*/
53 
54 template<class Type>
56 :
57  public coupledPointPatchField<Type>
58 {
59  // Private Data
60 
61  //- Local reference cast into the cyclicACMI patch
62  const cyclicACMIPointPatch& cyclicACMIPatch_;
63 
64  //- Owner side patch interpolation pointer
66 
67  //- Neighbour side patch interpolation pointer
69  nbrPpiPtr_;
70 
71 
72  // Private Member Functions
73 
74  //- Owner side patch interpolation
76  {
77  if (!ppiPtr_)
78  {
79  ppiPtr_.reset
80  (
82  (
83  cyclicACMIPatch_.cyclicACMIPatch()
84  )
85  );
86  }
87 
88  return *ppiPtr_;
89  }
90 
91  //- Neighbour side patch interpolation
93  {
94  if (!nbrPpiPtr_)
95  {
96  nbrPpiPtr_.reset
97  (
99  (
100  cyclicACMIPatch_.cyclicACMIPatch().neighbPatch()
101  )
102  );
103  }
104 
105  return *nbrPpiPtr_;
106  }
107 
108 
109 public:
110 
111  //- Runtime type information
112  TypeName(cyclicACMIPointPatch::typeName_());
113 
114 
115  // Constructors
116 
117  //- Construct from patch and internal field
119  (
120  const pointPatch&,
122  );
123 
124  //- Construct from patch, internal field and dictionary
126  (
127  const pointPatch&,
129  const dictionary&
130  );
131 
132  //- Construct by mapping given patch field onto a new patch
134  (
136  const pointPatch&,
138  const pointPatchFieldMapper&
139  );
140 
141  //- Construct as copy setting internal field reference
143  (
146  );
147 
148  //- Return a clone
149  virtual autoPtr<pointPatchField<Type>> clone() const
150  {
151  return pointPatchField<Type>::Clone(*this);
152  }
153 
154  //- Construct and return a clone setting internal field reference
156  (
158  ) const
159  {
160  return pointPatchField<Type>::Clone(*this, iF);
161  }
162 
163 
164  // Member functions
165 
166  // Constraint handling
167 
168  //- Return the constraint type this pointPatchField implements
169  virtual const word& constraintType() const
170  {
171  return cyclicACMIPointPatch::typeName;
172  }
173 
174 
175  // Cyclic AMI coupled interface functions
176 
177  //- Does the patch field perform the transformation
178  virtual bool doTransform() const
179  {
180  return (pTraits<Type>::rank && !cyclicACMIPatch_.parallel());
181  }
182 
183  //- Return face transformation tensor
184  virtual const tensorField& forwardT() const
185  {
186  return cyclicACMIPatch_.forwardT();
187  }
188 
189  //- Return neighbour-cell transformation tensor
190  virtual const tensorField& reverseT() const
191  {
192  return cyclicACMIPatch_.reverseT();
193  }
194 
195 
196  // Evaluation functions
197 
198  //- Evaluate the patch field
199  virtual void evaluate
200  (
201  const Pstream::commsTypes commsType =
203  )
204  {}
205 
206  //- Complete swap of patch point values and add to local values
207  virtual void swapAddSeparated
208  (
209  const Pstream::commsTypes commsType,
210  Field<Type>&
211  ) const;
212 };
213 
214 
215 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
216 
217 } // End namespace Foam
218 
219 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
220 
221 #ifdef NoRepository
222  #include "cyclicACMIPointPatchField.C"
223 #endif
224 
225 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
226 
227 #endif
228 
229 // ************************************************************************* //
Interpolation class within a primitive patch. Allows interpolation from points to faces and vice vers...
Cyclic AMI point patch - place holder only.
virtual const cyclicACMIPolyPatch & neighbPatch() const
Return a reference to the neighbour patch.
commsTypes
Communications types.
Definition: UPstream.H:77
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
virtual bool doTransform() const
Does the patch field perform the transformation.
Foam::pointPatchFieldMapper.
virtual void swapAddSeparated(const Pstream::commsTypes commsType, Field< Type > &) const
Complete swap of patch point values and add to local values.
A traits class, which is primarily used for primitives and vector-space.
Definition: pTraits.H:75
const tensorField & reverseT() const
Return neighbour-cell transformation tensor.
const tensorField & forwardT() const
Return face transformation tensor.
cyclicACMIPointPatchField(const pointPatch &, const DimensionedField< Type, pointMesh > &)
Construct from patch and internal field.
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::commsTypes::buffered)
Evaluate the patch field.
void reset(T *p=nullptr) noexcept
Delete managed object and set to new given pointer.
Definition: autoPtrI.H:37
A class for handling words, derived from Foam::string.
Definition: word.H:63
virtual const tensorField & reverseT() const
Return neighbour-cell transformation tensor.
static autoPtr< pointPatchField< Type > > Clone(const DerivedPatchField &pf, Args &&... args)
Clone a patch field, optionally with internal field reference etc.
bool parallel() const
Are the cyclic planes parallel.
virtual const word & constraintType() const
Return the constraint type this pointPatchField implements.
TypeName(cyclicACMIPointPatch::typeName_())
Runtime type information.
virtual autoPtr< pointPatchField< Type > > clone() const
Return a clone.
virtual const tensorField & forwardT() const
Return face transformation tensor.
Basic pointPatch represents a set of points from the mesh.
Definition: pointPatch.H:61
A Coupled boundary condition for pointField.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Cyclic ACMI front and back plane patch field.
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Definition: HashPtrTable.H:48
"buffered" : (MPI_Bsend, MPI_Recv)
Namespace for OpenFOAM.
const cyclicACMIPolyPatch & cyclicACMIPatch() const
Return the underlying cyclicAMIPolyPatch.