diff --git a/applications/solvers/compressible/rhoPimpleFoam/pEqn.H b/applications/solvers/compressible/rhoPimpleFoam/pEqn.H index f2f2c5c71c72a3866a2e1b0ef295a3d32ef42c0d..8e2c3d836d3672284b2d30a908c1a7dc93a6bfcc 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/pEqn.H +++ b/applications/solvers/compressible/rhoPimpleFoam/pEqn.H @@ -85,8 +85,6 @@ else } } -#include "rhoEqn.H" -#include "compressibleContinuityErrs.H" // Explicitly relax pressure for momentum corrector p.relax(); @@ -102,6 +100,10 @@ if (pressureControl.limit(p)) } thermo.correctRho(psi*p - psip0, rhoMin, rhoMax) ; + +#include "rhoEqn.H" +#include "compressibleContinuityErrs.H" + rho = thermo.rho(); // Correct rhoUf if the mesh is moving diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C index 289c447233fcdd0e4d5e4cffb8d25cce37c71ff4..c83f59780a8a5de60609e3e5c9f4493ba5b39cdd 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C @@ -44,6 +44,7 @@ Description #include "radiationModel.H" #include "fvOptions.H" #include "pimpleControl.H" +#include "pressureControl.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/createFields.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/createFields.H index 82f63c93fbbcd46297b4df82261595bb616360e7..22dc129a873718b3c6d6ed6e1628a103b0943c2c 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/createFields.H +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/createFields.H @@ -35,6 +35,7 @@ volVectorField U #include "compressibleCreatePhi.H" +pressureControl pressureControl(p, rho, pimple.dict(), false); Info<< "Creating turbulence model\n" << endl; autoPtr<compressible::turbulenceModel> turbulence @@ -104,3 +105,7 @@ dimensionedScalar initialMass("initialMass", fvc::domainIntegrate(rho)); #include "createMRF.H" #include "createRadiationModel.H" #include "createFvOptions.H" + + +const dimensionedScalar rhoMax("rhoMax", dimDensity, GREAT, pimple.dict()); +const dimensionedScalar rhoMin("rhoMin", dimDensity, Zero, pimple.dict()); diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H index 9a2553a7e9809e5e40beb0f3ef230cf38f818f53..c36e096dbd5c9c346bbd6f675316f447bc3bd4e5 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H @@ -72,8 +72,7 @@ while (pimple.correctNonOrthogonal()) p = p_rgh + rho*gh; -#include "rhoEqn.H" -#include "compressibleContinuityErrs.H" +pressureControl.limit(p); if (p_rgh.needReference()) { @@ -90,16 +89,20 @@ if (p_rgh.needReference()) { p += (initialMass - fvc::domainIntegrate(psi*p)) /compressibility; - thermo.correctRho(psi*p - psip0); + thermo.correctRho(psi*p - psip0, rhoMin, rhoMax); rho = thermo.rho(); p_rgh = p - rho*gh; + p_rgh.correctBoundaryConditions(); } } else { - thermo.correctRho(psi*p - psip0); + thermo.correctRho(psi*p - psip0, rhoMin, rhoMax); } +#include "rhoEqn.H" +#include "compressibleContinuityErrs.H" + rho = thermo.rho(); if (thermo.dpdt()) diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index ae3954a6891ced3f10e3facfbeef486dea314a49..0b38d8277599f583a0625e39b3f9a4ce6f57beae 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -51,6 +51,7 @@ Description #include "fvOptions.H" #include "coordinateSystem.H" #include "loopControl.H" +#include "pressureControl.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidFields.H index d0092f800dca9538c019262961deaa4d0d7e3d0a..1c9db4f887b175af25f90fa1515b12abf1bd1db0 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidFields.H @@ -25,6 +25,11 @@ PtrList<fv::options> fluidFvOptions(fluidRegions.size()); List<label> pRefCellFluid(fluidRegions.size()); List<scalar> pRefValueFluid(fluidRegions.size()); +PtrList<dimensionedScalar> rhoMinFluid(fluidRegions.size()); +PtrList<dimensionedScalar> rhoMaxFluid(fluidRegions.size()); + +PtrList<pressureControl> pressureControls(fluidRegions.size()); + const uniformDimensionedVectorField& g = meshObjects::gravity::New(runTime); // Populate fluid field pointer lists @@ -256,6 +261,24 @@ forAll(fluidRegions, i) fluidRegions[i].solutionDict().subDict("PIMPLE"); pimpleDict.readIfPresent("frozenFlow", frozenFlowFluid[i]); + rhoMaxFluid.set + ( + i, + new dimensionedScalar("rhoMax", dimDensity, GREAT, pimpleDict) + ); + + rhoMinFluid.set + ( + i, + new dimensionedScalar("rhoMin", dimDensity, Zero, pimpleDict) + ); + + pressureControls.set + ( + i, + new pressureControl(thermoFluid[i].p(), rhoFluid[i], pimpleDict, false) + ); + Info<< " Adding MRF\n" << endl; MRFfluid.set ( diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H index 9bc978b2540c6fa397f9aa2db12eb9ba7f8b3a48..206c32eeb2b2ad0054b847e1cd1d10b404e60c72 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H @@ -81,17 +81,9 @@ constrainPressure(p_rgh, rho, U, phiHbyA, rhorAUf, MRF); p = p_rgh + rho*gh; - // Thermodynamic density update - //thermo.correctRho(psi*p - psip0); } - - -// Solve continuity -#include "rhoEqn.H" - -// Update continuity errors -#include "compressibleContinuityErrors.H" +pressureControl.limit(p); // For closed-volume cases adjust the pressure and density levels // to obey overall mass continuity @@ -110,16 +102,20 @@ if (closedVolume) { p += (initialMass - fvc::domainIntegrate(psi*p)) /compressibility; - thermo.correctRho(psi*p - psip0); + thermo.correctRho(psi*p - psip0, rhoMin, rhoMax); rho = thermo.rho(); p_rgh = p - rho*gh; + p_rgh.correctBoundaryConditions(); } } else { - thermo.correctRho(psi*p - psip0); + thermo.correctRho(psi*p - psip0, rhoMin, rhoMax); } +#include "rhoEqn.H" +#include "compressibleContinuityErrors.H" + rho = thermo.rho(); // Update pressure time derivative if needed diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H index 42cfe36e8e9c3c78cfff6002289c533e9863df52..50935d3490e5f8691587eb58aafb09fe6eea741a 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H @@ -61,3 +61,8 @@ const label pRefCell = pRefCellFluid[i]; const scalar pRefValue = pRefValueFluid[i]; + const dimensionedScalar rhoMax = rhoMaxFluid[i]; + const dimensionedScalar rhoMin = rhoMinFluid[i]; + + const pressureControl& pressureControl = pressureControls[i]; +