/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2013-2017 OpenFOAM Foundation Copyright (C) 2019-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- 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 . Class Foam::multiphaseMixtureThermo Description SourceFiles multiphaseMixtureThermo.C \*---------------------------------------------------------------------------*/ #ifndef multiphaseMixtureThermo_H #define multiphaseMixtureThermo_H #include "phaseModel.H" #include "PtrDictionary.H" #include "volFields.H" #include "surfaceFields.H" #include "rhoThermo.H" #include "psiThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ Class multiphaseMixtureThermo Declaration \*---------------------------------------------------------------------------*/ class multiphaseMixtureThermo : public psiThermo { public: //- Symmetric pair of interface names class interfacePair : public Pair { public: // Always use symmetric hashing using hasher = Pair::symmHasher; // Always use symmetric hashing (alias) using hash = Pair::symmHasher; // Constructors interfacePair() = default; interfacePair(const word& alpha1Name, const word& alpha2Name) : Pair(alpha1Name, alpha2Name) {} interfacePair(const phaseModel& alpha1, const phaseModel& alpha2) : Pair(alpha1.name(), alpha2.name()) {} // Friend Operators friend bool operator== ( const interfacePair& a, const interfacePair& b ) { return (0 != Pair::compare(a, b)); } friend bool operator!= ( const interfacePair& a, const interfacePair& b ) { return (!(a == b)); } }; private: // Private Data //- Dictionary of phases PtrDictionary phases_; const fvMesh& mesh_; const volVectorField& U_; const surfaceScalarField& phi_; surfaceScalarField rhoPhi_; volScalarField alphas_; typedef HashTable sigmaTable; sigmaTable sigmas_; dimensionSet dimSigma_; //- Stabilisation for normalisation of the interface normal const dimensionedScalar deltaN_; // Private Member Functions void calcAlphas(); void solveAlphas(const scalar cAlpha); tmp nHatfv ( const volScalarField& alpha1, const volScalarField& alpha2 ) const; tmp nHatf ( const volScalarField& alpha1, const volScalarField& alpha2 ) const; void correctContactAngle ( const phaseModel& alpha1, const phaseModel& alpha2, surfaceVectorField::Boundary& nHatb ) const; tmp K ( const phaseModel& alpha1, const phaseModel& alpha2 ) const; public: //- Runtime type information TypeName("multiphaseMixtureThermo"); // Constructors //- Construct from components multiphaseMixtureThermo ( const volVectorField& U, const surfaceScalarField& phi ); //- Destructor virtual ~multiphaseMixtureThermo() = default; // Member Functions //- Return the phases const PtrDictionary& phases() const { return phases_; } //- Return non-const access to the phases PtrDictionary& phases() { return phases_; } //- Return the velocity const volVectorField& U() const { return U_; } //- Return the volumetric flux const surfaceScalarField& phi() const { return phi_; } const surfaceScalarField& rhoPhi() const { return rhoPhi_; } //- Update properties virtual void correct(); //- Update densities for given pressure change void correctRho(const volScalarField& dp); //- Return the name of the thermo physics virtual word thermoName() const; //- Return true if the equation of state is incompressible // i.e. rho != f(p) virtual bool incompressible() const; //- Return true if the equation of state is isochoric // i.e. rho = const virtual bool isochoric() const; // Access to thermodynamic state variables //- Enthalpy/Internal energy [J/kg] // Non-const access allowed for transport equations virtual volScalarField& he() { NotImplemented; return phases_[0].thermo().he(); } //- Enthalpy/Internal energy [J/kg] virtual const volScalarField& he() const { NotImplemented; return phases_[0].thermo().he(); } //- Enthalpy/Internal energy // for given pressure and temperature [J/kg] virtual tmp he ( const volScalarField& p, const volScalarField& T ) const; //- Enthalpy/Internal energy for cell-set [J/kg] virtual tmp he ( const scalarField& p, const scalarField& T, const labelList& cells ) const; //- Enthalpy/Internal energy for patch [J/kg] virtual tmp he ( const scalarField& p, const scalarField& T, const label patchi ) const; //- Chemical enthalpy [J/kg] virtual tmp hc() const; //- Temperature from enthalpy/internal energy for cell-set virtual tmp THE ( const scalarField& h, const scalarField& p, const scalarField& T0, // starting temperature const labelList& cells ) const; //- Temperature from enthalpy/internal energy for patch virtual tmp THE ( const scalarField& h, const scalarField& p, const scalarField& T0, // starting temperature const label patchi ) const; // Fields derived from thermodynamic state variables //- Density [kg/m^3] virtual tmp rho() const; //- Density for patch [kg/m^3] virtual tmp rho(const label patchi) const; //- Heat capacity at constant pressure [J/kg/K] virtual tmp Cp() const; //- Heat capacity at constant pressure for patch [J/kg/K] virtual tmp Cp ( const scalarField& p, const scalarField& T, const label patchi ) const; //- Heat capacity using pressure and temperature virtual tmp Cp ( const scalarField& p, const scalarField& T, const labelList& cells ) const { NotImplemented; return tmp::New(p); } //- Heat capacity at constant volume [J/kg/K] virtual tmp Cv() const; //- Heat capacity at constant volume for patch [J/kg/K] virtual tmp Cv ( const scalarField& p, const scalarField& T, const label patchi ) const; //- Density from pressure and temperature virtual tmp rhoEoS ( const scalarField& p, const scalarField& T, const labelList& cells ) const { NotImplemented; return tmp::New(p); } //- Gamma = Cp/Cv [] virtual tmp gamma() const; //- Gamma = Cp/Cv for patch [] virtual tmp gamma ( const scalarField& p, const scalarField& T, const label patchi ) const; //- Heat capacity at constant pressure/volume [J/kg/K] virtual tmp Cpv() const; //- Heat capacity at constant pressure/volume for patch [J/kg/K] virtual tmp Cpv ( const scalarField& p, const scalarField& T, const label patchi ) const; //- Heat capacity ratio [] virtual tmp CpByCpv() const; //- Heat capacity ratio for patch [] virtual tmp CpByCpv ( const scalarField& p, const scalarField& T, const label patchi ) const; //- Molecular weight [kg/kmol] virtual tmp W() const; // Fields derived from transport state variables //- Kinematic viscosity of mixture [m^2/s] virtual tmp nu() const; //- Kinematic viscosity of mixture for patch [m^2/s] virtual tmp nu(const label patchi) const; //- Thermal diffusivity for temperature of mixture [J/m/s/K] virtual tmp kappa() const; //- Thermal diffusivity of mixture for patch [J/m/s/K] virtual tmp kappa ( const label patchi ) const; //- Thermal diffusivity for energy of mixture [kg/m/s] virtual tmp alphahe() const; //- Thermal diffusivity for energy of mixture for patch [kg/m/s] virtual tmp alphahe(const label patchi) const; //- Effective thermal diffusivity of mixture [J/m/s/K] virtual tmp kappaEff ( const volScalarField& alphat ) const; //- Effective thermal diffusivity of mixture for patch [J/m/s/K] virtual tmp kappaEff ( const scalarField& alphat, const label patchi ) const; //- Effective thermal diffusivity of mixture [J/m/s/K] virtual tmp alphaEff ( const volScalarField& alphat ) const; //- Effective thermal diffusivity of mixture for patch [J/m/s/K] virtual tmp alphaEff ( const scalarField& alphat, const label patchi ) const; //- Return the phase-averaged reciprocal Cv tmp rCv() const; tmp surfaceTensionForce() const; //- Indicator of the proximity of the interface // Field values are 1 near and 0 away for the interface. tmp nearInterface() const; //- Solve for the mixture phase-fractions void solve(); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //