slicedFaPatchField.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 OpenFOAM Foundation
9  Copyright (C) 2023 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::slicedFaPatchField
29 
30 Group
31  grpGenericBoundaryConditions
32 
33 Description
34  Specialization of faPatchField which creates the underlying
35  faPatchField as a slice of the given complete field.
36 
37  The destructor is wrapped to avoid deallocation of the storage of the
38  complete fields when this is destroyed.
39 
40  Should only used as a template argument for SlicedGeometricField.
41 
42 See also
43  Foam::faPatchField
44 
45 SourceFiles
46  slicedFaPatchField.C
47 
48 \*---------------------------------------------------------------------------*/
49 
50 #ifndef Foam_slicedFaPatchField_H
51 #define Foam_slicedFaPatchField_H
52 
53 #include "faPatchField.H"
54 #include "processorFaPatch.H"
55 
56 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
57 
58 namespace Foam
59 {
60 
61 /*---------------------------------------------------------------------------*\
62  Class slicedFaPatchField Declaration
63 \*---------------------------------------------------------------------------*/
64 
65 template<class Type>
66 class slicedFaPatchField
67 :
68  public faPatchField<Type>
69 {
70 public:
71 
72  //- Type for the mesh processor patch
74 
75 
76  //- Runtime type information
77  TypeName("sliced");
78 
79 
80  // Constructors
81 
82  //- Construct from patch, internal field and field to slice
84  (
85  const faPatch&,
87  const Field<Type>& completeOrBoundaryField,
88  const bool isBoundaryOnly = false
89  );
90 
91  //- Construct from patch and internal field. Assign value later.
93  (
94  const faPatch&,
96  );
97 
98  //- Construct from patch, internal field and dictionary.
99  //- Not implemented
101  (
102  const faPatch&,
104  const dictionary&
105  );
106 
107  //- Construct by mapping the given patch field onto a new patch.
108  //- Not implemented
110  (
112  const faPatch&,
114  const faPatchFieldMapper&
115  );
116 
117  //- Construct as copy
119 
120  //- Construct as copy setting internal field reference
122  (
125  );
126 
127  //- Return clone
128  virtual tmp<faPatchField<Type>> clone() const
129  {
130  return faPatchField<Type>::Clone(*this);
131  }
132 
133  //- Clone with an internal field reference
135  (
137  ) const
138  {
139  return faPatchField<Type>::Clone(*this, iF);
140  }
142 
143  //- Destructor, resets pointers to avoid deletion of underlying field
144  virtual ~slicedFaPatchField();
145 
146 
147  // Member Functions
148 
149  //- True: this patch field fixes a value.
150  virtual bool fixesValue() const { return true; }
151 
152  //- False: this patch field is not altered by assignment.
153  virtual bool assignable() const { return false; }
154 
155 
156  // Evaluation functions
157 
158  //- Return patch-normal gradient
159  virtual tmp<Field<Type>> snGrad() const;
160 
161  //- Return internal field next to patch as patch field
162  virtual tmp<Field<Type>> patchInternalField() const;
163 
164  //- Return internal field next to patch as patch field
165  virtual void patchInternalField(Field<Type>&) const;
166 
167  //- Return neighbour coupled given internal cell data
168  virtual tmp<Field<Type>> patchNeighbourField
169  (
170  const Field<Type>& iField
171  ) const;
172 
173  //- Return patchField of the values on the patch or on the
174  // opposite patch
175  virtual tmp<Field<Type>> patchNeighbourField() const;
176 
177  //- Initialise the evaluation of the patch field
178  virtual void initEvaluate
179  (
180  const Pstream::commsTypes commsType =
182  )
183  {}
184 
185  //- Evaluate the patch field, sets updated() to false
186  virtual void evaluate
187  (
188  const Pstream::commsTypes commsType =
190  )
191  {}
192 
193  //- Return the matrix diagonal coefficients corresponding to the
194  // evaluation of the value of this patchField with given weights
195  virtual tmp<Field<Type>> valueInternalCoeffs
196  (
197  const tmp<scalarField>&
198  ) const;
199 
200  //- Return the matrix source coefficients corresponding to the
201  // evaluation of the value of this patchField with given weights
202  virtual tmp<Field<Type>> valueBoundaryCoeffs
203  (
204  const tmp<scalarField>&
205  ) const;
206 
207  //- Return the matrix diagonal coefficients corresponding to the
208  // evaluation of the gradient of this patchField
209  virtual tmp<Field<Type>> gradientInternalCoeffs() const;
210 
211  //- Return the matrix source coefficients corresponding to the
212  // evaluation of the gradient of this patchField
214 
215 
216  //- Write
217  virtual void write(Ostream&) const;
218 
219 
220  // Member Operators
221 
222  virtual void operator=(const UList<Type>&) {}
224  virtual void operator=(const faPatchField<Type>&) {}
225  virtual void operator+=(const faPatchField<Type>&) {}
226  virtual void operator-=(const faPatchField<Type>&) {}
227  virtual void operator*=(const faPatchField<scalar>&) {}
228  virtual void operator/=(const faPatchField<scalar>&) {}
229 
230  virtual void operator+=(const Field<Type>&) {}
231  virtual void operator-=(const Field<Type>&) {}
232 
233  virtual void operator*=(const Field<scalar>&) {}
234  virtual void operator/=(const Field<scalar>&) {}
235 
236  virtual void operator=(const Type&) {}
237  virtual void operator+=(const Type&) {}
238  virtual void operator-=(const Type&) {}
239  virtual void operator*=(const scalar) {}
240  virtual void operator/=(const scalar) {}
241 };
242 
243 
244 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
245 
246 } // End namespace Foam
247 
248 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
249 
250 #ifdef NoRepository
251  #include "slicedFaPatchField.C"
252 #endif
253 
254 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
255 
256 #endif
257 
258 // ************************************************************************* //
virtual tmp< Field< Type > > patchInternalField() const
Return internal field next to patch as patch field.
Specialization of faPatchField which creates the underlying faPatchField as a slice of the given comp...
virtual bool assignable() const
False: this patch field is not altered by assignment.
virtual tmp< faPatchField< Type > > clone() const
Return clone.
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 tmp< Field< Type > > patchNeighbourField() const
Return patchField of the values on the patch or on the.
faPatchField<Type> abstract base class. This class gives a fat-interface to all derived classes cover...
Definition: areaFieldsFwd.H:46
virtual void operator*=(const faPatchField< scalar > &)
virtual tmp< Field< Type > > valueInternalCoeffs(const tmp< scalarField > &) const
Return the matrix diagonal coefficients corresponding to the.
virtual void operator-=(const faPatchField< Type > &)
Generic templated field type.
Definition: Field.H:62
virtual tmp< Field< Type > > gradientBoundaryCoeffs() const
Return the matrix source coefficients corresponding to the.
virtual void initEvaluate(const Pstream::commsTypes commsType=Pstream::commsTypes::buffered)
Initialise the evaluation of the patch field.
virtual bool fixesValue() const
True: this patch field fixes a value.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:56
static tmp< faPatchField< Type > > Clone(const DerivedPatchField &pf)
Clone a patch field with its own internal field reference.
Definition: faPatchField.H:513
Finite area patch class. Used for 2-D non-Euclidian finite area method.
Definition: faPatch.H:72
TypeName("sliced")
Runtime type information.
virtual ~slicedFaPatchField()
Destructor, resets pointers to avoid deletion of underlying field.
virtual void write(Ostream &) const
Write.
processorFaPatch processorPatchType
Type for the mesh processor patch.
virtual void operator/=(const faPatchField< scalar > &)
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
virtual tmp< Field< Type > > valueBoundaryCoeffs(const tmp< scalarField > &) const
Return the matrix source coefficients corresponding to the.
virtual tmp< Field< Type > > snGrad() const
Return patch-normal gradient.
virtual tmp< Field< Type > > gradientInternalCoeffs() const
Return the matrix diagonal coefficients corresponding to the.
slicedFaPatchField(const faPatch &, const DimensionedField< Type, areaMesh > &, const Field< Type > &completeOrBoundaryField, const bool isBoundaryOnly=false)
Construct from patch, internal field and field to slice.
A class for managing temporary objects.
Definition: HashPtrTable.H:50
"buffered" : (MPI_Bsend, MPI_Recv)
A FieldMapper for finite-area patch fields.
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::commsTypes::buffered)
Evaluate the patch field, sets updated() to false.
virtual void operator=(const UList< Type > &)
virtual void operator+=(const faPatchField< Type > &)
Namespace for OpenFOAM.
Processor patch.