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:
parent
e9054ec636
commit
939c335504
@ -23,6 +23,7 @@ thermophysicalProperties/thermophysicalProperties.C
|
||||
liquidProperties/liquidProperties/liquidProperties.C
|
||||
liquidProperties/liquidMixtureProperties/liquidMixtureProperties.C
|
||||
|
||||
liquidProperties/liquid/liquid.C
|
||||
liquidProperties/H2O/H2O.C
|
||||
liquidProperties/C7H16/C7H16.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;
|
||||
|
||||
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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user