38 template<
class RdeltaTType,
class RhoType,
class SpType,
class SuType>
41 const RdeltaTType& rDeltaT,
67 )/(
rho.field()*rDeltaT -
Sp.field());
73 rho.oldTime().field()*psi0*rDeltaT
76 )/(
rho.field()*rDeltaT -
Sp.field());
79 psi.correctBoundaryConditions();
83 template<
class RhoType>
95 template<
class RhoType,
class SpType,
class SuType>
107 if (fv::localEulerDdt::enabled(
mesh))
114 const scalar rDeltaT = 1.0/
mesh.time().deltaTValue();
120 template<
class RhoType,
class PsiMaxType,
class PsiMinType>
127 const PsiMaxType& psiMax,
128 const PsiMinType& psiMin
161 const PsiMaxType& psiMax,
162 const PsiMinType& psiMin
167 psi.correctBoundaryConditions();
169 if (fv::localEulerDdt::enabled(
mesh))
177 const scalar rDeltaT = 1.0/
mesh.time().deltaTValue();
196 const RdeltaTType& rDeltaT,
203 const PsiMaxType& psiMax,
204 const PsiMinType& psiMin
208 const volScalarField::Boundary& psiBf =
psi.boundaryField();
214 const label nLimiterIter
219 const scalar smoothLimiter
224 const scalar extremaCoeff
229 const scalar boundaryExtremaCoeff
233 "boundaryExtremaCoeff",
238 const scalar boundaryDeltaExtremaCoeff
240 max(boundaryExtremaCoeff - extremaCoeff, 0)
251 const surfaceScalarField::Boundary& phiBDBf =
255 const surfaceScalarField::Boundary& phiCorrBf =
263 mesh.time().timeName(),
276 surfaceScalarField::Boundary& lambdaBf =
lambda.boundaryFieldRef();
291 const label own = owner[facei];
292 const label nei = neighb[facei];
294 psiMaxn[own] =
max(psiMaxn[own], psiIf[nei]);
295 psiMinn[own] =
min(psiMinn[own], psiIf[nei]);
297 psiMaxn[nei] =
max(psiMaxn[nei], psiIf[own]);
298 psiMinn[nei] =
min(psiMinn[nei], psiIf[own]);
300 sumPhiBD[own] += phiBDIf[facei];
301 sumPhiBD[nei] -= phiBDIf[facei];
303 const scalar phiCorrf = phiCorrIf[facei];
307 sumPhip[own] += phiCorrf;
308 mSumPhim[nei] += phiCorrf;
312 mSumPhim[own] -= phiCorrf;
313 sumPhip[nei] -= phiCorrf;
323 const labelList& pFaceCells =
mesh.boundary()[patchi].faceCells();
331 const label pfCelli = pFaceCells[pFacei];
333 psiMaxn[pfCelli] =
max(psiMaxn[pfCelli], psiPNf[pFacei]);
334 psiMinn[pfCelli] =
min(psiMinn[pfCelli], psiPNf[pFacei]);
341 const label pfCelli = pFaceCells[pFacei];
343 psiMaxn[pfCelli] =
max(psiMaxn[pfCelli], psiPf[pFacei]);
344 psiMinn[pfCelli] =
min(psiMinn[pfCelli], psiPf[pFacei]);
350 if (boundaryDeltaExtremaCoeff > 0)
354 const label pfCelli = pFaceCells[pFacei];
356 const scalar extrema =
357 boundaryDeltaExtremaCoeff
358 *(psiMax[pfCelli] - psiMin[pfCelli]);
360 psiMaxn[pfCelli] += extrema;
361 psiMinn[pfCelli] -= extrema;
368 const label pfCelli = pFaceCells[pFacei];
370 sumPhiBD[pfCelli] += phiBDPf[pFacei];
372 const scalar phiCorrf = phiCorrPf[pFacei];
376 sumPhip[pfCelli] += phiCorrf;
380 mSumPhim[pfCelli] -= phiCorrf;
385 psiMaxn =
min(psiMaxn + extremaCoeff*(psiMax - psiMin), psiMax);
386 psiMinn =
max(psiMinn - extremaCoeff*(psiMax - psiMin), psiMin);
388 if (smoothLimiter > SMALL)
391 min(smoothLimiter*psiIf + (1.0 - smoothLimiter)*psiMaxn, psiMax);
393 max(smoothLimiter*psiIf + (1.0 - smoothLimiter)*psiMinn, psiMin);
403 (
rho.field()*rDeltaT -
Sp.field())*psiMaxn
406 - (V0().field()*rDeltaT)*
rho.oldTime().field()*psi0
413 - (
rho.field()*rDeltaT -
Sp.field())*psiMinn
415 + (V0().field()*rDeltaT)*
rho.oldTime().field()*psi0
423 (
rho.field()*rDeltaT -
Sp.field())*psiMaxn
425 - (
rho.oldTime().field()*rDeltaT)*psi0
433 - (
rho.field()*rDeltaT -
Sp.field())*psiMinn
434 + (
rho.oldTime().field()*rDeltaT)*psi0
442 for (
int j=0; j<nLimiterIter; j++)
449 const label own = owner[facei];
450 const label nei = neighb[facei];
452 scalar lambdaPhiCorrf = lambdaIf[facei]*phiCorrIf[facei];
454 if (lambdaPhiCorrf > 0)
456 sumlPhip[own] += lambdaPhiCorrf;
457 mSumlPhim[nei] += lambdaPhiCorrf;
461 mSumlPhim[own] -= lambdaPhiCorrf;
462 sumlPhip[nei] -= lambdaPhiCorrf;
471 const labelList& pFaceCells =
mesh.boundary()[patchi].faceCells();
475 const label pfCelli = pFaceCells[pFacei];
476 const scalar lambdaPhiCorrf =
477 lambdaPf[pFacei]*phiCorrfPf[pFacei];
479 if (lambdaPhiCorrf > 0)
481 sumlPhip[pfCelli] += lambdaPhiCorrf;
485 mSumlPhim[pfCelli] -= lambdaPhiCorrf;
495 (sumlPhip[celli] + psiMaxn[celli])
496 /(mSumPhim[celli] + ROOTVSMALL),
503 (mSumlPhim[celli] + psiMinn[celli])
504 /(sumPhip[celli] + ROOTVSMALL),
514 if (phiCorrIf[facei] > 0)
516 lambdaIf[facei] =
min
519 min(lambdap[owner[facei]], lambdam[neighb[facei]])
524 lambdaIf[facei] =
min
527 min(lambdam[owner[facei]], lambdap[neighb[facei]])
538 if (isA<wedgeFvPatch>(
mesh.boundary()[patchi]))
545 mesh.boundary()[patchi].faceCells();
549 const label pfCelli = pFaceCells[pFacei];
551 if (phiCorrfPf[pFacei] > 0)
554 min(lambdaPf[pFacei], lambdap[pfCelli]);
559 min(lambdaPf[pFacei], lambdam[pfCelli]);
581 const RdeltaTType& rDeltaT,
588 const PsiMaxType& psiMax,
589 const PsiMinType& psiMin,
590 const bool returnCorr
598 const surfaceScalarField::Boundary& phiPsiBf = phiPsi.
boundaryField();
606 phiBDPf = phiPsiBf[patchi];
620 mesh.time().timeName(),
652 phiPsi = phiBD +
lambda*phiCorr;
673 const PsiMaxType& psiMax,
674 const PsiMinType& psiMin,
680 if (fv::localEulerDdt::enabled(
mesh))
687 const scalar rDeltaT = 1.0/
mesh.time().deltaTValue();
693 template<
class SurfaceScalarFieldList>
706 const surfaceScalarField::Boundary& bfld =
707 phiPsiCorrs[0].boundaryField();
711 if (bfld[patchi].coupled())
719 &phiPsiCorrs[
phasei].boundaryFieldRef()[patchi]
729 template<
class SurfaceScalarFieldList>
732 const SurfaceScalarFieldList& alphas,
733 SurfaceScalarFieldList& phiPsiCorrs,
752 const surfaceScalarField::Boundary& bfld =
753 phiPsiCorrs[0].boundaryField();
757 if (bfld[patchi].coupled())
765 &alphas[
phasei].boundaryField()[patchi]
774 &phiPsiCorrs[
phasei].boundaryFieldRef()[patchi]