fixedFluxPressureFvPatchScalarField.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-2024 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::fixedFluxPressureFvPatchScalarField
26 
27 Description
28  This boundary condition sets the pressure gradient to the provided value
29  such that the flux on the boundary is that specified by the velocity
30  boundary condition.
31 
32  Example of the boundary condition specification:
33  \verbatim
34  <patchName>
35  {
36  type fixedFluxPressure;
37  }
38  \endverbatim
39 
40 See also
41  Foam::fixedGradientFvPatchField
42 
43 SourceFiles
44  fixedFluxPressureFvPatchScalarField.C
45 
46 \*---------------------------------------------------------------------------*/
47 
48 #ifndef fixedFluxPressureFvPatchScalarField_H
49 #define fixedFluxPressureFvPatchScalarField_H
50 
51 #include "fvPatchFields.H"
53 #include "surfaceMesh.H"
54 
55 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
56 
57 namespace Foam
58 {
59 
60 /*---------------------------------------------------------------------------*\
61  Class fixedFluxPressureFvPatchScalarField Declaration
62 \*---------------------------------------------------------------------------*/
63 
65 :
66  public fixedGradientFvPatchScalarField
67 {
68  // Private Data
69 
70  //- Current time index (used for updating)
71  label curTimeIndex_;
72 
73 
74 public:
75 
76  //- Runtime type information
77  TypeName("fixedFluxPressure");
78 
79 
80  // Constructors
81 
82  //- Construct from patch, internal field and dictionary
84  (
85  const fvPatch&,
87  const dictionary&
88  );
89 
90  //- Construct by mapping given fixedFluxPressureFvPatchScalarField onto
91  // a new patch
93  (
95  const fvPatch&,
97  const fieldMapper&
98  );
99 
100  //- Disallow copy without setting internal field reference
102  (
104  ) = delete;
105 
106  //- Copy constructor setting internal field reference
108  (
111  );
112 
113  //- Construct and return a clone setting internal field reference
115  (
117  ) const
118  {
120  (
122  );
123  }
124 
125 
126  // Member Functions
127 
128  // Mapping functions
129 
130  //- Map the given fvPatchField onto this fvPatchField
131  void map
132  (
134  const fieldMapper&
135  );
136 
137  //- Map the given fvPatchField onto this fvPatchField
138  virtual void map(const fvPatchScalarField&, const fieldMapper&);
139 
140 
141  // Evaluation functions
142 
143  //- Update the patch pressure gradient field from the given snGradp
144  virtual void updateCoeffs(const scalarField& snGradp);
145 
146  //- Update the patch pressure gradient field
147  virtual void updateCoeffs();
148 
149 
150  //- Write
151  virtual void write(Ostream&) const;
152 };
153 
154 
155 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
156 
157 } // End namespace Foam
158 
159 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
160 
161 #include "volFields.H"
162 
163 namespace Foam
164 {
165  template<class GradBC>
166  inline void setSnGrad
167  (
170  )
171  {
172  forAll(bf, patchi)
173  {
174  if (isA<GradBC>(bf[patchi]))
175  {
176  refCast<GradBC>(bf[patchi]).updateCoeffs(snGrad[patchi]);
177  }
178  }
179  }
180 
181  template<class GradBC>
182  inline void setSnGrad
183  (
186  )
187  {
188  setSnGrad<GradBC>(bf, tsnGrad());
189  }
190 }
191 
192 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
193 
194 #endif
195 
196 // ************************************************************************* //
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:433
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Generic field type.
Definition: FieldField.H:77
Generic GeometricBoundaryField class.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:57
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
Definition: dictionary.H:162
Abstract base class for field mapping.
Definition: fieldMapper.H:48
This boundary condition sets the pressure gradient to the provided value such that the flux on the bo...
void map(const fixedFluxPressureFvPatchScalarField &, const fieldMapper &)
Map the given fvPatchField onto this fvPatchField.
virtual tmp< fvPatchScalarField > clone(const DimensionedField< scalar, volMesh > &iF) const
Construct and return a clone setting internal field reference.
virtual void updateCoeffs()
Update the patch pressure gradient field.
fixedFluxPressureFvPatchScalarField(const fvPatch &, const DimensionedField< scalar, volMesh > &, const dictionary &)
Construct from patch, internal field and dictionary.
TypeName("fixedFluxPressure")
Runtime type information.
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:91
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:64
A class for managing temporary objects.
Definition: tmp.H:55
label patchi
tmp< SurfaceField< Type > > snGrad(const VolField< Type > &vf, const word &name)
Definition: fvcSnGrad.C:45
Namespace for OpenFOAM.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
void setSnGrad(volScalarField::Boundary &bf, const FieldField< surfaceMesh::PatchField, scalar > &snGrad)