From a3f4fdd8632e7e4ab8490387235e88e6b1f706a3 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 2 Nov 2010 17:56:22 +0000 Subject: [PATCH] thermodynamics: added new equation of state for incompressible flow --- .../incompressible/incompressible.C | 59 ++++++ .../incompressible/incompressible.H | 149 +++++++++++++++ .../incompressible/incompressibleI.H | 173 ++++++++++++++++++ 3 files changed, 381 insertions(+) create mode 100644 src/thermophysicalModels/specie/equationOfState/incompressible/incompressible.C create mode 100644 src/thermophysicalModels/specie/equationOfState/incompressible/incompressible.H create mode 100644 src/thermophysicalModels/specie/equationOfState/incompressible/incompressibleI.H diff --git a/src/thermophysicalModels/specie/equationOfState/incompressible/incompressible.C b/src/thermophysicalModels/specie/equationOfState/incompressible/incompressible.C new file mode 100644 index 0000000000..20185cd2a6 --- /dev/null +++ b/src/thermophysicalModels/specie/equationOfState/incompressible/incompressible.C @@ -0,0 +1,59 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\/ 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 . + +\*---------------------------------------------------------------------------*/ + +#include "incompressible.H" +#include "IOstreams.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::incompressible::incompressible(Istream& is) +: + specie(is), + rho_(readScalar(is)) +{ + is.check("incompressible::incompressible(Istream& is)"); +} + + +Foam::incompressible::incompressible(const dictionary& dict) +: + specie(dict), + rho_(readScalar(dict.lookup("rho"))) +{} + + +// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<<(Ostream& os, const incompressible& ico) +{ + os << static_cast(ico) + << token::SPACE << ico.rho_; + + os.check("Ostream& operator<<(Ostream& os, const incompressible& st)"); + return os; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/equationOfState/incompressible/incompressible.H b/src/thermophysicalModels/specie/equationOfState/incompressible/incompressible.H new file mode 100644 index 0000000000..76589a79e1 --- /dev/null +++ b/src/thermophysicalModels/specie/equationOfState/incompressible/incompressible.H @@ -0,0 +1,149 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\/ 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 . + +Class + Foam::incompressible + +Description + Incompressible gas/liquid equation of state. + +SourceFiles + incompressibleI.H + incompressible.C + +\*---------------------------------------------------------------------------*/ + +#ifndef incompressible_H +#define incompressible_H + +#include "specie.H" +#include "autoPtr.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class incompressible Declaration +\*---------------------------------------------------------------------------*/ + +class incompressible +: + public specie +{ + // Private data + + //- Density + scalar rho_; + + +public: + + // Constructors + + //- Construct from components + inline incompressible(const specie& sp, const scalar rho); + + //- Construct from Istream + incompressible(Istream&); + + //- Construct from dictionary + incompressible(const dictionary& dict); + + //- Construct as named copy + inline incompressible(const word& name, const incompressible&); + + //- Construct and return a clone + inline autoPtr clone() const; + + // Selector from Istream + inline static autoPtr New(Istream& is); + + + // Member functions + + //- Return density [kg/m^3] + inline scalar rho(scalar p, scalar T) const; + + //- Return compressibility rho/p [s^2/m^2] + inline scalar psi(scalar p, scalar T) const; + + //- Return compression factor [] + inline scalar Z(scalar p, scalar T) const; + + + // Member operators + + inline void operator+=(const incompressible&); + inline void operator-=(const incompressible&); + + inline void operator*=(const scalar); + + + // Friend operators + + inline friend incompressible operator+ + ( + const incompressible&, + const incompressible& + ); + + inline friend incompressible operator- + ( + const incompressible&, + const incompressible& + ); + + inline friend incompressible operator* + ( + const scalar s, + const incompressible& + ); + + inline friend incompressible operator== + ( + const incompressible&, + const incompressible& + ); + + + // Ostream Operator + + friend Ostream& operator<<(Ostream&, const incompressible&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "incompressibleI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/equationOfState/incompressible/incompressibleI.H b/src/thermophysicalModels/specie/equationOfState/incompressible/incompressibleI.H new file mode 100644 index 0000000000..6d9058d40c --- /dev/null +++ b/src/thermophysicalModels/specie/equationOfState/incompressible/incompressibleI.H @@ -0,0 +1,173 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\/ 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 . + +\*---------------------------------------------------------------------------*/ + +#include "incompressible.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +inline Foam::incompressible::incompressible +( + const specie& sp, + const scalar rho +) +: + specie(sp), + rho_(rho) +{} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +inline Foam::incompressible::incompressible +( + const word& name, + const incompressible& ico +) +: + specie(name, ico), + rho_(ico.rho_) +{} + +inline Foam::autoPtr +Foam::incompressible::clone() const +{ + return autoPtr(new incompressible(*this)); +} + +inline Foam::autoPtr +Foam::incompressible::New(Istream& is) +{ + return autoPtr(new incompressible(is)); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +inline Foam::scalar Foam::incompressible::rho(scalar p, scalar T) const +{ + return rho_; +} + +inline Foam::scalar Foam::incompressible::psi(scalar, scalar T) const +{ + return 0.0; +} + +inline Foam::scalar Foam::incompressible::Z(scalar, scalar) const +{ + return 0.0; +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +inline void Foam::incompressible::operator+=(const incompressible& ico) +{ + scalar molr1 = this->nMoles(); + + specie::operator+=(ico); + + molr1 /= this->nMoles(); + scalar molr2 = ico.nMoles()/this->nMoles(); + + rho_ = molr1*rho_ + molr2*ico.rho_; +} + +inline void Foam::incompressible::operator-=(const incompressible& ico) +{ + scalar molr1 = this->nMoles(); + + specie::operator-=(ico); + + molr1 /= this->nMoles(); + scalar molr2 = ico.nMoles()/this->nMoles(); + + rho_ = molr1*rho_ - molr2*ico.rho_; +} + +inline void Foam::incompressible::operator*=(const scalar s) +{ + specie::operator*=(s); +} + + +// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // + +inline Foam::incompressible Foam::operator+ +( + const incompressible& ico1, + const incompressible& ico2 +) +{ + scalar nMoles = ico1.nMoles() + ico2.nMoles(); + scalar molr1 = ico1.nMoles()/nMoles; + scalar molr2 = ico2.nMoles()/nMoles; + + return incompressible + ( + static_cast(ico1) + + static_cast(ico2), + molr1*ico1.rho_ + molr2*ico2.rho_ + ); +} + +inline Foam::incompressible Foam::operator- +( + const incompressible& ico1, + const incompressible& ico2 +) +{ + scalar nMoles = ico1.nMoles() + ico2.nMoles(); + scalar molr1 = ico1.nMoles()/nMoles; + scalar molr2 = ico2.nMoles()/nMoles; + + return incompressible + ( + static_cast(ico1) + - static_cast(ico2), + molr1*ico1.rho_ - molr2*ico2.rho_ + ); +} + +inline Foam::incompressible Foam::operator* +( + const scalar s, + const incompressible& ico +) +{ + return incompressible(s*static_cast(ico), ico.rho_); +} + +inline Foam::incompressible Foam::operator== +( + const incompressible& ico1, + const incompressible& ico2 +) +{ + return ico2 - ico1; +} + + +// ************************************************************************* //