Thermodynamics: template the equations of state on Specie

This will allow alternative methods of storing mixture information for e.g. complex transport modelling
This commit is contained in:
Henry
2012-09-24 17:57:12 +01:00
parent f1bfeba127
commit 14153d57db
26 changed files with 605 additions and 346 deletions

View File

@ -48,7 +48,7 @@ typedef Cthermo \
< \
Thermo \
< \
EqnOfState \
EqnOfState<specie> \
>, \
Type \
> \
@ -97,7 +97,7 @@ typedef polynomialTransport \
< \
hPolynomialThermo \
< \
icoPolynomial<Order>, \
icoPolynomial<specie, Order>, \
Order \
>, \
Type \

View File

@ -31,6 +31,7 @@ Description
#include "basicMixture.H"
#include "makeBasicMixture.H"
#include "specie.H"
#include "perfectGas.H"
#include "rhoConst.H"
#include "incompressiblePerfectGas.H"

View File

@ -39,7 +39,7 @@ Description
#define makeBasicMixture(Mixture,Transport,Type,Thermo,EqnOfState) \
\
typedef \
Mixture<Transport<species::thermo<Thermo<EqnOfState>, Type> > > \
Mixture<Transport<species::thermo<Thermo<EqnOfState<specie> >, Type> > > \
Mixture##Transport##Type##Thermo##EqnOfState; \
\
defineTemplateTypeNameAndDebugWithName \
@ -55,7 +55,7 @@ typedef polynomialTransport \
< \
hPolynomialThermo \
< \
icoPolynomial<Order>, \
icoPolynomial<specie, Order>, \
Order \
>, \
Type \

View File

@ -26,8 +26,8 @@ License
#include "psiThermo.H"
#include "makeThermo.H"
#include "specie.H"
#include "perfectGas.H"
#include "hConstThermo.H"
#include "eConstThermo.H"
#include "janafThermo.H"

View File

@ -619,7 +619,7 @@ bool finishReaction = false;
currentSpecieName,
new gasThermoPhysics
(
janafThermo<perfectGas>
janafThermo<perfectGas<specie> >
(
specie
(

View File

@ -45,7 +45,7 @@ typedef MixtureThermo \
< \
Thermo \
< \
EqnOfState \
EqnOfState<specie> \
>, \
Type \
> \

View File

@ -32,17 +32,14 @@ Description
#ifndef solidThermoPhysicsTypes_H
#define solidThermoPhysicsTypes_H
#include "specie.H"
#include "rhoConst.H"
#include "hConstThermo.H"
#include "hExponentialThermo.H"
#include "constIsoSolidTransport.H"
#include "constAnIsoSolidTransport.H"
#include "exponentialSolidTransport.H"
#include "constSolidRad.H"
#include "sensibleEnthalpy.H"
#include "thermo.H"
@ -59,7 +56,7 @@ namespace Foam
<
hConstThermo
<
rhoConst
rhoConst<specie>
>,
sensibleEnthalpy
>
@ -76,7 +73,7 @@ namespace Foam
<
hExponentialThermo
<
rhoConst
rhoConst<specie>
>,
sensibleEnthalpy
>

View File

@ -39,7 +39,7 @@ Description
namespace Foam
{
#define makeSolidThermo(BaseThermo,Cthermo,Mixture,Transport,Radiation,Type,Thermo,Rho)\
#define makeSolidThermo(BaseThermo,Cthermo,Mixture,Transport,Radiation,Type,Thermo,EqnOfState)\
\
typedef Cthermo \
< \
@ -53,7 +53,7 @@ typedef Cthermo \
< \
Thermo \
< \
Rho \
EqnOfState<specie> \
>, \
Type \
> \
@ -61,11 +61,11 @@ typedef Cthermo \
> \
>, \
BaseThermo \
> Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo; \
>Cthermo##Mixture##Transport##Radiation##Type##Thermo##EqnOfState##BaseThermo;\
\
defineTemplateTypeNameAndDebugWithName \
( \
Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo, \
Cthermo##Mixture##Transport##Radiation##Type##Thermo##EqnOfState##BaseThermo, \
#Cthermo \
"<" \
#Mixture \
@ -76,7 +76,7 @@ defineTemplateTypeNameAndDebugWithName \
"<" \
#Thermo \
"<" \
#Rho \
#EqnOfState \
">," \
#Type \
">>>>", \
@ -94,19 +94,19 @@ typedef Mixture \
< \
Thermo \
< \
Rho \
EqnOfState<specie> \
>, \
Type \
> \
> \
> \
> Mixture##Transport##Radiation##Type##Thermo##Rho; \
> Mixture##Transport##Radiation##Type##Thermo##EqnOfState; \
\
\
\
defineTemplateTypeNameAndDebugWithName \
( \
Mixture##Transport##Radiation##Type##Thermo##Rho, \
Mixture##Transport##Radiation##Type##Thermo##EqnOfState, \
#Mixture \
"<" \
#Transport \
@ -115,7 +115,7 @@ defineTemplateTypeNameAndDebugWithName \
"<" \
#Thermo \
"<" \
#Rho \
#EqnOfState \
">," \
#Type \
">>>", \
@ -125,20 +125,20 @@ defineTemplateTypeNameAndDebugWithName \
addToRunTimeSelectionTable \
( \
BaseThermo, \
Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo, \
Cthermo##Mixture##Transport##Radiation##Type##Thermo##EqnOfState##BaseThermo, \
mesh \
); \
addToRunTimeSelectionTable \
( \
basicThermo, \
Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo, \
Cthermo##Mixture##Transport##Radiation##Type##Thermo##EqnOfState##BaseThermo, \
fvMesh \
); \
\
addToRunTimeSelectionTable \
( \
BaseThermo, \
Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo, \
Cthermo##Mixture##Transport##Radiation##Type##Thermo##EqnOfState##BaseThermo, \
dictionary \
);

View File

@ -5,9 +5,6 @@ reactions = reaction/reactions
$(atomicWeights)/atomicWeights.C
$(specie)/specie.C
$(equationOfState)/perfectGas/perfectGas.C
$(equationOfState)/rhoConst/rhoConst.C
$(equationOfState)/incompressiblePerfectGas/incompressiblePerfectGas.C
$(reactions)/makeReactionThermoReactions.C
$(reactions)/makeLangmuirHinshelwoodReactions.C

View File

@ -33,20 +33,20 @@ namespace Foam
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<int PolySize>
icoPolynomial<PolySize>::icoPolynomial(Istream& is)
template<class Specie, int PolySize>
icoPolynomial<Specie, PolySize>::icoPolynomial(Istream& is)
:
specie(is),
Specie(is),
rhoCoeffs_("rhoCoeffs<" + Foam::name(PolySize) + '>', is)
{
rhoCoeffs_ *= this->W();
}
template<int PolySize>
icoPolynomial<PolySize>::icoPolynomial(const dictionary& dict)
template<class Specie, int PolySize>
icoPolynomial<Specie, PolySize>::icoPolynomial(const dictionary& dict)
:
specie(dict),
Specie(dict),
rhoCoeffs_
(
dict.subDict("equationOfState").lookup
@ -61,10 +61,10 @@ icoPolynomial<PolySize>::icoPolynomial(const dictionary& dict)
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<int PolySize>
void icoPolynomial<PolySize>::write(Ostream& os) const
template<class Specie, int PolySize>
void icoPolynomial<Specie, PolySize>::write(Ostream& os) const
{
specie::write(os);
Specie::write(os);
dictionary dict("equationOfState");
dict.add
@ -79,16 +79,17 @@ void icoPolynomial<PolySize>::write(Ostream& os) const
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
template<int PolySize>
Ostream& operator<<(Ostream& os, const icoPolynomial<PolySize>& ip)
template<class Specie, int PolySize>
Ostream& operator<<(Ostream& os, const icoPolynomial<Specie, PolySize>& ip)
{
os << static_cast<const specie&>(ip) << tab
os << static_cast<const Specie&>(ip) << tab
<< "rhoCoeffs<" << Foam::name(PolySize) << '>' << tab
<< ip.rhoCoeffs_/ip.W();
os.check
(
"Ostream& operator<<(Ostream& os, const icoPolynomial<PolySize>& ip)"
"Ostream& operator<<"
"(Ostream& os, const icoPolynomial<Specie, PolySize>& ip)"
);
return os;

View File

@ -37,7 +37,6 @@ SourceFiles
#ifndef icoPolynomial_H
#define icoPolynomial_H
#include "specie.H"
#include "autoPtr.H"
#include "Polynomial.H"
@ -48,42 +47,42 @@ namespace Foam
// Forward declaration of friend functions and operators
template<int PolySize>
template<class Specie, int PolySize>
class icoPolynomial;
template<int PolySize>
icoPolynomial<PolySize> operator+
template<class Specie, int PolySize>
icoPolynomial<Specie, PolySize> operator+
(
const icoPolynomial<PolySize>&,
const icoPolynomial<PolySize>&
const icoPolynomial<Specie, PolySize>&,
const icoPolynomial<Specie, PolySize>&
);
template<int PolySize>
icoPolynomial<PolySize> operator-
template<class Specie, int PolySize>
icoPolynomial<Specie, PolySize> operator-
(
const icoPolynomial<PolySize>&,
const icoPolynomial<PolySize>&
const icoPolynomial<Specie, PolySize>&,
const icoPolynomial<Specie, PolySize>&
);
template<int PolySize>
icoPolynomial<PolySize> operator*
template<class Specie, int PolySize>
icoPolynomial<Specie, PolySize> operator*
(
const scalar,
const icoPolynomial<PolySize>&
const icoPolynomial<Specie, PolySize>&
);
template<int PolySize>
icoPolynomial<PolySize> operator==
template<class Specie, int PolySize>
icoPolynomial<Specie, PolySize> operator==
(
const icoPolynomial<PolySize>&,
const icoPolynomial<PolySize>&
const icoPolynomial<Specie, PolySize>&,
const icoPolynomial<Specie, PolySize>&
);
template<int PolySize>
template<class Specie, int PolySize>
Ostream& operator<<
(
Ostream&,
const icoPolynomial<PolySize>&
const icoPolynomial<Specie, PolySize>&
);
@ -91,10 +90,10 @@ Ostream& operator<<
Class icoPolynomial Declaration
\*---------------------------------------------------------------------------*/
template<int PolySize>
template<class Specie, int PolySize>
class icoPolynomial
:
public specie
public Specie
{
// Private data
@ -110,7 +109,7 @@ public:
//- Construct from components
inline icoPolynomial
(
const specie& sp,
const Specie& sp,
const Polynomial<PolySize>& rhoPoly
);
@ -176,25 +175,25 @@ public:
// Friend operators
friend icoPolynomial operator+ <PolySize>
friend icoPolynomial operator+ <Specie, PolySize>
(
const icoPolynomial&,
const icoPolynomial&
);
friend icoPolynomial operator- <PolySize>
friend icoPolynomial operator- <Specie, PolySize>
(
const icoPolynomial&,
const icoPolynomial&
);
friend icoPolynomial operator* <PolySize>
friend icoPolynomial operator* <Specie, PolySize>
(
const scalar s,
const icoPolynomial&
);
friend icoPolynomial operator== <PolySize>
friend icoPolynomial operator== <Specie, PolySize>
(
const icoPolynomial&,
const icoPolynomial&
@ -203,7 +202,11 @@ public:
// Ostream Operator
friend Ostream& operator<< <PolySize>(Ostream&, const icoPolynomial&);
friend Ostream& operator<< <Specie, PolySize>
(
Ostream&,
const icoPolynomial&
);
};
@ -217,7 +220,7 @@ public:
\
defineTemplateTypeNameAndDebugWithName \
( \
icoPolynomial<PolySize>, \
icoPolynomial<Specie, PolySize>, \
"icoPolynomial<"#PolySize">", \
0 \
);

View File

@ -27,98 +27,113 @@ License
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
template<int PolySize>
inline Foam::icoPolynomial<PolySize>::icoPolynomial
template<class Specie, int PolySize>
inline Foam::icoPolynomial<Specie, PolySize>::icoPolynomial
(
const specie& sp,
const Specie& sp,
const Polynomial<PolySize>& rhoCoeffs
)
:
specie(sp),
Specie(sp),
rhoCoeffs_(rhoCoeffs)
{}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<int PolySize>
inline Foam::icoPolynomial<PolySize>::icoPolynomial
template<class Specie, int PolySize>
inline Foam::icoPolynomial<Specie, PolySize>::icoPolynomial
(
const icoPolynomial<PolySize>& ip
const icoPolynomial<Specie, PolySize>& ip
)
:
specie(ip),
Specie(ip),
rhoCoeffs_(ip.rhoCoeffs_)
{}
template<int PolySize>
inline Foam::icoPolynomial<PolySize>::icoPolynomial
template<class Specie, int PolySize>
inline Foam::icoPolynomial<Specie, PolySize>::icoPolynomial
(
const word& name,
const icoPolynomial<PolySize>& ip
const icoPolynomial<Specie, PolySize>& ip
)
:
specie(name, ip),
Specie(name, ip),
rhoCoeffs_(ip.rhoCoeffs_)
{}
template<int PolySize>
inline Foam::autoPtr<Foam::icoPolynomial<PolySize> >
Foam::icoPolynomial<PolySize>::clone() const
template<class Specie, int PolySize>
inline Foam::autoPtr<Foam::icoPolynomial<Specie, PolySize> >
Foam::icoPolynomial<Specie, PolySize>::clone() const
{
return autoPtr<icoPolynomial<PolySize> >
return autoPtr<icoPolynomial<Specie, PolySize> >
(
new icoPolynomial<PolySize>(*this)
new icoPolynomial<Specie, PolySize>(*this)
);
}
template<int PolySize>
inline Foam::autoPtr<Foam::icoPolynomial<PolySize> >
Foam::icoPolynomial<PolySize>::New(Istream& is)
template<class Specie, int PolySize>
inline Foam::autoPtr<Foam::icoPolynomial<Specie, PolySize> >
Foam::icoPolynomial<Specie, PolySize>::New(Istream& is)
{
return autoPtr<icoPolynomial<PolySize> >(new icoPolynomial<PolySize>(is));
return autoPtr<icoPolynomial<Specie, PolySize> >
(
new icoPolynomial<Specie, PolySize>(is)
);
}
template<int PolySize>
inline Foam::autoPtr<Foam::icoPolynomial<PolySize> >
Foam::icoPolynomial<PolySize>::New(const dictionary& dict)
template<class Specie, int PolySize>
inline Foam::autoPtr<Foam::icoPolynomial<Specie, PolySize> >
Foam::icoPolynomial<Specie, PolySize>::New(const dictionary& dict)
{
return autoPtr<icoPolynomial<PolySize> >
return autoPtr<icoPolynomial<Specie, PolySize> >
(
new icoPolynomial<PolySize>(dict)
new icoPolynomial<Specie, PolySize>(dict)
);
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<int PolySize>
inline Foam::scalar Foam::icoPolynomial<PolySize>::rho(scalar, scalar T) const
template<class Specie, int PolySize>
inline Foam::scalar Foam::icoPolynomial<Specie, PolySize>::rho
(
scalar,
scalar T
) const
{
return rhoCoeffs_.value(T)/this->W();
}
template<int PolySize>
inline Foam::scalar Foam::icoPolynomial<PolySize>::psi(scalar, scalar) const
template<class Specie, int PolySize>
inline Foam::scalar Foam::icoPolynomial<Specie, PolySize>::psi
(
scalar,
scalar
) const
{
return 0.0;
}
template<int PolySize>
inline Foam::scalar Foam::icoPolynomial<PolySize>::Z(scalar, scalar) const
template<class Specie, int PolySize>
inline Foam::scalar Foam::icoPolynomial<Specie, PolySize>::Z
(
scalar,
scalar
) const
{
return 0.0;
}
template<int PolySize>
inline Foam::scalar Foam::icoPolynomial<PolySize>::cpMcv
template<class Specie, int PolySize>
inline Foam::scalar Foam::icoPolynomial<Specie, PolySize>::cpMcv
(
scalar p,
scalar T
@ -130,13 +145,14 @@ inline Foam::scalar Foam::icoPolynomial<PolySize>::cpMcv
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
template<int PolySize>
inline Foam::icoPolynomial<PolySize>& Foam::icoPolynomial<PolySize>::operator=
template<class Specie, int PolySize>
inline Foam::icoPolynomial<Specie, PolySize>&
Foam::icoPolynomial<Specie, PolySize>::operator=
(
const icoPolynomial<PolySize>& ip
const icoPolynomial<Specie, PolySize>& ip
)
{
specie::operator=(ip);
Specie::operator=(ip);
rhoCoeffs_ = ip.rhoCoeffs_;
@ -144,15 +160,15 @@ inline Foam::icoPolynomial<PolySize>& Foam::icoPolynomial<PolySize>::operator=
}
template<int PolySize>
inline void Foam::icoPolynomial<PolySize>::operator+=
template<class Specie, int PolySize>
inline void Foam::icoPolynomial<Specie, PolySize>::operator+=
(
const icoPolynomial<PolySize>& ip
const icoPolynomial<Specie, PolySize>& ip
)
{
scalar molr1 = this->nMoles();
specie::operator+=(ip);
Specie::operator+=(ip);
molr1 /= this->nMoles();
scalar molr2 = ip.nMoles()/this->nMoles();
@ -161,15 +177,15 @@ inline void Foam::icoPolynomial<PolySize>::operator+=
}
template<int PolySize>
inline void Foam::icoPolynomial<PolySize>::operator-=
template<class Specie, int PolySize>
inline void Foam::icoPolynomial<Specie, PolySize>::operator-=
(
const icoPolynomial<PolySize>& ip
const icoPolynomial<Specie, PolySize>& ip
)
{
scalar molr1 = this->nMoles();
specie::operator-=(ip);
Specie::operator-=(ip);
molr1 /= this->nMoles();
scalar molr2 = ip.nMoles()/this->nMoles();
@ -178,75 +194,75 @@ inline void Foam::icoPolynomial<PolySize>::operator-=
}
template<int PolySize>
inline void Foam::icoPolynomial<PolySize>::operator*=(const scalar s)
template<class Specie, int PolySize>
inline void Foam::icoPolynomial<Specie, PolySize>::operator*=(const scalar s)
{
specie::operator*=(s);
Specie::operator*=(s);
}
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
template<int PolySize>
Foam::icoPolynomial<PolySize> Foam::operator+
template<class Specie, int PolySize>
Foam::icoPolynomial<Specie, PolySize> Foam::operator+
(
const icoPolynomial<PolySize>& ip1,
const icoPolynomial<PolySize>& ip2
const icoPolynomial<Specie, PolySize>& ip1,
const icoPolynomial<Specie, PolySize>& ip2
)
{
scalar nMoles = ip1.nMoles() + ip2.nMoles();
scalar molr1 = ip1.nMoles()/nMoles;
scalar molr2 = ip2.nMoles()/nMoles;
return icoPolynomial<PolySize>
return icoPolynomial<Specie, PolySize>
(
static_cast<const specie&>(ip1)
+ static_cast<const specie&>(ip2),
static_cast<const Specie&>(ip1)
+ static_cast<const Specie&>(ip2),
molr1*ip1.rhoCoeffs_ + molr2*ip2.rhoCoeffs_
);
}
template<int PolySize>
Foam::icoPolynomial<PolySize> Foam::operator-
template<class Specie, int PolySize>
Foam::icoPolynomial<Specie, PolySize> Foam::operator-
(
const icoPolynomial<PolySize>& ip1,
const icoPolynomial<PolySize>& ip2
const icoPolynomial<Specie, PolySize>& ip1,
const icoPolynomial<Specie, PolySize>& ip2
)
{
scalar nMoles = ip1.nMoles() + ip2.nMoles();
scalar molr1 = ip1.nMoles()/nMoles;
scalar molr2 = ip2.nMoles()/nMoles;
return icoPolynomial<PolySize>
return icoPolynomial<Specie, PolySize>
(
static_cast<const specie&>(ip1)
- static_cast<const specie&>(ip2),
static_cast<const Specie&>(ip1)
- static_cast<const Specie&>(ip2),
molr1*ip1.rhoCoeffs_ - molr2*ip2.rhoCoeffs_
);
}
template<int PolySize>
Foam::icoPolynomial<PolySize> Foam::operator*
template<class Specie, int PolySize>
Foam::icoPolynomial<Specie, PolySize> Foam::operator*
(
const scalar s,
const icoPolynomial<PolySize>& ip
const icoPolynomial<Specie, PolySize>& ip
)
{
return icoPolynomial<PolySize>
return icoPolynomial<Specie, PolySize>
(
s*static_cast<const specie&>(ip),
s*static_cast<const Specie&>(ip),
ip.rhoCoeffs_
);
}
template<int PolySize>
Foam::icoPolynomial<PolySize> Foam::operator==
template<class Specie, int PolySize>
Foam::icoPolynomial<Specie, PolySize> Foam::operator==
(
const icoPolynomial<PolySize>& ip1,
const icoPolynomial<PolySize>& ip2
const icoPolynomial<Specie, PolySize>& ip1,
const icoPolynomial<Specie, PolySize>& ip2
)
{
return ip2 - ip1;

View File

@ -28,27 +28,37 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::incompressiblePerfectGas::incompressiblePerfectGas(Istream& is)
template<class Specie>
Foam::incompressiblePerfectGas<Specie>::incompressiblePerfectGas(Istream& is)
:
specie(is),
Specie(is),
pRef_(readScalar(is))
{
is.check("incompressiblePerfectGas::incompressiblePerfectGas(Istream& is)");
is.check
(
"incompressiblePerfectGas<Specie>::"
"incompressiblePerfectGas(Istream& is)"
);
}
Foam::incompressiblePerfectGas::incompressiblePerfectGas(const dictionary& dict)
template<class Specie>
Foam::incompressiblePerfectGas<Specie>::incompressiblePerfectGas
(
const dictionary& dict
)
:
specie(dict),
Specie(dict),
pRef_(readScalar(dict.subDict("equationOfState").lookup("pRef")))
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::incompressiblePerfectGas::write(Ostream& os) const
template<class Specie>
void Foam::incompressiblePerfectGas<Specie>::write(Ostream& os) const
{
specie::write(os);
Specie::write(os);
dictionary dict("equationOfState");
dict.add("pRef", pRef_);
@ -58,14 +68,20 @@ void Foam::incompressiblePerfectGas::write(Ostream& os) const
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
Foam::Ostream& Foam::operator<<(Ostream& os, const incompressiblePerfectGas& pg)
template<class Specie>
Foam::Ostream& Foam::operator<<
(
Ostream& os,
const incompressiblePerfectGas<Specie>& pg
)
{
os << static_cast<const specie&>(pg)
os << static_cast<const Specie&>(pg)
<< token::SPACE << pg.pRef_;
os.check
(
"Ostream& operator<<(Ostream& os, const incompressiblePerfectGas& st)"
"Ostream& operator<<"
"(Ostream& os, const incompressiblePerfectGas<Specie>& st)"
);
return os;
}

View File

@ -38,7 +38,6 @@ SourceFiles
#ifndef incompressiblePerfectGas_H
#define incompressiblePerfectGas_H
#include "specie.H"
#include "autoPtr.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -46,13 +45,54 @@ SourceFiles
namespace Foam
{
// Forward declaration of friend functions and operators
template<class Specie> class incompressiblePerfectGas;
template<class Specie>
inline incompressiblePerfectGas<Specie> operator+
(
const incompressiblePerfectGas<Specie>&,
const incompressiblePerfectGas<Specie>&
);
template<class Specie>
inline incompressiblePerfectGas<Specie> operator-
(
const incompressiblePerfectGas<Specie>&,
const incompressiblePerfectGas<Specie>&
);
template<class Specie>
inline incompressiblePerfectGas<Specie> operator*
(
const scalar,
const incompressiblePerfectGas<Specie>&
);
template<class Specie>
inline incompressiblePerfectGas<Specie> operator==
(
const incompressiblePerfectGas<Specie>&,
const incompressiblePerfectGas<Specie>&
);
template<class Specie>
Ostream& operator<<
(
Ostream&,
const incompressiblePerfectGas<Specie>&
);
/*---------------------------------------------------------------------------*\
Class incompressiblePerfectGas Declaration
\*---------------------------------------------------------------------------*/
template<class Specie>
class incompressiblePerfectGas
:
public specie
public Specie
{
// Private data
@ -65,7 +105,7 @@ public:
// Constructors
//- Construct from components
inline incompressiblePerfectGas(const specie& sp);
inline incompressiblePerfectGas(const Specie& sp);
//- Construct from Istream
incompressiblePerfectGas(Istream&);
@ -132,25 +172,25 @@ public:
// Friend operators
inline friend incompressiblePerfectGas operator+
inline friend incompressiblePerfectGas operator+ <Specie>
(
const incompressiblePerfectGas&,
const incompressiblePerfectGas&
);
inline friend incompressiblePerfectGas operator-
inline friend incompressiblePerfectGas operator- <Specie>
(
const incompressiblePerfectGas&,
const incompressiblePerfectGas&
);
inline friend incompressiblePerfectGas operator*
inline friend incompressiblePerfectGas operator* <Specie>
(
const scalar s,
const incompressiblePerfectGas&
);
inline friend incompressiblePerfectGas operator==
inline friend incompressiblePerfectGas operator== <Specie>
(
const incompressiblePerfectGas&,
const incompressiblePerfectGas&
@ -159,7 +199,11 @@ public:
// Ostream Operator
friend Ostream& operator<<(Ostream&, const incompressiblePerfectGas&);
friend Ostream& operator<< <Specie>
(
Ostream&,
const incompressiblePerfectGas&
);
};
@ -171,6 +215,10 @@ public:
#include "incompressiblePerfectGasI.H"
#ifdef NoRepository
# include "incompressiblePerfectGas.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif

View File

@ -27,85 +27,109 @@ License
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
inline Foam::incompressiblePerfectGas::incompressiblePerfectGas
template<class Specie>
inline Foam::incompressiblePerfectGas<Specie>::incompressiblePerfectGas
(
const specie& sp
const Specie& sp
)
:
specie(sp)
Specie(sp)
{}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
inline Foam::incompressiblePerfectGas::incompressiblePerfectGas
template<class Specie>
inline Foam::incompressiblePerfectGas<Specie>::incompressiblePerfectGas
(
const word& name,
const incompressiblePerfectGas& pg
const incompressiblePerfectGas<Specie>& pg
)
:
specie(name, pg)
Specie(name, pg)
{}
inline Foam::autoPtr<Foam::incompressiblePerfectGas>
Foam::incompressiblePerfectGas::clone() const
template<class Specie>
inline Foam::autoPtr<Foam::incompressiblePerfectGas<Specie> >
Foam::incompressiblePerfectGas<Specie>::clone() const
{
return autoPtr<incompressiblePerfectGas>
return autoPtr<incompressiblePerfectGas<Specie> >
(
new incompressiblePerfectGas(*this)
new incompressiblePerfectGas<Specie>(*this)
);
}
inline Foam::autoPtr<Foam::incompressiblePerfectGas>
Foam::incompressiblePerfectGas::New
template<class Specie>
inline Foam::autoPtr<Foam::incompressiblePerfectGas<Specie> >
Foam::incompressiblePerfectGas<Specie>::New
(
Istream& is
)
{
return autoPtr<incompressiblePerfectGas>(new incompressiblePerfectGas(is));
return autoPtr<incompressiblePerfectGas<Specie> >
(
new incompressiblePerfectGas<Specie>(is)
);
}
inline Foam::autoPtr<Foam::incompressiblePerfectGas>
Foam::incompressiblePerfectGas::New
template<class Specie>
inline Foam::autoPtr<Foam::incompressiblePerfectGas<Specie> >
Foam::incompressiblePerfectGas<Specie>::New
(
const dictionary& dict
)
{
return autoPtr<incompressiblePerfectGas>
return autoPtr<incompressiblePerfectGas<Specie> >
(
new incompressiblePerfectGas(dict)
new incompressiblePerfectGas<Specie>(dict)
);
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline Foam::scalar Foam::incompressiblePerfectGas::rho
template<class Specie>
inline Foam::scalar Foam::incompressiblePerfectGas<Specie>::rho
(
scalar p,
scalar T
) const
{
return pRef_/(R()*T);
return pRef_/(this->R()*T);
}
inline Foam::scalar Foam::incompressiblePerfectGas::psi(scalar, scalar T) const
template<class Specie>
inline Foam::scalar Foam::incompressiblePerfectGas<Specie>::psi
(
scalar,
scalar T
) const
{
return 0.0;
}
inline Foam::scalar Foam::incompressiblePerfectGas::Z(scalar, scalar) const
template<class Specie>
inline Foam::scalar Foam::incompressiblePerfectGas<Specie>::Z
(
scalar,
scalar
) const
{
return 0.0;
}
inline Foam::scalar Foam::incompressiblePerfectGas::cpMcv(scalar, scalar) const
template<class Specie>
inline Foam::scalar Foam::incompressiblePerfectGas<Specie>::cpMcv
(
scalar,
scalar
) const
{
return this->RR;
}
@ -114,74 +138,81 @@ inline Foam::scalar Foam::incompressiblePerfectGas::cpMcv(scalar, scalar) const
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
inline void Foam::incompressiblePerfectGas::operator+=
template<class Specie>
inline void Foam::incompressiblePerfectGas<Specie>::operator+=
(
const incompressiblePerfectGas& pg
const incompressiblePerfectGas<Specie>& pg
)
{
specie::operator+=(pg);
Specie::operator+=(pg);
}
inline void Foam::incompressiblePerfectGas::operator-=
template<class Specie>
inline void Foam::incompressiblePerfectGas<Specie>::operator-=
(
const incompressiblePerfectGas& pg
const incompressiblePerfectGas<Specie>& pg
)
{
specie::operator-=(pg);
Specie::operator-=(pg);
}
inline void Foam::incompressiblePerfectGas::operator*=(const scalar s)
template<class Specie>
inline void Foam::incompressiblePerfectGas<Specie>::operator*=(const scalar s)
{
specie::operator*=(s);
Specie::operator*=(s);
}
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
inline Foam::incompressiblePerfectGas Foam::operator+
template<class Specie>
inline Foam::incompressiblePerfectGas<Specie> Foam::operator+
(
const incompressiblePerfectGas& pg1,
const incompressiblePerfectGas& pg2
const incompressiblePerfectGas<Specie>& pg1,
const incompressiblePerfectGas<Specie>& pg2
)
{
return incompressiblePerfectGas
return incompressiblePerfectGas<Specie>
(
static_cast<const specie&>(pg1)
+ static_cast<const specie&>(pg2)
static_cast<const Specie&>(pg1)
+ static_cast<const Specie&>(pg2)
);
}
inline Foam::incompressiblePerfectGas Foam::operator-
template<class Specie>
inline Foam::incompressiblePerfectGas<Specie> Foam::operator-
(
const incompressiblePerfectGas& pg1,
const incompressiblePerfectGas& pg2
const incompressiblePerfectGas<Specie>& pg1,
const incompressiblePerfectGas<Specie>& pg2
)
{
return incompressiblePerfectGas
return incompressiblePerfectGas<Specie>
(
static_cast<const specie&>(pg1)
- static_cast<const specie&>(pg2)
static_cast<const Specie&>(pg1)
- static_cast<const Specie&>(pg2)
);
}
inline Foam::incompressiblePerfectGas Foam::operator*
template<class Specie>
inline Foam::incompressiblePerfectGas<Specie> Foam::operator*
(
const scalar s,
const incompressiblePerfectGas& pg
const incompressiblePerfectGas<Specie>& pg
)
{
return incompressiblePerfectGas(s*static_cast<const specie&>(pg));
return incompressiblePerfectGas<Specie>(s*static_cast<const Specie&>(pg));
}
inline Foam::incompressiblePerfectGas Foam::operator==
template<class Specie>
inline Foam::incompressiblePerfectGas<Specie> Foam::operator==
(
const incompressiblePerfectGas& pg1,
const incompressiblePerfectGas& pg2
const incompressiblePerfectGas<Specie>& pg1,
const incompressiblePerfectGas<Specie>& pg2
)
{
return pg2 - pg1;

View File

@ -28,35 +28,39 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::perfectGas::perfectGas(Istream& is)
template<class Specie>
Foam::perfectGas<Specie>::perfectGas(Istream& is)
:
specie(is)
Specie(is)
{
is.check("perfectGas::perfectGas(Istream& is)");
is.check("perfectGas<Specie>::perfectGas(Istream& is)");
}
Foam::perfectGas::perfectGas(const dictionary& dict)
template<class Specie>
Foam::perfectGas<Specie>::perfectGas(const dictionary& dict)
:
specie(dict)
Specie(dict)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::perfectGas::write(Ostream& os) const
template<class Specie>
void Foam::perfectGas<Specie>::write(Ostream& os) const
{
specie::write(os);
Specie::write(os);
}
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
Foam::Ostream& Foam::operator<<(Ostream& os, const perfectGas& pg)
template<class Specie>
Foam::Ostream& Foam::operator<<(Ostream& os, const perfectGas<Specie>& pg)
{
os << static_cast<const specie&>(pg);
os << static_cast<const Specie&>(pg);
os.check("Ostream& operator<<(Ostream& os, const perfectGas& st)");
os.check("Ostream& operator<<(Ostream& os, const perfectGas<Specie>& st)");
return os;
}

View File

@ -36,7 +36,6 @@ SourceFiles
#ifndef perfectGas_H
#define perfectGas_H
#include "specie.H"
#include "autoPtr.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -44,13 +43,54 @@ SourceFiles
namespace Foam
{
// Forward declaration of friend functions and operators
template<class Specie> class perfectGas;
template<class Specie>
inline perfectGas<Specie> operator+
(
const perfectGas<Specie>&,
const perfectGas<Specie>&
);
template<class Specie>
inline perfectGas<Specie> operator-
(
const perfectGas<Specie>&,
const perfectGas<Specie>&
);
template<class Specie>
inline perfectGas<Specie> operator*
(
const scalar,
const perfectGas<Specie>&
);
template<class Specie>
inline perfectGas<Specie> operator==
(
const perfectGas<Specie>&,
const perfectGas<Specie>&
);
template<class Specie>
Ostream& operator<<
(
Ostream&,
const perfectGas<Specie>&
);
/*---------------------------------------------------------------------------*\
Class perfectGas Declaration
\*---------------------------------------------------------------------------*/
template<class Specie>
class perfectGas
:
public specie
public Specie
{
public:
@ -58,7 +98,7 @@ public:
// Constructors
//- Construct from components
inline perfectGas(const specie& sp);
inline perfectGas(const Specie& sp);
//- Construct from Istream
perfectGas(Istream&);
@ -118,25 +158,25 @@ public:
// Friend operators
inline friend perfectGas operator+
inline friend perfectGas operator+ <Specie>
(
const perfectGas&,
const perfectGas&
);
inline friend perfectGas operator-
inline friend perfectGas operator- <Specie>
(
const perfectGas&,
const perfectGas&
);
inline friend perfectGas operator*
inline friend perfectGas operator* <Specie>
(
const scalar s,
const perfectGas&
);
inline friend perfectGas operator==
inline friend perfectGas operator== <Specie>
(
const perfectGas&,
const perfectGas&
@ -145,7 +185,11 @@ public:
// Ostream Operator
friend Ostream& operator<<(Ostream&, const perfectGas&);
friend Ostream& operator<< <Specie>
(
Ostream&,
const perfectGas&
);
};
@ -157,6 +201,10 @@ public:
#include "perfectGasI.H"
#ifdef NoRepository
# include "perfectGas.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif

View File

@ -27,62 +27,77 @@ License
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
inline Foam::perfectGas::perfectGas(const specie& sp)
template<class Specie>
inline Foam::perfectGas<Specie>::perfectGas(const Specie& sp)
:
specie(sp)
Specie(sp)
{}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
inline Foam::perfectGas::perfectGas(const word& name, const perfectGas& pg)
template<class Specie>
inline Foam::perfectGas<Specie>::perfectGas
(
const word& name,
const perfectGas<Specie>& pg
)
:
specie(name, pg)
Specie(name, pg)
{}
inline Foam::autoPtr<Foam::perfectGas> Foam::perfectGas::clone() const
template<class Specie>
inline Foam::autoPtr<Foam::perfectGas<Specie> >
Foam::perfectGas<Specie>::clone() const
{
return autoPtr<perfectGas>(new perfectGas(*this));
return autoPtr<perfectGas<Specie> >(new perfectGas<Specie>(*this));
}
inline Foam::autoPtr<Foam::perfectGas> Foam::perfectGas::New(Istream& is)
template<class Specie>
inline Foam::autoPtr<Foam::perfectGas<Specie> >
Foam::perfectGas<Specie>::New(Istream& is)
{
return autoPtr<perfectGas>(new perfectGas(is));
return autoPtr<perfectGas<Specie> >(new perfectGas<Specie>(is));
}
inline Foam::autoPtr<Foam::perfectGas> Foam::perfectGas::New
template<class Specie>
inline Foam::autoPtr<Foam::perfectGas<Specie> > Foam::perfectGas<Specie>::New
(
const dictionary& dict
)
{
return autoPtr<perfectGas>(new perfectGas(dict));
return autoPtr<perfectGas<Specie> >(new perfectGas<Specie>(dict));
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline Foam::scalar Foam::perfectGas::rho(scalar p, scalar T) const
template<class Specie>
inline Foam::scalar Foam::perfectGas<Specie>::rho(scalar p, scalar T) const
{
return p/(R()*T);
return p/(this->R()*T);
}
inline Foam::scalar Foam::perfectGas::psi(scalar, scalar T) const
template<class Specie>
inline Foam::scalar Foam::perfectGas<Specie>::psi(scalar, scalar T) const
{
return 1.0/(R()*T);
return 1.0/(this->R()*T);
}
inline Foam::scalar Foam::perfectGas::Z(scalar, scalar) const
template<class Specie>
inline Foam::scalar Foam::perfectGas<Specie>::Z(scalar, scalar) const
{
return 1.0;
}
inline Foam::scalar Foam::perfectGas::cpMcv(scalar, scalar) const
template<class Specie>
inline Foam::scalar Foam::perfectGas<Specie>::cpMcv(scalar, scalar) const
{
return this->RR;
}
@ -90,68 +105,75 @@ inline Foam::scalar Foam::perfectGas::cpMcv(scalar, scalar) const
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
inline void Foam::perfectGas::operator+=(const perfectGas& pg)
template<class Specie>
inline void Foam::perfectGas<Specie>::operator+=(const perfectGas<Specie>& pg)
{
specie::operator+=(pg);
Specie::operator+=(pg);
}
inline void Foam::perfectGas::operator-=(const perfectGas& pg)
template<class Specie>
inline void Foam::perfectGas<Specie>::operator-=(const perfectGas<Specie>& pg)
{
specie::operator-=(pg);
Specie::operator-=(pg);
}
inline void Foam::perfectGas::operator*=(const scalar s)
template<class Specie>
inline void Foam::perfectGas<Specie>::operator*=(const scalar s)
{
specie::operator*=(s);
Specie::operator*=(s);
}
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
inline Foam::perfectGas Foam::operator+
template<class Specie>
inline Foam::perfectGas<Specie> Foam::operator+
(
const perfectGas& pg1,
const perfectGas& pg2
const perfectGas<Specie>& pg1,
const perfectGas<Specie>& pg2
)
{
return perfectGas
return perfectGas<Specie>
(
static_cast<const specie&>(pg1)
+ static_cast<const specie&>(pg2)
static_cast<const Specie&>(pg1)
+ static_cast<const Specie&>(pg2)
);
}
inline Foam::perfectGas Foam::operator-
template<class Specie>
inline Foam::perfectGas<Specie> Foam::operator-
(
const perfectGas& pg1,
const perfectGas& pg2
const perfectGas<Specie>& pg1,
const perfectGas<Specie>& pg2
)
{
return perfectGas
return perfectGas<Specie>
(
static_cast<const specie&>(pg1)
- static_cast<const specie&>(pg2)
static_cast<const Specie&>(pg1)
- static_cast<const Specie&>(pg2)
);
}
inline Foam::perfectGas Foam::operator*
template<class Specie>
inline Foam::perfectGas<Specie> Foam::operator*
(
const scalar s,
const perfectGas& pg
const perfectGas<Specie>& pg
)
{
return perfectGas(s*static_cast<const specie&>(pg));
return perfectGas<Specie>(s*static_cast<const Specie&>(pg));
}
inline Foam::perfectGas Foam::operator==
template<class Specie>
inline Foam::perfectGas<Specie> Foam::operator==
(
const perfectGas& pg1,
const perfectGas& pg2
const perfectGas<Specie>& pg1,
const perfectGas<Specie>& pg2
)
{
return pg2 - pg1;

View File

@ -28,27 +28,30 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::rhoConst::rhoConst(Istream& is)
template<class Specie>
Foam::rhoConst<Specie>::rhoConst(Istream& is)
:
specie(is),
Specie(is),
rho_(readScalar(is))
{
is.check("rhoConst::rhoConst(Istream& is)");
is.check("rhoConst<Specie>::rhoConst(Istream& is)");
}
Foam::rhoConst::rhoConst(const dictionary& dict)
template<class Specie>
Foam::rhoConst<Specie>::rhoConst(const dictionary& dict)
:
specie(dict),
Specie(dict),
rho_(readScalar(dict.subDict("equationOfState").lookup("rho")))
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::rhoConst::write(Ostream& os) const
template<class Specie>
void Foam::rhoConst<Specie>::write(Ostream& os) const
{
specie::write(os);
Specie::write(os);
dictionary dict("equationOfState");
dict.add("rho", rho_);
@ -59,12 +62,13 @@ void Foam::rhoConst::write(Ostream& os) const
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
Foam::Ostream& Foam::operator<<(Ostream& os, const rhoConst& ico)
template<class Specie>
Foam::Ostream& Foam::operator<<(Ostream& os, const rhoConst<Specie>& ico)
{
os << static_cast<const specie&>(ico)
os << static_cast<const Specie&>(ico)
<< token::SPACE << ico.rho_;
os.check("Ostream& operator<<(Ostream& os, const rhoConst& ico)");
os.check("Ostream& operator<<(Ostream& os, const rhoConst<Specie>& ico)");
return os;
}

View File

@ -36,7 +36,6 @@ SourceFiles
#ifndef rhoConst_H
#define rhoConst_H
#include "specie.H"
#include "autoPtr.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -44,13 +43,54 @@ SourceFiles
namespace Foam
{
// Forward declaration of friend functions and operators
template<class Specie> class rhoConst;
template<class Specie>
inline rhoConst<Specie> operator+
(
const rhoConst<Specie>&,
const rhoConst<Specie>&
);
template<class Specie>
inline rhoConst<Specie> operator-
(
const rhoConst<Specie>&,
const rhoConst<Specie>&
);
template<class Specie>
inline rhoConst<Specie> operator*
(
const scalar,
const rhoConst<Specie>&
);
template<class Specie>
inline rhoConst<Specie> operator==
(
const rhoConst<Specie>&,
const rhoConst<Specie>&
);
template<class Specie>
Ostream& operator<<
(
Ostream&,
const rhoConst<Specie>&
);
/*---------------------------------------------------------------------------*\
Class rhoConst Declaration
\*---------------------------------------------------------------------------*/
template<class Specie>
class rhoConst
:
public specie
public Specie
{
// Private data
@ -63,7 +103,7 @@ public:
// Constructors
//- Construct from components
inline rhoConst(const specie& sp, const scalar rho);
inline rhoConst(const Specie& sp, const scalar rho);
//- Construct from Istream
rhoConst(Istream&);
@ -120,25 +160,25 @@ public:
// Friend operators
inline friend rhoConst operator+
inline friend rhoConst operator+ <Specie>
(
const rhoConst&,
const rhoConst&
);
inline friend rhoConst operator-
inline friend rhoConst operator- <Specie>
(
const rhoConst&,
const rhoConst&
);
inline friend rhoConst operator*
inline friend rhoConst operator* <Specie>
(
const scalar s,
const rhoConst&
);
inline friend rhoConst operator==
inline friend rhoConst operator== <Specie>
(
const rhoConst&,
const rhoConst&
@ -147,7 +187,11 @@ public:
// Ostream Operator
friend Ostream& operator<<(Ostream&, const rhoConst&);
friend Ostream& operator<< <Specie>
(
Ostream&,
const rhoConst&
);
};
@ -159,6 +203,10 @@ public:
#include "rhoConstI.H"
#ifdef NoRepository
# include "rhoConst.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif

View File

@ -27,65 +27,73 @@ License
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
inline Foam::rhoConst::rhoConst
template<class Specie>
inline Foam::rhoConst<Specie>::rhoConst
(
const specie& sp,
const Specie& sp,
const scalar rho
)
:
specie(sp),
Specie(sp),
rho_(rho)
{}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
inline Foam::rhoConst::rhoConst
template<class Specie>
inline Foam::rhoConst<Specie>::rhoConst
(
const word& name,
const rhoConst& ico
const rhoConst<Specie>& ico
)
:
specie(name, ico),
Specie(name, ico),
rho_(ico.rho_)
{}
inline Foam::autoPtr<Foam::rhoConst>
Foam::rhoConst::clone() const
template<class Specie>
inline Foam::autoPtr<Foam::rhoConst<Specie> >
Foam::rhoConst<Specie>::clone() const
{
return autoPtr<rhoConst>(new rhoConst(*this));
return autoPtr<rhoConst<Specie> >(new rhoConst<Specie>(*this));
}
inline Foam::autoPtr<Foam::rhoConst>
Foam::rhoConst::New(Istream& is)
template<class Specie>
inline Foam::autoPtr<Foam::rhoConst<Specie> >
Foam::rhoConst<Specie>::New(Istream& is)
{
return autoPtr<rhoConst>(new rhoConst(is));
return autoPtr<rhoConst<Specie> >(new rhoConst<Specie>(is));
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline Foam::scalar Foam::rhoConst::rho(scalar p, scalar T) const
template<class Specie>
inline Foam::scalar Foam::rhoConst<Specie>::rho(scalar p, scalar T) const
{
return rho_;
}
inline Foam::scalar Foam::rhoConst::psi(scalar, scalar T) const
template<class Specie>
inline Foam::scalar Foam::rhoConst<Specie>::psi(scalar, scalar T) const
{
return 0.0;
}
inline Foam::scalar Foam::rhoConst::Z(scalar, scalar) const
template<class Specie>
inline Foam::scalar Foam::rhoConst<Specie>::Z(scalar, scalar) const
{
return 0.0;
}
inline Foam::scalar Foam::rhoConst::cpMcv(scalar, scalar) const
template<class Specie>
inline Foam::scalar Foam::rhoConst<Specie>::cpMcv(scalar, scalar) const
{
return 0.0;
}
@ -93,11 +101,12 @@ inline Foam::scalar Foam::rhoConst::cpMcv(scalar, scalar) const
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
inline void Foam::rhoConst::operator+=(const rhoConst& ico)
template<class Specie>
inline void Foam::rhoConst<Specie>::operator+=(const rhoConst<Specie>& ico)
{
scalar molr1 = this->nMoles();
specie::operator+=(ico);
Specie::operator+=(ico);
molr1 /= this->nMoles();
scalar molr2 = ico.nMoles()/this->nMoles();
@ -106,11 +115,12 @@ inline void Foam::rhoConst::operator+=(const rhoConst& ico)
}
inline void Foam::rhoConst::operator-=(const rhoConst& ico)
template<class Specie>
inline void Foam::rhoConst<Specie>::operator-=(const rhoConst<Specie>& ico)
{
scalar molr1 = this->nMoles();
specie::operator-=(ico);
Specie::operator-=(ico);
molr1 /= this->nMoles();
scalar molr2 = ico.nMoles()/this->nMoles();
@ -119,66 +129,71 @@ inline void Foam::rhoConst::operator-=(const rhoConst& ico)
}
inline void Foam::rhoConst::operator*=(const scalar s)
template<class Specie>
inline void Foam::rhoConst<Specie>::operator*=(const scalar s)
{
specie::operator*=(s);
Specie::operator*=(s);
}
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
inline Foam::rhoConst Foam::operator+
template<class Specie>
inline Foam::rhoConst<Specie> Foam::operator+
(
const rhoConst& ico1,
const rhoConst& ico2
const rhoConst<Specie>& ico1,
const rhoConst<Specie>& ico2
)
{
scalar nMoles = ico1.nMoles() + ico2.nMoles();
scalar molr1 = ico1.nMoles()/nMoles;
scalar molr2 = ico2.nMoles()/nMoles;
return rhoConst
return rhoConst<Specie>
(
static_cast<const specie&>(ico1)
+ static_cast<const specie&>(ico2),
static_cast<const Specie&>(ico1)
+ static_cast<const Specie&>(ico2),
molr1*ico1.rho_ + molr2*ico2.rho_
);
}
inline Foam::rhoConst Foam::operator-
template<class Specie>
inline Foam::rhoConst<Specie> Foam::operator-
(
const rhoConst& ico1,
const rhoConst& ico2
const rhoConst<Specie>& ico1,
const rhoConst<Specie>& ico2
)
{
scalar nMoles = ico1.nMoles() + ico2.nMoles();
scalar molr1 = ico1.nMoles()/nMoles;
scalar molr2 = ico2.nMoles()/nMoles;
return rhoConst
return rhoConst<Specie>
(
static_cast<const specie&>(ico1)
- static_cast<const specie&>(ico2),
static_cast<const Specie&>(ico1)
- static_cast<const Specie&>(ico2),
molr1*ico1.rho_ - molr2*ico2.rho_
);
}
inline Foam::rhoConst Foam::operator*
template<class Specie>
inline Foam::rhoConst<Specie> Foam::operator*
(
const scalar s,
const rhoConst& ico
const rhoConst<Specie>& ico
)
{
return rhoConst(s*static_cast<const specie&>(ico), ico.rho_);
return rhoConst<Specie>(s*static_cast<const Specie&>(ico), ico.rho_);
}
inline Foam::rhoConst Foam::operator==
template<class Specie>
inline Foam::rhoConst<Specie> Foam::operator==
(
const rhoConst& ico1,
const rhoConst& ico2
const rhoConst<Specie>& ico1,
const rhoConst<Specie>& ico2
)
{
return ico2 - ico1;

View File

@ -32,6 +32,7 @@ Description
#ifndef thermoPhysicsTypes_H
#define thermoPhysicsTypes_H
#include "specie.H"
#include "perfectGas.H"
#include "incompressiblePerfectGas.H"
#include "hConstThermo.H"
@ -56,7 +57,7 @@ namespace Foam
<
hConstThermo
<
perfectGas
perfectGas<specie>
>,
sensibleEnthalpy
>
@ -69,7 +70,7 @@ namespace Foam
<
janafThermo
<
perfectGas
perfectGas<specie>
>,
sensibleEnthalpy
>
@ -82,7 +83,7 @@ namespace Foam
<
hConstThermo
<
incompressiblePerfectGas
incompressiblePerfectGas<specie>
>,
sensibleEnthalpy
>
@ -95,7 +96,7 @@ namespace Foam
<
janafThermo
<
incompressiblePerfectGas
incompressiblePerfectGas<specie>
>,
sensibleEnthalpy
>
@ -108,7 +109,7 @@ namespace Foam
<
hPolynomialThermo
<
icoPolynomial<8>,
icoPolynomial<specie, 8>,
8
>,
sensibleEnthalpy