cyclicAMIFvPatch.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) 2011-2016 OpenFOAM Foundation
9  Copyright (C) 2019 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::cyclicAMIFvPatch
29 
30 Description
31  Cyclic patch for Arbitrary Mesh Interface (AMI)
32 
33 SourceFiles
34  cyclicAMIFvPatch.C
35 
36 \*---------------------------------------------------------------------------*/
37 
38 #ifndef Foam_cyclicAMIFvPatch_H
39 #define Foam_cyclicAMIFvPatch_H
40 
41 #include "cyclicAMIPolyPatch.H"
42 #include "coupledFvPatch.H"
43 #include "cyclicAMILduInterface.H"
44 #include "fvBoundaryMesh.H"
45 
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 
48 namespace Foam
49 {
50 
51 /*---------------------------------------------------------------------------*\
52  Class cyclicAMIFvPatch Declaration
53 \*---------------------------------------------------------------------------*/
54 
55 class cyclicAMIFvPatch
56 :
57  public coupledFvPatch,
59 {
60  // Private Data
61 
62  const cyclicAMIPolyPatch& cyclicAMIPolyPatch_;
63 
64 
65 protected:
66 
67  // Protected Member functions
68 
69  //- Make patch weighting factors
70  void makeWeights(scalarField&) const;
71 
72  //- Correct patch deltaCoeffs
73  virtual void makeDeltaCoeffs(scalarField&) const;
74 
75  //- Correct patch non-ortho deltaCoeffs
76  virtual void makeNonOrthoDeltaCoeffs(scalarField&) const;
77 
78  //- Correct patch non-ortho correction vectors
79  virtual void makeNonOrthoCorrVectors(vectorField&) const;
80 
81  //- Correct patches after moving points
82  virtual void movePoints();
83 
84 
85 public:
86 
87  //- Runtime type information
88  TypeName(cyclicAMIPolyPatch::typeName_());
89 
90 
91  // Constructors
92 
93  //- Construct from polyPatch
95  :
96  coupledFvPatch(patch, bm),
98  cyclicAMIPolyPatch_(refCast<const cyclicAMIPolyPatch>(patch))
99  {}
100 
101 
102  // Member functions
104  // Access
105 
106 // // Implicit treatment functions
107 //
108 // //- Return number of new internal of this polyPatch faces
109 // virtual void newInternalProcFaces(label&, label&) const;
110 //
111 // //- Return nbrCells
112 // virtual const labelUList& nbrCells() const
113 // {
114 // return cyclicAMIPolyPatch_.neighbPatch().faceCells();
115 // }
116 //
117 // //- Return nbr patch ID
118 // virtual label neighbPolyPatchID() const
119 // {
120 // return neighbPatchID();
121 // }
122 //
123 // //- Return collocated faces map
124 // virtual refPtr<labelListList> mapCollocatedFaces() const
125 // {
126 // const labelListList& sourceFaces =
127 // cyclicAMIPolyPatch_.AMI().srcAddress();
128 // return refPtr<labelListList>
129 // (
130 // new labelListList(sourceFaces)
131 // );
132 // }
133 //
134 // //- Return implicit master
135 // virtual bool masterImplicit() const
136 // {
137 // return owner();
138 // }
139 
140 
141  //- Return local reference cast into the cyclic patch
142  const cyclicAMIPolyPatch& cyclicAMIPatch() const
143  {
144  return cyclicAMIPolyPatch_;
145  }
146 
147  //- Does this side own the patch?
148  virtual bool owner() const
149  {
150  return cyclicAMIPolyPatch_.owner();
151  }
152 
153  //- Return neighbour patch ID
154  virtual label neighbPatchID() const
155  {
156  return cyclicAMIPolyPatch_.neighbPatchID();
157  }
158 
159  //- Return a reference to the neighbour patch
160  virtual const cyclicAMIFvPatch& neighbPatch() const
161  {
162  return refCast<const cyclicAMIFvPatch>
163  (
164  this->boundaryMesh()[cyclicAMIPolyPatch_.neighbPatchID()]
165  );
166  }
167 
168  //- Return a reference to the AMI interpolator
169  virtual const AMIPatchToPatchInterpolation& AMI() const
170  {
171  return cyclicAMIPolyPatch_.AMI();
172  }
173 
174  //- Return true if applying the low weight correction
175  virtual bool applyLowWeightCorrection() const
176  {
177  return cyclicAMIPolyPatch_.applyLowWeightCorrection();
178  }
179 
180 
181  //- Are the cyclic planes parallel
182  virtual bool parallel() const
183  {
184  return cyclicAMIPolyPatch_.parallel();
185  }
186 
187  //- Return face transformation tensor
188  virtual const tensorField& forwardT() const
189  {
190  return cyclicAMIPolyPatch_.forwardT();
191  }
192 
193  //- Return neighbour-cell transformation tensor
194  virtual const tensorField& reverseT() const
195  {
196  return cyclicAMIPolyPatch_.reverseT();
197  }
198 
199  const cyclicAMIFvPatch& neighbFvPatch() const
200  {
201  return refCast<const cyclicAMIFvPatch>
202  (
203  this->boundaryMesh()[cyclicAMIPolyPatch_.neighbPatchID()]
204  );
205  }
206 
207 
208  //- Return true if this patch is coupled. This is equivalent
209  //- to the coupledPolyPatch::coupled() if parallel running or
210  //- both sides present, false otherwise
211  virtual bool coupled() const;
212 
213  //- Return delta (P to N) vectors across coupled patch
214  virtual tmp<vectorField> delta() const;
215 
216  template<class Type>
218  (
219  const Field<Type>& fld,
220  const UList<Type>& defaultValues = UList<Type>()
221  ) const
222  {
223  return cyclicAMIPolyPatch_.interpolate(fld, defaultValues);
224  }
225 
226  template<class Type>
228  (
229  const tmp<Field<Type>>& tFld,
230  const UList<Type>& defaultValues = UList<Type>()
231  ) const
232  {
233  return cyclicAMIPolyPatch_.interpolate(tFld, defaultValues);
234  }
235 
236 
237  // Interface transfer functions
238 
239  //- Return the values of the given internal data adjacent to
240  //- the interface as a field
242  (
243  const labelUList& internalData
244  ) const;
245 
246 
247  //- Return the values of the given internal data adjacent to
248  //- the interface as a field using a mapping faceCell
250  (
251  const labelUList& internalData,
252  const labelUList& faceCells
253  ) const;
254 
255 
256  //- Return neighbour field
258  (
259  const Pstream::commsTypes commsType,
260  const labelUList& internalData
261  ) const;
262 };
263 
264 
265 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
266 
267 } // End namespace Foam
268 
269 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
270 
271 #endif
272 
273 // ************************************************************************* //
virtual tmp< labelField > internalFieldTransfer(const Pstream::commsTypes commsType, const labelUList &internalData) const
Return neighbour field.
cyclicAMILduInterface() noexcept=default
Default construct.
const AMIPatchToPatchInterpolation & AMI() const
Return a reference to the AMI interpolator.
virtual label neighbPatchID() const
Neighbour patch ID.
tmp< Field< Type > > interpolate(const Field< Type > &fld, const UList< Type > &defaultValues=UList< Type >()) const
commsTypes
Communications types.
Definition: UPstream.H:72
virtual bool parallel() const
Are the cyclic planes parallel.
virtual tmp< labelField > interfaceInternalField(const labelUList &internalData) const
Return the values of the given internal data adjacent to the interface as a field.
Cyclic patch for Arbitrary Mesh Interface (AMI)
An abstract base class for patches that couple regions of the computational domain e...
bool applyLowWeightCorrection() const
Return true if applying the low weight correction.
tmp< Field< Type > > interpolate(const Field< Type > &fld, const UList< Type > &defaultValues=UList< Type >()) const
Interpolate field.
Smooth ATC in cells next to a set of patches supplied by type.
Definition: faceCells.H:52
virtual void makeDeltaCoeffs(scalarField &) const
Correct patch deltaCoeffs.
virtual void makeNonOrthoCorrVectors(vectorField &) const
Correct patch non-ortho correction vectors.
virtual const tensorField & forwardT() const
Return face transformation tensor.
const cyclicAMIFvPatch & neighbFvPatch() const
virtual bool applyLowWeightCorrection() const
Return true if applying the low weight correction.
virtual bool parallel() const
Are the cyclic planes parallel.
const cyclicAMIPolyPatch & cyclicAMIPatch() const
Return local reference cast into the cyclic patch.
An abstract base class for cyclic AMI coupled interfaces.
cyclicAMIFvPatch(const polyPatch &patch, const fvBoundaryMesh &bm)
Construct from polyPatch.
Cyclic patch for Arbitrary Mesh Interface (AMI)
const fvBoundaryMesh & boundaryMesh() const noexcept
Return boundaryMesh reference.
Definition: fvPatch.H:260
virtual label neighbPatchID() const
Return neighbour patch ID.
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< ' ';}gmvFile<< nl;for(const word &name :lagrangianScalarNames){ IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
virtual void makeNonOrthoDeltaCoeffs(scalarField &) const
Correct patch non-ortho deltaCoeffs.
virtual bool owner() const
Does this side own the patch?
virtual const tensorField & reverseT() const
Return neighbour-cell transformation tensor.
virtual const cyclicAMIFvPatch & neighbPatch() const
Return a reference to the neighbour patch.
TypeName(cyclicAMIPolyPatch::typeName_())
Runtime type information.
Foam::fvBoundaryMesh.
virtual bool coupled() const
Return true if this patch is coupled. This is equivalent to the coupledPolyPatch::coupled() if parall...
virtual bool owner() const
Does this side own the patch?
Interpolation class dealing with transfer of data between two primitive patches with an arbitrary mes...
virtual void movePoints()
Correct patches after moving points.
virtual tmp< vectorField > delta() const
Return delta (P to N) vectors across coupled patch.
void makeWeights(scalarField &) const
Make patch weighting factors.
virtual const AMIPatchToPatchInterpolation & AMI() const
Return a reference to the AMI interpolator.
A class for managing temporary objects.
Definition: HashPtrTable.H:50
virtual const tensorField & forwardT() const
Return face transformation tensor.
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:69
const polyPatch & patch() const noexcept
Return the polyPatch.
Definition: fvPatch.H:202
virtual const tensorField & reverseT() const
Return neighbour-cell transformation tensor.
coupledFvPatch(const polyPatch &patch, const fvBoundaryMesh &bm)
Construct from polyPatch.
Namespace for OpenFOAM.