rho = thermo.rho(); volScalarField rUA = 1.0/UEqn().A(); U = rUA*UEqn().H(); // Update boundary velocity for consistency with the flux mrfZones.correctBoundaryVelocity(U); if (pimple.nCorrPISO() <= 1) { UEqn.clear(); } if (pimple.transonic()) { surfaceScalarField phid ( "phid", fvc::interpolate(psi) *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) ) ); mrfZones.relativeFlux(fvc::interpolate(psi), phid); while (pimple.correctNonOrthogonal()) { fvScalarMatrix pEqn ( fvm::ddt(psi, p) + fvm::div(phid, p) - fvm::laplacian(rho*rUA, p) ); pEqn.solve ( mesh.solutionDict().solver(p.select(pimple.finalInnerIter())) ); if (pimple.finalNonOrthogonalIter()) { phi == pEqn.flux(); } } } else { phi = fvc::interpolate(rho)* ( (fvc::interpolate(U) & mesh.Sf()) //+ fvc::ddtPhiCorr(rUA, rho, U, phi) ); mrfZones.relativeFlux(fvc::interpolate(rho), phi); while (pimple.correctNonOrthogonal()) { // Pressure corrector fvScalarMatrix pEqn ( fvm::ddt(psi, p) + fvc::div(phi) - fvm::laplacian(rho*rUA, p) ); pEqn.solve ( mesh.solutionDict().solver(p.select(pimple.finalInnerIter())) ); if (pimple.finalNonOrthogonalIter()) { phi += pEqn.flux(); } } } #include "rhoEqn.H" #include "compressibleContinuityErrs.H" //if (oCorr != nOuterCorr-1) { // Explicitly relax pressure for momentum corrector p.relax(); rho = thermo.rho(); rho.relax(); Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl; } U -= rUA*fvc::grad(p); U.correctBoundaryConditions(); DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); bound(p, pMin); // For closed-volume cases adjust the pressure and density levels // to obey overall mass continuity /* if (closedVolume) { p += (initialMass - fvc::domainIntegrate(psi*p)) /fvc::domainIntegrate(psi); } */