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:
Daniel Jasiński 2021-06-23 14:39:22 +02:00 committed by Mark Olesen
parent e9054ec636
commit 939c335504
5 changed files with 420 additions and 2 deletions

View File

@ -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

View File

@ -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;
}
// ************************************************************************* //

View File

@ -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
// ************************************************************************* //

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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