The MomentumTransportModels library now builds of a standard set of phase-incompressible and phase-compressible models. This replaces most solver-specific builds of these models. This has been made possible by the addition of a new "dynamicTransportModel" interface, from which all transport classes used by the momentum transport models now derive. For the purpose of disambiguation, the old "transportModel" has also been renamed "kinematicTransportModel". This change has been made in order to create a consistent definition of phase-incompressible and phase-compressible MomentumTransportModels, which can then be looked up by functionObjects, fvModels, and similar. Some solvers still build specific momentum transport models, but these are now in addition to the standard set. The solver does not build all the models it uses. There are also corresponding centralised builds of phase dependent ThermophysicalTransportModels.
185 lines
5.0 KiB
C++
185 lines
5.0 KiB
C++
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
\\ / O peration | Website: https://openfoam.org
|
|
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
|
\\/ M anipulation |
|
|
-------------------------------------------------------------------------------
|
|
License
|
|
This file is part of OpenFOAM.
|
|
|
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
Application
|
|
buoyantReactingParticleFoam
|
|
|
|
Description
|
|
Transient solver for buoyant, compressible, turbulent flow with a particle
|
|
cloud and surface film modelling.
|
|
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
#include "fvCFD.H"
|
|
#include "dynamicFvMesh.H"
|
|
#include "dynamicMomentumTransportModel.H"
|
|
#include "fluidReactionThermophysicalTransportModel.H"
|
|
#include "parcelCloudList.H"
|
|
#include "surfaceFilmModel.H"
|
|
#include "combustionModel.H"
|
|
#include "SLGThermo.H"
|
|
#include "fvModels.H"
|
|
#include "fvConstraints.H"
|
|
#include "pimpleControl.H"
|
|
#include "pressureControl.H"
|
|
#include "CorrectPhi.H"
|
|
#include "localEulerDdtScheme.H"
|
|
#include "fvcSmooth.H"
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
#include "postProcess.H"
|
|
|
|
#include "setRootCaseLists.H"
|
|
#include "createTime.H"
|
|
#include "createDynamicFvMesh.H"
|
|
#include "createDyMControls.H"
|
|
#include "initContinuityErrs.H"
|
|
#include "createFields.H"
|
|
#include "createFieldRefs.H"
|
|
#include "createRhoUfIfPresent.H"
|
|
|
|
turbulence->validate();
|
|
|
|
if (!LTS)
|
|
{
|
|
#include "compressibleCourantNo.H"
|
|
#include "setInitialDeltaT.H"
|
|
}
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
Info<< "\nStarting time loop\n" << endl;
|
|
|
|
while (pimple.run(runTime))
|
|
{
|
|
#include "readDyMControls.H"
|
|
|
|
// Store divrhoU from the previous mesh so that it can be mapped
|
|
// and used in correctPhi to ensure the corrected phi has the
|
|
// same divergence
|
|
autoPtr<volScalarField> divrhoU;
|
|
if (solvePrimaryRegion && correctPhi)
|
|
{
|
|
divrhoU = new volScalarField
|
|
(
|
|
"divrhoU",
|
|
fvc::div(fvc::absolute(phi, rho, U))
|
|
);
|
|
}
|
|
|
|
if (LTS)
|
|
{
|
|
#include "setRDeltaT.H"
|
|
}
|
|
else
|
|
{
|
|
#include "compressibleCourantNo.H"
|
|
#include "setMultiRegionDeltaT.H"
|
|
}
|
|
|
|
runTime++;
|
|
|
|
Info<< "Time = " << runTime.timeName() << nl << endl;
|
|
|
|
// Store momentum to set rhoUf for introduced faces.
|
|
autoPtr<volVectorField> rhoU;
|
|
if (solvePrimaryRegion && rhoUf.valid())
|
|
{
|
|
rhoU = new volVectorField("rhoU", rho*U);
|
|
}
|
|
|
|
// Store the particle positions
|
|
clouds.storeGlobalPositions();
|
|
|
|
// Do any mesh changes
|
|
mesh.update();
|
|
|
|
if (solvePrimaryRegion && mesh.changing())
|
|
{
|
|
gh = (g & mesh.C()) - ghRef;
|
|
ghf = (g & mesh.Cf()) - ghRef;
|
|
|
|
|
|
MRF.update();
|
|
|
|
if (correctPhi)
|
|
{
|
|
#include "../../compressible/rhoPimpleFoam/correctPhi.H"
|
|
}
|
|
|
|
if (checkMeshCourantNo)
|
|
{
|
|
#include "meshCourantNo.H"
|
|
}
|
|
}
|
|
|
|
clouds.evolve();
|
|
surfaceFilm.evolve();
|
|
|
|
if (solvePrimaryRegion && !pimple.simpleRho())
|
|
{
|
|
#include "rhoEqn.H"
|
|
}
|
|
|
|
// --- PIMPLE loop
|
|
while (solvePrimaryRegion && pimple.loop())
|
|
{
|
|
fvModels.correct();
|
|
|
|
#include "UEqn.H"
|
|
#include "YEqn.H"
|
|
#include "EEqn.H"
|
|
|
|
// --- Pressure corrector loop
|
|
while (pimple.correct())
|
|
{
|
|
#include "pEqn.H"
|
|
}
|
|
|
|
if (pimple.turbCorr())
|
|
{
|
|
turbulence->correct();
|
|
thermophysicalTransport->correct();
|
|
}
|
|
}
|
|
|
|
rho = thermo.rho();
|
|
|
|
runTime.write();
|
|
|
|
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
|
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
|
<< nl << endl;
|
|
}
|
|
|
|
Info<< "End" << endl;
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
// ************************************************************************* //
|