41 template<
class RhoType,
class SpType,
class SuType>
97 phiPsi = phiBD + lambda*phiCorr;
110 mesh.
Vsc0()*rho.oldTime()*psi0/(deltaT*mesh.
Vsc())
113 )/(rho/deltaT - Sp.field());
119 rho.oldTime()*psi0/deltaT
122 )/(rho/deltaT - Sp.field());
129 template<
class RhoType,
class SpType,
class SuType>
148 readLabel(MULEScontrols.
lookup(
"maxIter"))
153 readLabel(MULEScontrols.
lookup(
"nLimiterIter"))
156 scalar maxUnboundedness
170 mesh.
time().
deltaT()*mesh.surfaceInterpolation::deltaCoeffs()
190 CoLambda == 1.0/
max(CoCoeff*Cof, scalar(1));
232 for (label i=0; i<maxIter; i++)
236 allLambda = allCoLambda;
255 psiConvectionDiffusion +
fvc::div(lambda*phiCorr),
262 scalar unboundedness =
max(
max(maxPsiM1, 0.0), -
min(minPsi, 0.0));
264 if (unboundedness < maxUnboundedness)
270 Info<<
"MULES: max(" << psi.
name() <<
" - 1) = " << maxPsiM1
271 <<
" min(" << psi.
name() <<
") = " << minPsi <<
endl;
273 phiBD = psiConvectionDiffusion.
flux();
300 phiPsi = psiConvectionDiffusion.
flux() + lambda*phiCorr;
304 template<
class RhoType,
class SpType,
class SuType>
316 const label nLimiterIter
320 const volScalarField::GeometricBoundaryField& psiBf = psi.
boundaryField();
333 const surfaceScalarField::GeometricBoundaryField& phiBDBf =
337 const surfaceScalarField::GeometricBoundaryField& phiCorrBf =
358 surfaceScalarField::GeometricBoundaryField& lambdaBf =
371 label own = owner[facei];
372 label nei = neighb[facei];
374 psiMaxn[own] =
max(psiMaxn[own], psiIf[nei]);
375 psiMinn[own] =
min(psiMinn[own], psiIf[nei]);
377 psiMaxn[nei] =
max(psiMaxn[nei], psiIf[own]);
378 psiMinn[nei] =
min(psiMinn[nei], psiIf[own]);
380 sumPhiBD[own] += phiBDIf[facei];
381 sumPhiBD[nei] -= phiBDIf[facei];
383 scalar phiCorrf = phiCorrIf[facei];
387 sumPhip[own] += phiCorrf;
388 mSumPhim[nei] += phiCorrf;
392 mSumPhim[own] -= phiCorrf;
393 sumPhip[nei] -= phiCorrf;
411 label pfCelli = pFaceCells[pFacei];
413 psiMaxn[pfCelli] =
max(psiMaxn[pfCelli], psiPNf[pFacei]);
414 psiMinn[pfCelli] =
min(psiMinn[pfCelli], psiPNf[pFacei]);
421 label pfCelli = pFaceCells[pFacei];
423 psiMaxn[pfCelli] =
max(psiMaxn[pfCelli], psiPf[pFacei]);
424 psiMinn[pfCelli] =
min(psiMinn[pfCelli], psiPf[pFacei]);
430 label pfCelli = pFaceCells[pFacei];
432 sumPhiBD[pfCelli] += phiBDPf[pFacei];
434 scalar phiCorrf = phiCorrPf[pFacei];
438 sumPhip[pfCelli] += phiCorrf;
442 mSumPhim[pfCelli] -= phiCorrf;
447 psiMaxn =
min(psiMaxn, psiMax);
448 psiMinn =
max(psiMinn, psiMin);
459 V*((rho/deltaT -
Sp)*psiMaxn - Su)
460 - (V0()/deltaT)*rho.oldTime()*psi0
464 V*(Su - (rho/deltaT -
Sp)*psiMinn)
465 + (V0/deltaT)*rho.oldTime()*psi0
471 V*((rho/deltaT -
Sp)*psiMaxn - Su - (rho.oldTime()/deltaT)*psi0)
475 V*(Su - (rho/deltaT -
Sp)*psiMinn + (rho.oldTime()/deltaT)*psi0)
482 for(
int j=0; j<nLimiterIter; j++)
489 label own = owner[facei];
490 label nei = neighb[facei];
492 scalar lambdaPhiCorrf = lambdaIf[facei]*phiCorrIf[facei];
494 if (lambdaPhiCorrf > 0.0)
496 sumlPhip[own] += lambdaPhiCorrf;
497 mSumlPhim[nei] += lambdaPhiCorrf;
501 mSumlPhim[own] -= lambdaPhiCorrf;
502 sumlPhip[nei] -= lambdaPhiCorrf;
515 label pfCelli = pFaceCells[pFacei];
517 scalar lambdaPhiCorrf = lambdaPf[pFacei]*phiCorrfPf[pFacei];
519 if (lambdaPhiCorrf > 0.0)
521 sumlPhip[pfCelli] += lambdaPhiCorrf;
525 mSumlPhim[pfCelli] -= lambdaPhiCorrf;
535 (sumlPhip[celli] + psiMaxn[celli])/mSumPhim[celli],
542 (mSumlPhim[celli] + psiMinn[celli])/sumPhip[celli],
552 if (phiCorrIf[facei] > 0.0)
554 lambdaIf[facei] =
min
557 min(lambdap[owner[facei]], lambdam[neighb[facei]])
562 lambdaIf[facei] =
min
565 min(lambdam[owner[facei]], lambdap[neighb[facei]])
580 label pfCelli = pFaceCells[pFacei];
582 if (phiCorrfPf[pFacei] > 0.0)
584 lambdaPf[pFacei] =
min(lambdaPf[pFacei], lambdap[pfCelli]);
588 lambdaPf[pFacei] =
min(lambdaPf[pFacei], lambdam[pfCelli]);