mirror of
https://github.com/OpenFOAM/OpenFOAM-6.git
synced 2025-12-08 06:57:46 +00:00
pressureControl: Enable max and min limits only if specified
The calculation of the max and min limits are now only performed if required, i.e. specified in fvSolution. Also resolves bug-report https://bugs.openfoam.org/view.php?id=2566
This commit is contained in:
@ -38,24 +38,30 @@ Foam::pressureControl::pressureControl
|
|||||||
:
|
:
|
||||||
refCell_(-1),
|
refCell_(-1),
|
||||||
refValue_(0),
|
refValue_(0),
|
||||||
pMax_("pMax", dimPressure, 0),
|
pMax_("pMax", dimPressure, GREAT),
|
||||||
pMin_("pMin", dimPressure, GREAT)
|
pMin_("pMin", dimPressure, 0),
|
||||||
|
limitMaxP_(false),
|
||||||
|
limitMinP_(false)
|
||||||
{
|
{
|
||||||
bool pLimits = false;
|
bool pLimits = false;
|
||||||
|
scalar pMax = -GREAT;
|
||||||
|
scalar pMin = GREAT;
|
||||||
|
|
||||||
// Set the reference cell and value for closed domain simulations
|
// Set the reference cell and value for closed domain simulations
|
||||||
if (pRefRequired && setRefCell(p, dict, refCell_, refValue_))
|
if (pRefRequired && setRefCell(p, dict, refCell_, refValue_))
|
||||||
{
|
{
|
||||||
pLimits = true;
|
pLimits = true;
|
||||||
|
|
||||||
pMax_.value() = refValue_;
|
pMax = refValue_;
|
||||||
pMin_.value() = refValue_;
|
pMin = refValue_;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dict.found("pMax") && dict.found("pMin"))
|
if (dict.found("pMax") && dict.found("pMin"))
|
||||||
{
|
{
|
||||||
pMax_.value() = readScalar(dict.lookup("pMax"));
|
pMax_.value() = readScalar(dict.lookup("pMax"));
|
||||||
|
limitMaxP_ = true;
|
||||||
pMin_.value() = readScalar(dict.lookup("pMin"));
|
pMin_.value() = readScalar(dict.lookup("pMin"));
|
||||||
|
limitMinP_ = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -73,8 +79,8 @@ Foam::pressureControl::pressureControl
|
|||||||
pLimits = true;
|
pLimits = true;
|
||||||
rhoLimits = true;
|
rhoLimits = true;
|
||||||
|
|
||||||
pMax_.value() = max(pMax_.value(), max(pbf[patchi]));
|
pMax = max(pMax, max(pbf[patchi]));
|
||||||
pMin_.value() = min(pMin_.value(), min(pbf[patchi]));
|
pMin = min(pMin, min(pbf[patchi]));
|
||||||
|
|
||||||
rhoRefMax = max(rhoRefMax, max(rhobf[patchi]));
|
rhoRefMax = max(rhoRefMax, max(rhobf[patchi]));
|
||||||
rhoRefMin = min(rhoRefMin, min(rhobf[patchi]));
|
rhoRefMin = min(rhoRefMin, min(rhobf[patchi]));
|
||||||
@ -84,8 +90,8 @@ Foam::pressureControl::pressureControl
|
|||||||
reduce(rhoLimits, andOp<bool>());
|
reduce(rhoLimits, andOp<bool>());
|
||||||
if (rhoLimits)
|
if (rhoLimits)
|
||||||
{
|
{
|
||||||
reduce(pMax_.value(), maxOp<scalar>());
|
reduce(pMax, maxOp<scalar>());
|
||||||
reduce(pMin_.value(), minOp<scalar>());
|
reduce(pMin, minOp<scalar>());
|
||||||
|
|
||||||
reduce(rhoRefMax, maxOp<scalar>());
|
reduce(rhoRefMax, maxOp<scalar>());
|
||||||
reduce(rhoRefMin, minOp<scalar>());
|
reduce(rhoRefMin, minOp<scalar>());
|
||||||
@ -94,6 +100,7 @@ Foam::pressureControl::pressureControl
|
|||||||
if (dict.found("pMax"))
|
if (dict.found("pMax"))
|
||||||
{
|
{
|
||||||
pMax_.value() = readScalar(dict.lookup("pMax"));
|
pMax_.value() = readScalar(dict.lookup("pMax"));
|
||||||
|
limitMaxP_ = true;
|
||||||
}
|
}
|
||||||
else if (dict.found("pMaxFactor"))
|
else if (dict.found("pMaxFactor"))
|
||||||
{
|
{
|
||||||
@ -108,7 +115,8 @@ Foam::pressureControl::pressureControl
|
|||||||
}
|
}
|
||||||
|
|
||||||
const scalar pMaxFactor(readScalar(dict.lookup("pMaxFactor")));
|
const scalar pMaxFactor(readScalar(dict.lookup("pMaxFactor")));
|
||||||
pMax_ *= pMaxFactor;
|
pMax_.value() = pMaxFactor*pMax;
|
||||||
|
limitMaxP_ = true;
|
||||||
}
|
}
|
||||||
else if (dict.found("rhoMax"))
|
else if (dict.found("rhoMax"))
|
||||||
{
|
{
|
||||||
@ -142,12 +150,14 @@ Foam::pressureControl::pressureControl
|
|||||||
|
|
||||||
dimensionedScalar rhoMax("rhoMax", dimDensity, dict);
|
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"))
|
if (dict.found("pMin"))
|
||||||
{
|
{
|
||||||
pMin_.value() = readScalar(dict.lookup("pMin"));
|
pMin_.value() = readScalar(dict.lookup("pMin"));
|
||||||
|
limitMinP_ = true;
|
||||||
}
|
}
|
||||||
else if (dict.found("pMinFactor"))
|
else if (dict.found("pMinFactor"))
|
||||||
{
|
{
|
||||||
@ -162,7 +172,8 @@ Foam::pressureControl::pressureControl
|
|||||||
}
|
}
|
||||||
|
|
||||||
const scalar pMinFactor(readScalar(dict.lookup("pMinFactor")));
|
const scalar pMinFactor(readScalar(dict.lookup("pMinFactor")));
|
||||||
pMin_ *= pMinFactor;
|
pMin_.value() = pMinFactor*pMin;
|
||||||
|
limitMinP_ = true;
|
||||||
}
|
}
|
||||||
else if (dict.found("rhoMin"))
|
else if (dict.found("rhoMin"))
|
||||||
{
|
{
|
||||||
@ -195,13 +206,27 @@ Foam::pressureControl::pressureControl
|
|||||||
|
|
||||||
dimensionedScalar rhoMin("rhoMin", dimDensity, dict);
|
dimensionedScalar rhoMin("rhoMin", dimDensity, dict);
|
||||||
|
|
||||||
pMin_ *= min(rhoMin.value()/rhoRefMin, 1);
|
pMin_.value() = min(rhoMin.value()/rhoRefMin, 1)*pMin;
|
||||||
|
limitMinP_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< "pressureControl" << nl
|
if (limitMaxP_ || limitMinP_)
|
||||||
<< " pMax/pMin " << pMax_.value() << " " << pMin_.value()
|
{
|
||||||
<< nl << endl;
|
Info<< "pressureControl" << nl;
|
||||||
|
|
||||||
|
if (limitMaxP_)
|
||||||
|
{
|
||||||
|
Info<< " pMax " << pMax_.value() << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limitMinP_)
|
||||||
|
{
|
||||||
|
Info<< " pMin " << pMin_.value() << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
Info << endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -209,15 +234,29 @@ Foam::pressureControl::pressureControl
|
|||||||
|
|
||||||
bool Foam::pressureControl::limit(volScalarField& p) const
|
bool Foam::pressureControl::limit(volScalarField& p) const
|
||||||
{
|
{
|
||||||
scalar pMax = max(p).value();
|
if (limitMaxP_ || limitMinP_)
|
||||||
scalar pMin = min(p).value();
|
|
||||||
|
|
||||||
if (pMax > pMax_.value() || pMin < pMin_.value())
|
|
||||||
{
|
{
|
||||||
Info<< "pressureControl: p max/min " << pMax << " " << pMin << endl;
|
if (limitMaxP_)
|
||||||
|
{
|
||||||
|
const scalar pMax = max(p).value();
|
||||||
|
|
||||||
p = max(p, pMin_);
|
if (pMax > pMax_.value())
|
||||||
p = min(p, pMax_);
|
{
|
||||||
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,6 +66,12 @@ class pressureControl
|
|||||||
//- Pressure upper-limit
|
//- Pressure upper-limit
|
||||||
dimensionedScalar pMin_;
|
dimensionedScalar pMin_;
|
||||||
|
|
||||||
|
//- Pressure lower-limit
|
||||||
|
bool limitMaxP_;
|
||||||
|
|
||||||
|
//- Pressure upper-limit
|
||||||
|
bool limitMinP_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
FoamFile
|
FoamFile
|
||||||
{
|
{
|
||||||
version 2;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
class dictionary;
|
class dictionary;
|
||||||
location "system";
|
location "system";
|
||||||
@ -23,7 +23,7 @@ startTime 0;
|
|||||||
|
|
||||||
stopAt endTime;
|
stopAt endTime;
|
||||||
|
|
||||||
endTime 7000;
|
endTime 6000;
|
||||||
|
|
||||||
deltaT 1;
|
deltaT 1;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user