ENH: Surface film - added thermo film sub-model framework
This commit is contained in:
@ -24,6 +24,10 @@ $(KINEMATICMODELS)/injectionModel/drippingInjection/drippingInjection.C
|
||||
$(KINEMATICMODELS)/injectionModel/removeInjection/removeInjection.C
|
||||
$(KINEMATICMODELS)/injectionModel/curvatureSeparation/curvatureSeparation.C
|
||||
|
||||
$(KINEMATICMODELS)/filmThermoModel/constantFilmThermo/constantFilmThermo.C
|
||||
$(KINEMATICMODELS)/filmThermoModel/filmThermoModel/filmThermoModel.C
|
||||
$(KINEMATICMODELS)/filmThermoModel/liquidFilmThermo/liquidFilmThermo.C
|
||||
|
||||
$(KINEMATICMODELS)/filmTurbulenceModel/filmTurbulenceModel/filmTurbulenceModel.C
|
||||
$(KINEMATICMODELS)/filmTurbulenceModel/filmTurbulenceModel/filmTurbulenceModelNew.C
|
||||
$(KINEMATICMODELS)/filmTurbulenceModel/laminar/laminar.C
|
||||
|
||||
@ -0,0 +1,398 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 "constantFilmThermo.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace regionModels
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
defineTypeNameAndDebug(constantFilmThermo, 0);
|
||||
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
filmThermoModel,
|
||||
constantFilmThermo,
|
||||
dictionary
|
||||
);
|
||||
|
||||
|
||||
void constantFilmThermo::init(thermoData& td)
|
||||
{
|
||||
if (coeffs_.readIfPresent(td.name_, td.value_))
|
||||
{
|
||||
td.set_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
constantFilmThermo::constantFilmThermo
|
||||
(
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
filmThermoModel(typeName, owner, dict),
|
||||
name_(coeffs_.lookup("specieName")),
|
||||
rho0_("rho0"),
|
||||
mu0_("mu0"),
|
||||
sigma0_("sigma0"),
|
||||
Cp0_("Cp0"),
|
||||
kappa0_("kappa0"),
|
||||
hl0_("hl0"),
|
||||
pv0_("pv0"),
|
||||
W0_("W0"),
|
||||
Tb0_("Tb0")
|
||||
{
|
||||
init(rho0_);
|
||||
init(mu0_);
|
||||
init(sigma0_);
|
||||
init(Cp0_);
|
||||
init(kappa0_);
|
||||
init(hl0_);
|
||||
init(pv0_);
|
||||
init(W0_);
|
||||
init(Tb0_);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
constantFilmThermo::~constantFilmThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
const word& constantFilmThermo::name() const
|
||||
{
|
||||
return name_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::rho
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
if (!rho0_.set_)
|
||||
{
|
||||
coeffs_.lookup(rho0_.name_) >> rho0_.value_;
|
||||
rho0_.set_ = true;
|
||||
}
|
||||
|
||||
return rho0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::mu
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
if (!mu0_.set_)
|
||||
{
|
||||
coeffs_.lookup(mu0_.name_) >> mu0_.value_;
|
||||
mu0_.set_ = true;
|
||||
}
|
||||
|
||||
return mu0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::sigma
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
if (!sigma0_.set_)
|
||||
{
|
||||
coeffs_.lookup(sigma0_.name_) >> sigma0_.value_;
|
||||
sigma0_.set_ = true;
|
||||
}
|
||||
|
||||
return sigma0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::Cp
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
if (!Cp0_.set_)
|
||||
{
|
||||
coeffs_.lookup(Cp0_.name_) >> Cp0_.value_;
|
||||
Cp0_.set_ = true;
|
||||
}
|
||||
|
||||
return Cp0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::kappa
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
if (!kappa0_.set_)
|
||||
{
|
||||
coeffs_.lookup(kappa0_.name_) >> kappa0_.value_;
|
||||
kappa0_.set_ = true;
|
||||
}
|
||||
|
||||
return kappa0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::D
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
if (!D0_.set_)
|
||||
{
|
||||
coeffs_.lookup(D0_.name_) >> D0_.value_;
|
||||
D0_.set_ = true;
|
||||
}
|
||||
|
||||
return D0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::hl
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
if (!hl0_.set_)
|
||||
{
|
||||
coeffs_.lookup(hl0_.name_) >> hl0_.value_;
|
||||
hl0_.set_ = true;
|
||||
}
|
||||
|
||||
return hl0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::pv
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
if (!pv0_.set_)
|
||||
{
|
||||
coeffs_.lookup(pv0_.name_) >> pv0_.value_;
|
||||
pv0_.set_ = true;
|
||||
}
|
||||
|
||||
return pv0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::W() const
|
||||
{
|
||||
if (!W0_.set_)
|
||||
{
|
||||
coeffs_.lookup(W0_.name_) >> W0_.value_;
|
||||
W0_.set_ = true;
|
||||
}
|
||||
|
||||
return W0_.value_;
|
||||
}
|
||||
|
||||
|
||||
scalar constantFilmThermo::Tb(const scalar p) const
|
||||
{
|
||||
if (!Tb0_.set_)
|
||||
{
|
||||
coeffs_.lookup(Tb0_.name_) >> Tb0_.value_;
|
||||
Tb0_.set_ = true;
|
||||
}
|
||||
|
||||
return Tb0_.value_;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> constantFilmThermo::rho() const
|
||||
{
|
||||
tmp<volScalarField> trho
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ':' + rho0_.name_,
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimDensity, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
trho().internalField() = this->rho(0, 0);
|
||||
trho().correctBoundaryConditions();
|
||||
|
||||
return trho;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> constantFilmThermo::mu() const
|
||||
{
|
||||
tmp<volScalarField> tmu
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ':' + mu0_.name_,
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimPressure*dimTime, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
tmu().internalField() = this->mu(0, 0);
|
||||
tmu().correctBoundaryConditions();
|
||||
|
||||
return tmu;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> constantFilmThermo::sigma() const
|
||||
{
|
||||
tmp<volScalarField> tsigma
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ':' + sigma0_.name_,
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimMass/sqr(dimTime), 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
tsigma().internalField() = this->sigma(0, 0);
|
||||
tsigma().correctBoundaryConditions();
|
||||
|
||||
return tsigma;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> constantFilmThermo::Cp() const
|
||||
{
|
||||
tmp<volScalarField> tCp
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ':' + Cp0_.name_,
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimEnergy/dimMass/dimTemperature, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
tCp().internalField() = this->Cp(0, 0);
|
||||
tCp().correctBoundaryConditions();
|
||||
|
||||
return tCp;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> constantFilmThermo::kappa() const
|
||||
{
|
||||
tmp<volScalarField> tkappa
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ':' + kappa0_.name_,
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimPower/dimLength/dimTemperature, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
tkappa().internalField() = this->kappa(0, 0);
|
||||
tkappa().correctBoundaryConditions();
|
||||
|
||||
return tkappa;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace surfaceFilmModels
|
||||
} // End namespace regionModels
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,224 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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::constantFilmThermo
|
||||
|
||||
Description
|
||||
Constant thermo model
|
||||
|
||||
SourceFiles
|
||||
constantFilmThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef constantFilmThermo_H
|
||||
#define constantFilmThermo_H
|
||||
|
||||
#include "filmThermoModel.H"
|
||||
#include "dimensionSet.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace regionModels
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class constantFilmThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class constantFilmThermo
|
||||
:
|
||||
public filmThermoModel
|
||||
{
|
||||
public:
|
||||
|
||||
struct thermoData
|
||||
{
|
||||
// private:
|
||||
word name_;
|
||||
scalar value_;
|
||||
bool set_;
|
||||
|
||||
// public:
|
||||
thermoData()
|
||||
:
|
||||
name_("unknown"),
|
||||
value_(0.0),
|
||||
set_(false)
|
||||
{}
|
||||
thermoData(const word& n)
|
||||
:
|
||||
name_(n),
|
||||
value_(0.0),
|
||||
set_(false)
|
||||
{}
|
||||
|
||||
// virtual ~thermoData()
|
||||
// {}
|
||||
};
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Private data
|
||||
|
||||
//- Specie name
|
||||
word name_;
|
||||
|
||||
//- Density [kg/m3]
|
||||
mutable thermoData rho0_;
|
||||
|
||||
//- Dynamic viscosity [Pa.s]
|
||||
mutable thermoData mu0_;
|
||||
|
||||
//- Surface tension [kg/s2]
|
||||
mutable thermoData sigma0_;
|
||||
|
||||
//- Specific heat capacity [J/kg/K]
|
||||
mutable thermoData Cp0_;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
mutable thermoData kappa0_;
|
||||
|
||||
//- Diffusivity [m2/s]
|
||||
mutable thermoData D0_;
|
||||
|
||||
//- Latent heat [J/kg]
|
||||
mutable thermoData hl0_;
|
||||
|
||||
//- Vapour pressure [Pa]
|
||||
mutable thermoData pv0_;
|
||||
|
||||
//- Molecular weight [kg/kmol]
|
||||
mutable thermoData W0_;
|
||||
|
||||
//- Boiling temperature [K]
|
||||
mutable thermoData Tb0_;
|
||||
|
||||
|
||||
// Private member functions
|
||||
|
||||
//- Initialise thermoData object
|
||||
void init(thermoData& td);
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
constantFilmThermo(const constantFilmThermo&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const constantFilmThermo&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("constant");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from surface film model and dictionary
|
||||
constantFilmThermo
|
||||
(
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~constantFilmThermo();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the specie name
|
||||
virtual const word& name() const;
|
||||
|
||||
|
||||
// Elemental access
|
||||
|
||||
//- Return density [kg/m3]
|
||||
virtual scalar rho(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return dynamic viscosity [Pa.s]
|
||||
virtual scalar mu(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return surface tension [kg/s2]
|
||||
virtual scalar sigma(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return specific heat capacity [J/kg/K]
|
||||
virtual scalar Cp(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return thermal conductivity [W/m/K]
|
||||
virtual scalar kappa(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return diffusivity [m2/s]
|
||||
virtual scalar D(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return latent heat [J/kg]
|
||||
virtual scalar hl(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return vapour pressure [Pa]
|
||||
virtual scalar pv(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return molecular weight [kg/kmol]
|
||||
virtual scalar W() const;
|
||||
|
||||
//- Return boiling temperature [K]
|
||||
virtual scalar Tb(const scalar p) const;
|
||||
|
||||
|
||||
// Field access
|
||||
|
||||
//- Return density [kg/m3]
|
||||
virtual tmp<volScalarField> rho() const;
|
||||
|
||||
//- Return dynamic viscosity [Pa.s]
|
||||
virtual tmp<volScalarField> mu() const;
|
||||
|
||||
//- Return surface tension [kg/s2]
|
||||
virtual tmp<volScalarField> sigma() const;
|
||||
|
||||
//- Return specific heat capacity [J/kg/K]
|
||||
virtual tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Return thermal conductivity [W/m/K]
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace surfaceFilmModels
|
||||
} // End namespace regionModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,76 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 "filmThermoModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace regionModels
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
defineTypeNameAndDebug(filmThermoModel, 0);
|
||||
defineRunTimeSelectionTable(filmThermoModel, dictionary);
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
filmThermoModel::filmThermoModel
|
||||
(
|
||||
const surfaceFilmModel& owner
|
||||
)
|
||||
:
|
||||
subModelBase(owner)
|
||||
{}
|
||||
|
||||
|
||||
filmThermoModel::filmThermoModel
|
||||
(
|
||||
const word& type,
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
subModelBase(type, owner, dict)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
filmThermoModel::~filmThermoModel()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace surfaceFilmModels
|
||||
} // End namespace regionModels
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,186 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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::filmThermoModel
|
||||
|
||||
Description
|
||||
Base class for film thermo models
|
||||
|
||||
SourceFiles
|
||||
filmThermoModel.C
|
||||
filmThermoModelNew.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef filmThermoModel_H
|
||||
#define filmThermoModel_H
|
||||
|
||||
#include "subModelBase.H"
|
||||
#include "runTimeSelectionTables.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace regionModels
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class filmThermoModel Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class filmThermoModel
|
||||
:
|
||||
public subModelBase
|
||||
{
|
||||
private:
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
filmThermoModel(const filmThermoModel&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const filmThermoModel&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("filmThermoModel");
|
||||
|
||||
|
||||
// Declare runtime constructor selection table
|
||||
|
||||
declareRunTimeSelectionTable
|
||||
(
|
||||
autoPtr,
|
||||
filmThermoModel,
|
||||
dictionary,
|
||||
(
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
),
|
||||
(owner, dict)
|
||||
);
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct null
|
||||
filmThermoModel(const surfaceFilmModel& owner);
|
||||
|
||||
//- Construct from type name, dictionary and surface film model
|
||||
filmThermoModel
|
||||
(
|
||||
const word& type,
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
// Selectors
|
||||
|
||||
//- Return a reference to the selected phase change model
|
||||
static autoPtr<filmThermoModel> New
|
||||
(
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~filmThermoModel();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the specie name
|
||||
virtual const word& name() const = 0;
|
||||
|
||||
|
||||
// Elemental access
|
||||
|
||||
//- Return density [kg/m3]
|
||||
virtual scalar rho(const scalar p, const scalar T) const = 0;
|
||||
|
||||
//- Return dynamic viscosity [Pa.s]
|
||||
virtual scalar mu(const scalar p, const scalar T) const = 0;
|
||||
|
||||
//- Return surface tension [kg/s2]
|
||||
virtual scalar sigma(const scalar p, const scalar T) const = 0;
|
||||
|
||||
//- Return specific heat capacity [J/kg/K]
|
||||
virtual scalar Cp(const scalar p, const scalar T) const = 0;
|
||||
|
||||
//- Return thermal conductivity [W/m/K]
|
||||
virtual scalar kappa(const scalar p, const scalar T) const = 0;
|
||||
|
||||
//- Return diffusivity [m2/s]
|
||||
virtual scalar D(const scalar p, const scalar T) const = 0;
|
||||
|
||||
//- Return latent heat [J/kg]
|
||||
virtual scalar hl(const scalar p, const scalar T) const = 0;
|
||||
|
||||
//- Return vapour pressure [Pa]
|
||||
virtual scalar pv(const scalar p, const scalar T) const = 0;
|
||||
|
||||
//- Return molecular weight [kg/kmol]
|
||||
virtual scalar W() const = 0;
|
||||
|
||||
//- Return boiling temperature [K]
|
||||
virtual scalar Tb(const scalar p) const = 0;
|
||||
|
||||
|
||||
// Field access
|
||||
|
||||
//- Return density [kg/m3]
|
||||
virtual tmp<volScalarField> rho() const = 0;
|
||||
|
||||
//- Return dynamic viscosity [Pa.s]
|
||||
virtual tmp<volScalarField> mu() const = 0;
|
||||
|
||||
//- Return surface tension [kg/s2]
|
||||
virtual tmp<volScalarField> sigma() const = 0;
|
||||
|
||||
//- Return specific heat capacity [J/kg/K]
|
||||
virtual tmp<volScalarField> Cp() const = 0;
|
||||
|
||||
//- Return thermal conductivity [W/m/K]
|
||||
virtual tmp<volScalarField> kappa() const = 0;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace surfaceFilmModels
|
||||
} // End namespace regionModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,73 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 "filmThermoModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace regionModels
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
|
||||
|
||||
autoPtr<filmThermoModel> filmThermoModel::New
|
||||
(
|
||||
const surfaceFilmModel& model,
|
||||
const dictionary& dict
|
||||
)
|
||||
{
|
||||
word modelType(dict.lookup("filmThermoModel"));
|
||||
|
||||
Info<< " Selecting filmThermoModel " << modelType << endl;
|
||||
|
||||
dictionaryConstructorTable::iterator cstrIter =
|
||||
dictionaryConstructorTablePtr_->find(modelType);
|
||||
|
||||
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"filmThermoModel::New(const surfaceFilmModel&, const dictionary&)"
|
||||
) << "Unknown filmThermoModel type " << modelType << nl << nl
|
||||
<< "Valid filmThermoModel types are:" << nl
|
||||
<< dictionaryConstructorTablePtr_->toc()
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
return autoPtr<filmThermoModel>(cstrIter()(model, dict));
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace surfaceFilmModels
|
||||
} // End namespace regionModels
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,486 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 "liquidFilmThermo.H"
|
||||
#include "demandDrivenData.H"
|
||||
#include "thermoSingleLayer.H"
|
||||
#include "SLGThermo.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace regionModels
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
defineTypeNameAndDebug(liquidFilmThermo, 0);
|
||||
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
filmThermoModel,
|
||||
liquidFilmThermo,
|
||||
dictionary
|
||||
);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
const thermoSingleLayer& liquidFilmThermo::thermoFilm() const
|
||||
{
|
||||
if (!isA<thermoSingleLayer>(owner_))
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"const thermoSingleLayer& liquidFilmThermo::thermoFilm() const"
|
||||
)
|
||||
<< "Thermo model requires a " << thermoSingleLayer::typeName
|
||||
<< " film to supply the pressure and temperature, but "
|
||||
<< owner_.type() << " film model selected. "
|
||||
<< "Use the 'useReferenceValues' flag to employ reference "
|
||||
<< "pressure and temperature" << exit(FatalError);
|
||||
}
|
||||
|
||||
return refCast<const thermoSingleLayer>(owner_);
|
||||
}
|
||||
|
||||
|
||||
void liquidFilmThermo::initLiquid(const dictionary& dict)
|
||||
{
|
||||
if (liquidPtr_ != NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
dict.lookup("liquid") >> name_;
|
||||
|
||||
if (owner_.primaryMesh().foundObject<SLGThermo>("SLGThermo"))
|
||||
{
|
||||
// retrieve from film thermo
|
||||
ownLiquid_ = false;
|
||||
|
||||
const SLGThermo& thermo =
|
||||
owner_.primaryMesh().lookupObject<SLGThermo>("SLGThermo");
|
||||
label id = thermo.liquidId(name_);
|
||||
liquidPtr_ = &thermo.liquids().properties()[id];
|
||||
}
|
||||
else
|
||||
{
|
||||
// new liquid create
|
||||
ownLiquid_ = true;
|
||||
|
||||
liquidPtr_ = new liquidProperties(dict.subDict(name_ + "Coeffs"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
liquidFilmThermo::liquidFilmThermo
|
||||
(
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
filmThermoModel(typeName, owner, dict),
|
||||
name_("unknown_liquid"),
|
||||
liquidPtr_(NULL),
|
||||
ownLiquid_(false),
|
||||
useReferenceValues_(readBool(coeffs_.lookup("useReferenceValues"))),
|
||||
pRef_(0.0),
|
||||
TRef_(0.0)
|
||||
{
|
||||
initLiquid(coeffs_);
|
||||
|
||||
if (useReferenceValues_)
|
||||
{
|
||||
coeffs_.lookup("pRef") >> pRef_;
|
||||
coeffs_.lookup("TRef") >> TRef_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
liquidFilmThermo::~liquidFilmThermo()
|
||||
{
|
||||
if (ownLiquid_)
|
||||
{
|
||||
deleteDemandDrivenData(liquidPtr_);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
const word& liquidFilmThermo::name() const
|
||||
{
|
||||
return name_;
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::rho
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return liquidPtr_->rho(p, T);
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::mu
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return liquidPtr_->mu(p, T);
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::sigma
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return liquidPtr_->sigma(p, T);
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::Cp
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return liquidPtr_->Cp(p, T);
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::kappa
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return liquidPtr_->K(p, T);
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::D
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return liquidPtr_->D(p, T);
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::hl
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return liquidPtr_->hl(p, T);
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::pv
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return liquidPtr_->pv(p, T);
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::W() const
|
||||
{
|
||||
return liquidPtr_->W();
|
||||
}
|
||||
|
||||
|
||||
scalar liquidFilmThermo::Tb(const scalar p) const
|
||||
{
|
||||
return liquidPtr_->pvInvert(p);
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> liquidFilmThermo::rho() const
|
||||
{
|
||||
tmp<volScalarField> trho
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ":rho",
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimDensity, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
scalarField& rho = trho().internalField();
|
||||
|
||||
if (useReferenceValues_)
|
||||
{
|
||||
forAll(rho, cellI)
|
||||
{
|
||||
rho[cellI] = this->rho(pRef_, TRef_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const thermoSingleLayer& film = thermoFilm();
|
||||
|
||||
const volScalarField& T = film.T();
|
||||
const volScalarField& p = film.pPrimary();
|
||||
|
||||
forAll(rho, cellI)
|
||||
{
|
||||
rho[cellI] = this->rho(p[cellI], T[cellI]);
|
||||
}
|
||||
}
|
||||
|
||||
trho().correctBoundaryConditions();
|
||||
|
||||
return trho;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> liquidFilmThermo::mu() const
|
||||
{
|
||||
tmp<volScalarField> tmu
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ":mu",
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimPressure*dimTime, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
scalarField& mu = tmu().internalField();
|
||||
|
||||
if (useReferenceValues_)
|
||||
{
|
||||
forAll(mu, cellI)
|
||||
{
|
||||
mu[cellI] = this->mu(pRef_, TRef_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const thermoSingleLayer& film = thermoFilm();
|
||||
|
||||
const volScalarField& T = film.T();
|
||||
const volScalarField& p = film.pPrimary();
|
||||
|
||||
forAll(mu, cellI)
|
||||
{
|
||||
mu[cellI] = this->mu(p[cellI], T[cellI]);
|
||||
}
|
||||
}
|
||||
|
||||
tmu().correctBoundaryConditions();
|
||||
|
||||
return tmu;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> liquidFilmThermo::sigma() const
|
||||
{
|
||||
tmp<volScalarField> tsigma
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ":sigma",
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimMass/sqr(dimTime), 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
scalarField& sigma = tsigma().internalField();
|
||||
|
||||
if (useReferenceValues_)
|
||||
{
|
||||
forAll(sigma, cellI)
|
||||
{
|
||||
sigma[cellI] = this->sigma(pRef_, TRef_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const thermoSingleLayer& film = thermoFilm();
|
||||
|
||||
const volScalarField& T = film.T();
|
||||
const volScalarField& p = film.pPrimary();
|
||||
|
||||
forAll(sigma, cellI)
|
||||
{
|
||||
sigma[cellI] = this->sigma(p[cellI], T[cellI]);
|
||||
}
|
||||
}
|
||||
|
||||
tsigma().correctBoundaryConditions();
|
||||
|
||||
return tsigma;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> liquidFilmThermo::Cp() const
|
||||
{
|
||||
tmp<volScalarField> tCp
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ":Cp",
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimEnergy/dimMass/dimTemperature, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
scalarField& Cp = tCp().internalField();
|
||||
|
||||
if (useReferenceValues_)
|
||||
{
|
||||
forAll(Cp, cellI)
|
||||
{
|
||||
Cp[cellI] = this->Cp(pRef_, TRef_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const thermoSingleLayer& film = thermoFilm();
|
||||
|
||||
const volScalarField& T = film.T();
|
||||
const volScalarField& p = film.pPrimary();
|
||||
|
||||
forAll(Cp, cellI)
|
||||
{
|
||||
Cp[cellI] = this->Cp(p[cellI], T[cellI]);
|
||||
}
|
||||
}
|
||||
|
||||
tCp().correctBoundaryConditions();
|
||||
|
||||
return tCp;
|
||||
}
|
||||
|
||||
|
||||
tmp<volScalarField> liquidFilmThermo::kappa() const
|
||||
{
|
||||
tmp<volScalarField> tkappa
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
type() + ":kappa",
|
||||
owner().time().timeName(),
|
||||
owner().regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
owner().regionMesh(),
|
||||
dimensionedScalar("0", dimPower/dimLength/dimTemperature, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
scalarField& kappa = tkappa().internalField();
|
||||
|
||||
if (useReferenceValues_)
|
||||
{
|
||||
forAll(kappa, cellI)
|
||||
{
|
||||
kappa[cellI] = this->kappa(pRef_, TRef_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const thermoSingleLayer& film = thermoFilm();
|
||||
|
||||
const volScalarField& T = film.T();
|
||||
const volScalarField& p = film.pPrimary();
|
||||
|
||||
forAll(kappa, cellI)
|
||||
{
|
||||
kappa[cellI] = this->kappa(p[cellI], T[cellI]);
|
||||
}
|
||||
}
|
||||
|
||||
tkappa().correctBoundaryConditions();
|
||||
|
||||
return tkappa;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace surfaceFilmModels
|
||||
} // End namespace regionModels
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,187 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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::liquidFilmThermo
|
||||
|
||||
Description
|
||||
Liquid thermo model
|
||||
|
||||
SourceFiles
|
||||
liquidFilmThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef liquidFilmThermo_H
|
||||
#define liquidFilmThermo_H
|
||||
|
||||
#include "filmThermoModel.H"
|
||||
#include "liquidProperties.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace regionModels
|
||||
{
|
||||
namespace surfaceFilmModels
|
||||
{
|
||||
|
||||
// Forward class declarations
|
||||
class thermoSingleLayer;
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class liquidFilmThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class liquidFilmThermo
|
||||
:
|
||||
public filmThermoModel
|
||||
{
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Liquid name
|
||||
word name_;
|
||||
|
||||
//- Pointer to the liquid properties
|
||||
const liquidProperties* liquidPtr_;
|
||||
|
||||
//- Flag to indicate that model owns the liquid object
|
||||
bool ownLiquid_;
|
||||
|
||||
//- Flag to indicate that reference values of p and T should be used
|
||||
bool useReferenceValues_;
|
||||
|
||||
//- Reference pressure [pa]
|
||||
scalar pRef_;
|
||||
|
||||
//- Reference temperature [K]
|
||||
scalar TRef_;
|
||||
|
||||
|
||||
// Protected member functions
|
||||
|
||||
//- Return a reference to a thermo film
|
||||
const thermoSingleLayer& thermoFilm() const;
|
||||
|
||||
//- Initialise the liquid pointer
|
||||
void initLiquid(const dictionary& dict);
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
liquidFilmThermo(const liquidFilmThermo&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const liquidFilmThermo&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("liquid");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from surface film model and dictionary
|
||||
liquidFilmThermo
|
||||
(
|
||||
const surfaceFilmModel& owner,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~liquidFilmThermo();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the specie name
|
||||
virtual const word& name() const;
|
||||
|
||||
|
||||
// Elemental access
|
||||
|
||||
//- Return density [kg/m3]
|
||||
virtual scalar rho(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return dynamic viscosity [Pa.s]
|
||||
virtual scalar mu(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return surface tension [kg/s2]
|
||||
virtual scalar sigma(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return specific heat capacity [J/kg/K]
|
||||
virtual scalar Cp(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return thermal conductivity [W/m/K]
|
||||
virtual scalar kappa(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return diffusivity [m2/s]
|
||||
virtual scalar D(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return latent heat [J/kg]
|
||||
virtual scalar hl(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return vapour pressure [Pa]
|
||||
virtual scalar pv(const scalar p, const scalar T) const;
|
||||
|
||||
//- Return molecular weight [kg/kmol]
|
||||
virtual scalar W() const;
|
||||
|
||||
//- Return boiling temperature [K]
|
||||
virtual scalar Tb(const scalar p) const;
|
||||
|
||||
|
||||
// Field access
|
||||
|
||||
//- Return density [kg/m3]
|
||||
virtual tmp<volScalarField> rho() const;
|
||||
|
||||
//- Return dynamic viscosity [Pa.s]
|
||||
virtual tmp<volScalarField> mu() const;
|
||||
|
||||
//- Return surface tension [kg/s2]
|
||||
virtual tmp<volScalarField> sigma() const;
|
||||
|
||||
//- Return specific heat capacity [J/kg/K]
|
||||
virtual tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Return thermal conductivity [W/m/K]
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace surfaceFilmModels
|
||||
} // End namespace regionModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user