All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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-2020 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  //- Make patch weighting factors
67  virtual void makeWeights(scalarField&) const = 0;
68 
69 
70 public:
71 
72  friend class surfaceInterpolation;
73 
74 
75  //- Runtime type information
76  TypeName(coupledPolyPatch::typeName_());
77 
78 
79  // Constructors
80 
81  //- Construct from polyPatch
82  coupledFvPatch(const polyPatch& patch, const fvBoundaryMesh& bm)
83  :
84  fvPatch(patch, bm),
85  coupledPolyPatch_(refCast<const coupledPolyPatch>(patch))
86  {}
87 
88 
89  //- Destructor
90  virtual ~coupledFvPatch();
91 
92 
93  // Member Functions
94 
95  // Access
96 
97  //- Return true because this patch is coupled
98  virtual bool coupled() const
99  {
100  return coupledPolyPatch_.coupled();
101  }
102 
103  //- Return transformation between the coupled patches
104  virtual const transformer& transform() const = 0;
105 
106  //- Return faceCell addressing
107  virtual const labelUList& faceCells() const
108  {
109  return fvPatch::faceCells();
110  }
111 
112  //- Return delta (P to N) vectors across coupled patch
113  virtual tmp<vectorField> delta() const = 0;
114 
115 
116  // Interface transfer functions
117 
118  //- Return the values of the given internal data adjacent to
119  // the interface as a field
121  (
122  const labelUList& internalData
123  ) const = 0;
124 
125  //- Inherit initInternalFieldTransfer from lduInterface
127 
128  //- Initialise neighbour field transfer
130  (
131  const Pstream::commsTypes commsType,
132  labelUList& iF
133  ) const
134  {}
135 
136  //- Return neighbour field
138  (
139  const Pstream::commsTypes commsType,
140  const labelUList& iF
141  ) const = 0;
142 };
143 
144 
145 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
146 
147 } // End namespace Foam
148 
149 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
150 
151 #endif
152 
153 // ************************************************************************* //
virtual bool coupled() const
Return true because this patch is coupled.
Vector-tensor class used to perform translations, rotations and scaling operations in 3D space...
Definition: transformer.H:83
virtual const transformer & transform() const =0
Return transformation between the coupled patches.
commsTypes
Types of communications.
Definition: UPstream.H:64
To & refCast(From &r)
Reference type cast template function.
Definition: typeInfo.H:106
An abstract base class for patches that couple regions of the computational domain e...
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:62
virtual void initInternalFieldTransfer(const Pstream::commsTypes commsType, labelUList &iF) const
Initialise neighbour field transfer.
The coupledPolyPatch is an abstract base class for patches that couple regions of the computational d...
Cell to surface interpolation scheme. Included in fvMesh.
virtual tmp< labelField > internalFieldTransfer(const Pstream::commsTypes commsType, const labelUList &iF) const =0
Return neighbour field.
virtual const labelUList & faceCells() const
Return faceCell addressing.
virtual tmp< labelField > interfaceInternalField(const labelUList &internalData) const =0
Return the values of the given internal data adjacent to.
virtual void initInternalFieldTransfer(const Pstream::commsTypes commsType, const labelUList &iF) const
Initialise transfer of internal field adjacent to the interface.
Definition: lduInterface.H:95
virtual const labelUList & faceCells() const
Return faceCells.
Definition: fvPatch.C:99
const polyPatch & patch() const
Return the polyPatch.
Definition: fvPatch.H:138
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
Definition: HashTable.H:60
virtual bool coupled() const
Return true because this patch is coupled.
Foam::fvBoundaryMesh.
virtual tmp< vectorField > delta() const =0
Return delta (P to N) vectors across coupled patch.
An abstract base class for implicitly-coupled interfaces e.g. processor and cyclic patches...
Definition: lduInterface.H:53
TypeName(coupledPolyPatch::typeName_())
Runtime type information.
A class for managing temporary objects.
Definition: PtrList.H:53
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:66
virtual ~coupledFvPatch()
Destructor.
virtual void makeWeights(scalarField &) const =0
Make patch weighting factors.
coupledFvPatch(const polyPatch &patch, const fvBoundaryMesh &bm)
Construct from polyPatch.
Namespace for OpenFOAM.