diff --git a/src/thermophysicalModels/thermophysicalProperties/Make/files b/src/thermophysicalModels/thermophysicalProperties/Make/files index d428e419d258166f23d8dcbe6744e5ee38c66288..269ad20b9211ee0b664b746409f3cfcbbafb995a 100644 --- a/src/thermophysicalModels/thermophysicalProperties/Make/files +++ b/src/thermophysicalModels/thermophysicalProperties/Make/files @@ -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 diff --git a/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquid.C b/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquid.C new file mode 100644 index 0000000000000000000000000000000000000000..f9f2525edb513fd3803eef70709b15c79221578e --- /dev/null +++ b/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquid.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; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquid.H b/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquid.H new file mode 100644 index 0000000000000000000000000000000000000000..21b152c36aa23da9ea20c95e0d5487cd9d1c0134 --- /dev/null +++ b/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquid.H @@ -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 + +// ************************************************************************* // diff --git a/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquidI.H b/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquidI.H new file mode 100644 index 0000000000000000000000000000000000000000..b362f20cf342d02c5e43a91cdaa58b8da2154c17 --- /dev/null +++ b/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquid/liquidI.H @@ -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); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquidProperties/liquidProperties.C b/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquidProperties/liquidProperties.C index 3df7af91b8437d4443c97109ab66e6722dcb8352..c8855ee9007429d0d94bd92d0a66df244a7f43cf 100644 --- a/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquidProperties/liquidProperties.C +++ b/src/thermophysicalModels/thermophysicalProperties/liquidProperties/liquidProperties/liquidProperties.C @@ -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