34 #include <HashTable.H>
36 #include "emptyFvPatch.H"
37 #include "coupledFvPatch.H"
38 #include "wedgeFvPatch.H"
39 #include "symmetryFvPatch.H"
40 #include "symmetryPlaneFvPatch.H"
50 surfaceScalarField sF = linearInterpolate(iF);
51 surfaceScalarField sngF (fvc::snGrad(iF));
53 tmp<surfaceVectorField> tgradIF(0.0 *
nf_ * sngF);
54 surfaceVectorField& gradIF = tgradIF.ref();
59 vector gf = vector::zero;
62 if (
mesh_.isInternalFace(facei))
80 gradIF[dFaceId] = sngF[dFaceId] *
nf_[dFaceId];
86 bool notConstrain =
true;
87 const fvPatch& fvp =
mesh_.boundary()[ipatch];
90 isA<emptyFvPatch>(fvp) ||
91 isA<wedgeFvPatch>(fvp) ||
92 isA<coupledFvPatch>(fvp) ||
93 isA<symmetryFvPatch>(fvp) ||
94 isA<symmetryPlaneFvPatch>(fvp)
103 gradIF.boundaryFieldRef()[ipatch] =
nf_.boundaryField()[ipatch] *
104 iF.boundaryField()[ipatch].snGrad();
109 if(!Pstream::parRun())
127 procVfValues[patchI].resize(
procWf2_[patchI].size());
128 forAll(procVfValues[patchI], faceI)
130 procVfValues[patchI][faceI].resize(
procWf2_[patchI][faceI].size());
131 procVfValues[patchI][faceI] = 0.0;
135 procVfValues[patchI][faceI][cellI] = iF.primitiveField()[cellId];
143 PstreamBuffers pBuffers(Pstream::commsTypes::nonBlocking);
149 DynamicList<scalar> locVf;
153 forAll(procVfValues[procI], faceI)
158 cellI <=
ownEnd_[procI][faceI];
162 locVf.append(procVfValues[procI][faceI][cellI]);
175 locVf.append(iF.primitiveField()[cellId]);
179 UOPstream oProcStr(procId, pBuffers);
184 pBuffers.finishedSends();
190 UIPstream iProcStr(procId, pBuffers);
191 List<scalar> locVf (iProcStr);
205 procVfValues[procI][iFace][iCell] =
218 const List<Triple<label> >& addr =
corAddr_[iCorProc];
222 patchNo = addr[iVal][0];
223 faceNo = addr[iVal][1];
224 cellNo = addr[iVal][2];
227 procVfValues[patchNo][faceNo][cellNo+offset] = locVf[iVal];
237 if (procPatchId > -1)
239 fvsPatchVectorField& pgradf = gradIF.boundaryFieldRef()[procPatchId];
249 gf = gf + pwf2[iFace][i]*pgdf[iFace][i]*
250 (pvf[iFace][i] - sF.boundaryField()[procPatchId][iFace]);
258 forAll(degProcFaces, iFace)
260 degId = degProcFaces[iFace];
262 pgradf[degId] =
nf_.boundaryField()[procPatchId][degId]*
263 sngF.boundaryField()[procPatchId][degId];
List< DynamicList< label > > procDegFaces_
tmp< surfaceVectorField > Grad(const volScalarField &iF)
Calculate gradient of volume scalar function on the faces.
labelHashTable< label > corProcIds_
List2< label > corCellIds_
List2< Triple< label > > corAddr_
List3< label > myProcPatchCells_
labelListList neighbourCells_
DynamicList< label > internalDegFaces_