Files
OpenFOAM-12/applications/solvers/modules/VoFSolver/VoFSolver.H
Henry Weller 06893a0bc6 VoFSolver: New base-class for twoPhaseVoFSolver and multiphaseVoFSolver
Much of the VoF functionality, particularly relating to momentum solution, is
independent of the number of phases and it is useful to hold this generic VoF
data and functionality in an abstract base-class and derive twoPhaseVoFSolver
and multiphaseVoFSolver from it, adding two-phase and multiphase functionality
respectively.
2023-01-06 16:51:10 +00:00

260 lines
7.3 KiB
C++

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022-2023 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/>.
Class
Foam::solvers::VoFSolver
Description
Solver module base-class for for 2 immiscible fluids using a VOF (volume
of fluid) phase-fraction based interface capturing approach, with optional
mesh motion and mesh topology changes including adaptive re-meshing.
The momentum and other fluid properties are of the "mixture" and a single
momentum equation is solved.
Either mixture or two-phase transport modelling may be selected. In the
mixture approach a single laminar, RAS or LES model is selected to model the
momentum stress. In the Euler-Euler two-phase approach separate laminar,
RAS or LES selected models are selected for each of the phases.
Uses the flexible PIMPLE (PISO-SIMPLE) solution for time-resolved and
pseudo-transient and steady simulations.
Optional fvModels and fvConstraints are provided to enhance the simulation
in many ways including adding various sources, Lagrangian
particles, surface film etc. and constraining or limiting the solution.
SourceFiles
VoFSolver.C
See also
Foam::solvers::fluidSolver
\*---------------------------------------------------------------------------*/
#ifndef VoFSolver_H
#define VoFSolver_H
#include "fluidSolver.H"
#include "VoFMixture.H"
#include "interfaceProperties.H"
#include "buoyancy.H"
#include "pressureReference.H"
#include "IOMRFZoneList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace solvers
{
/*---------------------------------------------------------------------------*\
Class VoFSolver Declaration
\*---------------------------------------------------------------------------*/
class VoFSolver
:
public fluidSolver
{
protected:
// Phase properties
//- The compressible two-phase mixture
autoPtr<VoFMixture> mixture_;
VoFMixture& mixture;
//- Name of the alpha convection scheme
const word divAlphaName;
//- Phase-fraction flux Courant number
scalar alphaCoNum;
// Kinematic properties
//- Velocity field
volVectorField U;
//- Volumetric-flux field
surfaceScalarField phi;
// Thermophysical properties
//- Buoyancy force
solvers::buoyancy buoyancy;
//- Reference to the buoyant pressure for buoyant cases
// otherwise to the pressure
volScalarField& p_rgh;
//- Reference to the mixture continuity density field
const volScalarField& rho;
// Kinematic properties
//- Mass flux field
surfaceScalarField rhoPhi;
// Optional models
//- MRF zone list
IOMRFZoneList MRF;
// Cached temporary fields
tmp<volScalarField> rAU;
//- Pointer to the surface momentum field
// used to recreate the flux after mesh-change
autoPtr<surfaceVectorField> Uf;
//- Pointer to the momentum divergence field
// used in correctPhi to ensure the corrected phi has the
// same divergence
autoPtr<volScalarField> divU;
//- Optional LTS reciprocal time-step field
tmp<volScalarField> trDeltaT;
//- Cached momentum matrix
// shared between the momentum predictor and pressure corrector
tmp<fvVectorMatrix> tUEqn;
private:
// Private Member Functions
//- Set rDeltaT for LTS
void setRDeltaT();
protected:
// Protected Member Functions
//- Correct the cached Courant numbers
virtual void correctCoNum() = 0;
//- Adjust the rDeltaT in the vicinity of the interface
virtual void setInterfaceRDeltaT(volScalarField& rDeltaT) = 0;
//- Calculate and print the continuity errors
void continuityErrors();
//- Return the pressure reference
virtual const Foam::pressureReference& pressureReference() const = 0;
//- Is the flow divergent?
// i.e. compressible or include phase-fraction sources
virtual bool divergent() = 0;
//- Return the momentum equation stress term
virtual tmp<fvVectorMatrix> divDevTau(volVectorField& U) = 0;
//- Correct the interface properties following mesh-change
// and phase-fraction update
virtual void correctInterface() = 0;
//- Return the interface surface tension force for the momentum equation
virtual tmp<surfaceScalarField> surfaceTensionForce() const = 0;
public:
//- Runtime type information
TypeName("VoFSolver");
// Constructors
//- Construct from region mesh
VoFSolver(fvMesh& mesh, autoPtr<VoFMixture>);
//- Disallow default bitwise copy construction
VoFSolver(const VoFSolver&) = delete;
//- Destructor
virtual ~VoFSolver();
// Member Functions
//- Return the current maximum time-step for stable solution
virtual scalar maxDeltaT() const;
//- Called at the start of the time-step, before the PIMPLE loop
virtual void preSolve();
//- Called at the start of the PIMPLE loop to move the mesh
virtual bool moveMesh();
//- Called at the start of the PIMPLE loop
virtual void prePredictor() = 0;
//- Construct and optionally solve the momentum equation
virtual void momentumPredictor();
//- Construct and solve the energy equation,
// convert to temperature
// and update thermophysical and transport properties
virtual void thermophysicalPredictor() = 0;
//- Construct and solve the pressure equation in the PISO loop
virtual void pressureCorrector() = 0;
//- Correct the momentum transport modelling
virtual void postCorrector();
//- Called after the PIMPLE loop at the end of the time-step
virtual void postSolve();
// Member Operators
//- Disallow default bitwise assignment
void operator=(const VoFSolver&) = delete;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace solvers
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //