diff --git a/src/finiteVolume/cfdTools/general/pressureControl/pressureControl.C b/src/finiteVolume/cfdTools/general/pressureControl/pressureControl.C index aca22e7699..bcd8ebd5f0 100644 --- a/src/finiteVolume/cfdTools/general/pressureControl/pressureControl.C +++ b/src/finiteVolume/cfdTools/general/pressureControl/pressureControl.C @@ -38,24 +38,30 @@ Foam::pressureControl::pressureControl : refCell_(-1), refValue_(0), - pMax_("pMax", dimPressure, 0), - pMin_("pMin", dimPressure, GREAT) + pMax_("pMax", dimPressure, GREAT), + pMin_("pMin", dimPressure, 0), + limitMaxP_(false), + limitMinP_(false) { bool pLimits = false; + scalar pMax = -GREAT; + scalar pMin = GREAT; // Set the reference cell and value for closed domain simulations if (pRefRequired && setRefCell(p, dict, refCell_, refValue_)) { pLimits = true; - pMax_.value() = refValue_; - pMin_.value() = refValue_; + pMax = refValue_; + pMin = refValue_; } if (dict.found("pMax") && dict.found("pMin")) { pMax_.value() = readScalar(dict.lookup("pMax")); + limitMaxP_ = true; pMin_.value() = readScalar(dict.lookup("pMin")); + limitMinP_ = true; } else { @@ -73,8 +79,8 @@ Foam::pressureControl::pressureControl pLimits = true; rhoLimits = true; - pMax_.value() = max(pMax_.value(), max(pbf[patchi])); - pMin_.value() = min(pMin_.value(), min(pbf[patchi])); + pMax = max(pMax, max(pbf[patchi])); + pMin = min(pMin, min(pbf[patchi])); rhoRefMax = max(rhoRefMax, max(rhobf[patchi])); rhoRefMin = min(rhoRefMin, min(rhobf[patchi])); @@ -84,8 +90,8 @@ Foam::pressureControl::pressureControl reduce(rhoLimits, andOp()); if (rhoLimits) { - reduce(pMax_.value(), maxOp()); - reduce(pMin_.value(), minOp()); + reduce(pMax, maxOp()); + reduce(pMin, minOp()); reduce(rhoRefMax, maxOp()); reduce(rhoRefMin, minOp()); @@ -94,6 +100,7 @@ Foam::pressureControl::pressureControl if (dict.found("pMax")) { pMax_.value() = readScalar(dict.lookup("pMax")); + limitMaxP_ = true; } else if (dict.found("pMaxFactor")) { @@ -108,7 +115,8 @@ Foam::pressureControl::pressureControl } const scalar pMaxFactor(readScalar(dict.lookup("pMaxFactor"))); - pMax_ *= pMaxFactor; + pMax_.value() = pMaxFactor*pMax; + limitMaxP_ = true; } else if (dict.found("rhoMax")) { @@ -142,12 +150,14 @@ Foam::pressureControl::pressureControl dimensionedScalar rhoMax("rhoMax", dimDensity, dict); - pMax_ *= max(rhoMax.value()/rhoRefMax, 1); + pMax_.value() = max(rhoMax.value()/rhoRefMax, 1)*pMax; + limitMaxP_ = true; } if (dict.found("pMin")) { pMin_.value() = readScalar(dict.lookup("pMin")); + limitMinP_ = true; } else if (dict.found("pMinFactor")) { @@ -162,7 +172,8 @@ Foam::pressureControl::pressureControl } const scalar pMinFactor(readScalar(dict.lookup("pMinFactor"))); - pMin_ *= pMinFactor; + pMin_.value() = pMinFactor*pMin; + limitMinP_ = true; } else if (dict.found("rhoMin")) { @@ -195,26 +206,64 @@ Foam::pressureControl::pressureControl dimensionedScalar rhoMin("rhoMin", dimDensity, dict); - pMin_ *= min(rhoMin.value()/rhoRefMin, 1); + pMin_.value() = min(rhoMin.value()/rhoRefMin, 1)*pMin; + limitMinP_ = true; } } - Info<< "pressureControl" << nl - << " pMax/pMin " << pMax_.value() << " " << pMin_.value() - << nl << endl; + if (limitMaxP_ || limitMinP_) + { + Info<< "pressureControl" << nl; + + if (limitMaxP_) + { + Info<< " pMax " << pMax_.value() << nl; + } + + if (limitMinP_) + { + Info<< " pMin " << pMin_.value() << nl; + } + + Info << endl; + } } // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // -void Foam::pressureControl::limit(volScalarField& p) const +bool Foam::pressureControl::limit(volScalarField& p) const { - Info<< "pressureControl: p max/min " - << max(p).value() << " " - << min(p).value() << endl; + if (limitMaxP_ || limitMinP_) + { + if (limitMaxP_) + { + const scalar pMax = max(p).value(); - p = max(p, pMin_); - p = min(p, pMax_); + if (pMax > pMax_.value()) + { + Info<< "pressureControl: p max " << pMax << endl; + p = min(p, pMax_); + } + } + + if (limitMinP_) + { + const scalar pMin = min(p).value(); + + if (pMin < pMin_.value()) + { + Info<< "pressureControl: p min " << pMin << endl; + p = max(p, pMin_); + } + } + + return true; + } + else + { + return false; + } } diff --git a/src/finiteVolume/cfdTools/general/pressureControl/pressureControl.H b/src/finiteVolume/cfdTools/general/pressureControl/pressureControl.H index 61f510ac60..9a3c47b14e 100644 --- a/src/finiteVolume/cfdTools/general/pressureControl/pressureControl.H +++ b/src/finiteVolume/cfdTools/general/pressureControl/pressureControl.H @@ -66,6 +66,12 @@ class pressureControl //- Pressure upper-limit dimensionedScalar pMin_; + //- Pressure lower-limit + bool limitMaxP_; + + //- Pressure upper-limit + bool limitMinP_; + public: @@ -90,7 +96,7 @@ public: inline scalar refValue() const; //- Limit the pressure - void limit(volScalarField& p) const; + bool limit(volScalarField& p) const; }; diff --git a/tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict b/tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict index 6098ecaa49..eb59adc50e 100644 --- a/tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict +++ b/tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict @@ -7,7 +7,7 @@ \*---------------------------------------------------------------------------*/ FoamFile { - version 2; + version 2.0; format ascii; class dictionary; location "system"; @@ -23,7 +23,7 @@ startTime 0; stopAt endTime; -endTime 7000; +endTime 6000; deltaT 1;