localBlended.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::localBlended
26 
27 Description
28  Two-scheme localBlended interpolation scheme.
29 
30 SourceFiles
31  localBlended.C
32 
33 \*---------------------------------------------------------------------------*/
34 
35 #ifndef localBlended_H
36 #define localBlended_H
37 
39 #include "blendedSchemeBase.H"
40 
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
42 
43 namespace Foam
44 {
45 
46 /*---------------------------------------------------------------------------*\
47  Class localBlended Declaration
48 \*---------------------------------------------------------------------------*/
49 
50 template<class Type>
51 class localBlended
52 :
53  public surfaceInterpolationScheme<Type>,
54  public blendedSchemeBase<Type>
55 {
56  // Private Member Functions
57 
58  //- Scheme 1
60 
61  //- Scheme 2
63 
64 
65 public:
66 
67  //- Runtime type information
68  TypeName("localBlended");
69 
70 
71  // Constructors
72 
73  //- Construct from mesh and Istream.
74  // The name of the flux field is read from the Istream and looked-up
75  // from the mesh objectRegistry
77  (
78  const fvMesh& mesh,
79  Istream& is
80  )
81  :
83  tScheme1_
84  (
86  ),
87  tScheme2_
88  (
90  )
91  {}
92 
93  //- Construct from mesh, faceFlux and Istream
95  (
96  const fvMesh& mesh,
97  const surfaceScalarField& faceFlux,
98  Istream& is
99  )
100  :
102  tScheme1_
103  (
104  surfaceInterpolationScheme<Type>::New(mesh, faceFlux, is)
105  ),
106  tScheme2_
107  (
108  surfaceInterpolationScheme<Type>::New(mesh, faceFlux, is)
109  )
110  {}
111 
112  //- Disallow default bitwise copy construction
113  localBlended(const localBlended&) = delete;
114 
115 
116  //- Destructor
117  virtual ~localBlended()
118  {}
119 
120 
121  // Member Functions
122 
123  //- Return the face-based blending factor
125  (
126  const VolField<Type>& vf
127  ) const
128  {
129  return
130  this->mesh().objectRegistry::template
131  lookupObject<const surfaceScalarField>
132  (
133  word(vf.name() + "BlendingFactor")
134  );
135  }
136 
137  //- Return the interpolation weighting factors
139  (
140  const VolField<Type>& vf
141  ) const
142  {
144  this->mesh().objectRegistry::template
145  lookupObject<const surfaceScalarField>
146  (
147  word(vf.name() + "BlendingFactor")
148  );
149 
150  return
151  blendingFactor*tScheme1_().weights(vf)
152  + (scalar(1) - blendingFactor)*tScheme2_().weights(vf);
153  }
154 
155  //- Return the face-interpolate of the given cell field
156  // with explicit correction
158  interpolate(const VolField<Type>& vf) const
159  {
161  (
162  this->mesh().objectRegistry::template
163  lookupObject<const surfaceScalarField>
164  (
165  word(vf.name() + "BlendingFactor")
166  )
167  );
168 
169  return
170  blendingFactor*tScheme1_().interpolate(vf)
171  + (scalar(1) - blendingFactor)*tScheme2_().interpolate(vf);
172  }
173 
174 
175  //- Return true if this scheme uses an explicit correction
176  virtual bool corrected() const
177  {
178  return tScheme1_().corrected() || tScheme2_().corrected();
179  }
180 
181 
182  //- Return the explicit correction to the face-interpolate
183  // for the given field
185  correction
186  (
187  const VolField<Type>& vf
188  ) const
189  {
191  this->mesh().objectRegistry::template
192  lookupObject<const surfaceScalarField>
193  (
194  word(vf.name() + "BlendingFactor")
195  );
196 
197  if (tScheme1_().corrected())
198  {
199  if (tScheme2_().corrected())
200  {
201  return
202  (
204  * tScheme1_().correction(vf)
205  + (scalar(1) - blendingFactor)
206  * tScheme2_().correction(vf)
207  );
208  }
209  else
210  {
211  return
212  (
214  * tScheme1_().correction(vf)
215  );
216  }
217  }
218  else if (tScheme2_().corrected())
219  {
220  return
221  (
222  (scalar(1) - blendingFactor)
223  * tScheme2_().correction(vf)
224  );
225  }
226  else
227  {
228  return tmp<SurfaceField<Type>>
229  (
230  nullptr
231  );
232  }
233  }
234 
235 
236  // Member Operators
237 
238  //- Disallow default bitwise assignment
239  void operator=(const localBlended&) = delete;
240 };
241 
242 
243 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
244 
245 } // End namespace Foam
246 
247 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
248 
249 #endif
250 
251 // ************************************************************************* //
Generic GeometricField class.
const word & name() const
Return name.
Definition: IOobject.H:310
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:60
Base class for blended schemes to provide access to the blending factor surface field.
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:101
Two-scheme localBlended interpolation scheme.
Definition: localBlended.H:54
virtual bool corrected() const
Return true if this scheme uses an explicit correction.
Definition: localBlended.H:175
tmp< SurfaceField< Type > > interpolate(const VolField< Type > &vf) const
Return the face-interpolate of the given cell field.
Definition: localBlended.H:157
virtual ~localBlended()
Destructor.
Definition: localBlended.H:116
tmp< surfaceScalarField > weights(const VolField< Type > &vf) const
Return the interpolation weighting factors.
Definition: localBlended.H:138
void operator=(const localBlended &)=delete
Disallow default bitwise assignment.
TypeName("localBlended")
Runtime type information.
virtual tmp< surfaceScalarField > blendingFactor(const VolField< Type > &vf) const
Return the face-based blending factor.
Definition: localBlended.H:124
localBlended(const fvMesh &mesh, Istream &is)
Construct from mesh and Istream.
Definition: localBlended.H:76
virtual tmp< SurfaceField< Type > > correction(const VolField< Type > &vf) const
Return the explicit correction to the face-interpolate.
Definition: localBlended.H:185
Abstract base class for surface interpolation schemes.
const fvMesh & mesh() const
Return mesh reference.
static tmp< surfaceInterpolationScheme< Type > > New(const fvMesh &mesh, Istream &schemeData)
Return new tmp interpolation scheme.
A class for managing temporary objects.
Definition: tmp.H:55
A class for handling words, derived from string.
Definition: word.H:62
Namespace for OpenFOAM.