coupledFvPatch.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2022 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::coupledFvPatch
26 
27 Description
28  An abstract base class for patches that couple regions of the
29  computational domain e.g. cyclic and processor-processor links.
30 
31 SourceFiles
32  coupledFvPatch.C
33 
34 \*---------------------------------------------------------------------------*/
35 
36 #ifndef coupledFvPatch_H
37 #define coupledFvPatch_H
38 
39 #include "fvPatch.H"
40 #include "lduInterface.H"
41 #include "coupledPolyPatch.H"
42 
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 
45 namespace Foam
46 {
47 
48 /*---------------------------------------------------------------------------*\
49  Class coupledFvPatch Declaration
50 \*---------------------------------------------------------------------------*/
51 
52 class coupledFvPatch
53 :
54  public lduInterface,
55  public fvPatch
56 {
57  // Private Data
58 
59  const coupledPolyPatch& coupledPolyPatch_;
60 
61 
62 protected:
63 
64  // Protected Member Functions
65 
66 protected:
67 
68  // Protected Member functions
69 
70  //- Make patch weighting factors
71  void makeWeights
72  (
73  scalarField& w,
74  const vectorField& nbrSf,
75  const vectorField& nbrDelta
76  ) const;
77 
78  //- Make patch weighting factors
79  virtual void makeWeights(scalarField& w) const = 0;
80 
81  //- Return delta (P to N) vectors across coupled patch
83  (
84  const vectorField& nbrDelta
85  ) const;
86 
87 
88 public:
89 
90  friend class surfaceInterpolation;
91 
92 
93  //- Runtime type information
94  TypeName(coupledPolyPatch::typeName_());
95 
96 
97  // Constructors
98 
99  //- Construct from polyPatch
100  coupledFvPatch(const polyPatch& patch, const fvBoundaryMesh& bm)
101  :
102  fvPatch(patch, bm),
103  coupledPolyPatch_(refCast<const coupledPolyPatch>(patch))
104  {}
105 
106 
107  //- Destructor
108  virtual ~coupledFvPatch();
109 
110 
111  // Member Functions
112 
113  // Access
114 
115  //- Return true because this patch is coupled
116  virtual bool coupled() const
117  {
118  return coupledPolyPatch_.coupled();
119  }
120 
121  //- Does this side own the patch ?
122  virtual bool owner() const
123  {
124  return coupledPolyPatch_.owner();
125  }
126 
127  //- Does the coupled side own the patch ?
128  virtual bool neighbour() const
129  {
130  return !owner();
131  }
132 
133  //- Return transformation between the coupled patches
134  virtual const transformer& transform() const = 0;
135 
136  //- Return faceCell addressing
137  virtual const labelUList& faceCells() const
138  {
139  return fvPatch::faceCells();
140  }
141 
142  //- Return delta (P to N) vectors across coupled patch
143  virtual tmp<vectorField> delta() const = 0;
144 
145 
146  // Interface transfer functions
147 
148  //- Return the values of the given internal data adjacent to
149  // the interface as a field
151  (
152  const labelUList& internalData
153  ) const = 0;
154 
155  //- Inherit initInternalFieldTransfer from lduInterface
157 
158  //- Initialise neighbour field transfer
159  virtual void initInternalFieldTransfer
160  (
161  const Pstream::commsTypes commsType,
162  labelUList& iF
163  ) const
164  {}
165 
166  //- Return neighbour field
168  (
169  const Pstream::commsTypes commsType,
170  const labelUList& iF
171  ) const = 0;
172 };
173 
174 
175 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
176 
177 } // End namespace Foam
178 
179 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
180 
181 #endif
182 
183 // ************************************************************************* //
commsTypes
Types of communications.
Definition: UPstream.H:65
An abstract base class for patches that couple regions of the computational domain e....
TypeName(coupledPolyPatch::typeName_())
Runtime type information.
virtual void initInternalFieldTransfer(const Pstream::commsTypes commsType, const labelUList &iF) const
Inherit initInternalFieldTransfer from lduInterface.
Definition: lduInterface.H:95
virtual tmp< labelField > internalFieldTransfer(const Pstream::commsTypes commsType, const labelUList &iF) const =0
Return neighbour field.
virtual bool owner() const
Does this side own the patch ?
virtual bool coupled() const
Return true because this patch is coupled.
coupledFvPatch(const polyPatch &patch, const fvBoundaryMesh &bm)
Construct from polyPatch.
virtual tmp< labelField > interfaceInternalField(const labelUList &internalData) const =0
Return the values of the given internal data adjacent to.
virtual const transformer & transform() const =0
Return transformation between the coupled patches.
virtual ~coupledFvPatch()
Destructor.
virtual const labelUList & faceCells() const
Return faceCell addressing.
void makeWeights(scalarField &w, const vectorField &nbrSf, const vectorField &nbrDelta) const
Make patch weighting factors.
virtual bool neighbour() const
Does the coupled side own the patch ?
virtual tmp< vectorField > delta() const =0
Return delta (P to N) vectors across coupled patch.
The coupledPolyPatch is an abstract base class for patches that couple regions of the computational d...
virtual bool coupled() const
Return true because this patch is coupled.
virtual bool owner() const =0
Does this side own the patch ?
Foam::fvBoundaryMesh.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:64
const polyPatch & patch() const
Return the polyPatch.
Definition: fvPatch.H:139
virtual const labelUList & faceCells() const
Return faceCells.
Definition: fvPatch.C:99
An abstract base class for implicitly-coupled interfaces e.g. processor and cyclic patches.
Definition: lduInterface.H:54
virtual void initInternalFieldTransfer(const Pstream::commsTypes commsType, const labelUList &iF) const
Initialise transfer of internal field adjacent to the interface.
Definition: lduInterface.H:95
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:70
Cell to surface interpolation scheme. Included in fvMesh.
A class for managing temporary objects.
Definition: tmp.H:55
Vector-tensor class used to perform translations, rotations and scaling operations in 3D space.
Definition: transformer.H:84
Namespace for OpenFOAM.
To & refCast(From &r)
Reference type cast template function.
Definition: typeInfo.H:111