fvModels, fvConstraints: Rational separation of fvOptions between physical modelling and numerical constraints
The new fvModels is a general interface to optional physical models in the finite volume framework, providing sources to the governing conservation equations, thus ensuring consistency and conservation. This structure is used not only for simple sources and forces but also provides a general run-time selection interface for more complex models such as radiation and film, in the future this will be extended to Lagrangian, reaction, combustion etc. For such complex models the 'correct()' function is provided to update the state of these models at the beginning of the PIMPLE loop. fvModels are specified in the optional constant/fvModels dictionary and backward-compatibility with fvOption is provided by reading the constant/fvOptions or system/fvOptions dictionary if present. The new fvConstraints is a general interface to optional numerical constraints applied to the matrices of the governing equations after construction and/or to the resulting field after solution. This system allows arbitrary changes to either the matrix or solution to ensure numerical or other constraints and hence violates consistency with the governing equations and conservation but it often useful to ensure numerical stability, particularly during the initial start-up period of a run. Complex manipulations can be achieved with fvConstraints, for example 'meanVelocityForce' used to maintain a specified mean velocity in a cyclic channel by manipulating the momentum matrix and the velocity solution. fvConstraints are specified in the optional system/fvConstraints dictionary and backward-compatibility with fvOption is provided by reading the constant/fvOptions or system/fvOptions dictionary if present. The separation of fvOptions into fvModels and fvConstraints provides a rational and consistent separation between physical and numerical models which is easier to understand and reason about, avoids the confusing issue of location of the controlling dictionary file, improves maintainability and easier to extend to handle current and future requirements for optional complex physical models and numerical constraints.
This commit is contained in:
@ -4,5 +4,6 @@ EXE_INC = \
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lmeshTools
|
||||
|
||||
@ -36,4 +36,5 @@ dimensionedScalar DT
|
||||
transportProperties.lookup("DT")
|
||||
);
|
||||
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -30,7 +30,8 @@ Description
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "fvCFD.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "simpleControl.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -54,7 +55,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
while (simple.correctNonOrthogonal())
|
||||
{
|
||||
@ -62,12 +63,12 @@ int main(int argc, char *argv[])
|
||||
(
|
||||
fvm::ddt(T) - fvm::laplacian(DT, T)
|
||||
==
|
||||
fvOptions(T)
|
||||
fvModels.source(T)
|
||||
);
|
||||
|
||||
fvOptions.constrain(TEqn);
|
||||
fvConstraints.constrain(TEqn);
|
||||
TEqn.solve();
|
||||
fvOptions.constrain(T);
|
||||
fvConstraints.constrain(T);
|
||||
}
|
||||
|
||||
#include "write.H"
|
||||
|
||||
@ -5,6 +5,7 @@ EXE_INC = \
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lmeshTools \
|
||||
-lsampling
|
||||
|
||||
@ -54,4 +54,5 @@ dimensionedScalar DT
|
||||
|
||||
#include "createPhi.H"
|
||||
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -30,7 +30,8 @@ Description
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "fvCFD.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "simpleControl.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -55,7 +56,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
while (simple.correctNonOrthogonal())
|
||||
{
|
||||
@ -65,13 +66,13 @@ int main(int argc, char *argv[])
|
||||
+ fvm::div(phi, T)
|
||||
- fvm::laplacian(DT, T)
|
||||
==
|
||||
fvOptions(T)
|
||||
fvModels.source(T)
|
||||
);
|
||||
|
||||
TEqn.relax();
|
||||
fvOptions.constrain(TEqn);
|
||||
fvConstraints.constrain(TEqn);
|
||||
TEqn.solve();
|
||||
fvOptions.constrain(T);
|
||||
fvConstraints.constrain(T);
|
||||
}
|
||||
|
||||
runTime.write();
|
||||
|
||||
@ -16,16 +16,16 @@
|
||||
: -betav*dpdt
|
||||
)
|
||||
- fvm::laplacian(Db, hea)
|
||||
+ betav*fvOptions(rho, hea)
|
||||
+ betav*fvModels.source(rho, hea)
|
||||
);
|
||||
|
||||
EaEqn.relax();
|
||||
|
||||
fvOptions.constrain(EaEqn);
|
||||
fvConstraints.constrain(EaEqn);
|
||||
|
||||
EaEqn.solve();
|
||||
|
||||
fvOptions.constrain(hea);
|
||||
fvConstraints.constrain(hea);
|
||||
|
||||
thermo.correct();
|
||||
}
|
||||
|
||||
@ -24,12 +24,12 @@ if (ign.ignited())
|
||||
//- fvm::div(muEff*fvc::grad(b)/(b + 0.001), heau)
|
||||
//+ fvm::Sp(fvc::div(muEff*fvc::grad(b)/(b + 0.001)), heau)
|
||||
==
|
||||
betav*fvOptions(rho, heau)
|
||||
betav*fvModels.source(rho, heau)
|
||||
);
|
||||
|
||||
fvOptions.constrain(heauEqn);
|
||||
fvConstraints.constrain(heauEqn);
|
||||
|
||||
heauEqn.solve();
|
||||
|
||||
fvOptions.constrain(heau);
|
||||
fvConstraints.constrain(heau);
|
||||
}
|
||||
|
||||
@ -45,4 +45,5 @@ EXE_LIBS = \
|
||||
-llaminarFlameSpeedModels \
|
||||
-lfiniteVolume \
|
||||
-ldynamicFvMesh \
|
||||
-lfvOptions
|
||||
-lfvModels \
|
||||
-lfvConstraints
|
||||
|
||||
@ -78,7 +78,8 @@ Description
|
||||
#include "Switch.H"
|
||||
#include "bound.H"
|
||||
#include "pimpleControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -120,7 +121,7 @@ int main(int argc, char *argv[])
|
||||
// --- Pressure-velocity PIMPLE corrector loop
|
||||
while (pimple.loop())
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UEqn.H"
|
||||
|
||||
|
||||
@ -7,10 +7,10 @@
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
betav*rho*g
|
||||
+ betav*fvOptions(rho, U)
|
||||
+ betav*fvModels.source(rho, U)
|
||||
);
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
volSymmTensorField invA(inv(I*UEqn.A() + drag->Dcu()));
|
||||
|
||||
@ -18,6 +18,6 @@
|
||||
{
|
||||
U = invA & (UEqn.H() - betav*fvc::grad(p));
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ if (ign.ignited())
|
||||
- fvm::Sp(fvc::div(phiSt), b)
|
||||
- fvm::laplacian(Db, b)
|
||||
==
|
||||
betav*fvOptions(rho, b)
|
||||
betav*fvModels.source(rho, b)
|
||||
);
|
||||
|
||||
|
||||
@ -86,11 +86,11 @@ if (ign.ignited())
|
||||
// ~~~~~~~~~~~
|
||||
bEqn.relax();
|
||||
|
||||
fvOptions.constrain(bEqn);
|
||||
fvConstraints.constrain(bEqn);
|
||||
|
||||
bEqn.solve();
|
||||
|
||||
fvOptions.constrain(b);
|
||||
fvConstraints.constrain(b);
|
||||
|
||||
Info<< "min(b) = " << min(b).value() << endl;
|
||||
|
||||
|
||||
@ -238,4 +238,5 @@ fields.add(thermo.heu());
|
||||
flameWrinkling->addXi(fields);
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -24,7 +24,7 @@ if (pimple.transonic())
|
||||
+ fvm::div(phid, p)
|
||||
- fvm::laplacian(rho*invA, p)
|
||||
==
|
||||
betav*fvOptions(psi, p, rho.name())
|
||||
betav*fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
pEqn.solve();
|
||||
@ -54,7 +54,7 @@ else
|
||||
+ fvc::div(phiHbyA)
|
||||
- fvm::laplacian(rho*invA, p)
|
||||
==
|
||||
betav*fvOptions(psi, p, rho.name())
|
||||
betav*fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
pEqn.solve();
|
||||
@ -71,7 +71,7 @@ else
|
||||
|
||||
U = HbyA - (invA & (betav*fvc::grad(p)));
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
|
||||
if (thermo.dpdt())
|
||||
|
||||
@ -16,16 +16,16 @@
|
||||
: -dpdt
|
||||
)
|
||||
- fvm::laplacian(thermophysicalTransport->alphaEff(), hea)
|
||||
+ fvOptions(rho, hea)
|
||||
+ fvModels.source(rho, hea)
|
||||
);
|
||||
|
||||
EaEqn.relax();
|
||||
|
||||
fvOptions.constrain(EaEqn);
|
||||
fvConstraints.constrain(EaEqn);
|
||||
|
||||
EaEqn.solve();
|
||||
|
||||
fvOptions.constrain(hea);
|
||||
fvConstraints.constrain(hea);
|
||||
|
||||
thermo.correct();
|
||||
}
|
||||
|
||||
@ -25,12 +25,12 @@ if (ign.ignited())
|
||||
//+ fvm::Sp(fvc::div(muEff*fvc::grad(b)/(b + 0.001)), heau)
|
||||
|
||||
==
|
||||
fvOptions(rho, heau)
|
||||
fvModels.source(rho, heau)
|
||||
);
|
||||
|
||||
fvOptions.constrain(heauEqn);
|
||||
fvConstraints.constrain(heauEqn);
|
||||
|
||||
heauEqn.solve();
|
||||
|
||||
fvOptions.constrain(heau);
|
||||
fvConstraints.constrain(heau);
|
||||
}
|
||||
|
||||
@ -21,6 +21,7 @@ EXE_LIBS = \
|
||||
-lspecie \
|
||||
-llaminarFlameSpeedModels \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lsampling \
|
||||
-lmeshTools
|
||||
|
||||
@ -6,17 +6,17 @@
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
if (pimple.momentumPredictor())
|
||||
{
|
||||
solve(UEqn == -fvc::grad(p));
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
@ -14,7 +14,8 @@ EXE_INC = \
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lsampling \
|
||||
-lmeshTools \
|
||||
-lengine \
|
||||
|
||||
@ -4,13 +4,13 @@
|
||||
+ fvm::div(phi, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
|
||||
if (pimple.momentumPredictor())
|
||||
{
|
||||
solve(UEqn == -fvc::grad(p));
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -60,7 +60,8 @@ Description
|
||||
#include "OFstream.H"
|
||||
#include "mathematicalConstants.H"
|
||||
#include "pimpleControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@ if (pimple.transonic())
|
||||
+ fvm::div(phid, p)
|
||||
- fvm::laplacian(rhorAUf, p)
|
||||
==
|
||||
fvOptions(psi, p, rho.name())
|
||||
fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
pEqn.solve();
|
||||
@ -68,7 +68,7 @@ else
|
||||
+ fvc::div(phiHbyA)
|
||||
- fvm::laplacian(rhorAUf, p)
|
||||
==
|
||||
fvOptions(psi, p, rho.name())
|
||||
fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
pEqn.solve();
|
||||
@ -85,7 +85,7 @@ else
|
||||
|
||||
U = HbyA - rAU*fvc::grad(p);
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
|
||||
{
|
||||
|
||||
@ -57,7 +57,8 @@ Description
|
||||
#include "ignition.H"
|
||||
#include "Switch.H"
|
||||
#include "pimpleControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -97,7 +98,7 @@ int main(int argc, char *argv[])
|
||||
// --- Pressure-velocity PIMPLE corrector loop
|
||||
while (pimple.loop())
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UEqn.H"
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ if (ign.ignited())
|
||||
- fvm::Sp(fvc::div(phiSt), b)
|
||||
- fvm::laplacian(thermophysicalTransport->alphaEff(), b)
|
||||
==
|
||||
fvOptions(rho, b)
|
||||
fvModels.source(rho, b)
|
||||
);
|
||||
|
||||
|
||||
@ -67,11 +67,11 @@ if (ign.ignited())
|
||||
// ~~~~~~~~~~~
|
||||
bEqn.relax();
|
||||
|
||||
fvOptions.constrain(bEqn);
|
||||
fvConstraints.constrain(bEqn);
|
||||
|
||||
bEqn.solve();
|
||||
|
||||
fvOptions.constrain(b);
|
||||
fvConstraints.constrain(b);
|
||||
|
||||
Info<< "min(b) = " << min(b).value() << endl;
|
||||
|
||||
@ -163,16 +163,16 @@ if (ign.ignited())
|
||||
==
|
||||
- fvm::SuSp(-rho*Rc*Su0/Su, Su)
|
||||
- fvm::SuSp(rho*(sigmas + Rc), Su)
|
||||
+ fvOptions(rho, Su)
|
||||
+ fvModels.source(rho, Su)
|
||||
);
|
||||
|
||||
SuEqn.relax();
|
||||
|
||||
fvOptions.constrain(SuEqn);
|
||||
fvConstraints.constrain(SuEqn);
|
||||
|
||||
SuEqn.solve();
|
||||
|
||||
fvOptions.constrain(Su);
|
||||
fvConstraints.constrain(Su);
|
||||
|
||||
// Limit the maximum Su
|
||||
// ~~~~~~~~~~~~~~~~~~~~
|
||||
@ -250,16 +250,16 @@ if (ign.ignited())
|
||||
),
|
||||
Xi
|
||||
)
|
||||
+ fvOptions(rho, Xi)
|
||||
+ fvModels.source(rho, Xi)
|
||||
);
|
||||
|
||||
XiEqn.relax();
|
||||
|
||||
fvOptions.constrain(XiEqn);
|
||||
fvConstraints.constrain(XiEqn);
|
||||
|
||||
XiEqn.solve();
|
||||
|
||||
fvOptions.constrain(Xi);
|
||||
fvConstraints.constrain(Xi);
|
||||
|
||||
// Correct boundedness of Xi
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@ -146,4 +146,5 @@ fields.add(thermo.he());
|
||||
fields.add(thermo.heu());
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -19,12 +19,12 @@ if (composition.contains("ft"))
|
||||
+ mvConvection->fvmDiv(phi, ft)
|
||||
- fvm::laplacian(thermophysicalTransport->alphaEff(), ft)
|
||||
==
|
||||
fvOptions(rho, ft)
|
||||
fvModels.source(rho, ft)
|
||||
);
|
||||
|
||||
fvOptions.constrain(ftEqn);
|
||||
fvConstraints.constrain(ftEqn);
|
||||
|
||||
ftEqn.solve();
|
||||
|
||||
fvOptions.constrain(ft);
|
||||
fvConstraints.constrain(ft);
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ if (pimple.transonic())
|
||||
+ fvm::div(phid, p)
|
||||
- fvm::laplacian(rhorAUf, p)
|
||||
==
|
||||
fvOptions(psi, p, rho.name())
|
||||
fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
pEqn.solve();
|
||||
@ -61,7 +61,7 @@ else
|
||||
+ fvc::div(phiHbyA)
|
||||
- fvm::laplacian(rhorAUf, p)
|
||||
==
|
||||
fvOptions(psi, p, rho.name())
|
||||
fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
pEqn.solve();
|
||||
@ -78,7 +78,7 @@ else
|
||||
|
||||
U = HbyA - rAU*fvc::grad(p);
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
|
||||
if (thermo.dpdt())
|
||||
|
||||
@ -23,4 +23,5 @@ EXE_LIBS = \
|
||||
-lspecie \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-lfvOptions
|
||||
-lfvModels \
|
||||
-lfvConstraints
|
||||
|
||||
@ -36,7 +36,8 @@ Description
|
||||
#include "fluidThermoMomentumTransportModel.H"
|
||||
#include "fluidThermophysicalTransportModel.H"
|
||||
#include "OFstream.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "pimpleControl.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -84,7 +85,7 @@ int main(int argc, char *argv[])
|
||||
// --- Pressure-velocity PIMPLE corrector loop
|
||||
while (pimple.loop())
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UEqn.H"
|
||||
|
||||
|
||||
@ -74,4 +74,5 @@ Info<< "Creating field kinetic energy K\n" << endl;
|
||||
volScalarField K("K", 0.5*magSqr(U));
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -22,7 +22,8 @@ EXE_INC = \
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lmeshTools \
|
||||
-lsampling \
|
||||
-lmomentumTransportModels \
|
||||
|
||||
@ -7,12 +7,12 @@
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
parcels.SU(U)
|
||||
+ fvOptions(rho, U)
|
||||
+ fvModels.source(rho, U)
|
||||
);
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
if (pimple.momentumPredictor())
|
||||
{
|
||||
@ -29,6 +29,6 @@
|
||||
)
|
||||
);
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
@ -26,16 +26,16 @@ tmp<fv::convectionScheme<scalar>> mvConvection
|
||||
parcels.SYi(i, Yi)
|
||||
+ surfaceFilm.Srho(i)
|
||||
+ combustion->R(Yi)
|
||||
+ fvOptions(rho, Yi)
|
||||
+ fvModels.source(rho, Yi)
|
||||
);
|
||||
|
||||
YiEqn.relax();
|
||||
|
||||
fvOptions.constrain(YiEqn);
|
||||
fvConstraints.constrain(YiEqn);
|
||||
|
||||
YiEqn.solve("Yi");
|
||||
|
||||
fvOptions.constrain(Yi);
|
||||
fvConstraints.constrain(Yi);
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,16 +62,16 @@ tmp<fv::convectionScheme<scalar>> mvConvection
|
||||
combustion->Qdot()
|
||||
+ parcels.Sh(he)
|
||||
+ surfaceFilm.Sh()
|
||||
+ fvOptions(rho, he)
|
||||
+ fvModels.source(rho, he)
|
||||
);
|
||||
|
||||
EEqn.relax();
|
||||
|
||||
fvOptions.constrain(EEqn);
|
||||
fvConstraints.constrain(EEqn);
|
||||
|
||||
EEqn.solve();
|
||||
|
||||
fvOptions.constrain(he);
|
||||
fvConstraints.constrain(he);
|
||||
|
||||
thermo.correct();
|
||||
|
||||
|
||||
@ -134,5 +134,6 @@ volScalarField K("K", 0.5*magSqr(U));
|
||||
|
||||
#include "createClouds.H"
|
||||
#include "createSurfaceFilmModel.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
#include "checkRadiationModel.H"
|
||||
|
||||
@ -39,7 +39,8 @@ Description
|
||||
#include "fluidReactionThermo.H"
|
||||
#include "combustionModel.H"
|
||||
#include "pimpleControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -86,7 +87,7 @@ int main(int argc, char *argv[])
|
||||
// --- PIMPLE loop
|
||||
while (pimple.loop())
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UEqn.H"
|
||||
#include "YEEqn.H"
|
||||
|
||||
@ -33,7 +33,7 @@ while (pimple.correctNonOrthogonal())
|
||||
==
|
||||
parcels.Srho()
|
||||
+ surfaceFilm.Srho()
|
||||
+ fvOptions(psi, p_rgh, rho.name())
|
||||
+ fvModels.source(psi, p_rgh, rho.name())
|
||||
);
|
||||
|
||||
p_rghEqn.solve();
|
||||
@ -43,7 +43,7 @@ while (pimple.correctNonOrthogonal())
|
||||
phi = phiHbyA + p_rghEqn.flux();
|
||||
U = HbyA + rAU*fvc::reconstruct((p_rghEqn.flux() + phig)/rhorAUf);
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -37,12 +37,12 @@ Description
|
||||
==
|
||||
parcels.Srho(rho)
|
||||
+ surfaceFilm.Srho()
|
||||
+ fvOptions(rho)
|
||||
+ fvModels.source(rho)
|
||||
);
|
||||
|
||||
rhoEqn.solve();
|
||||
|
||||
fvOptions.constrain(rho);
|
||||
fvConstraints.constrain(rho);
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -18,16 +18,16 @@
|
||||
+ thermophysicalTransport->divq(he)
|
||||
==
|
||||
reaction->Qdot()
|
||||
+ fvOptions(rho, he)
|
||||
+ fvModels.source(rho, he)
|
||||
);
|
||||
|
||||
EEqn.relax();
|
||||
|
||||
fvOptions.constrain(EEqn);
|
||||
fvConstraints.constrain(EEqn);
|
||||
|
||||
EEqn.solve();
|
||||
|
||||
fvOptions.constrain(he);
|
||||
fvConstraints.constrain(he);
|
||||
|
||||
thermo.correct();
|
||||
|
||||
|
||||
@ -31,4 +31,5 @@ EXE_LIBS = \
|
||||
-ltopoChangerFvMesh \
|
||||
-lmeshTools \
|
||||
-lsampling \
|
||||
-lfvOptions
|
||||
-lfvModels \
|
||||
-lfvConstraints
|
||||
|
||||
@ -8,18 +8,18 @@ tmp<fvVectorMatrix> tUEqn
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
if (pimple.momentumPredictor())
|
||||
{
|
||||
solve(UEqn == -fvc::grad(p));
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
@ -24,16 +24,16 @@ forAll(Y, i)
|
||||
+ thermophysicalTransport->divj(Yi)
|
||||
==
|
||||
reaction->R(Yi)
|
||||
+ fvOptions(rho, Yi)
|
||||
+ fvModels.source(rho, Yi)
|
||||
);
|
||||
|
||||
YiEqn.relax();
|
||||
|
||||
fvOptions.constrain(YiEqn);
|
||||
fvConstraints.constrain(YiEqn);
|
||||
|
||||
YiEqn.solve("Yi");
|
||||
|
||||
fvOptions.constrain(Yi);
|
||||
fvConstraints.constrain(Yi);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -19,7 +19,8 @@ EXE_INC = \
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lmeshTools \
|
||||
-lsampling \
|
||||
-lmomentumTransportModels \
|
||||
|
||||
@ -6,13 +6,13 @@
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
if (pimple.momentumPredictor())
|
||||
{
|
||||
@ -29,6 +29,6 @@
|
||||
)
|
||||
);
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
@ -38,7 +38,8 @@ Description
|
||||
#include "multivariateScheme.H"
|
||||
#include "pimpleControl.H"
|
||||
#include "pressureControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "localEulerDdtScheme.H"
|
||||
#include "fvcSmooth.H"
|
||||
|
||||
@ -92,7 +93,7 @@ int main(int argc, char *argv[])
|
||||
// --- Pressure-velocity PIMPLE corrector loop
|
||||
while (pimple.loop())
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UEqn.H"
|
||||
#include "YEqn.H"
|
||||
|
||||
@ -130,7 +130,8 @@ forAll(Y, i)
|
||||
fields.add(thermo.he());
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
|
||||
// This solver does not support moving mesh but it uses the pressure equation
|
||||
|
||||
@ -98,4 +98,5 @@ forAll(Y, i)
|
||||
fields.add(thermo.he());
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -39,7 +39,8 @@ Description
|
||||
#include "pimpleControl.H"
|
||||
#include "pressureControl.H"
|
||||
#include "CorrectPhi.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "localEulerDdtScheme.H"
|
||||
#include "fvcSmooth.H"
|
||||
|
||||
@ -104,7 +105,7 @@ int main(int argc, char *argv[])
|
||||
// --- Pressure-velocity PIMPLE corrector loop
|
||||
while (pimple.loop())
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
if (pimple.frozenFlow())
|
||||
{
|
||||
|
||||
@ -11,7 +11,8 @@ EXE_INC = \
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lfluidThermophysicalModels \
|
||||
-lspecie \
|
||||
-lrhoCentralFoam \
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
)
|
||||
+ thermophysicalTransport->divq(he)
|
||||
==
|
||||
fvOptions(rho, he)
|
||||
fvModels.source(rho, he)
|
||||
);
|
||||
|
||||
EEqn.relax();
|
||||
|
||||
fvOptions.constrain(EEqn);
|
||||
fvConstraints.constrain(EEqn);
|
||||
|
||||
EEqn.solve();
|
||||
|
||||
fvOptions.constrain(he);
|
||||
fvConstraints.constrain(he);
|
||||
|
||||
thermo.correct();
|
||||
}
|
||||
|
||||
@ -20,4 +20,5 @@ EXE_LIBS = \
|
||||
-ltopoChangerFvMesh \
|
||||
-lmeshTools \
|
||||
-lsampling \
|
||||
-lfvOptions
|
||||
-lfvModels \
|
||||
-lfvConstraints
|
||||
|
||||
@ -8,18 +8,18 @@ tmp<fvVectorMatrix> tUEqn
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
if (pimple.momentumPredictor())
|
||||
{
|
||||
solve(UEqn == -fvc::grad(p));
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
@ -87,4 +87,5 @@ volScalarField K("K", 0.5*magSqr(U));
|
||||
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -70,7 +70,7 @@ if (pimple.transonic())
|
||||
fvc::ddt(rho) + psi*correction(fvm::ddt(p))
|
||||
+ fvc::div(phiHbyA) + fvm::div(phid, p)
|
||||
==
|
||||
fvOptions(psi, p, rho.name())
|
||||
fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
while (pimple.correctNonOrthogonal())
|
||||
@ -112,7 +112,7 @@ else
|
||||
fvc::ddt(rho) + psi*correction(fvm::ddt(p))
|
||||
+ fvc::div(phiHbyA)
|
||||
==
|
||||
fvOptions(psi, p, rho.name())
|
||||
fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
while (pimple.correctNonOrthogonal())
|
||||
@ -159,7 +159,7 @@ p.relax();
|
||||
|
||||
U = HbyA - rAAtU*fvc::grad(p);
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
|
||||
if (mesh.steady())
|
||||
|
||||
@ -41,7 +41,8 @@ Description
|
||||
#include "pimpleControl.H"
|
||||
#include "pressureControl.H"
|
||||
#include "CorrectPhi.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "localEulerDdtScheme.H"
|
||||
#include "fvcSmooth.H"
|
||||
|
||||
@ -144,7 +145,7 @@ int main(int argc, char *argv[])
|
||||
#include "rhoEqn.H"
|
||||
}
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UEqn.H"
|
||||
#include "EEqn.H"
|
||||
|
||||
@ -11,16 +11,16 @@
|
||||
)
|
||||
+ thermophysicalTransport->divq(he)
|
||||
==
|
||||
fvOptions(rho, he)
|
||||
fvModels.source(rho, he)
|
||||
);
|
||||
|
||||
EEqn.relax();
|
||||
|
||||
fvOptions.constrain(EEqn);
|
||||
fvConstraints.constrain(EEqn);
|
||||
|
||||
EEqn.solve();
|
||||
|
||||
fvOptions.constrain(he);
|
||||
fvConstraints.constrain(he);
|
||||
|
||||
thermo.correct();
|
||||
}
|
||||
|
||||
@ -17,4 +17,5 @@ EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lsampling \
|
||||
-lmeshTools \
|
||||
-lfvOptions
|
||||
-lfvModels \
|
||||
-lfvConstraints
|
||||
|
||||
@ -8,14 +8,14 @@
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
solve(UEqn == -fvc::grad(p));
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
|
||||
@ -69,4 +69,5 @@ autoPtr<fluidThermophysicalTransportModel> thermophysicalTransport
|
||||
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -64,7 +64,7 @@ if (simple.transonic())
|
||||
+ fvm::div(phid, p)
|
||||
- fvm::laplacian(rhorAAtUf, p)
|
||||
==
|
||||
fvOptions(psi, p, rho.name())
|
||||
fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
// Relax the pressure equation to ensure diagonal-dominance
|
||||
@ -101,7 +101,7 @@ else
|
||||
fvc::div(phiHbyA)
|
||||
- fvm::laplacian(rhorAAtUf, p)
|
||||
==
|
||||
fvOptions(psi, p, rho.name())
|
||||
fvModels.source(psi, p, rho.name())
|
||||
);
|
||||
|
||||
pEqn.setReference
|
||||
@ -126,7 +126,7 @@ p.relax();
|
||||
|
||||
U = HbyA - rAAtU*fvc::grad(p);
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
|
||||
pressureControl.limit(p);
|
||||
|
||||
|
||||
@ -19,4 +19,5 @@ EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lsampling \
|
||||
-lmeshTools \
|
||||
-lfvOptions
|
||||
-lfvModels \
|
||||
-lfvConstraints
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
trTU = inv(tTU());
|
||||
trTU.ref().rename("rAU");
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
volVectorField gradp(fvc::grad(p));
|
||||
|
||||
@ -38,17 +38,17 @@
|
||||
}
|
||||
U.correctBoundaryConditions();
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
}
|
||||
else
|
||||
{
|
||||
pZones.addResistance(UEqn);
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
solve(UEqn == -fvc::grad(p));
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
|
||||
trAU = 1.0/UEqn.A();
|
||||
trAU.ref().rename("rAU");
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
tpEqn =
|
||||
(
|
||||
fvm::laplacian(rho*trTU(), p)
|
||||
+ fvOptions(psi, p, rho.name())
|
||||
+ fvModels.source(psi, p, rho.name())
|
||||
==
|
||||
fvc::div(phiHbyA)
|
||||
);
|
||||
@ -44,7 +44,7 @@
|
||||
tpEqn =
|
||||
(
|
||||
fvm::laplacian(rho*trAU(), p)
|
||||
+ fvOptions(psi, p, rho.name())
|
||||
+ fvModels.source(psi, p, rho.name())
|
||||
==
|
||||
fvc::div(phiHbyA)
|
||||
);
|
||||
@ -81,7 +81,7 @@
|
||||
}
|
||||
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
|
||||
pressureControl.limit(p);
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -36,7 +36,8 @@ Description
|
||||
#include "fluidThermophysicalTransportModel.H"
|
||||
#include "simpleControl.H"
|
||||
#include "pressureControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "IOporosityModelList.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -35,7 +35,8 @@ Description
|
||||
#include "fluidThermophysicalTransportModel.H"
|
||||
#include "simpleControl.H"
|
||||
#include "pressureControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -61,7 +62,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
// Pressure-velocity SIMPLE corrector
|
||||
#include "UEqn.H"
|
||||
|
||||
@ -18,16 +18,16 @@
|
||||
+ thermophysicalTransport->divq(he)
|
||||
==
|
||||
rho*(U&g)
|
||||
+ fvOptions(rho, he)
|
||||
+ fvModels.source(rho, he)
|
||||
);
|
||||
|
||||
EEqn.relax();
|
||||
|
||||
fvOptions.constrain(EEqn);
|
||||
fvConstraints.constrain(EEqn);
|
||||
|
||||
EEqn.solve();
|
||||
|
||||
fvOptions.constrain(he);
|
||||
fvConstraints.constrain(he);
|
||||
|
||||
thermo.correct();
|
||||
}
|
||||
|
||||
@ -22,4 +22,5 @@ EXE_LIBS = \
|
||||
-ltopoChangerFvMesh \
|
||||
-lmeshTools \
|
||||
-lsampling \
|
||||
-lfvOptions
|
||||
-lfvModels \
|
||||
-lfvConstraints
|
||||
|
||||
@ -8,13 +8,13 @@
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
if (pimple.momentumPredictor())
|
||||
{
|
||||
@ -31,6 +31,6 @@
|
||||
)
|
||||
);
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
@ -42,7 +42,8 @@ Description
|
||||
#include "pimpleControl.H"
|
||||
#include "pressureControl.H"
|
||||
#include "CorrectPhi.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "localEulerDdtScheme.H"
|
||||
#include "fvcSmooth.H"
|
||||
|
||||
@ -143,7 +144,7 @@ int main(int argc, char *argv[])
|
||||
#include "rhoEqn.H"
|
||||
}
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UEqn.H"
|
||||
#include "EEqn.H"
|
||||
|
||||
@ -109,5 +109,6 @@ volScalarField K("K", 0.5*magSqr(U));
|
||||
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
#include "checkRadiationModel.H"
|
||||
|
||||
@ -53,7 +53,7 @@ if (pimple.transonic())
|
||||
fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh))
|
||||
+ fvc::div(phiHbyA) + fvm::div(phid, p_rgh)
|
||||
==
|
||||
fvOptions(psi, p_rgh, rho.name())
|
||||
fvModels.source(psi, p_rgh, rho.name())
|
||||
);
|
||||
|
||||
while (pimple.correctNonOrthogonal())
|
||||
@ -79,7 +79,7 @@ else
|
||||
fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh))
|
||||
+ fvc::div(phiHbyA)
|
||||
==
|
||||
fvOptions(psi, p_rgh, rho.name())
|
||||
fvModels.source(psi, p_rgh, rho.name())
|
||||
);
|
||||
|
||||
while (pimple.correctNonOrthogonal())
|
||||
@ -127,7 +127,7 @@ p_rgh.relax();
|
||||
// calculated from the relaxed pressure
|
||||
U = HbyA + rAU*fvc::reconstruct((phig + p_rghEqn.flux())/rhorAUf);
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
|
||||
if (mesh.steady())
|
||||
|
||||
@ -12,16 +12,16 @@
|
||||
+ thermophysicalTransport->divq(he)
|
||||
==
|
||||
rho*(U&g)
|
||||
+ fvOptions(rho, he)
|
||||
+ fvModels.source(rho, he)
|
||||
);
|
||||
|
||||
EEqn.relax();
|
||||
|
||||
fvOptions.constrain(EEqn);
|
||||
fvConstraints.constrain(EEqn);
|
||||
|
||||
EEqn.solve();
|
||||
|
||||
fvOptions.constrain(he);
|
||||
fvConstraints.constrain(he);
|
||||
|
||||
thermo.correct();
|
||||
}
|
||||
|
||||
@ -10,7 +10,8 @@ EXE_INC = \
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lsampling \
|
||||
-lmeshTools \
|
||||
-lthermophysicalTransportModels \
|
||||
|
||||
@ -8,13 +8,13 @@
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence->divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
if (simple.momentumPredictor())
|
||||
{
|
||||
@ -31,5 +31,5 @@
|
||||
)
|
||||
);
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
}
|
||||
|
||||
@ -35,7 +35,8 @@ Description
|
||||
#include "fluidThermophysicalTransportModel.H"
|
||||
#include "simpleControl.H"
|
||||
#include "pressureControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -61,7 +62,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
// Pressure-velocity SIMPLE corrector
|
||||
{
|
||||
|
||||
@ -91,5 +91,6 @@ mesh.setFluxRequired(p_rgh.name());
|
||||
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
||||
|
||||
#include "createMRF.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
#include "checkRadiationModel.H"
|
||||
|
||||
@ -41,7 +41,7 @@ if (simple.transonic())
|
||||
fvc::div(phiHbyA) + fvm::div(phid, p_rgh)
|
||||
- fvm::laplacian(rhorAUf, p_rgh)
|
||||
==
|
||||
fvOptions(psi, p_rgh, rho.name());
|
||||
fvModels.source(psi, p_rgh, rho.name());
|
||||
|
||||
// Relax the pressure equation to ensure diagonal-dominance
|
||||
p_rghEqn.relax();
|
||||
@ -63,7 +63,7 @@ else
|
||||
fvc::div(phiHbyA)
|
||||
- fvm::laplacian(rhorAUf, p_rgh)
|
||||
==
|
||||
fvOptions(psi, p_rgh, rho.name());
|
||||
fvModels.source(psi, p_rgh, rho.name());
|
||||
|
||||
p_rghEqn.setReference
|
||||
(
|
||||
@ -88,7 +88,7 @@ p_rgh.relax();
|
||||
// calculated from the relaxed pressure
|
||||
U = HbyA + rAU*fvc::reconstruct((phig + p_rghEqn.flux())/rhorAUf);
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
|
||||
pressureControl.limit(p);
|
||||
|
||||
|
||||
@ -37,6 +37,7 @@ EXE_LIBS = \
|
||||
-lfluidReactionThermophysicalTransportModels \
|
||||
-lmeshTools \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lregionModels \
|
||||
-lsampling
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -41,7 +41,8 @@ Description
|
||||
#include "compressibleCourantNo.H"
|
||||
#include "solidRegionDiffNo.H"
|
||||
#include "solidThermo.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "coordinateSystem.H"
|
||||
#include "pimpleMultiRegionControl.H"
|
||||
#include "pressureControl.H"
|
||||
|
||||
@ -24,16 +24,16 @@
|
||||
==
|
||||
rho*(U&g)
|
||||
+ reaction.Qdot()
|
||||
+ fvOptions(rho, he)
|
||||
+ fvModels.source(rho, he)
|
||||
);
|
||||
|
||||
EEqn.relax();
|
||||
|
||||
fvOptions.constrain(EEqn);
|
||||
fvConstraints.constrain(EEqn);
|
||||
|
||||
EEqn.solve();
|
||||
|
||||
fvOptions.constrain(he);
|
||||
fvConstraints.constrain(he);
|
||||
|
||||
thermo.correct();
|
||||
|
||||
|
||||
@ -8,13 +8,13 @@
|
||||
+ MRF.DDt(rho, U)
|
||||
+ turbulence.divDevTau(U)
|
||||
==
|
||||
fvOptions(rho, U)
|
||||
fvModels.source(rho, U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
if (pimple.momentumPredictor())
|
||||
{
|
||||
@ -31,8 +31,8 @@
|
||||
)
|
||||
);
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
|
||||
@ -28,16 +28,16 @@ forAll(Y, i)
|
||||
+ thermophysicalTransport.divj(Yi)
|
||||
==
|
||||
reaction.R(Yi)
|
||||
+ fvOptions(rho, Yi)
|
||||
+ fvModels.source(rho, Yi)
|
||||
);
|
||||
|
||||
YiEqn.relax();
|
||||
|
||||
fvOptions.constrain(YiEqn);
|
||||
fvConstraints.constrain(YiEqn);
|
||||
|
||||
YiEqn.solve("Yi");
|
||||
|
||||
fvOptions.constrain(Yi);
|
||||
fvConstraints.constrain(Yi);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -22,7 +22,8 @@ PtrList<multivariateSurfaceInterpolationScheme<scalar>::fieldTable>
|
||||
List<scalar> initialMassFluid(fluidRegions.size());
|
||||
|
||||
PtrList<IOMRFZoneList> MRFfluid(fluidRegions.size());
|
||||
PtrList<fv::options> fvOptionsFluid(fluidRegions.size());
|
||||
PtrList<Foam::fvModels> fvModelsFluid(fluidRegions.size());
|
||||
PtrList<fvConstraints> fvConstraintsFluid(fluidRegions.size());
|
||||
|
||||
// Populate fluid field pointer lists
|
||||
forAll(fluidRegions, i)
|
||||
@ -271,11 +272,18 @@ forAll(fluidRegions, i)
|
||||
new IOMRFZoneList(fluidRegions[i])
|
||||
);
|
||||
|
||||
Info<< " Adding fvOptionsFluid\n" << endl;
|
||||
fvOptionsFluid.set
|
||||
Info<< " Adding fvModelsFluid\n" << endl;
|
||||
fvModelsFluid.set
|
||||
(
|
||||
i,
|
||||
new fv::options(fluidRegions[i])
|
||||
new Foam::fvModels(fluidRegions[i])
|
||||
);
|
||||
|
||||
Info<< " Adding fvConstraintsFluid\n" << endl;
|
||||
fvConstraintsFluid.set
|
||||
(
|
||||
i,
|
||||
new fvConstraints(fluidRegions[i])
|
||||
);
|
||||
|
||||
turbulenceFluid[i].validate();
|
||||
|
||||
@ -33,7 +33,8 @@
|
||||
fieldsFluid[i];
|
||||
|
||||
IOMRFZoneList& MRF = MRFfluid[i];
|
||||
fv::options& fvOptions = fvOptionsFluid[i];
|
||||
Foam::fvModels& fvModels = fvModelsFluid[i];
|
||||
Foam::fvConstraints& fvConstraints = fvConstraintsFluid[i];
|
||||
|
||||
#include "checkRadiationModel.H"
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
if (pimple.frozenFlow())
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "YEqn.H"
|
||||
#include "EEqn.H"
|
||||
@ -12,7 +12,7 @@ else
|
||||
#include "rhoEqn.H"
|
||||
}
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UEqn.H"
|
||||
#include "YEqn.H"
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
// Initialise solid field pointer lists
|
||||
PtrList<solidThermo> thermoSolid(solidRegions.size());
|
||||
PtrList<fv::options> fvOptionsSolid(solidRegions.size());
|
||||
PtrList<Foam::fvModels> fvModelsSolid(solidRegions.size());
|
||||
PtrList<fvConstraints> fvConstraintsSolid(solidRegions.size());
|
||||
|
||||
// Populate solid field pointer lists
|
||||
forAll(solidRegions, i)
|
||||
@ -11,10 +12,17 @@ forAll(solidRegions, i)
|
||||
Info<< " Adding to thermoSolid\n" << endl;
|
||||
thermoSolid.set(i, solidThermo::New(solidRegions[i]));
|
||||
|
||||
Info<< " Adding to fvOptionsSolid\n" << endl;
|
||||
fvOptionsSolid.set
|
||||
Info<< " Adding to fvModelsSolid\n" << endl;
|
||||
fvModelsSolid.set
|
||||
(
|
||||
i,
|
||||
new fv::options(solidRegions[i])
|
||||
new Foam::fvModels(solidRegions[i])
|
||||
);
|
||||
|
||||
Info<< " Adding fvConstraintsSolid\n" << endl;
|
||||
fvConstraintsSolid.set
|
||||
(
|
||||
i,
|
||||
new fvConstraints(solidRegions[i])
|
||||
);
|
||||
}
|
||||
|
||||
@ -7,7 +7,8 @@ const volScalarField& rho = trho();
|
||||
|
||||
volScalarField& e = thermo.he();
|
||||
|
||||
const fv::options& fvOptions = fvOptionsSolid[i];
|
||||
const Foam::fvModels& fvModels = fvModelsSolid[i];
|
||||
Foam::fvConstraints& fvConstraints = fvConstraintsSolid[i];
|
||||
|
||||
#include "checkRadiationModel.H"
|
||||
|
||||
|
||||
@ -6,16 +6,16 @@
|
||||
fvm::ddt(rho, e)
|
||||
+ thermo.divq(e)
|
||||
==
|
||||
fvOptions(rho, e)
|
||||
fvModels.source(rho, e)
|
||||
);
|
||||
|
||||
eEqn.relax();
|
||||
|
||||
fvOptions.constrain(eEqn);
|
||||
fvConstraints.constrain(eEqn);
|
||||
|
||||
eEqn.solve();
|
||||
|
||||
fvOptions.constrain(e);
|
||||
fvConstraints.constrain(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -17,16 +17,16 @@
|
||||
)
|
||||
+ thermophysicalTransport->divq(he)
|
||||
==
|
||||
fvOptions(rho, he)
|
||||
fvModels.source(rho, he)
|
||||
);
|
||||
|
||||
EEqn.relax();
|
||||
|
||||
fvOptions.constrain(EEqn);
|
||||
fvConstraints.constrain(EEqn);
|
||||
|
||||
EEqn.solve();
|
||||
|
||||
fvOptions.constrain(he);
|
||||
fvConstraints.constrain(he);
|
||||
|
||||
thermo.correct();
|
||||
}
|
||||
|
||||
@ -11,7 +11,8 @@ EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lsampling \
|
||||
-lmeshTools \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lfluidThermophysicalModels \
|
||||
-lspecie \
|
||||
-lmomentumTransportModels \
|
||||
|
||||
@ -69,5 +69,6 @@ volScalarField dpdt
|
||||
Info<< "Creating field kinetic energy K\n" << endl;
|
||||
volScalarField K("K", 0.5*magSqr(U));
|
||||
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
#include "checkRadiationModel.H"
|
||||
|
||||
@ -34,7 +34,8 @@ Description
|
||||
#include "fluidThermoMomentumTransportModel.H"
|
||||
#include "fluidThermophysicalTransportModel.H"
|
||||
#include "LESModel.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "simpleControl.H"
|
||||
#include "pimpleControl.H"
|
||||
|
||||
@ -84,7 +85,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
while (pimple.correctNonOrthogonal())
|
||||
{
|
||||
|
||||
@ -14,4 +14,5 @@ EXE_LIBS = \
|
||||
-lincompressibleTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-lfvOptions
|
||||
-lfvModels \
|
||||
-lfvConstraints
|
||||
|
||||
@ -49,7 +49,8 @@ Description
|
||||
#include "singlePhaseTransportModel.H"
|
||||
#include "kinematicMomentumTransportModel.H"
|
||||
#include "simpleControl.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
template<class Type>
|
||||
void zeroCells
|
||||
@ -103,7 +104,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
// Pressure-velocity SIMPLE corrector
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
// Momentum predictor
|
||||
|
||||
@ -113,17 +114,17 @@ int main(int argc, char *argv[])
|
||||
+ turbulence->divDevSigma(U)
|
||||
+ fvm::Sp(alpha, U)
|
||||
==
|
||||
fvOptions(U)
|
||||
fvModels.source(U)
|
||||
);
|
||||
fvVectorMatrix& UEqn = tUEqn.ref();
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
solve(UEqn == -fvc::grad(p));
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
|
||||
volScalarField rAU(1.0/UEqn.A());
|
||||
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
|
||||
@ -159,7 +160,7 @@ int main(int argc, char *argv[])
|
||||
// Momentum corrector
|
||||
U = HbyA - rAU*fvc::grad(p);
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
}
|
||||
|
||||
// Adjoint Pressure-velocity SIMPLE corrector
|
||||
@ -184,17 +185,17 @@ int main(int argc, char *argv[])
|
||||
+ turbulence->divDevSigma(Ua)
|
||||
+ fvm::Sp(alpha, Ua)
|
||||
==
|
||||
fvOptions(Ua)
|
||||
fvModels.source(Ua)
|
||||
);
|
||||
fvVectorMatrix& UaEqn = tUaEqn.ref();
|
||||
|
||||
UaEqn.relax();
|
||||
|
||||
fvOptions.constrain(UaEqn);
|
||||
fvConstraints.constrain(UaEqn);
|
||||
|
||||
solve(UaEqn == -fvc::grad(pa));
|
||||
|
||||
fvOptions.constrain(Ua);
|
||||
fvConstraints.constrain(Ua);
|
||||
|
||||
volScalarField rAUa(1.0/UaEqn.A());
|
||||
volVectorField HbyAa("HbyAa", Ua);
|
||||
@ -228,7 +229,7 @@ int main(int argc, char *argv[])
|
||||
// Adjoint momentum corrector
|
||||
Ua = HbyAa - rAUa*fvc::grad(pa);
|
||||
Ua.correctBoundaryConditions();
|
||||
fvOptions.constrain(Ua);
|
||||
fvConstraints.constrain(Ua);
|
||||
}
|
||||
|
||||
laminarTransport.correct();
|
||||
|
||||
@ -110,4 +110,5 @@ volScalarField alpha
|
||||
zeroCells(alpha, inletCells);
|
||||
//zeroCells(alpha, outletCells);
|
||||
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -12,5 +12,6 @@ EXE_LIBS = \
|
||||
-lincompressibleTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lsampling
|
||||
|
||||
@ -38,7 +38,8 @@ Description
|
||||
#include "fvCFD.H"
|
||||
#include "singlePhaseTransportModel.H"
|
||||
#include "kinematicMomentumTransportModel.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
#include "wallFvPatch.H"
|
||||
#include "makeGraph.H"
|
||||
|
||||
@ -65,23 +66,23 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
fvVectorMatrix divR(turbulence->divDevSigma(U));
|
||||
divR.source() = flowMask & divR.source();
|
||||
|
||||
fvVectorMatrix UEqn
|
||||
(
|
||||
divR == gradP + fvOptions(U)
|
||||
divR == gradP + fvModels.source(U)
|
||||
);
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
fvOptions.constrain(UEqn);
|
||||
fvConstraints.constrain(UEqn);
|
||||
|
||||
UEqn.solve();
|
||||
|
||||
fvOptions.constrain(U);
|
||||
fvConstraints.constrain(U);
|
||||
|
||||
|
||||
// Correct driving force for a constant volume flow rate
|
||||
|
||||
@ -48,4 +48,5 @@ dimensionedVector gradP
|
||||
Zero
|
||||
);
|
||||
|
||||
#include "createFvOptions.H"
|
||||
#include "createFvModels.H"
|
||||
#include "createFvConstraints.H"
|
||||
|
||||
@ -13,7 +13,8 @@ EXE_LIBS = \
|
||||
-lincompressibleMomentumTransportModels \
|
||||
-lincompressibleTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lsampling \
|
||||
-ldynamicFvMesh \
|
||||
-ltopoChangerFvMesh \
|
||||
|
||||
@ -14,5 +14,6 @@ EXE_LIBS = \
|
||||
-lincompressibleTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-lfvOptions \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lsampling
|
||||
|
||||
@ -37,7 +37,8 @@ Description
|
||||
#include "kinematicMomentumTransportModel.H"
|
||||
#include "pimpleControl.H"
|
||||
#include "SRFModel.H"
|
||||
#include "fvOptions.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -72,7 +73,7 @@ int main(int argc, char *argv[])
|
||||
// --- Pressure-velocity PIMPLE corrector loop
|
||||
while (pimple.loop())
|
||||
{
|
||||
fvOptions.correct();
|
||||
fvModels.correct();
|
||||
|
||||
#include "UrelEqn.H"
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user