38 #include "wedgeFvPatch.H"
39 #include "symmetryPlaneFvPatch.H"
40 #include "symmetryFvPatch.H"
41 #include "emptyFvPatch.H"
42 #include <HashTable.H>
44 #include "addToRunTimeSelectionTable.H"
75 return Grad(iVF, linearInterpolate(iVF));
87 tmp<surfaceTensorField> tgradIVF(0*
nf_*fvc::snGrad(iVF));
88 surfaceScalarField tField = sVF.component(0)*0;
89 surfaceTensorField& gradIVF = tgradIVF.ref();
91 faceScalarDer(iVF.primitiveField().component(0),sVF.primitiveField().component(0),0,tField);
92 gradIVF.primitiveFieldRef().replace(0,tField);
94 faceScalarDer(iVF.primitiveField().component(0),sVF.primitiveField().component(0),1,tField);
95 gradIVF.primitiveFieldRef().replace(3,tField);
97 faceScalarDer(iVF.primitiveField().component(0),sVF.primitiveField().component(0),2,tField);
98 gradIVF.primitiveFieldRef().replace(6,tField);
100 faceScalarDer(iVF.primitiveField().component(1),sVF.primitiveField().component(1),0,tField);
101 gradIVF.primitiveFieldRef().replace(1,tField);
103 faceScalarDer(iVF.primitiveField().component(1),sVF.primitiveField().component(1),1,tField);
104 gradIVF.primitiveFieldRef().replace(4,tField);
106 faceScalarDer(iVF.primitiveField().component(1),sVF.primitiveField().component(1),2,tField);
107 gradIVF.primitiveFieldRef().replace(7,tField);
109 faceScalarDer(iVF.primitiveField().component(2),sVF.primitiveField().component(2),0,tField);
110 gradIVF.primitiveFieldRef().replace(2,tField);
112 faceScalarDer(iVF.primitiveField().component(2),sVF.primitiveField().component(2),1,tField);
113 gradIVF.primitiveFieldRef().replace(5,tField);
115 faceScalarDer(iVF.primitiveField().component(2),sVF.primitiveField().component(2),2,tField);
116 gradIVF.primitiveFieldRef().replace(8,tField);
121 bool notConstrain =
true;
122 const fvPatch& fvp =
mesh_.boundary()[ipatch];
125 isA<emptyFvPatch>(fvp) ||
126 isA<wedgeFvPatch>(fvp) ||
127 isA<coupledFvPatch>(fvp) ||
128 isA<symmetryFvPatch>(fvp) ||
129 isA<symmetryPlaneFvPatch>(fvp)
132 notConstrain =
false;
137 gradIVF.boundaryFieldRef()[ipatch] =
nf_.boundaryField()[ipatch]*iVF.boundaryField()[ipatch].snGrad();
141 if(!Pstream::parRun())
146 List<List3<scalar>> procVfValues(nProcPatches_);
150 faceScalarDer(procVfValues[0],sVF.component(0),0,tField);
151 gradIVF.boundaryFieldRef().replace(0,tField.boundaryField());
153 faceScalarDer(procVfValues[0],sVF.component(0),1,tField);
154 gradIVF.boundaryFieldRef().replace(3,tField.boundaryField());
156 faceScalarDer(procVfValues[0],sVF.component(0),2,tField);
157 gradIVF.boundaryFieldRef().replace(6,tField.boundaryField());
159 faceScalarDer(procVfValues[1],sVF.component(1),0,tField);
160 gradIVF.boundaryFieldRef().replace(1,tField.boundaryField());
162 faceScalarDer(procVfValues[1],sVF.component(1),1,tField);
163 gradIVF.boundaryFieldRef().replace(4,tField.boundaryField());
165 faceScalarDer(procVfValues[1],sVF.component(1),2,tField);
166 gradIVF.boundaryFieldRef().replace(7,tField.boundaryField());
168 faceScalarDer(procVfValues[2],sVF.component(2),0,tField);
169 gradIVF.boundaryFieldRef().replace(2,tField.boundaryField());
171 faceScalarDer(procVfValues[2],sVF.component(2),1,tField);
172 gradIVF.boundaryFieldRef().replace(5,tField.boundaryField());
174 faceScalarDer(procVfValues[2],sVF.component(2),2,tField);
175 gradIVF.boundaryFieldRef().replace(8,tField.boundaryField());
190 surfaceVectorField sVF = linearInterpolate(iVF);
191 surfaceScalarField tField = sVF.component(0)*0;
192 tmp<surfaceScalarField> tdivIVF(0*
nf_&fvc::snGrad(iVF));
193 surfaceScalarField& divIVF = tdivIVF.ref();
195 faceScalarDer(iVF.primitiveField().component(0),sVF.primitiveField().component(0),0,tField);
196 divIVF.primitiveFieldRef() = tField;
198 faceScalarDer(iVF.primitiveField().component(1),sVF.primitiveField().component(1),1,tField);
199 divIVF.primitiveFieldRef() += tField;
201 faceScalarDer(iVF.primitiveField().component(2),sVF.primitiveField().component(2),2,tField);
202 divIVF.primitiveFieldRef() += tField;
206 bool notConstrain =
true;
207 const fvPatch& fvp =
mesh_.boundary()[ipatch];
210 isA<emptyFvPatch>(fvp) ||
211 isA<wedgeFvPatch>(fvp) ||
212 isA<coupledFvPatch>(fvp) ||
213 isA<symmetryFvPatch>(fvp) ||
214 isA<symmetryPlaneFvPatch>(fvp)
217 notConstrain =
false;
222 divIVF.boundaryFieldRef()[ipatch] =
nf_.boundaryField()[ipatch] & iVF.boundaryField()[ipatch].snGrad();
226 if(!Pstream::parRun())
231 List<List3<scalar>> procVfValues(nProcPatches_);
235 faceScalarDer(procVfValues[0],sVF.component(0),0,tField);
236 divIVF.boundaryFieldRef() = tField.boundaryField();
238 faceScalarDer(procVfValues[1],sVF.component(1),1,tField);
239 divIVF.boundaryFieldRef() += tField.boundaryField();
241 faceScalarDer(procVfValues[2],sVF.component(2),2,tField);
242 divIVF.boundaryFieldRef() += tField.boundaryField();
257 surfaceTensorField sTF = linearInterpolate(iTF);
258 surfaceScalarField tField = sTF.component(0)*0;
259 tmp<surfaceVectorField> tdivITF(0*
nf_*fvc::snGrad(iTF.component(0)));
260 surfaceVectorField& divITF = tdivITF.ref();
261 surfaceScalarField divComp = tField;
263 faceScalarDer(iTF.primitiveField().component(0),sTF.primitiveField().component(0),0,tField);
265 faceScalarDer(iTF.primitiveField().component(1),sTF.primitiveField().component(1),1,tField);
267 faceScalarDer(iTF.primitiveField().component(2),sTF.primitiveField().component(2),2,tField);
269 divITF.primitiveFieldRef().replace(0,divComp);
271 faceScalarDer(iTF.primitiveField().component(3),sTF.primitiveField().component(3),0,tField);
273 faceScalarDer(iTF.primitiveField().component(4),sTF.primitiveField().component(4),1,tField);
275 faceScalarDer(iTF.primitiveField().component(5),sTF.primitiveField().component(5),2,tField);
277 divITF.primitiveFieldRef().replace(1,divComp);
279 faceScalarDer(iTF.primitiveField().component(6),sTF.primitiveField().component(6),0,tField);
281 faceScalarDer(iTF.primitiveField().component(7),sTF.primitiveField().component(7),1,tField);
283 faceScalarDer(iTF.primitiveField().component(8),sTF.primitiveField().component(8),2,tField);
285 divITF.primitiveFieldRef().replace(2,divComp);
289 bool notConstrain =
true;
290 const fvPatch& fvp =
mesh_.boundary()[ipatch];
293 isA<emptyFvPatch>(fvp) ||
294 isA<wedgeFvPatch>(fvp) ||
295 isA<coupledFvPatch>(fvp) ||
296 isA<symmetryFvPatch>(fvp) ||
297 isA<symmetryPlaneFvPatch>(fvp)
300 notConstrain =
false;
305 divITF.boundaryFieldRef()[ipatch] =
nf_.boundaryField()[ipatch]
306 & iTF.boundaryField()[ipatch].snGrad();
311 if (!Pstream::parRun())
317 List<List3<scalar>> procVfValues(nProcPatches_);
320 faceScalarDer(procVfValues[0],sTF.component(0),0,tField);
322 faceScalarDer(procVfValues[1],sTF.component(1),1,tField);
324 faceScalarDer(procVfValues[2],sTF.component(2),2,tField);
326 divITF.boundaryFieldRef().replace(0,divComp.boundaryField());
328 faceScalarDer(procVfValues[3],sTF.component(3),0,tField);
330 faceScalarDer(procVfValues[4],sTF.component(4),1,tField);
332 faceScalarDer(procVfValues[5],sTF.component(5),2,tField);
334 divITF.boundaryFieldRef().replace(1,divComp.boundaryField());
336 faceScalarDer(procVfValues[6],sTF.component(6),0,tField);
338 faceScalarDer(procVfValues[7],sTF.component(7),1,tField);
340 faceScalarDer(procVfValues[8],sTF.component(8),2,tField);
342 divITF.boundaryFieldRef().replace(2,divComp.boundaryField());
tmp< surfaceScalarField > Div(const volVectorField &iVF)
Calculate divergence of volume vector field on the faces.
tmp< surfaceVectorField > Grad(const volScalarField &iF)
Calculate gradient of volume scalar function on the faces.
~leastSquaresOpt()
Destructor.
addToRunTimeSelectionTable(fvscStencil, GaussVolPoint, components)
fvscStencil(const IOobject &io)
Construct from components.
virtual tmp< surfaceVectorField > Grad(const volScalarField &vF)
leastSquaresOpt(const IOobject &)
Construct from IOobject. Optional flag for if IOobject is the.
defineTypeNameAndDebug(fvscStencil, 0)