diff --git a/applications/solvers/compressible/rhoSimpleFoam/hEqn.H b/applications/solvers/compressible/rhoSimpleFoam/hEqn.H index 8eb03f95eb46b687a79f9f68c09152bbd269224a..6a87bbdf11941f36afe9fb7a43186f92cf554e0f 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/hEqn.H +++ b/applications/solvers/compressible/rhoSimpleFoam/hEqn.H @@ -5,7 +5,7 @@ - fvm::Sp(fvc::div(phi), h) - fvm::laplacian(turbulence->alphaEff(), h) == - fvc::div(phi/fvc::interpolate(rho)*fvc::interpolate(p, "div(U,p)")) + fvc::div(phi/fvc::interpolate(rho), p, "div(U,p)") - p*fvc::div(phi/fvc::interpolate(rho)) ); diff --git a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H index 9f7e576919221f54f8286fa1bf0cad6ab7366c44..fc918ab9bfbc629df4e5827133748503e853f535 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H +++ b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H @@ -1,40 +1,92 @@ -volScalarField AU = UEqn().A(); -U = UEqn().H()/AU; +rho = thermo->rho(); + +volScalarField rUA = 1.0/UEqn().A(); +U = rUA*UEqn().H(); UEqn.clear(); -phi = fvc::interpolate(rho*U) & mesh.Sf(); -bool closedVolume = adjustPhi(phi, U, p); -for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) +bool closedVolume = false; + +if (transonic) { - fvScalarMatrix pEqn + surfaceScalarField phid ( - fvm::laplacian(rho/AU, p) == fvc::div(phi) + "phid", + fvc::interpolate(thermo->psi())*(fvc::interpolate(U) & mesh.Sf()) ); - pEqn.setReference(pRefCell, pRefValue); - // retain the residual from the first iteration - if (nonOrth == 0) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - eqnResidual = pEqn.solve().initialResidual(); - maxResidual = max(eqnResidual, maxResidual); - } - else - { - pEqn.solve(); + fvScalarMatrix pEqn0 + ( + fvm::div(phid, p) + - fvm::laplacian(rho*rUA, p) + ); + fvScalarMatrix pEqn = pEqn0; + pEqn.relax(mesh.relaxationFactor("pEqn")); + + pEqn.setReference(pRefCell, pRefValue); + + // retain the residual from the first iteration + if (nonOrth == 0) + { + eqnResidual = pEqn.solve().initialResidual(); + maxResidual = max(eqnResidual, maxResidual); + } + else + { + pEqn.solve(); + } + + if (nonOrth == nNonOrthCorr) + { + phi == pEqn0.flux(); + } } +} +else +{ + phi = fvc::interpolate(rho)*(fvc::interpolate(U) & mesh.Sf()); + //phi = fvc::interpolate(rho*U) & mesh.Sf(); + closedVolume = adjustPhi(phi, U, p); - if (nonOrth == nNonOrthCorr) + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - phi -= pEqn.flux(); + fvScalarMatrix pEqn + ( + fvm::laplacian(rho*rUA, p) == fvc::div(phi) + ); + + pEqn.setReference(pRefCell, pRefValue); + + // retain the residual from the first iteration + if (nonOrth == 0) + { + eqnResidual = pEqn.solve().initialResidual(); + maxResidual = max(eqnResidual, maxResidual); + } + else + { + pEqn.solve(); + } + + if (nonOrth == nNonOrthCorr) + { + phi -= pEqn.flux(); + } } } + #include "incompressible/continuityErrs.H" // Explicitly relax pressure for momentum corrector p.relax(); -U -= fvc::grad(p)/AU; +rho = thermo->rho(); +rho.relax(); +Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl; + +U -= rUA*fvc::grad(p); U.correctBoundaryConditions(); bound(p, pMin); @@ -46,7 +98,3 @@ if (closedVolume) p += (initialMass - fvc::domainIntegrate(thermo->psi()*p)) /fvc::domainIntegrate(thermo->psi()); } - -rho = thermo->rho(); -rho.relax(); -Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl;