transformFvPatchField.C
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-2016 OpenFOAM Foundation
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "transformFvPatchField.H"
29 #include "IOstreams.H"
30 #include "transformField.H"
31 
32 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
33 
34 template<class Type>
36 (
37  const fvPatch& p,
39 )
40 :
41  fvPatchField<Type>(p, iF)
42 {}
43 
44 
45 template<class Type>
47 (
48  const transformFvPatchField<Type>& ptf,
49  const fvPatch& p,
51  const fvPatchFieldMapper& mapper
52 )
53 :
54  fvPatchField<Type>(ptf, p, iF, mapper)
55 {}
56 
57 
58 template<class Type>
60 (
61  const fvPatch& p,
63  const dictionary& dict
64 )
65 :
66  fvPatchField<Type>(p, iF, dict, IOobjectOption::NO_READ)
67 {}
68 
69 
70 template<class Type>
72 (
74 )
75 :
76  fvPatchField<Type>(ptf)
77 {}
78 
79 
80 template<class Type>
82 (
83  const transformFvPatchField<Type>& ptf,
85 )
86 :
87  fvPatchField<Type>(ptf, iF)
88 {}
89 
90 
91 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
92 
93 template<class Type>
96 (
97  const tmp<scalarField>&
98 ) const
99 {
100  // OR (!is_rotational_vectorspace_v<Type>)
101  if constexpr (std::is_arithmetic_v<Type>)
102  {
103  return tmp<Field<Type>>::New(this->size(), pTraits<Type>::one);
104  }
105  else
106  {
107  return pTraits<Type>::one - snGradTransformDiag();
108  }
109 }
110 
111 
112 template<class Type>
115 (
116  const tmp<scalarField>&
117 ) const
118 {
119  return
120  *this
121  - cmptMultiply
122  (
123  valueInternalCoeffs(this->patch().weights()),
124  this->patchInternalField()
125  );
126 }
127 
128 
129 template<class Type>
132 {
133  // OR (!is_rotational_vectorspace_v<Type>)
134  if constexpr (std::is_arithmetic_v<Type>)
135  {
136  return tmp<Field<Type>>::New(this->size(), Foam::zero{});
137  }
138  else
139  {
140  return -this->patch().deltaCoeffs()*snGradTransformDiag();
141  }
142 }
143 
144 
145 template<class Type>
148 {
149  return
150  snGrad()
151  - cmptMultiply(gradientInternalCoeffs(), this->patchInternalField());
152 }
153 
154 
155 // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
156 
157 template<class Type>
159 (
160  const fvPatchField<Type>& ptf
161 )
162 {
163  this->evaluate();
164 }
165 
166 
167 // ************************************************************************* //
virtual tmp< Field< Type > > gradientInternalCoeffs() const
Return the matrix diagonal coefficients corresponding to the.
dictionary dict
virtual tmp< Field< Type > > valueInternalCoeffs(const tmp< scalarField > &) const
Return the matrix diagonal coefficients corresponding to the.
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:70
A traits class, which is primarily used for primitives and vector-space.
Definition: pTraits.H:61
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tf1, const word &name, const dimensionSet &dimensions, const bool initCopy=false)
Global function forwards to reuseTmpDimensionedField::New.
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
virtual tmp< Field< Type > > gradientBoundaryCoeffs() const
Return the matrix source coefficients corresponding to the.
Useful combination of include files which define Sin, Sout and Serr and the use of IO streams general...
Spatial transformation functions for primitive fields.
transformFvPatchField(const fvPatch &, const DimensionedField< Type, volMesh > &)
Construct from patch and internal field.
A FieldMapper for finite-volume patch fields.
dimensioned< Type > cmptMultiply(const dimensioned< Type > &, const dimensioned< Type > &)
Intermediate layer (not used directly as a user boundary condition). The "value" entry is NO_READ...
virtual tmp< Field< Type > > valueBoundaryCoeffs(const tmp< scalarField > &) const
Return the matrix source coefficients corresponding to the.
string evaluate(label fieldWidth, const std::string &s, size_t pos=0, size_t len=std::string::npos)
String evaluation with specified (positive, non-zero) field width.
A simple container of IOobject preferences. Can also be used for general handling of read/no-read/rea...
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const std::string patch
OpenFOAM patch number as a std::string.
A class representing the concept of 0 (zero) that can be used to avoid manipulating objects known to ...
Definition: zero.H:57
volScalarField & p
A class for managing temporary objects.
Definition: HashPtrTable.H:50
tmp< GeometricField< Type, fvsPatchField, surfaceMesh > > snGrad(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvcSnGrad.C:40