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 | Copyright (C) 2013-2017 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 Class
25  Foam::cyclicACMIPointPatchField
26 
27 Description
28  Cyclic ACMI front and back plane patch field
29 
30 SourceFiles
31  cyclicACMIPointPatchField.C
32 
33 \*---------------------------------------------------------------------------*/
34 
35 #ifndef cyclicACMIPointPatchField_H
36 #define cyclicACMIPointPatchField_H
37 
38 #include "coupledPointPatchField.H"
39 #include "cyclicACMIPointPatch.H"
41 
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 
44 namespace Foam
45 {
46 
47 /*---------------------------------------------------------------------------*\
48  Class cyclicACMIPointPatchField Declaration
49 \*---------------------------------------------------------------------------*/
50 
51 template<class Type>
53 :
54  public coupledPointPatchField<Type>
55 {
56  // Private data
57 
58  //- Local reference cast into the cyclicACMI patch
59  const cyclicACMIPointPatch& cyclicACMIPatch_;
60 
61  //- Owner side patch interpolation pointer
63 
64  //- Neighbour side patch interpolation pointer
66  nbrPpiPtr_;
67 
68 
69  // Private Member Functions
70 
71  //- Owner side patch interpolation
73  {
74  if (!ppiPtr_.valid())
75  {
76  ppiPtr_.reset
77  (
79  (
80  cyclicACMIPatch_.cyclicACMIPatch()
81  )
82  );
83  }
84 
85  return ppiPtr_();
86  }
87 
88  //- Neighbour side patch interpolation
90  {
91  if (!nbrPpiPtr_.valid())
92  {
93  nbrPpiPtr_.reset
94  (
96  (
97  cyclicACMIPatch_.cyclicACMIPatch().neighbPatch()
98  )
99  );
100  }
101 
102  return nbrPpiPtr_();
103  }
104 
105 
106 public:
107 
108  //- Runtime type information
109  TypeName(cyclicACMIPointPatch::typeName_());
110 
111 
112  // Constructors
113 
114  //- Construct from patch and internal field
116  (
117  const pointPatch&,
119  );
120 
121  //- Construct from patch, internal field and dictionary
123  (
124  const pointPatch&,
126  const dictionary&
127  );
128 
129  //- Construct by mapping given patchField<Type> onto a new patch
131  (
133  const pointPatch&,
135  const pointPatchFieldMapper&
136  );
137 
138  //- Construct and return a clone
139  virtual autoPtr<pointPatchField<Type>> clone() const
140  {
142  (
144  (
145  *this
146  )
147  );
148  }
149 
150  //- Construct as copy setting internal field reference
152  (
155  );
156 
157  //- Construct and return a clone setting internal field reference
159  (
161  ) const
162  {
164  (
166  (
167  *this, iF
168  )
169  );
170  }
171 
172 
173  // Member functions
174 
175  // Constraint handling
176 
177  //- Return the constraint type this pointPatchField implements
178  virtual const word& constraintType() const
179  {
180  return cyclicACMIPointPatch::typeName;
181  }
182 
183 
184  // Cyclic AMI coupled interface functions
185 
186  //- Does the patch field perform the transfromation
187  virtual bool doTransform() const
188  {
189  return
190  !(
191  cyclicACMIPatch_.parallel()
192  || pTraits<Type>::rank == 0
193  );
194  }
195 
196  //- Return face transformation tensor
197  virtual const tensorField& forwardT() const
198  {
199  return cyclicACMIPatch_.forwardT();
200  }
201 
202  //- Return neighbour-cell transformation tensor
203  virtual const tensorField& reverseT() const
204  {
205  return cyclicACMIPatch_.reverseT();
206  }
207 
208 
209  // Evaluation functions
210 
211  //- Evaluate the patch field
212  virtual void evaluate
213  (
214  const Pstream::commsTypes commsType =
216  )
217  {}
218 
219  //- Complete swap of patch point values and add to local values
220  virtual void swapAddSeparated
221  (
222  const Pstream::commsTypes commsType,
223  Field<Type>&
224  ) const;
225 };
226 
227 
228 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
229 
230 } // End namespace Foam
231 
232 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
233 
234 #ifdef NoRepository
235  #include "cyclicACMIPointPatchField.C"
236 #endif
237 
238 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
239 
240 #endif
241 
242 // ************************************************************************* //
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.
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::commsTypes::blocking)
Evaluate the patch field.
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:137
commsTypes
Types of communications.
Definition: UPstream.H:64
virtual bool doTransform() const
Does the patch field perform the transfromation.
Foam::pointPatchFieldMapper.
virtual void swapAddSeparated(const Pstream::commsTypes commsType, Field< Type > &) const
Complete swap of patch point values and add to local values.
Traits class for primitives.
Definition: pTraits.H:50
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.
void reset(T *=0)
If object pointer already set, delete object and set to given.
Definition: autoPtrI.H:114
A class for handling words, derived from string.
Definition: word.H:59
virtual const tensorField & reverseT() const
Return neighbour-cell transformation tensor.
bool parallel() const
Are the cyclic planes parallel.
bool valid() const
Return true if the autoPtr valid (ie, the pointer is set)
Definition: autoPtrI.H:83
virtual const word & constraintType() const
Return the constraint type this pointPatchField implements.
TypeName(cyclicACMIPointPatch::typeName_())
Runtime type information.
virtual autoPtr< pointPatchField< Type > > clone() const
Construct and 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:56
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.
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: PtrList.H:52
Namespace for OpenFOAM.
const cyclicACMIPolyPatch & cyclicACMIPatch() const
Return the underlying cyclicAMIPolyPatch.