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.txx
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  typedef slicedFaPatchField<Type> this_bctype;
71  typedef faPatchField<Type> parent_bctype;
72 
73 public:
74 
75  //- Type for the mesh processor patch
77 
78 
79  //- Runtime type information
80  TypeName("sliced");
81 
82 
83  // Constructors
84 
85  //- Construct from patch, internal field and field to slice
87  (
88  const faPatch&,
90  const Field<Type>& completeOrBoundaryField,
91  const bool isBoundaryOnly = false
92  );
93 
94  //- Construct from patch and internal field. Assign value later.
96  (
97  const faPatch&,
99  );
100 
101  //- Construct from patch, internal field and dictionary.
102  //- Not implemented
104  (
105  const faPatch&,
107  const dictionary&
108  );
109 
110  //- Construct by mapping onto a new patch.
111  //- Not implemented
113  (
114  const this_bctype&,
115  const faPatch&,
117  const faPatchFieldMapper&
118  );
119 
120  //- Construct as copy setting internal field reference
122  (
123  const this_bctype&,
125  );
126 
127  //- No copy without an internal field
128  slicedFaPatchField(const this_bctype&) = delete;
129 
130  //- Clone with an internal field reference
132  (
134  ) const
135  {
136  return faPatchField<Type>::Clone(*this, iF);
137  }
138 
139 
140  //- Destructor, resets pointers to avoid deletion of underlying field
141  virtual ~slicedFaPatchField();
142 
143 
144  // Member Functions
146  //- True: this patch field fixes a value.
147  virtual bool fixesValue() const { return true; }
148 
149  //- False: this patch field is not altered by assignment.
150  virtual bool assignable() const { return false; }
151 
152 
153  // Evaluation Functions
154 
155  //- Return patch-normal gradient
156  virtual tmp<Field<Type>> snGrad() const;
157 
158  //- Retrieve patch-normal gradient [contiguous storage]
159  virtual void snGrad(UList<Type>& result) const;
160 
161  //- Return internal field next to patch
162  virtual tmp<Field<Type>> patchInternalField() const;
163 
164  //- Retrieve internal field next to patch
165  virtual void patchInternalField(UList<Type>&) const;
166 
167  //- Return patchField on the opposite patch of a coupled patch
168  virtual tmp<Field<Type>> patchNeighbourField() const;
170  //- Retrieve neighbour coupled field
171  virtual void patchNeighbourField(UList<Type>&) const;
172 
173  //- Initialise the evaluation of the patch field
174  virtual void initEvaluate
175  (
176  const Pstream::commsTypes commsType =
178  )
179  {}
180 
181  //- Evaluate the patch field, sets updated() to false
182  virtual void evaluate
183  (
184  const Pstream::commsTypes commsType =
186  )
187  {}
188 
189  //- Return the matrix diagonal coefficients corresponding to the
190  // evaluation of the value of this patchField with given weights
191  virtual tmp<Field<Type>> valueInternalCoeffs
192  (
193  const tmp<scalarField>&
194  ) const;
195 
196  //- Return the matrix source coefficients corresponding to the
197  // evaluation of the value of this patchField with given weights
198  virtual tmp<Field<Type>> valueBoundaryCoeffs
199  (
200  const tmp<scalarField>&
201  ) const;
202 
203  //- Return the matrix diagonal coefficients corresponding to the
204  // evaluation of the gradient of this patchField
205  virtual tmp<Field<Type>> gradientInternalCoeffs() const;
206 
207  //- Return the matrix source coefficients corresponding to the
208  // evaluation of the gradient of this patchField
209  virtual tmp<Field<Type>> gradientBoundaryCoeffs() const;
210 
211 
212  //- Write
213  virtual void write(Ostream&) const;
214 
215 
216  // Member Operators
217 
218  virtual void operator=(const UList<Type>&) {}
219 
220  virtual void operator=(const faPatchField<Type>&) {}
221  virtual void operator+=(const faPatchField<Type>&) {}
222  virtual void operator-=(const faPatchField<Type>&) {}
223  virtual void operator*=(const faPatchField<scalar>&) {}
224  virtual void operator/=(const faPatchField<scalar>&) {}
225 
226  virtual void operator+=(const Field<Type>&) {}
227  virtual void operator-=(const Field<Type>&) {}
228 
229  virtual void operator*=(const Field<scalar>&) {}
230  virtual void operator/=(const Field<scalar>&) {}
231 
232  virtual void operator=(const Type&) {}
233  virtual void operator+=(const Type&) {}
234  virtual void operator-=(const Type&) {}
235  virtual void operator*=(const scalar) {}
236  virtual void operator/=(const scalar) {}
237 };
238 
239 
240 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
241 
242 } // End namespace Foam
243 
244 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
245 
246 #ifdef NoRepository
247  #include "slicedFaPatchField.txx"
248 #endif
249 
250 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
251 
252 #endif
253 
254 // ************************************************************************* //
virtual tmp< Field< Type > > valueInternalCoeffs(const tmp< scalarField > &) const
Return the matrix diagonal coefficients corresponding to the.
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.
commsTypes
Communications types.
Definition: UPstream.H:81
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:130
virtual tmp< faPatchField< Type > > clone() const
No clone without an internal field reference.
Definition: faPatchField.H:534
virtual tmp< Field< Type > > valueBoundaryCoeffs(const tmp< scalarField > &) const
Return the matrix source coefficients corresponding to the.
faPatchField<Type> abstract base class. This class gives a fat-interface to all derived classes cover...
Definition: areaFieldsFwd.H:41
virtual void operator*=(const faPatchField< scalar > &)
virtual void operator-=(const faPatchField< Type > &)
virtual tmp< Field< Type > > gradientBoundaryCoeffs() const
Return the matrix source coefficients corresponding to the.
Generic templated field type that is much like a Foam::List except that it is expected to hold numeri...
Definition: Field.H:69
virtual ~slicedFaPatchField()
Destructor, resets pointers to avoid deletion of underlying field.
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.
virtual tmp< Field< Type > > patchInternalField() const
Return internal field next to patch.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:56
virtual tmp< Field< Type > > gradientInternalCoeffs() const
Return the matrix diagonal coefficients corresponding to the.
Finite area patch class. Used for 2-D non-Euclidian finite area method.
Definition: faPatch.H:73
TypeName("sliced")
Runtime type information.
static tmp< faPatchField< Type > > Clone(const DerivedPatchField &pf, Args &&... args)
Clone a patch field, optionally with internal field reference etc.
Definition: faPatchField.H:559
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...
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)
virtual tmp< Field< Type > > patchNeighbourField() const
Return patchField on the opposite patch of a coupled patch.
virtual void write(Ostream &) const
Write.
virtual tmp< Field< Type > > snGrad() const
Return patch-normal gradient.
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.