Thermo: move the he BC set functions into basicThermo
This commit is contained in:
parent
5cd985d7ce
commit
1a294d0235
@ -1,4 +1,3 @@
|
||||
derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C
|
||||
compressibleInterFoam.C
|
||||
|
||||
EXE = $(FOAM_APPBIN)/compressibleInterFoam
|
||||
|
@ -1,16 +1,19 @@
|
||||
EXE_INC = \
|
||||
-ItwoPhaseThermo \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/transportModels \
|
||||
-I$(LIB_SRC)/transportModels/incompressible/lnInclude \
|
||||
-I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \
|
||||
-IphaseEquationsOfState/lnInclude \
|
||||
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude
|
||||
|
||||
EXE_LIBS = \
|
||||
-ltwoPhaseThermo \
|
||||
-lfluidThermophysicalModels \
|
||||
-lspecie \
|
||||
-linterfaceProperties \
|
||||
-ltwoPhaseInterfaceProperties \
|
||||
-lincompressibleTransportModels \
|
||||
-lphaseEquationsOfState \
|
||||
-lincompressibleTurbulenceModel \
|
||||
-lincompressibleRASModels \
|
||||
-lincompressibleLESModels \
|
||||
|
@ -1,20 +1,14 @@
|
||||
{
|
||||
volScalarField kByCv
|
||||
(
|
||||
"kByCv",
|
||||
(alpha1*k1/Cv1 + alpha2*k2/Cv2)
|
||||
+ (alpha1*rho1 + alpha2*rho2)*turbulence->nut()
|
||||
);
|
||||
|
||||
solve
|
||||
(
|
||||
fvm::ddt(rho, T)
|
||||
+ fvm::div(rhoPhi, T)
|
||||
- fvm::laplacian(kByCv, T)
|
||||
+ p*fvc::div(phi)*(alpha1/Cv1 + alpha2/Cv2)
|
||||
- fvm::laplacian(thermo.alphaEff(rho*turbulence->nut()), T)
|
||||
+ (
|
||||
p*fvc::div(phi)
|
||||
+ fvc::ddt(rho, K) + fvc::div(rhoPhi, K)
|
||||
)*(alpha1/thermo.thermo1().Cv() + alpha2/thermo.thermo2().Cv())
|
||||
);
|
||||
|
||||
// Update compressibilities
|
||||
psi1 = eos1->psi(p, T);
|
||||
psi2 = eos2->psi(p, T);
|
||||
thermo.correct();
|
||||
}
|
||||
|
@ -22,4 +22,6 @@
|
||||
) * mesh.magSf()
|
||||
)
|
||||
);
|
||||
|
||||
K = 0.5*magSqr(U);
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
EXE_INC = \
|
||||
-I.. \
|
||||
-I../twoPhaseThermo \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/transportModels \
|
||||
-I$(LIB_SRC)/transportModels/incompressible/lnInclude \
|
||||
-I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \
|
||||
@ -11,6 +13,9 @@ EXE_INC = \
|
||||
-I$(LIB_SRC)/dynamicFvMesh/lnInclude
|
||||
|
||||
EXE_LIBS = \
|
||||
-ltwoPhaseThermo \
|
||||
-lfluidThermophysicalModels \
|
||||
-lspecie \
|
||||
-linterfaceProperties \
|
||||
-ltwoPhaseInterfaceProperties \
|
||||
-lincompressibleTransportModels \
|
||||
|
@ -43,7 +43,7 @@ Description
|
||||
#include "subCycle.H"
|
||||
#include "interfaceProperties.H"
|
||||
#include "twoPhaseMixture.H"
|
||||
#include "phaseEquationOfState.H"
|
||||
#include "twoPhaseThermo.H"
|
||||
#include "turbulenceModel.H"
|
||||
#include "pimpleControl.H"
|
||||
|
||||
|
@ -38,9 +38,10 @@ Description
|
||||
#include "fvCFD.H"
|
||||
#include "MULES.H"
|
||||
#include "subCycle.H"
|
||||
#include "rhoThermo.H"
|
||||
#include "interfaceProperties.H"
|
||||
#include "twoPhaseMixture.H"
|
||||
#include "phaseEquationOfState.H"
|
||||
#include "twoPhaseThermo.H"
|
||||
#include "turbulenceModel.H"
|
||||
#include "pimpleControl.H"
|
||||
|
||||
|
@ -28,34 +28,6 @@
|
||||
|
||||
#include "createPhi.H"
|
||||
|
||||
Info<< "Reading field T\n" << endl;
|
||||
volScalarField T
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"T",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh
|
||||
);
|
||||
|
||||
volScalarField p
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"p",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::READ_IF_PRESENT,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
p_rgh
|
||||
);
|
||||
|
||||
|
||||
Info<< "Reading transportProperties\n" << endl;
|
||||
twoPhaseMixture twoPhaseProperties(U, phi);
|
||||
|
||||
@ -69,91 +41,31 @@
|
||||
scalar(1) - alpha1
|
||||
);
|
||||
|
||||
dimensionedScalar k1
|
||||
(
|
||||
"k",
|
||||
dimensionSet(1, 1, -3, -1, 0),
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase1Name()
|
||||
).lookup("k")
|
||||
);
|
||||
Info<< "Reading thermophysical properties\n" << endl;
|
||||
|
||||
dimensionedScalar k2
|
||||
(
|
||||
"k",
|
||||
dimensionSet(1, 1, -3, -1, 0),
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase2Name()
|
||||
).lookup("k")
|
||||
);
|
||||
twoPhaseThermo thermo(mesh, alpha1, alpha2);
|
||||
|
||||
dimensionedScalar Cv1
|
||||
(
|
||||
"Cv",
|
||||
dimensionSet(0, 2, -2, -1, 0),
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase1Name()
|
||||
).lookup("Cv")
|
||||
);
|
||||
volScalarField& rho = thermo.rho();
|
||||
volScalarField& p = thermo.p();
|
||||
volScalarField& T = thermo.T();
|
||||
const volScalarField& rho1 = thermo.thermo1().rho();
|
||||
const volScalarField& psi1 = thermo.thermo1().psi();
|
||||
const volScalarField& rho2 = thermo.thermo2().rho();
|
||||
const volScalarField& psi2 = thermo.thermo2().psi();
|
||||
|
||||
dimensionedScalar Cv2
|
||||
(
|
||||
"Cv",
|
||||
dimensionSet(0, 2, -2, -1, 0),
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase2Name()
|
||||
).lookup("Cv")
|
||||
);
|
||||
// volScalarField rho
|
||||
// (
|
||||
// IOobject
|
||||
// (
|
||||
// "rho",
|
||||
// runTime.timeName(),
|
||||
// mesh,
|
||||
// IOobject::READ_IF_PRESENT,
|
||||
// IOobject::AUTO_WRITE
|
||||
// ),
|
||||
// alpha1*rho1 + alpha2*rho2
|
||||
// );
|
||||
|
||||
autoPtr<phaseEquationOfState> eos1
|
||||
(
|
||||
phaseEquationOfState::New
|
||||
(
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase1Name()
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
autoPtr<phaseEquationOfState> eos2
|
||||
(
|
||||
phaseEquationOfState::New
|
||||
(
|
||||
twoPhaseProperties.subDict
|
||||
(
|
||||
twoPhaseProperties.phase2Name()
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField psi1
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"psi1",
|
||||
runTime.timeName(),
|
||||
mesh
|
||||
),
|
||||
eos1->psi(p, T)
|
||||
);
|
||||
psi1.oldTime();
|
||||
|
||||
volScalarField psi2
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"psi2",
|
||||
runTime.timeName(),
|
||||
mesh
|
||||
),
|
||||
eos2->psi(p, T)
|
||||
);
|
||||
psi2.oldTime();
|
||||
|
||||
dimensionedScalar pMin(twoPhaseProperties.lookup("pMin"));
|
||||
|
||||
@ -161,23 +73,6 @@
|
||||
volScalarField gh("gh", g & mesh.C());
|
||||
surfaceScalarField ghf("ghf", g & mesh.Cf());
|
||||
|
||||
volScalarField rho1("rho1", eos1->rho(p, T));
|
||||
volScalarField rho2("rho2", eos2->rho(p, T));
|
||||
|
||||
volScalarField rho
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"rho",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::READ_IF_PRESENT,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
alpha1*rho1 + alpha2*rho2
|
||||
);
|
||||
|
||||
|
||||
// Mass flux
|
||||
// Initialisation does not matter because rhoPhi is reset after the
|
||||
// alpha1 solution before it is used in the U equation.
|
||||
@ -207,3 +102,19 @@
|
||||
(
|
||||
incompressible::turbulenceModel::New(U, phi, twoPhaseProperties)
|
||||
);
|
||||
|
||||
Info<< "Creating field dpdt\n" << endl;
|
||||
volScalarField dpdt
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"dpdt",
|
||||
runTime.timeName(),
|
||||
mesh
|
||||
),
|
||||
mesh,
|
||||
dimensionedScalar("dpdt", p.dimensions()/dimTime, 0)
|
||||
);
|
||||
|
||||
Info<< "Creating field kinetic energy K\n" << endl;
|
||||
volScalarField K("K", 0.5*magSqr(U));
|
||||
|
@ -1,7 +1,4 @@
|
||||
{
|
||||
rho1 = eos1->rho(p, T);
|
||||
rho2 = eos2->rho(p, T);
|
||||
|
||||
volScalarField rAU("rAU", 1.0/UEqn.A());
|
||||
surfaceScalarField rAUf("Dp", fvc::interpolate(rAU));
|
||||
|
||||
@ -91,9 +88,15 @@
|
||||
|
||||
p = max(p_rgh + (alpha1*rho1 + alpha2*rho2)*gh, pMin);
|
||||
|
||||
rho1 = eos1->rho(p, T);
|
||||
rho2 = eos2->rho(p, T);
|
||||
// thermo.correct();
|
||||
|
||||
Info<< "max(U) " << max(mag(U)).value() << endl;
|
||||
Info<< "min(p_rgh) " << min(p_rgh).value() << endl;
|
||||
|
||||
K = 0.5*magSqr(U);
|
||||
|
||||
if (thermo.dpdt())
|
||||
{
|
||||
dpdt = fvc::ddt(p);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,3 @@
|
||||
twoPhaseThermo.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libtwoPhaseThermo
|
@ -0,0 +1,8 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude
|
||||
|
||||
LIB_LIBS = \
|
||||
-lfluidThermophysicalModels \
|
||||
-lspecie \
|
||||
-lfiniteVolume
|
@ -0,0 +1,365 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2013 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 "twoPhaseThermo.H"
|
||||
#include "gradientEnergyFvPatchScalarField.H"
|
||||
#include "mixedEnergyFvPatchScalarField.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(twoPhaseThermo, 0);
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::twoPhaseThermo::twoPhaseThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const volScalarField& alpha1,
|
||||
const volScalarField& alpha2,
|
||||
const word& phaseName
|
||||
)
|
||||
:
|
||||
rhoThermo(mesh, phaseName),
|
||||
phaseName1_("1"),
|
||||
phaseName2_("2"),
|
||||
alpha1_(alpha1),
|
||||
alpha2_(alpha2),
|
||||
thermo1_(rhoThermo::New(mesh, phaseName1_)),
|
||||
thermo2_(rhoThermo::New(mesh, phaseName2_)),
|
||||
he_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
phasePropertyName
|
||||
(
|
||||
"he"
|
||||
),
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimMass,
|
||||
heBoundaryTypes(),
|
||||
heBoundaryBaseTypes()
|
||||
)
|
||||
{
|
||||
thermo1_->validate("phaseModel 1", "e");
|
||||
thermo2_->validate("phaseModel 2", "e");
|
||||
|
||||
rho_ = alpha1_*thermo1_->rho() + alpha2_*thermo2_->rho();
|
||||
|
||||
he_ =
|
||||
(
|
||||
alpha1_*thermo1_->rho()*thermo1_->he()
|
||||
+ alpha2_*thermo2_->rho()*thermo2_->he()
|
||||
)/rho_;
|
||||
|
||||
volScalarField::GeometricBoundaryField& hbf = he_.boundaryField();
|
||||
|
||||
forAll(hbf, patchi)
|
||||
{
|
||||
if (isA<gradientEnergyFvPatchScalarField>(hbf[patchi]))
|
||||
{
|
||||
refCast<gradientEnergyFvPatchScalarField>(hbf[patchi]).gradient()
|
||||
= hbf[patchi].fvPatchField::snGrad();
|
||||
}
|
||||
else if (isA<mixedEnergyFvPatchScalarField>(hbf[patchi]))
|
||||
{
|
||||
refCast<mixedEnergyFvPatchScalarField>(hbf[patchi]).refGrad()
|
||||
= hbf[patchi].fvPatchField::snGrad();
|
||||
}
|
||||
}
|
||||
|
||||
correct();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::twoPhaseThermo::~twoPhaseThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::twoPhaseThermo::correct()
|
||||
{
|
||||
thermo1_->he() = thermo1_->he(p_, T_);
|
||||
thermo1_->correct();
|
||||
|
||||
thermo2_->he() = thermo2_->he(p_, T_);
|
||||
thermo2_->correct();
|
||||
|
||||
psi_ = alpha1_*thermo1_->psi() + alpha2_*thermo2_->psi();
|
||||
mu_ = alpha1_*thermo1_->mu() + alpha2_*thermo2_->mu();
|
||||
alpha_ = alpha1_*thermo1_->alpha() + alpha2_*thermo2_->alpha();
|
||||
}
|
||||
|
||||
|
||||
bool Foam::twoPhaseThermo::incompressible() const
|
||||
{
|
||||
return thermo1_->incompressible() && thermo2_->incompressible();
|
||||
}
|
||||
|
||||
|
||||
bool Foam::twoPhaseThermo::isochoric() const
|
||||
{
|
||||
return thermo1_->isochoric() && thermo2_->isochoric();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::he
|
||||
(
|
||||
const volScalarField& p,
|
||||
const volScalarField& T
|
||||
) const
|
||||
{
|
||||
return alpha1_*thermo1_->he(p, T) + alpha2_*thermo2_->he(p, T);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::he
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const labelList& cells
|
||||
) const
|
||||
{
|
||||
return
|
||||
scalarField(alpha1_, cells)*thermo1_->he(p, T, cells)
|
||||
+ scalarField(alpha2_, cells)*thermo2_->he(p, T, cells);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::he
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->he(p, T, patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->he(p, T, patchi);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::hc() const
|
||||
{
|
||||
return alpha1_*thermo1_->hc() + alpha2_*thermo2_->hc();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::THE
|
||||
(
|
||||
const scalarField& h,
|
||||
const scalarField& p,
|
||||
const scalarField& T0,
|
||||
const labelList& cells
|
||||
) const
|
||||
{
|
||||
notImplemented("Foam::twoPhaseThermo::THE");
|
||||
return T0;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::THE
|
||||
(
|
||||
const scalarField& h,
|
||||
const scalarField& p,
|
||||
const scalarField& T0,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
notImplemented("Foam::twoPhaseThermo::THE");
|
||||
return T0;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::Cp() const
|
||||
{
|
||||
return alpha1_*thermo1_->Cp() + alpha2_*thermo2_->Cp();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::Cp
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->Cp(p, T, patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->Cp(p, T, patchi);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::Cv() const
|
||||
{
|
||||
return alpha1_*thermo1_->Cv() + alpha2_*thermo2_->Cv();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::Cv
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->Cv(p, T, patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->Cv(p, T, patchi);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::gamma() const
|
||||
{
|
||||
return alpha1_*thermo1_->gamma() + alpha2_*thermo2_->gamma();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::gamma
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->gamma(p, T, patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->gamma(p, T, patchi);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::Cpv() const
|
||||
{
|
||||
return alpha1_*thermo1_->Cpv() + alpha2_*thermo2_->Cpv();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::Cpv
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->Cpv(p, T, patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->Cpv(p, T, patchi);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::CpByCpv() const
|
||||
{
|
||||
return alpha1_*thermo1_->CpByCpv() + alpha2_*thermo2_->CpByCpv();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::CpByCpv
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->CpByCpv(p, T, patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->CpByCpv(p, T, patchi);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::kappa() const
|
||||
{
|
||||
return alpha1_*thermo1_->kappa() + alpha2_*thermo2_->kappa();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::kappa
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->kappa(patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->kappa(patchi);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::kappaEff
|
||||
(
|
||||
const volScalarField& alphat
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_*thermo1_->kappaEff(alphat)
|
||||
+ alpha2_*thermo2_->kappaEff(alphat);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::kappaEff
|
||||
(
|
||||
const scalarField& alphat,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->kappaEff(alphat, patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->kappaEff(alphat, patchi);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::twoPhaseThermo::alphaEff
|
||||
(
|
||||
const volScalarField& alphat
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_*thermo1_->alphaEff(alphat)
|
||||
+ alpha2_*thermo2_->alphaEff(alphat);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::twoPhaseThermo::alphaEff
|
||||
(
|
||||
const scalarField& alphat,
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
alpha1_.boundaryField()[patchi]*thermo1_->alphaEff(alphat, patchi)
|
||||
+ alpha2_.boundaryField()[patchi]*thermo2_->alphaEff(alphat, patchi);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
@ -0,0 +1,290 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2013 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::twoPhaseThermo
|
||||
|
||||
Description
|
||||
|
||||
SourceFiles
|
||||
twoPhaseThermoI.H
|
||||
twoPhaseThermo.C
|
||||
twoPhaseThermoIO.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef twoPhaseThermo_H
|
||||
#define twoPhaseThermo_H
|
||||
|
||||
#include "rhoThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class twoPhaseThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class twoPhaseThermo
|
||||
:
|
||||
public rhoThermo
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Name of phase 1
|
||||
word phaseName1_;
|
||||
|
||||
//- Name of phase 2
|
||||
word phaseName2_;
|
||||
|
||||
//- Phase-fraction of phase 1
|
||||
const volScalarField& alpha1_;
|
||||
|
||||
//- Phase-fraction of phase2
|
||||
const volScalarField& alpha2_;
|
||||
|
||||
//- Thermo-package of phase 1
|
||||
autoPtr<rhoThermo> thermo1_;
|
||||
|
||||
//- Thermo-package of phase 2
|
||||
autoPtr<rhoThermo> thermo2_;
|
||||
|
||||
//- Energy field
|
||||
volScalarField he_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("twoPhaseThermo");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh and phase fractions
|
||||
twoPhaseThermo
|
||||
(
|
||||
const fvMesh&,
|
||||
const volScalarField& alpha1,
|
||||
const volScalarField& alpha2,
|
||||
const word& phaseName=word::null
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~twoPhaseThermo();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
const rhoThermo& thermo1() const
|
||||
{
|
||||
return thermo1_();
|
||||
}
|
||||
|
||||
const rhoThermo& thermo2() const
|
||||
{
|
||||
return thermo2_();
|
||||
}
|
||||
|
||||
//- Update properties
|
||||
virtual void correct();
|
||||
|
||||
//- 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()
|
||||
{
|
||||
return he_;
|
||||
}
|
||||
|
||||
//- Enthalpy/Internal energy [J/kg]
|
||||
virtual const volScalarField& he() const
|
||||
{
|
||||
return he_;
|
||||
}
|
||||
|
||||
//- Enthalpy/Internal energy
|
||||
// for given pressure and temperature [J/kg]
|
||||
virtual tmp<volScalarField> he
|
||||
(
|
||||
const volScalarField& p,
|
||||
const volScalarField& T
|
||||
) const;
|
||||
|
||||
//- Enthalpy/Internal energy for cell-set [J/kg]
|
||||
virtual tmp<scalarField> he
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const labelList& cells
|
||||
) const;
|
||||
|
||||
//- Enthalpy/Internal energy for patch [J/kg]
|
||||
virtual tmp<scalarField> he
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const;
|
||||
|
||||
//- Temperature from enthalpy/internal energy for cell-set
|
||||
virtual tmp<scalarField> 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<scalarField> THE
|
||||
(
|
||||
const scalarField& h,
|
||||
const scalarField& p,
|
||||
const scalarField& T0, // starting temperature
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
|
||||
// Fields derived from thermodynamic state variables
|
||||
|
||||
//- Heat capacity at constant pressure [J/kg/K]
|
||||
virtual tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Heat capacity at constant pressure for patch [J/kg/K]
|
||||
virtual tmp<scalarField> Cp
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- Heat capacity at constant volume [J/kg/K]
|
||||
virtual tmp<volScalarField> Cv() const;
|
||||
|
||||
//- Heat capacity at constant volume for patch [J/kg/K]
|
||||
virtual tmp<scalarField> Cv
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- gamma = Cp/Cv []
|
||||
virtual tmp<volScalarField> gamma() const;
|
||||
|
||||
//- gamma = Cp/Cv for patch []
|
||||
virtual tmp<scalarField> gamma
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- Heat capacity at constant pressure/volume [J/kg/K]
|
||||
virtual tmp<volScalarField> Cpv() const;
|
||||
|
||||
//- Heat capacity at constant pressure/volume for patch [J/kg/K]
|
||||
virtual tmp<scalarField> Cpv
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- Heat capacity ratio []
|
||||
virtual tmp<volScalarField> CpByCpv() const;
|
||||
|
||||
//- Heat capacity ratio for patch []
|
||||
virtual tmp<scalarField> CpByCpv
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
|
||||
// Fields derived from transport state variables
|
||||
|
||||
//- Thermal diffusivity for temperature of mixture [J/m/s/K]
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Thermal diffusivity of mixture for patch [J/m/s/K]
|
||||
virtual tmp<scalarField> kappa
|
||||
(
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- Effective thermal diffusivity of mixture [J/m/s/K]
|
||||
virtual tmp<volScalarField> kappaEff
|
||||
(
|
||||
const volScalarField& alphat
|
||||
) const;
|
||||
|
||||
//- Effective thermal diffusivity of mixture for patch [J/m/s/K]
|
||||
virtual tmp<scalarField> kappaEff
|
||||
(
|
||||
const scalarField& alphat,
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- Effective thermal diffusivity of mixture [J/m/s/K]
|
||||
virtual tmp<volScalarField> alphaEff
|
||||
(
|
||||
const volScalarField& alphat
|
||||
) const;
|
||||
|
||||
//- Effective thermal diffusivity of mixture for patch [J/m/s/K]
|
||||
virtual tmp<scalarField> alphaEff
|
||||
(
|
||||
const scalarField& alphat,
|
||||
const label patchi
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
@ -0,0 +1,19 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: dev |
|
||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object thermophysicalProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
// ************************************************************************* //
|
@ -0,0 +1,53 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: dev |
|
||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object thermophysicalProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
thermoType
|
||||
{
|
||||
type heRhoThermo;
|
||||
mixture pureMixture;
|
||||
transport const;
|
||||
thermo hConst;
|
||||
equationOfState perfectFluid;
|
||||
specie specie;
|
||||
energy sensibleInternalEnergy;
|
||||
}
|
||||
|
||||
mixture
|
||||
{
|
||||
specie
|
||||
{
|
||||
nMoles 1;
|
||||
molWeight 28.9; //2.77;
|
||||
}
|
||||
equationOfState
|
||||
{
|
||||
rho0 1027;
|
||||
}
|
||||
thermodynamics
|
||||
{
|
||||
Cp 4195;
|
||||
Hf 0;
|
||||
}
|
||||
transport
|
||||
{
|
||||
mu 3.645e-4;
|
||||
Pr 2.289;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
@ -0,0 +1,49 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: dev |
|
||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object thermophysicalProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
thermoType
|
||||
{
|
||||
type heRhoThermo;
|
||||
mixture pureMixture;
|
||||
transport const;
|
||||
thermo hConst;
|
||||
equationOfState perfectGas;
|
||||
specie specie;
|
||||
energy sensibleInternalEnergy;
|
||||
}
|
||||
|
||||
mixture
|
||||
{
|
||||
specie
|
||||
{
|
||||
nMoles 1;
|
||||
molWeight 28.9;
|
||||
}
|
||||
thermodynamics
|
||||
{
|
||||
Cp 1007;
|
||||
Hf 0;
|
||||
}
|
||||
transport
|
||||
{
|
||||
mu 1.84e-05;
|
||||
Pr 0.7;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
@ -22,16 +22,6 @@ water
|
||||
transportModel Newtonian;
|
||||
nu 1e-06;
|
||||
rho 1000;
|
||||
k 0; // 0.613;
|
||||
Cv 4179;
|
||||
|
||||
equationOfState
|
||||
{
|
||||
type perfectFluid;
|
||||
|
||||
rho0 1000;
|
||||
R 3000;
|
||||
}
|
||||
}
|
||||
|
||||
air
|
||||
@ -39,16 +29,6 @@ air
|
||||
transportModel Newtonian;
|
||||
nu 1.589e-05;
|
||||
rho 1;
|
||||
k 0; // 2.63e-2;
|
||||
Cv 721;
|
||||
|
||||
equationOfState
|
||||
{
|
||||
type perfectFluid;
|
||||
|
||||
rho0 0;
|
||||
R 287;
|
||||
}
|
||||
}
|
||||
|
||||
pMin pMin [ 1 -1 -2 0 0 0 0 ] 10000;
|
||||
|
@ -33,6 +33,7 @@ divSchemes
|
||||
div(phid1,p_rgh) Gauss upwind;
|
||||
div(phid2,p_rgh) Gauss upwind;
|
||||
div(rho*phi,T) Gauss upwind;
|
||||
div(rho*phi,K) Gauss upwind;
|
||||
div(phi,k) Gauss vanLeer;
|
||||
div((muEff*dev(T(grad(U))))) Gauss linear;
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ solvers
|
||||
maxIter 100;
|
||||
}
|
||||
|
||||
"(rho|rhoFinal)"
|
||||
".*(rho|rhoFinal)"
|
||||
{
|
||||
solver diagonal;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user