mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
INT: liquidProperties: support for user defined liquid properties (#2141)
- Generic thermophysical properties class for a liquid in which the functions and coefficients for each property are run-time selected. Code adapted from openfoam.org
This commit is contained in:
committed by
Mark Olesen
parent
e9054ec636
commit
939c335504
@ -23,6 +23,7 @@ thermophysicalProperties/thermophysicalProperties.C
|
|||||||
liquidProperties/liquidProperties/liquidProperties.C
|
liquidProperties/liquidProperties/liquidProperties.C
|
||||||
liquidProperties/liquidMixtureProperties/liquidMixtureProperties.C
|
liquidProperties/liquidMixtureProperties/liquidMixtureProperties.C
|
||||||
|
|
||||||
|
liquidProperties/liquid/liquid.C
|
||||||
liquidProperties/H2O/H2O.C
|
liquidProperties/H2O/H2O.C
|
||||||
liquidProperties/C7H16/C7H16.C
|
liquidProperties/C7H16/C7H16.C
|
||||||
liquidProperties/C12H26/C12H26.C
|
liquidProperties/C12H26/C12H26.C
|
||||||
|
|||||||
@ -0,0 +1,135 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | www.openfoam.com
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 2020 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2021 OpenCFD Ltd.
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "liquid.H"
|
||||||
|
#include "NoneFunction1.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(liquid, 0);
|
||||||
|
addToRunTimeSelectionTable(liquidProperties, liquid, dictionary);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
static autoPtr<Function1<Type>> NewOrNone
|
||||||
|
(
|
||||||
|
const word& entryName,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
{
|
||||||
|
autoPtr<Function1<Type>> ptr
|
||||||
|
(
|
||||||
|
Function1<Type>::NewIfPresent(entryName, dict)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!ptr)
|
||||||
|
{
|
||||||
|
ptr.reset
|
||||||
|
(
|
||||||
|
new Function1Types::None<Type>(entryName, dict)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::liquid::liquid(const dictionary& dict)
|
||||||
|
:
|
||||||
|
liquidProperties(dict),
|
||||||
|
rho_(NewOrNone<scalar>("rho", dict)),
|
||||||
|
pv_(NewOrNone<scalar>("pv", dict)),
|
||||||
|
hl_(NewOrNone<scalar>("hl", dict)),
|
||||||
|
Cp_(NewOrNone<scalar>("Cp", dict)),
|
||||||
|
h_(NewOrNone<scalar>("h", dict)),
|
||||||
|
Cpg_(NewOrNone<scalar>("Cpg", dict)),
|
||||||
|
B_(NewOrNone<scalar>("B", dict)),
|
||||||
|
mu_(NewOrNone<scalar>("mu", dict)),
|
||||||
|
mug_(NewOrNone<scalar>("mug", dict)),
|
||||||
|
kappa_(NewOrNone<scalar>("kappa", dict)),
|
||||||
|
kappag_(NewOrNone<scalar>("kappag", dict)),
|
||||||
|
sigma_(NewOrNone<scalar>("sigma", dict)),
|
||||||
|
D_(NewOrNone<scalar>("D", dict))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Foam::liquid::liquid(const liquid& rhs)
|
||||||
|
:
|
||||||
|
liquidProperties(rhs),
|
||||||
|
rho_(rhs.rho_.clone()),
|
||||||
|
pv_(rhs.pv_.clone()),
|
||||||
|
hl_(rhs.hl_.clone()),
|
||||||
|
Cp_(rhs.Cp_.clone()),
|
||||||
|
h_(rhs.h_.clone()),
|
||||||
|
Cpg_(rhs.Cpg_.clone()),
|
||||||
|
B_(rhs.B_.clone()),
|
||||||
|
mu_(rhs.mu_.clone()),
|
||||||
|
mug_(rhs.mug_.clone()),
|
||||||
|
kappa_(rhs.kappa_.clone()),
|
||||||
|
kappag_(rhs.kappag_.clone()),
|
||||||
|
sigma_(rhs.sigma_.clone()),
|
||||||
|
D_(rhs.D_.clone())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::liquid::writeData(Ostream& os) const
|
||||||
|
{
|
||||||
|
liquidProperties::writeData(os); os << nl;
|
||||||
|
rho_->writeData(os); os << nl;
|
||||||
|
pv_->writeData(os); os << nl;
|
||||||
|
hl_->writeData(os); os << nl;
|
||||||
|
Cp_->writeData(os); os << nl;
|
||||||
|
h_->writeData(os); os << nl;
|
||||||
|
Cpg_->writeData(os); os << nl;
|
||||||
|
B_->writeData(os); os << nl;
|
||||||
|
mu_->writeData(os); os << nl;
|
||||||
|
mug_->writeData(os); os << nl;
|
||||||
|
kappa_->writeData(os); os << nl;
|
||||||
|
kappag_->writeData(os); os << nl;
|
||||||
|
sigma_->writeData(os); os << nl;
|
||||||
|
D_->writeData(os); os << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,164 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | www.openfoam.com
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 2020 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2021 OpenCFD Ltd.
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::liquid
|
||||||
|
|
||||||
|
Description
|
||||||
|
Generic thermophysical properties class for a liquid in which the
|
||||||
|
functions and coefficients for each property are run-time selected.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
liquid.C
|
||||||
|
liquidI.H
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef liquid_H
|
||||||
|
#define liquid_H
|
||||||
|
|
||||||
|
#include "liquidProperties.H"
|
||||||
|
#include "Function1.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class liquid Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class liquid
|
||||||
|
:
|
||||||
|
public liquidProperties
|
||||||
|
{
|
||||||
|
// Private Data
|
||||||
|
|
||||||
|
autoPtr<Function1<scalar>> rho_;
|
||||||
|
autoPtr<Function1<scalar>> pv_;
|
||||||
|
autoPtr<Function1<scalar>> hl_;
|
||||||
|
autoPtr<Function1<scalar>> Cp_;
|
||||||
|
autoPtr<Function1<scalar>> h_;
|
||||||
|
autoPtr<Function1<scalar>> Cpg_;
|
||||||
|
autoPtr<Function1<scalar>> B_;
|
||||||
|
autoPtr<Function1<scalar>> mu_;
|
||||||
|
autoPtr<Function1<scalar>> mug_;
|
||||||
|
autoPtr<Function1<scalar>> kappa_;
|
||||||
|
autoPtr<Function1<scalar>> kappag_;
|
||||||
|
autoPtr<Function1<scalar>> sigma_;
|
||||||
|
autoPtr<Function1<scalar>> D_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
friend class liquidProperties;
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("liquid");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from dictionary
|
||||||
|
explicit liquid(const dictionary& dict);
|
||||||
|
|
||||||
|
//- Copy construct
|
||||||
|
liquid(const liquid& rhs);
|
||||||
|
|
||||||
|
|
||||||
|
//- Construct and return clone
|
||||||
|
virtual autoPtr<liquidProperties> clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<liquidProperties>(new liquid(*this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Liquid density [kg/m^3]
|
||||||
|
inline scalar rho(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Vapour pressure [Pa]
|
||||||
|
inline scalar pv(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Heat of vapourisation [J/kg]
|
||||||
|
inline scalar hl(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Liquid heat capacity [J/(kg K)]
|
||||||
|
inline scalar Cp(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Liquid Enthalpy [J/(kg)]
|
||||||
|
inline scalar h(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Ideal gas heat capacity [J/(kg K)]
|
||||||
|
inline scalar Cpg(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Second Virial Coefficient [m^3/kg]
|
||||||
|
inline scalar B(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Liquid viscosity [Pa s]
|
||||||
|
inline scalar mu(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Vapour viscosity [Pa s]
|
||||||
|
inline scalar mug(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Liquid thermal conductivity [W/(m K)]
|
||||||
|
inline scalar kappa(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Vapour thermal conductivity [W/(m K)]
|
||||||
|
inline scalar kappag(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Surface tension [N/m]
|
||||||
|
inline scalar sigma(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Vapour diffusivity [m2/s]
|
||||||
|
inline scalar D(scalar p, scalar T) const;
|
||||||
|
|
||||||
|
//- Vapour diffusivity [m2/s] with specified binary pair
|
||||||
|
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write the function coefficients
|
||||||
|
void writeData(Ostream& os) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "liquidI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,113 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | www.openfoam.com
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 2020 OpenFOAM Foundation
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
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/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::rho(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return rho_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::pv(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return pv_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::hl(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return hl_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::Cp(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return Cp_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::h(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return h_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::Cpg(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return Cpg_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::B(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return B_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::mu(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return mu_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::mug(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return mug_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::kappa(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return kappa_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::kappag(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return kappag_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::sigma(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return sigma_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::D(scalar p, scalar T) const
|
||||||
|
{
|
||||||
|
return D_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::scalar Foam::liquid::D(scalar p, scalar T, scalar Wb) const
|
||||||
|
{
|
||||||
|
// Currently ignoring the Wb argument
|
||||||
|
return D_->value(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -117,9 +117,14 @@ Foam::autoPtr<Foam::liquidProperties> Foam::liquidProperties::New
|
|||||||
{
|
{
|
||||||
DebugInFunction << "Constructing liquidProperties" << nl;
|
DebugInFunction << "Constructing liquidProperties" << nl;
|
||||||
|
|
||||||
const word liquidType(dict.dictName());
|
// Can either specify "type", or simply use the dictionary name
|
||||||
|
// as being the liquid type name
|
||||||
|
|
||||||
if (dict.found("defaultCoeffs"))
|
word liquidType(dict.dictName());
|
||||||
|
|
||||||
|
const bool hadExplicitType = dict.readIfPresent("type", liquidType);
|
||||||
|
|
||||||
|
if (dict.found("defaultCoeffs") && !hadExplicitType)
|
||||||
{
|
{
|
||||||
// Backward-compatibility
|
// Backward-compatibility
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user