FreeFOAM The Cross-Platform CFD Toolkit
basicSymmetryFvPatchField.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 | Copyright (C) 1991-2010 OpenCFD Ltd.
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 \*---------------------------------------------------------------------------*/
25 
28 
29 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
30 
31 namespace Foam
32 {
33 
34 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
35 
36 template<class Type>
38 (
39  const fvPatch& p,
41 )
42 :
44 {}
45 
46 
47 template<class Type>
49 (
51  const fvPatch& p,
53  const fvPatchFieldMapper& mapper
54 )
55 :
56  transformFvPatchField<Type>(ptf, p, iF, mapper)
57 {}
58 
59 
60 template<class Type>
62 (
63  const fvPatch& p,
65  const dictionary& dict
66 )
67 :
69 {
70  this->evaluate();
71 }
72 
73 
74 template<class Type>
76 (
78 )
79 :
81 {}
82 
83 
84 template<class Type>
86 (
89 )
90 :
92 {}
93 
94 
95 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
96 
97 // return gradient at boundary
98 template<class Type>
100 {
101  vectorField nHat = this->patch().nf();
102  return
103  (
104  transform(I - 2.0*sqr(nHat), this->patchInternalField())
105  - this->patchInternalField()
106  )*(this->patch().deltaCoeffs()/2.0);
107 }
108 
109 
110 // Evaluate the field on the patch
111 template<class Type>
113 {
114  if (!this->updated())
115  {
116  this->updateCoeffs();
117  }
118 
119  vectorField nHat = this->patch().nf();
121  (
122  (
123  this->patchInternalField()
124  + transform(I - 2.0*sqr(nHat), this->patchInternalField())
125  )/2.0
126  );
127 
129 }
130 
131 
132 // Return defining fields
133 template<class Type>
135 {
136  vectorField nHat = this->patch().nf();
137  vectorField diag(nHat.size());
138 
139  diag.replace(vector::X, mag(nHat.component(vector::X)));
140  diag.replace(vector::Y, mag(nHat.component(vector::Y)));
141  diag.replace(vector::Z, mag(nHat.component(vector::Z)));
142 
143  return transformFieldMask<Type>(pow<vector, pTraits<Type>::rank>(diag));
144 }
145 
146 
147 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
148 
149 } // End namespace Foam
150 
151 // ************************ vim: set sw=4 sts=4 et: ************************ //