mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
reactingTwoPhaseEulerFoam: Moved into reactingEulerFoam
and two-phase functionality separated from multiphase functionality
This commit is contained in:
@ -0,0 +1,373 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015 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/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "MovingPhaseModel.H"
|
||||
#include "phaseSystem.H"
|
||||
#include "PhaseCompressibleTurbulenceModel.H"
|
||||
#include "fixedValueFvPatchFields.H"
|
||||
#include "slipFvPatchFields.H"
|
||||
#include "partialSlipFvPatchFields.H"
|
||||
|
||||
#include "fvmDdt.H"
|
||||
#include "fvmDiv.H"
|
||||
#include "fvmSup.H"
|
||||
#include "fvcDdt.H"
|
||||
#include "fvcDiv.H"
|
||||
#include "surfaceInterpolate.H"
|
||||
#include "fvMatrix.H"
|
||||
|
||||
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::tmp<Foam::surfaceScalarField>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::phi(const volVectorField& U) const
|
||||
{
|
||||
word phiName(IOobject::groupName("phi", this->name()));
|
||||
|
||||
IOobject phiHeader
|
||||
(
|
||||
phiName,
|
||||
U.mesh().time().timeName(),
|
||||
U.mesh(),
|
||||
IOobject::NO_READ
|
||||
);
|
||||
|
||||
if (phiHeader.headerOk())
|
||||
{
|
||||
Info<< "Reading face flux field " << phiName << endl;
|
||||
|
||||
return tmp<surfaceScalarField>
|
||||
(
|
||||
new surfaceScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
phiName,
|
||||
U.mesh().time().timeName(),
|
||||
U.mesh(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
U.mesh()
|
||||
)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "Calculating face flux field " << phiName << endl;
|
||||
|
||||
wordList phiTypes
|
||||
(
|
||||
U.boundaryField().size(),
|
||||
calculatedFvPatchScalarField::typeName
|
||||
);
|
||||
|
||||
forAll(U.boundaryField(), i)
|
||||
{
|
||||
if
|
||||
(
|
||||
isA<fixedValueFvPatchVectorField>(U.boundaryField()[i])
|
||||
|| isA<slipFvPatchVectorField>(U.boundaryField()[i])
|
||||
|| isA<partialSlipFvPatchVectorField>(U.boundaryField()[i])
|
||||
)
|
||||
{
|
||||
phiTypes[i] = fixedValueFvPatchScalarField::typeName;
|
||||
}
|
||||
}
|
||||
|
||||
return tmp<surfaceScalarField>
|
||||
(
|
||||
new surfaceScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
phiName,
|
||||
U.mesh().time().timeName(),
|
||||
U.mesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
fvc::interpolate(U) & U.mesh().Sf(),
|
||||
phiTypes
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::MovingPhaseModel
|
||||
(
|
||||
const phaseSystem& fluid,
|
||||
const word& phaseName
|
||||
)
|
||||
:
|
||||
BasePhaseModel(fluid, phaseName),
|
||||
U_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
IOobject::groupName("U", this->name()),
|
||||
fluid.mesh().time().timeName(),
|
||||
fluid.mesh(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
fluid.mesh()
|
||||
),
|
||||
phi_(phi(U_)),
|
||||
alphaPhi_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
IOobject::groupName("alphaPhi", this->name()),
|
||||
fluid.mesh().time().timeName(),
|
||||
fluid.mesh()
|
||||
),
|
||||
fluid.mesh(),
|
||||
dimensionedScalar("0", dimensionSet(0, 3, -1, 0, 0), 0)
|
||||
),
|
||||
alphaRhoPhi_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
IOobject::groupName("alphaRhoPhi", this->name()),
|
||||
fluid.mesh().time().timeName(),
|
||||
fluid.mesh()
|
||||
),
|
||||
fluid.mesh(),
|
||||
dimensionedScalar("0", dimensionSet(1, 0, -1, 0, 0), 0)
|
||||
),
|
||||
DUDt_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
IOobject::groupName("DUDt", this->name()),
|
||||
fluid.mesh().time().timeName(),
|
||||
fluid.mesh()
|
||||
),
|
||||
fluid.mesh(),
|
||||
dimensionedVector("0", dimAcceleration, vector::zero)
|
||||
),
|
||||
turbulence_
|
||||
(
|
||||
PhaseCompressibleTurbulenceModel<phaseModel>::New
|
||||
(
|
||||
*this,
|
||||
this->thermo().rho(),
|
||||
U_,
|
||||
alphaRhoPhi_,
|
||||
phi_,
|
||||
*this
|
||||
)
|
||||
),
|
||||
continuityError_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
IOobject::groupName("continuityError", this->name()),
|
||||
fluid.mesh().time().timeName(),
|
||||
fluid.mesh()
|
||||
),
|
||||
fluid.mesh(),
|
||||
dimensionedScalar("0", dimDensity/dimTime, 0)
|
||||
)
|
||||
{
|
||||
correctKinematics();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::~MovingPhaseModel()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasePhaseModel>
|
||||
void Foam::MovingPhaseModel<BasePhaseModel>::correct()
|
||||
{
|
||||
BasePhaseModel::correct();
|
||||
|
||||
this->fluid().MRF().correctBoundaryVelocity(U_);
|
||||
|
||||
volScalarField& rho = this->thermo().rho();
|
||||
|
||||
continuityError_ =
|
||||
fvc::ddt(*this, rho) + fvc::div(alphaRhoPhi_)
|
||||
- (this->fluid().fvOptions()(*this, rho)&rho);
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
void Foam::MovingPhaseModel<BasePhaseModel>::correctKinematics()
|
||||
{
|
||||
BasePhaseModel::correctKinematics();
|
||||
|
||||
DUDt_ = fvc::ddt(U_) + fvc::div(phi_, U_) - fvc::div(phi_)*U_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
void Foam::MovingPhaseModel<BasePhaseModel>::correctTurbulence()
|
||||
{
|
||||
BasePhaseModel::correctTurbulence();
|
||||
|
||||
turbulence_->correct();
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::tmp<Foam::fvVectorMatrix>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::UEqn()
|
||||
{
|
||||
return
|
||||
(
|
||||
fvm::ddt(*this, this->thermo().rho(), U_)
|
||||
+ fvm::div(alphaRhoPhi_, U_)
|
||||
- fvm::Sp(continuityError_, U_)
|
||||
+ turbulence_->divDevRhoReff(U_)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
const Foam::surfaceScalarField&
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::DbyA() const
|
||||
{
|
||||
if (DbyA_.valid())
|
||||
{
|
||||
return DbyA_;
|
||||
}
|
||||
else
|
||||
{
|
||||
return surfaceScalarField::null();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
void Foam::MovingPhaseModel<BasePhaseModel>::DbyA
|
||||
(
|
||||
const tmp<surfaceScalarField>& DbyA
|
||||
)
|
||||
{
|
||||
DbyA_ = DbyA;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::tmp<Foam::volVectorField>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::U() const
|
||||
{
|
||||
return U_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::volVectorField&
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::U()
|
||||
{
|
||||
return U_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::tmp<Foam::volVectorField>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::DUDt() const
|
||||
{
|
||||
return DUDt_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::continuityError() const
|
||||
{
|
||||
return continuityError_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::tmp<Foam::surfaceScalarField>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::phi() const
|
||||
{
|
||||
return phi_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::surfaceScalarField&
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::phi()
|
||||
{
|
||||
return phi_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::tmp<Foam::surfaceScalarField>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::alphaPhi() const
|
||||
{
|
||||
return alphaPhi_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::surfaceScalarField&
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::alphaPhi()
|
||||
{
|
||||
return alphaPhi_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::tmp<Foam::surfaceScalarField>
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::alphaRhoPhi() const
|
||||
{
|
||||
return alphaRhoPhi_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
Foam::surfaceScalarField&
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::alphaRhoPhi()
|
||||
{
|
||||
return alphaRhoPhi_;
|
||||
}
|
||||
|
||||
|
||||
template<class BasePhaseModel>
|
||||
const Foam::PhaseCompressibleTurbulenceModel<Foam::phaseModel>&
|
||||
Foam::MovingPhaseModel<BasePhaseModel>::turbulence() const
|
||||
{
|
||||
return turbulence_;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,196 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015 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::MovingPhaseModel
|
||||
|
||||
Description
|
||||
Class which represents a moving fluid phase. Holds the velocity, fluxes and
|
||||
turbulence model. Provides access to the turbulent quantities.
|
||||
|
||||
Possible future extensions include separating the turbulent fuctionality
|
||||
into another layer. It should also be possible to replace this layer with a
|
||||
stationary phase model, in order to model packed beds or simple porous
|
||||
media. This would probably require extra functionality, such as returning
|
||||
the inputs into the general pressure equation (A, HbyA, etc ...).
|
||||
|
||||
Note that this class does not return the turbulence model, it just provides
|
||||
indirect access to the turbulent data. This is so a layer without
|
||||
turbulence modelling (such as a stationary model) could be substituted.
|
||||
|
||||
SourceFiles
|
||||
MovingPhaseModel.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef MovingPhaseModel_H
|
||||
#define MovingPhaseModel_H
|
||||
|
||||
#include "phaseModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
template<class TransportModel>
|
||||
class PhaseCompressibleTurbulenceModel;
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class phaseModel Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class BasePhaseModel>
|
||||
class MovingPhaseModel
|
||||
:
|
||||
public BasePhaseModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Velocity field
|
||||
volVectorField U_;
|
||||
|
||||
//- Flux
|
||||
surfaceScalarField phi_;
|
||||
|
||||
//- Volumetric flux
|
||||
surfaceScalarField alphaPhi_;
|
||||
|
||||
//- Mass flux
|
||||
surfaceScalarField alphaRhoPhi_;
|
||||
|
||||
//- Lagrangian acceleration field (needed for virtual-mass)
|
||||
volVectorField DUDt_;
|
||||
|
||||
//- Turbulence model
|
||||
autoPtr<PhaseCompressibleTurbulenceModel<phaseModel> > turbulence_;
|
||||
|
||||
//- Continuity error
|
||||
volScalarField continuityError_;
|
||||
|
||||
//- Phase diffusivity divided by the momentum coefficient.
|
||||
// Used for implicit treatment of the phase pressure and dispersion
|
||||
tmp<surfaceScalarField> DbyA_;
|
||||
|
||||
|
||||
// Private static member functions
|
||||
|
||||
//- Calculate and return the flux field
|
||||
tmp<surfaceScalarField> phi(const volVectorField& U) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
MovingPhaseModel
|
||||
(
|
||||
const phaseSystem& fluid,
|
||||
const word& phaseName
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~MovingPhaseModel();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Correct the phase properties other than the thermo and turbulence
|
||||
virtual void correct();
|
||||
|
||||
//- Correct the kinematics
|
||||
virtual void correctKinematics();
|
||||
|
||||
//- Correct the turbulence
|
||||
virtual void correctTurbulence();
|
||||
|
||||
//- Return the momentum equation
|
||||
virtual tmp<fvVectorMatrix> UEqn();
|
||||
|
||||
|
||||
// Implicit phase pressure and dispersion support
|
||||
|
||||
//- Return the phase diffusivity divided by the momentum coefficient
|
||||
virtual const surfaceScalarField& DbyA() const;
|
||||
|
||||
//- Set the phase diffusivity divided by the momentum coefficient
|
||||
virtual void DbyA(const tmp<surfaceScalarField>& DbyA);
|
||||
|
||||
|
||||
// Momentum
|
||||
|
||||
//- Constant access the velocity
|
||||
virtual tmp<volVectorField> U() const;
|
||||
|
||||
//- Access the velocity
|
||||
virtual volVectorField& U();
|
||||
|
||||
//- Return the substantive acceleration
|
||||
virtual tmp<volVectorField> DUDt() const;
|
||||
|
||||
//- Constant access the continuity error
|
||||
virtual tmp<volScalarField> continuityError() const;
|
||||
|
||||
//- Constant access the volumetric flux
|
||||
virtual tmp<surfaceScalarField> phi() const;
|
||||
|
||||
//- Access the volumetric flux
|
||||
virtual surfaceScalarField& phi();
|
||||
|
||||
//- Constant access the volumetric flux of the phase
|
||||
virtual tmp<surfaceScalarField> alphaPhi() const;
|
||||
|
||||
//- Access the volumetric flux of the phase
|
||||
virtual surfaceScalarField& alphaPhi();
|
||||
|
||||
//- Constant access the mass flux of the phase
|
||||
virtual tmp<surfaceScalarField> alphaRhoPhi() const;
|
||||
|
||||
//- Access the mass flux of the phase
|
||||
virtual surfaceScalarField& alphaRhoPhi();
|
||||
|
||||
|
||||
// Turbulence
|
||||
|
||||
//- Return the turbulence model
|
||||
virtual const PhaseCompressibleTurbulenceModel<phaseModel>&
|
||||
turbulence() const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "MovingPhaseModel.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user