second upload the fully integrated real gas library
This commit is contained in:
parent
0a151e7e5b
commit
6a2c85bd4a
68 changed files with 32599 additions and 0 deletions
|
@ -149,6 +149,8 @@ void Foam::basicThermo::eBoundaryCorrection(volScalarField& e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//real Gas Boundary Conditions
|
||||||
|
|
||||||
Foam::wordList Foam::basicThermo::hRealBoundaryTypes()
|
Foam::wordList Foam::basicThermo::hRealBoundaryTypes()
|
||||||
{
|
{
|
||||||
const volScalarField::GeometricBoundaryField& tbf = T_.boundaryField();
|
const volScalarField::GeometricBoundaryField& tbf = T_.boundaryField();
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "fixedEnthalpyRealFluids.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "basicPsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::fixedEnthalpyRealFluids::fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(p, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::fixedEnthalpyRealFluids::fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fixedEnthalpyRealFluids& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(ptf, p, iF, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::fixedEnthalpyRealFluids::fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(p, iF, dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::fixedEnthalpyRealFluids::fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fixedEnthalpyRealFluids& tppsf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(tppsf)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::fixedEnthalpyRealFluids::fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fixedEnthalpyRealFluids& tppsf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(tppsf, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::fixedEnthalpyRealFluids::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const basicPsiThermo& thermo = db().lookupObject<basicPsiThermo>
|
||||||
|
(
|
||||||
|
"thermophysicalProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
const label patchi = patch().index();
|
||||||
|
|
||||||
|
fvPatchScalarField& Tw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.T().boundaryField()[patchi]);
|
||||||
|
Tw.evaluate();
|
||||||
|
|
||||||
|
fvPatchScalarField& pw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.p().boundaryField()[patchi]);
|
||||||
|
pw.evaluate();
|
||||||
|
|
||||||
|
|
||||||
|
if (dimensionedInternalField().name() == "h")
|
||||||
|
{
|
||||||
|
|
||||||
|
operator==(thermo.h(pw,Tw, patchi));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
operator==(thermo.hs(Tw, patchi));
|
||||||
|
}
|
||||||
|
|
||||||
|
fixedValueFvPatchScalarField::updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
makePatchTypeField
|
||||||
|
(
|
||||||
|
fvPatchScalarField,
|
||||||
|
fixedEnthalpyRealFluids
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::fixedEnthalpyRealFluids
|
||||||
|
|
||||||
|
Description
|
||||||
|
A fixed boundary condition for enthalpy
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
fixedEnthalpyRealFluids.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef fixedEnthalpyRealFluids_H
|
||||||
|
#define fixedEnthalpyRealFluids_H
|
||||||
|
|
||||||
|
#include "fixedValueFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class fixedEnthalpyRealFluids Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class fixedEnthalpyRealFluids
|
||||||
|
:
|
||||||
|
public fixedValueFvPatchScalarField
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("fixedEnthalpy");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given fixedEnthalpyFvPatchScalarField
|
||||||
|
// onto a new patch
|
||||||
|
fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fixedEnthalpyRealFluids&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fixedEnthalpyRealFluids&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new fixedEnthalpyRealFluids(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
fixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fixedEnthalpyRealFluids&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new fixedEnthalpyRealFluids(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,137 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "fixedInternalEnergyRealFluids.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "basicPsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
fixedInternalEnergyRealFluids::fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(p, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
fixedInternalEnergyRealFluids::fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fixedInternalEnergyRealFluids& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(ptf, p, iF, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
fixedInternalEnergyRealFluids::fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(p, iF, dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
fixedInternalEnergyRealFluids::fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fixedInternalEnergyRealFluids& tppsf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(tppsf)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
fixedInternalEnergyRealFluids::fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fixedInternalEnergyRealFluids& tppsf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(tppsf, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void fixedInternalEnergyRealFluids::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const basicPsiThermo& thermo = db().lookupObject<basicPsiThermo>
|
||||||
|
(
|
||||||
|
"thermophysicalProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
const label patchi = patch().index();
|
||||||
|
|
||||||
|
fvPatchScalarField& Tw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.T().boundaryField()[patchi]);
|
||||||
|
Tw.evaluate();
|
||||||
|
|
||||||
|
fvPatchScalarField& pw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.p().boundaryField()[patchi]);
|
||||||
|
pw.evaluate();
|
||||||
|
|
||||||
|
operator==(thermo.e(pw,Tw, patchi));
|
||||||
|
|
||||||
|
fixedValueFvPatchScalarField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
makePatchTypeField(fvPatchScalarField, fixedInternalEnergyRealFluids);
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::fixedInternalEnergyRealFluids
|
||||||
|
|
||||||
|
Description
|
||||||
|
A fixed boundary condition for internal energy
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
fixedInternalEnergyRealFluids.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef fixedInternalEnergyRealFluids_H
|
||||||
|
#define fixedInternalEnergyRealFluids_H
|
||||||
|
|
||||||
|
#include "fixedValueFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class fixedInternalEnergyRealFluids Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class fixedInternalEnergyRealFluids
|
||||||
|
:
|
||||||
|
public fixedValueFvPatchScalarField
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("fixedInternalEnergy");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given fixedInternalEnergyRealFluids
|
||||||
|
// onto a new patch
|
||||||
|
fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fixedInternalEnergyRealFluids&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fixedInternalEnergyRealFluids&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new fixedInternalEnergyRealFluids(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
fixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fixedInternalEnergyRealFluids&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new fixedInternalEnergyRealFluids(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,154 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright held by original author
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "gradientEnthalpyRealFluids.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "basicPsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::gradientEnthalpyRealFluids::gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(p, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::gradientEnthalpyRealFluids::gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const gradientEnthalpyRealFluids& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(ptf, p, iF, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::gradientEnthalpyRealFluids::gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(p, iF, dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::gradientEnthalpyRealFluids::gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const gradientEnthalpyRealFluids& tppsf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(tppsf)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::gradientEnthalpyRealFluids::gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const gradientEnthalpyRealFluids& tppsf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(tppsf, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::gradientEnthalpyRealFluids::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const basicPsiThermo& thermo = db().lookupObject<basicPsiThermo>
|
||||||
|
(
|
||||||
|
"thermophysicalProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
const label patchi = patch().index();
|
||||||
|
|
||||||
|
fvPatchScalarField& pw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.p().boundaryField()[patchi]);
|
||||||
|
|
||||||
|
pw.evaluate();
|
||||||
|
|
||||||
|
fvPatchScalarField& Tw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.T().boundaryField()[patchi]);
|
||||||
|
|
||||||
|
Tw.evaluate();
|
||||||
|
|
||||||
|
if (dimensionedInternalField().name() == "h")
|
||||||
|
{
|
||||||
|
gradient() = thermo.Cp(pw,Tw, patchi)*Tw.snGrad()
|
||||||
|
+ patch().deltaCoeffs()*
|
||||||
|
(
|
||||||
|
thermo.h(pw,Tw, patchi)
|
||||||
|
- thermo.h(pw,Tw, patch().faceCells())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/* else
|
||||||
|
{
|
||||||
|
gradient() = thermo.Cp(Tw, patchi)*Tw.snGrad()
|
||||||
|
+ patch().deltaCoeffs()*
|
||||||
|
(
|
||||||
|
thermo.hs(Tw, patchi)
|
||||||
|
- thermo.hs(Tw, patch().faceCells())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
fixedGradientFvPatchScalarField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
makePatchTypeField
|
||||||
|
(
|
||||||
|
fvPatchScalarField,
|
||||||
|
gradientEnthalpyRealFluids
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright held by original author
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::gradientEnthalpyRealFluids
|
||||||
|
|
||||||
|
Description
|
||||||
|
Gradient boundary condition for enthalpy
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
gradientEnthalpyRealFluids.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef gradientEnthalpyRealFluids_H
|
||||||
|
#define gradientEnthalpyRealFluids_H
|
||||||
|
|
||||||
|
#include "fixedGradientFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class gradientEnthalpyRealFluids Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class gradientEnthalpyRealFluids
|
||||||
|
:
|
||||||
|
public fixedGradientFvPatchScalarField
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("gradientEnthalpy");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given gradientEnthalpyRealFluids
|
||||||
|
// onto a new patch
|
||||||
|
gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const gradientEnthalpyRealFluids&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const gradientEnthalpyRealFluids&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new gradientEnthalpyRealFluids(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
gradientEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const gradientEnthalpyRealFluids&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new gradientEnthalpyRealFluids(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "gradientInternalEnergyRealFluids.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "basicPsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
gradientInternalEnergyRealFluids::gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(p, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
gradientInternalEnergyRealFluids::gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const gradientInternalEnergyRealFluids& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(ptf, p, iF, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
gradientInternalEnergyRealFluids::gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(p, iF, dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
gradientInternalEnergyRealFluids::gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const gradientInternalEnergyRealFluids& tppsf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(tppsf)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
gradientInternalEnergyRealFluids::gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const gradientInternalEnergyRealFluids& tppsf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(tppsf, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void gradientInternalEnergyRealFluids::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const basicPsiThermo& thermo = db().lookupObject<basicPsiThermo>
|
||||||
|
(
|
||||||
|
"thermophysicalProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
const label patchi = patch().index();
|
||||||
|
|
||||||
|
fvPatchScalarField& Tw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.T().boundaryField()[patchi]);
|
||||||
|
|
||||||
|
Tw.evaluate();
|
||||||
|
|
||||||
|
fvPatchScalarField& pw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.p().boundaryField()[patchi]);
|
||||||
|
|
||||||
|
pw.evaluate();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
gradient() = thermo.Cv(pw,Tw, patchi)*Tw.snGrad()
|
||||||
|
+ patch().deltaCoeffs()*
|
||||||
|
(
|
||||||
|
thermo.e(pw,Tw, patchi)
|
||||||
|
- thermo.e(pw,Tw, patch().faceCells())
|
||||||
|
);
|
||||||
|
|
||||||
|
fixedGradientFvPatchScalarField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
makePatchTypeField(fvPatchScalarField, gradientInternalEnergyRealFluids);
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::gradientInternalEnergyRealFluids
|
||||||
|
|
||||||
|
Description
|
||||||
|
Gradient boundary condition for internal energy
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
gradientInternalEnergyRealFluids.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef gradientInternalEnergyRealFluids_H
|
||||||
|
#define gradientInternalEnergyRealFluids_H
|
||||||
|
|
||||||
|
#include "fixedGradientFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class gradientInternalEnergyRealFluids Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class gradientInternalEnergyRealFluids
|
||||||
|
:
|
||||||
|
public fixedGradientFvPatchScalarField
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("gradientInternalEnergy");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given gradientInternalEnergyRealFluids
|
||||||
|
// onto a new patch
|
||||||
|
gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const gradientInternalEnergyRealFluids&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const gradientInternalEnergyRealFluids&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new gradientInternalEnergyRealFluids(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
gradientInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const gradientInternalEnergyRealFluids&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new gradientInternalEnergyRealFluids(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,164 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "mixedEnthalpyRealFluids.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "basicPsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::mixedEnthalpyRealFluids::mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(p, iF)
|
||||||
|
{
|
||||||
|
valueFraction() = 0.0;
|
||||||
|
refValue() = 0.0;
|
||||||
|
refGrad() = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::mixedEnthalpyRealFluids::mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const mixedEnthalpyRealFluids& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(ptf, p, iF, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::mixedEnthalpyRealFluids::mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(p, iF, dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::mixedEnthalpyRealFluids::mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const mixedEnthalpyRealFluids& tppsf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(tppsf)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::mixedEnthalpyRealFluids::mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const mixedEnthalpyRealFluids& tppsf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(tppsf, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::mixedEnthalpyRealFluids::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const basicPsiThermo& thermo = db().lookupObject<basicPsiThermo>
|
||||||
|
(
|
||||||
|
"thermophysicalProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
const label patchi = patch().index();
|
||||||
|
|
||||||
|
mixedFvPatchScalarField& Tw = refCast<mixedFvPatchScalarField>
|
||||||
|
(
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.T().boundaryField()[patchi])
|
||||||
|
);
|
||||||
|
|
||||||
|
Tw.evaluate();
|
||||||
|
|
||||||
|
fvPatchScalarField& pw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.p().boundaryField()[patchi]);
|
||||||
|
pw.evaluate();
|
||||||
|
|
||||||
|
valueFraction() = Tw.valueFraction();
|
||||||
|
|
||||||
|
if (dimensionedInternalField().name() == "h")
|
||||||
|
{
|
||||||
|
refValue() = thermo.h(pw,Tw.refValue(), patchi);
|
||||||
|
refGrad() = thermo.Cp(pw,Tw, patchi)*Tw.refGrad()
|
||||||
|
+ patch().deltaCoeffs()*
|
||||||
|
(
|
||||||
|
thermo.h(pw,Tw, patchi)
|
||||||
|
- thermo.h(pw,Tw, patch().faceCells())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/* else
|
||||||
|
{
|
||||||
|
refValue() = thermo.hs(Tw.refValue(), patchi);
|
||||||
|
refGrad() = thermo.CpBC(pw,Tw, patchi)*Tw.refGrad()
|
||||||
|
+ patch().deltaCoeffs()*
|
||||||
|
(
|
||||||
|
thermo.hs(Tw, patchi)
|
||||||
|
- thermo.hs(Tw, patch().faceCells())
|
||||||
|
);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
mixedFvPatchScalarField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
makePatchTypeField
|
||||||
|
(
|
||||||
|
fvPatchScalarField,
|
||||||
|
mixedEnthalpyRealFluids
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::mixedEnthalpyRealFluids
|
||||||
|
|
||||||
|
Description
|
||||||
|
Mixed boundary conditions for enthalpy
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
mixedEnthalpyRealFluids.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef mixedEnthalpyRealFluids_H
|
||||||
|
#define mixedEnthalpyRealFluids_H
|
||||||
|
|
||||||
|
#include "mixedFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class mixedEnthalpyRealFluids Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class mixedEnthalpyRealFluids
|
||||||
|
:
|
||||||
|
public mixedFvPatchScalarField
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("mixedEnthalpy");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given mixedEnthalpyRealFluids
|
||||||
|
// onto a new patch
|
||||||
|
mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const mixedEnthalpyRealFluids&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const mixedEnthalpyRealFluids&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new mixedEnthalpyRealFluids(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
mixedEnthalpyRealFluids
|
||||||
|
(
|
||||||
|
const mixedEnthalpyRealFluids&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new mixedEnthalpyRealFluids(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,151 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "mixedInternalEnergyRealFluids.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "basicPsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
mixedInternalEnergyRealFluids::mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(p, iF)
|
||||||
|
{
|
||||||
|
valueFraction() = 0.0;
|
||||||
|
refValue() = 0.0;
|
||||||
|
refGrad() = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mixedInternalEnergyRealFluids::mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const mixedInternalEnergyRealFluids& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(ptf, p, iF, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
mixedInternalEnergyRealFluids::mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(p, iF, dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
mixedInternalEnergyRealFluids::mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const mixedInternalEnergyRealFluids& tppsf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(tppsf)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
mixedInternalEnergyRealFluids::mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const mixedInternalEnergyRealFluids& tppsf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(tppsf, iF)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void mixedInternalEnergyRealFluids::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const basicPsiThermo& thermo = db().lookupObject<basicPsiThermo>
|
||||||
|
(
|
||||||
|
"thermophysicalProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
const label patchi = patch().index();
|
||||||
|
|
||||||
|
mixedFvPatchScalarField& Tw = refCast<mixedFvPatchScalarField>
|
||||||
|
(
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.T().boundaryField()[patchi])
|
||||||
|
);
|
||||||
|
|
||||||
|
Tw.evaluate();
|
||||||
|
|
||||||
|
fvPatchScalarField& pw =
|
||||||
|
const_cast<fvPatchScalarField&>(thermo.p().boundaryField()[patchi]);
|
||||||
|
pw.evaluate();
|
||||||
|
|
||||||
|
valueFraction() = Tw.valueFraction();
|
||||||
|
refValue() = thermo.e(pw,Tw.refValue(), patchi);
|
||||||
|
refGrad() = thermo.Cv(pw,Tw, patchi)*Tw.refGrad()
|
||||||
|
+ patch().deltaCoeffs()*
|
||||||
|
(
|
||||||
|
thermo.e(pw,Tw, patchi)
|
||||||
|
- thermo.e(pw,Tw, patch().faceCells())
|
||||||
|
);
|
||||||
|
|
||||||
|
mixedFvPatchScalarField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
makePatchTypeField(fvPatchScalarField, mixedInternalEnergyRealFluids);
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::mixedInternalEnergyRealFluids
|
||||||
|
|
||||||
|
Description
|
||||||
|
Mixed boundary conditions for internal energy
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
mixedInternalEnergyRealFluids.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef mixedInternalEnergyRealFluids_H
|
||||||
|
#define mixedInternalEnergyRealFluids_H
|
||||||
|
|
||||||
|
#include "mixedFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class mixedInternalEnergyRealFluids Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class mixedInternalEnergyRealFluids
|
||||||
|
:
|
||||||
|
public mixedFvPatchScalarField
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("mixedInternalEnergy");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given mixedInternalEnergyRealFluids
|
||||||
|
// onto a new patch
|
||||||
|
mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const mixedInternalEnergyRealFluids&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const mixedInternalEnergyRealFluids&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new mixedInternalEnergyRealFluids(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
mixedInternalEnergyRealFluids
|
||||||
|
(
|
||||||
|
const mixedInternalEnergyRealFluids&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new mixedInternalEnergyRealFluids(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,198 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "realFluidWallHeatTransferFvPatchScalarField.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "basicPsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::realFluidWallHeatTransferFvPatchScalarField::realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(p, iF),
|
||||||
|
Tinf_(p.size(), 0.0),
|
||||||
|
alphaWall_(p.size(), 0.0)
|
||||||
|
{
|
||||||
|
refValue() = 0.0;
|
||||||
|
refGrad() = 0.0;
|
||||||
|
valueFraction() = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::realFluidWallHeatTransferFvPatchScalarField::realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const realFluidWallHeatTransferFvPatchScalarField& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(ptf, p, iF, mapper),
|
||||||
|
Tinf_(ptf.Tinf_, mapper),
|
||||||
|
alphaWall_(ptf.alphaWall_, mapper)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::realFluidWallHeatTransferFvPatchScalarField::realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(p, iF),
|
||||||
|
Tinf_("Tinf", dict, p.size()),
|
||||||
|
alphaWall_("alphaWall", dict, p.size())
|
||||||
|
{
|
||||||
|
refValue() = Tinf_;
|
||||||
|
refGrad() = 0.0;
|
||||||
|
valueFraction() = 0.0;
|
||||||
|
|
||||||
|
if (dict.found("value"))
|
||||||
|
{
|
||||||
|
fvPatchField<scalar>::operator=
|
||||||
|
(
|
||||||
|
scalarField("value", dict, p.size())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evaluate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::realFluidWallHeatTransferFvPatchScalarField::realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const realFluidWallHeatTransferFvPatchScalarField& tppsf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(tppsf),
|
||||||
|
Tinf_(tppsf.Tinf_),
|
||||||
|
alphaWall_(tppsf.alphaWall_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::realFluidWallHeatTransferFvPatchScalarField::realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const realFluidWallHeatTransferFvPatchScalarField& tppsf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
mixedFvPatchScalarField(tppsf, iF),
|
||||||
|
Tinf_(tppsf.Tinf_),
|
||||||
|
alphaWall_(tppsf.alphaWall_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::realFluidWallHeatTransferFvPatchScalarField::autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper& m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
scalarField::autoMap(m);
|
||||||
|
Tinf_.autoMap(m);
|
||||||
|
alphaWall_.autoMap(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::realFluidWallHeatTransferFvPatchScalarField::rmap
|
||||||
|
(
|
||||||
|
const fvPatchScalarField& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mixedFvPatchScalarField::rmap(ptf, addr);
|
||||||
|
|
||||||
|
const realFluidWallHeatTransferFvPatchScalarField& tiptf =
|
||||||
|
refCast<const realFluidWallHeatTransferFvPatchScalarField>(ptf);
|
||||||
|
|
||||||
|
Tinf_.rmap(tiptf.Tinf_, addr);
|
||||||
|
alphaWall_.rmap(tiptf.alphaWall_, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::realFluidWallHeatTransferFvPatchScalarField::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const basicPsiThermo& thermo = db().lookupObject<basicPsiThermo>
|
||||||
|
(
|
||||||
|
"thermophysicalProperties"
|
||||||
|
);
|
||||||
|
|
||||||
|
const label patchi = patch().index();
|
||||||
|
|
||||||
|
const scalarField& Tw = thermo.T().boundaryField()[patchi];
|
||||||
|
const scalarField& pw = thermo.p().boundaryField()[patchi];
|
||||||
|
scalarField Cpw = thermo.Cp(pw,Tw, patchi);
|
||||||
|
|
||||||
|
valueFraction() =
|
||||||
|
1.0/
|
||||||
|
(
|
||||||
|
1.0
|
||||||
|
+ Cpw*thermo.alpha().boundaryField()[patchi]
|
||||||
|
*patch().deltaCoeffs()/alphaWall_
|
||||||
|
);
|
||||||
|
|
||||||
|
mixedFvPatchScalarField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::realFluidWallHeatTransferFvPatchScalarField::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
fvPatchScalarField::write(os);
|
||||||
|
Tinf_.writeEntry("Tinf", os);
|
||||||
|
alphaWall_.writeEntry("alphaWall", os);
|
||||||
|
writeEntry("value", os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
makePatchTypeField(fvPatchScalarField, realFluidWallHeatTransferFvPatchScalarField);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,201 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
|
||||||
|
Description
|
||||||
|
Enthalpy boundary conditions for wall heat transfer
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
realFluidWallHeatTransferFvPatchScalarField.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef realFluidWallHeatTransferFvPatchScalarField_H
|
||||||
|
#define realFluidWallHeatTransferFvPatchScalarField_H
|
||||||
|
|
||||||
|
#include "mixedFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class wallHeatTransferFvPatch Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
:
|
||||||
|
public mixedFvPatchScalarField
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Tinf
|
||||||
|
scalarField Tinf_;
|
||||||
|
|
||||||
|
//- alphaWall
|
||||||
|
scalarField alphaWall_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("realFluidWallHeatTransfer");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
// onto a new patch
|
||||||
|
realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const realFluidWallHeatTransferFvPatchScalarField&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const realFluidWallHeatTransferFvPatchScalarField&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new realFluidWallHeatTransferFvPatchScalarField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
realFluidWallHeatTransferFvPatchScalarField
|
||||||
|
(
|
||||||
|
const realFluidWallHeatTransferFvPatchScalarField&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new realFluidWallHeatTransferFvPatchScalarField(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- Return Tinf
|
||||||
|
const scalarField& Tinf() const
|
||||||
|
{
|
||||||
|
return Tinf_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return reference to Tinf to allow adjustment
|
||||||
|
scalarField& Tinf()
|
||||||
|
{
|
||||||
|
return Tinf_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return alphaWall
|
||||||
|
const scalarField& alphaWall() const
|
||||||
|
{
|
||||||
|
return alphaWall_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return reference to alphaWall to allow adjustment
|
||||||
|
scalarField& alphaWall()
|
||||||
|
{
|
||||||
|
return alphaWall_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Mapping functions
|
||||||
|
|
||||||
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
virtual void autoMap
|
||||||
|
(
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Reverse map the given fvPatchField onto this fvPatchField
|
||||||
|
virtual void rmap
|
||||||
|
(
|
||||||
|
const fvPatchScalarField&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream&) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
460
src/thermophysicalModels/basic/psiThermo/realGasHThermo/realGasHThermo.C
Executable file
460
src/thermophysicalModels/basic/psiThermo/realGasHThermo/realGasHThermo.C
Executable file
|
@ -0,0 +1,460 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "realGasHThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
void Foam::realGasHThermo<MixtureType>::calculate()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
const scalarField& hCells = h_.internalField();
|
||||||
|
const scalarField& pCells = this->p_.internalField();
|
||||||
|
|
||||||
|
scalarField& TCells = this->T_.internalField();
|
||||||
|
scalarField& rhoCells= this->rho_.internalField();
|
||||||
|
scalarField& psiCells = this->psi_.internalField();
|
||||||
|
scalarField& muCells = this->mu_.internalField();
|
||||||
|
scalarField& alphaCells = this->alpha_.internalField();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
forAll(TCells, celli)
|
||||||
|
{
|
||||||
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
|
this->cellMixture(celli);
|
||||||
|
|
||||||
|
mixture_.TH(hCells[celli], TCells[celli],pCells[celli],rhoCells[celli]);
|
||||||
|
psiCells[celli]=mixture_.psi(rhoCells[celli],TCells[celli]);
|
||||||
|
muCells[celli] = mixture_.mu(TCells[celli]);
|
||||||
|
alphaCells[celli] = mixture_.alpha(rhoCells[celli], TCells[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
forAll(T_.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
fvPatchScalarField& pp = this->p_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& pT = this->T_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& ppsi = this->psi_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& prho = this->rho_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& ph = h_.boundaryField()[patchi];
|
||||||
|
|
||||||
|
fvPatchScalarField& pmu = this->mu_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& palpha = this->alpha_.boundaryField()[patchi];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (pT.fixesValue())
|
||||||
|
{
|
||||||
|
|
||||||
|
forAll(pT, facei)
|
||||||
|
{
|
||||||
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
|
this->patchFaceMixture(patchi, facei);
|
||||||
|
|
||||||
|
|
||||||
|
prho[facei] = mixture_.rho(pp[facei], pT[facei],prho[facei]);
|
||||||
|
ppsi[facei]=mixture_.psi(prho[facei],pT[facei]);
|
||||||
|
ph[facei] = mixture_.H(prho[facei], pT[facei]);
|
||||||
|
|
||||||
|
pmu[facei] = mixture_.mu(pT[facei]);
|
||||||
|
palpha[facei] = mixture_.alpha(prho[facei],pT[facei]);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
forAll(pT, facei)
|
||||||
|
{
|
||||||
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
|
this->patchFaceMixture(patchi, facei);
|
||||||
|
mixture_.TH(ph[facei], pT[facei],pp[facei],prho[facei]);
|
||||||
|
pmu[facei] = mixture_.mu(pT[facei]);
|
||||||
|
ppsi[facei]=mixture_.psi(prho[facei],pT[facei]);
|
||||||
|
palpha[facei] = mixture_.alpha(prho[facei],pT[facei]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::realGasHThermo<MixtureType>::realGasHThermo(const fvMesh& mesh)
|
||||||
|
:
|
||||||
|
basicPsiThermo(mesh),
|
||||||
|
MixtureType(*this, mesh),
|
||||||
|
|
||||||
|
h_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"h",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionSet(0, 2, -2, 0, 0),
|
||||||
|
this->hRealBoundaryTypes()
|
||||||
|
),
|
||||||
|
|
||||||
|
rho_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"rho1",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimDensity
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
scalarField& hCells = h_.internalField();
|
||||||
|
const scalarField& TCells = this->T_.internalField();
|
||||||
|
const scalarField& pCells =this->p_.internalField();
|
||||||
|
scalarField& rhoCells =this->rho_.internalField();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
forAll(rhoCells, celli)
|
||||||
|
{
|
||||||
|
rhoCells[celli]=this->cellMixture(celli).rho(pCells[celli],TCells[celli]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
forAll(rho_.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
rho_.boundaryField()[patchi] ==
|
||||||
|
rho( this->p_.boundaryField()[patchi] , this->T_.boundaryField()[patchi], patchi);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
forAll(hCells, celli)
|
||||||
|
{
|
||||||
|
hCells[celli] = this->cellMixture(celli).H(rhoCells[celli],TCells[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
forAll(h_.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
h_.boundaryField()[patchi] ==
|
||||||
|
h((this->rho_.boundaryField()[patchi]) , this->T_.boundaryField()[patchi], patchi);
|
||||||
|
}
|
||||||
|
|
||||||
|
hRealBoundaryCorrection(h_);
|
||||||
|
calculate();
|
||||||
|
|
||||||
|
// Switch on saving old time
|
||||||
|
this->psi_.oldTime();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::realGasHThermo<MixtureType>::~realGasHThermo()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
void Foam::realGasHThermo<MixtureType>::correct()
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "entering realGasHThermo<MixtureType>::correct()" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// force the saving of the old-time values
|
||||||
|
this->psi_.oldTime();
|
||||||
|
|
||||||
|
calculate();
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "exiting realGasHThermo<MixtureType>::correct()" << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::realGasHThermo<MixtureType>::h
|
||||||
|
(
|
||||||
|
const scalarField& p,
|
||||||
|
const scalarField& T,
|
||||||
|
const labelList& cells
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
tmp<scalarField> th(new scalarField(T.size()));
|
||||||
|
scalarField& h = th();
|
||||||
|
|
||||||
|
forAll(T, celli)
|
||||||
|
{
|
||||||
|
h[celli] = this->cellMixture(cells[celli]).H(this->cellMixture(cells[celli]).rho(p[celli],T[celli]),T[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return th;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::realGasHThermo<MixtureType>::h
|
||||||
|
(
|
||||||
|
const scalarField& p,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
tmp<scalarField> th(new scalarField(T.size()));
|
||||||
|
scalarField& h = th();
|
||||||
|
|
||||||
|
forAll(T, facei)
|
||||||
|
{
|
||||||
|
h[facei] = this->patchFaceMixture(patchi, facei).H(this->patchFaceMixture(patchi, facei).rho(p[facei], T[facei]),T[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return th;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::realGasHThermo<MixtureType>::psi
|
||||||
|
(
|
||||||
|
const scalarField& rho,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
tmp<scalarField> tpsi(new scalarField(T.size()));
|
||||||
|
scalarField& psi = tpsi();
|
||||||
|
|
||||||
|
forAll(T, facei)
|
||||||
|
{
|
||||||
|
psi[facei] = this->patchFaceMixture(patchi, facei).psi(rho[facei], T[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tpsi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::realGasHThermo<MixtureType>::rho
|
||||||
|
(
|
||||||
|
const scalarField& p,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
tmp<scalarField> trho(new scalarField(T.size()));
|
||||||
|
scalarField& rho = trho();
|
||||||
|
|
||||||
|
forAll(T, facei)
|
||||||
|
{
|
||||||
|
rho[facei] = this->patchFaceMixture(patchi, facei).rho(p[facei], T[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return trho;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::realGasHThermo<MixtureType>::Cp
|
||||||
|
(
|
||||||
|
const scalarField& p,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
tmp<scalarField> tCp(new scalarField(T.size()));
|
||||||
|
scalarField& cp = tCp();
|
||||||
|
|
||||||
|
forAll(T, facei)
|
||||||
|
{
|
||||||
|
cp[facei] = this->patchFaceMixture(patchi, facei).Cp(this->patchFaceMixture(patchi, facei).rho(p[facei], T[facei]),T[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tCp;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::volScalarField> Foam::realGasHThermo<MixtureType>::Cp() const
|
||||||
|
{
|
||||||
|
const fvMesh& mesh = this->T_.mesh();
|
||||||
|
|
||||||
|
tmp<volScalarField> tCp
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"Cp",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionSet(0, 2, -2, -1, 0),
|
||||||
|
this->T_.boundaryField().types()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
volScalarField& cp = tCp();
|
||||||
|
|
||||||
|
forAll(this->T_, celli)
|
||||||
|
{
|
||||||
|
cp[celli] = this->cellMixture(celli).Cp(this->rho_[celli], this->T_[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(this->T_.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
const fvPatchScalarField& pT = this->T_.boundaryField()[patchi];
|
||||||
|
const fvPatchScalarField& prho = this->rho_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& pCp = cp.boundaryField()[patchi];
|
||||||
|
|
||||||
|
forAll(pT, facei)
|
||||||
|
{
|
||||||
|
pCp[facei] = this->patchFaceMixture(patchi, facei).Cp(prho[facei], pT[facei]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tCp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::realGasHThermo<MixtureType>::Cv
|
||||||
|
(
|
||||||
|
const scalarField& rho,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
tmp<scalarField> tCv(new scalarField(T.size()));
|
||||||
|
scalarField& cv = tCv();
|
||||||
|
|
||||||
|
forAll(T, facei)
|
||||||
|
{
|
||||||
|
cv[facei] = this->patchFaceMixture(patchi, facei).Cv(rho[facei], T[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tCv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::volScalarField> Foam::realGasHThermo<MixtureType>::Cv() const
|
||||||
|
{
|
||||||
|
|
||||||
|
const fvMesh& mesh = this->T_.mesh();
|
||||||
|
|
||||||
|
tmp<volScalarField> tCv
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"Cv",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionSet(0, 2, -2, -1, 0)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
volScalarField& cv = tCv();
|
||||||
|
|
||||||
|
forAll(this->T_, celli)
|
||||||
|
{
|
||||||
|
cv[celli] = this->cellMixture(celli).Cv(this->rho_[celli], this->T_[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(this->T_.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
cv.boundaryField()[patchi] =
|
||||||
|
Cv(this->rho_.boundaryField()[patchi] , this->T_.boundaryField()[patchi], patchi);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tCv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
bool Foam::realGasHThermo<MixtureType>::read()
|
||||||
|
{
|
||||||
|
if (basicPsiThermo::read())
|
||||||
|
{
|
||||||
|
MixtureType::read(*this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
226
src/thermophysicalModels/basic/psiThermo/realGasHThermo/realGasHThermo.H
Executable file
226
src/thermophysicalModels/basic/psiThermo/realGasHThermo/realGasHThermo.H
Executable file
|
@ -0,0 +1,226 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | .
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::realGasHThermo
|
||||||
|
|
||||||
|
Description
|
||||||
|
Enthalpy for a real gas fluid libary
|
||||||
|
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
realGasHThermo.C
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef realGasHThermo_H
|
||||||
|
#define realGasHThermo_H
|
||||||
|
|
||||||
|
#include "basicPsiThermo.H"
|
||||||
|
#include "basicMixture.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class hPsiThermo Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
class realGasHThermo
|
||||||
|
:
|
||||||
|
public basicPsiThermo,
|
||||||
|
public MixtureType
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Enthalpy field
|
||||||
|
volScalarField h_;
|
||||||
|
|
||||||
|
//- DensityField
|
||||||
|
volScalarField rho_;
|
||||||
|
|
||||||
|
|
||||||
|
// Private member functions
|
||||||
|
|
||||||
|
//- Calculate the thermo variables
|
||||||
|
void calculate();
|
||||||
|
|
||||||
|
//- Construct as copy (not implemented)
|
||||||
|
realGasHThermo(const realGasHThermo<MixtureType>&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("realGasHThermo");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from mesh
|
||||||
|
realGasHThermo(const fvMesh&);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~realGasHThermo();
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
//- Return the compostion of the mixture
|
||||||
|
virtual basicMixture& composition()
|
||||||
|
{
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return the compostion of the mixture
|
||||||
|
virtual const basicMixture& composition() const
|
||||||
|
{
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Update properties
|
||||||
|
virtual void correct();
|
||||||
|
|
||||||
|
|
||||||
|
// Access to thermodynamic state variables
|
||||||
|
|
||||||
|
//- Enthalpy [J/kg]
|
||||||
|
// Non-const access allowed for transport equations
|
||||||
|
virtual volScalarField& h()
|
||||||
|
{
|
||||||
|
return h_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Enthalpy [J/kg]
|
||||||
|
virtual const volScalarField& h() const
|
||||||
|
{
|
||||||
|
return h_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Fields derived from thermodynamic state variables
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//- Enthalpy for cell-set [J/kg]
|
||||||
|
virtual tmp<scalarField> h
|
||||||
|
(
|
||||||
|
const scalarField& p,
|
||||||
|
const scalarField& T,
|
||||||
|
const labelList& cells
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//- Enthalpy for patch [J/kg]
|
||||||
|
virtual tmp<scalarField> h
|
||||||
|
(
|
||||||
|
const scalarField& p,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Psi for patch [J/kg]
|
||||||
|
virtual tmp<scalarField> psi
|
||||||
|
(
|
||||||
|
const scalarField& rho,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Density for patch [J/kg]
|
||||||
|
virtual tmp<scalarField> rho
|
||||||
|
(
|
||||||
|
const scalarField& p,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//- Heat capacity at constant pressure for patch [J/kg/K]
|
||||||
|
virtual tmp<scalarField> Cp
|
||||||
|
(
|
||||||
|
const scalarField& p,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant pressure [J/kg/K]
|
||||||
|
virtual tmp<volScalarField> Cp() const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant volume for patch [J/kg/K]
|
||||||
|
virtual tmp<scalarField> Cv
|
||||||
|
(
|
||||||
|
const scalarField& rho,
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant volume [J/kg/K]
|
||||||
|
virtual tmp<volScalarField> Cv() const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Density [kg/m^3] - uses current value of pressure
|
||||||
|
virtual tmp<volScalarField> rho() const
|
||||||
|
{
|
||||||
|
|
||||||
|
return rho_*1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//- Read thermophysicalProperties dictionary
|
||||||
|
virtual bool read();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "realGasHThermo.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
163
src/thermophysicalModels/basic/psiThermo/realGasHThermo/realGasHThermos.C
Executable file
163
src/thermophysicalModels/basic/psiThermo/realGasHThermo/realGasHThermos.C
Executable file
|
@ -0,0 +1,163 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "makeBasicPsiThermo.H"
|
||||||
|
|
||||||
|
|
||||||
|
#include "redlichKwong.H"
|
||||||
|
#include "pengRobinson.H"
|
||||||
|
#include "aungierRedlichKwong.H"
|
||||||
|
#include "soaveRedlichKwong.H"
|
||||||
|
#include "nasaHeatCapacityPolynomial.H"
|
||||||
|
#include "realGasSpecieThermo.H"
|
||||||
|
|
||||||
|
#include "pureMixture.H"
|
||||||
|
#include "realGasSutherlandTransport.H"
|
||||||
|
#include "realGasConstTransport.H"
|
||||||
|
#include "realGasHThermo.H"
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
makeBasicRealGasThermo
|
||||||
|
(
|
||||||
|
realGasHThermo,
|
||||||
|
pureMixture,
|
||||||
|
realGasSutherlandTransport,
|
||||||
|
realGasSpecieThermo,
|
||||||
|
nasaHeatCapacityPolynomial,
|
||||||
|
pengRobinson
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
makeBasicRealGasThermo
|
||||||
|
(
|
||||||
|
realGasHThermo,
|
||||||
|
pureMixture,
|
||||||
|
realGasSutherlandTransport,
|
||||||
|
realGasSpecieThermo,
|
||||||
|
nasaHeatCapacityPolynomial,
|
||||||
|
aungierRedlichKwong
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
makeBasicRealGasThermo
|
||||||
|
(
|
||||||
|
realGasHThermo,
|
||||||
|
pureMixture,
|
||||||
|
realGasSutherlandTransport,
|
||||||
|
realGasSpecieThermo,
|
||||||
|
nasaHeatCapacityPolynomial,
|
||||||
|
redlichKwong
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
makeBasicRealGasThermo
|
||||||
|
(
|
||||||
|
realGasHThermo,
|
||||||
|
pureMixture,
|
||||||
|
realGasSutherlandTransport,
|
||||||
|
realGasSpecieThermo,
|
||||||
|
nasaHeatCapacityPolynomial,
|
||||||
|
soaveRedlichKwong
|
||||||
|
);
|
||||||
|
|
||||||
|
makeBasicRealGasThermo
|
||||||
|
(
|
||||||
|
realGasHThermo,
|
||||||
|
pureMixture,
|
||||||
|
realGasConstTransport,
|
||||||
|
realGasSpecieThermo,
|
||||||
|
nasaHeatCapacityPolynomial,
|
||||||
|
pengRobinson
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
makeBasicRealGasThermo
|
||||||
|
(
|
||||||
|
realGasHThermo,
|
||||||
|
pureMixture,
|
||||||
|
realGasConstTransport,
|
||||||
|
realGasSpecieThermo,
|
||||||
|
nasaHeatCapacityPolynomial,
|
||||||
|
aungierRedlichKwong
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
makeBasicRealGasThermo
|
||||||
|
(
|
||||||
|
realGasHThermo,
|
||||||
|
pureMixture,
|
||||||
|
realGasConstTransport,
|
||||||
|
realGasSpecieThermo,
|
||||||
|
nasaHeatCapacityPolynomial,
|
||||||
|
redlichKwong
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
makeBasicRealGasThermo
|
||||||
|
(
|
||||||
|
realGasHThermo,
|
||||||
|
pureMixture,
|
||||||
|
realGasConstTransport,
|
||||||
|
realGasSpecieThermo,
|
||||||
|
nasaHeatCapacityPolynomial,
|
||||||
|
soaveRedlichKwong
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,78 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Description
|
||||||
|
Aungier Redlich Kwong equation of state.
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "aungierRedlichKwong.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
aungierRedlichKwong::aungierRedlichKwong(Istream& is)
|
||||||
|
:
|
||||||
|
specie(is),
|
||||||
|
pcrit_(readScalar(is)),
|
||||||
|
Tcrit_(readScalar(is)),
|
||||||
|
azentricFactor_(readScalar(is)),
|
||||||
|
rhocrit_(readScalar(is))
|
||||||
|
{
|
||||||
|
is.check("aungierRedlichKwong::aungierRedlichKwong(Istream& is)");
|
||||||
|
rhostd_=this->rho(Pstd,Tstd,Pstd*this->W()/(Tstd*this->R()));
|
||||||
|
rhoMax_=1500;
|
||||||
|
rhoMin_=0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Ostream& operator<<(Ostream& os, const aungierRedlichKwong& pg)
|
||||||
|
{
|
||||||
|
os << static_cast<const specie&>(pg)<< tab
|
||||||
|
<< pg.pcrit_ << tab<< pg.Tcrit_<<tab<<pg.azentricFactor_<<tab<<pg.rhocrit_;
|
||||||
|
os.check("Ostream& operator<<(Ostream& os, const aungierRedlichKwong& st)");
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,194 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::aungierRedlichKwong
|
||||||
|
|
||||||
|
Description
|
||||||
|
Aungier Redlich Kwong equation of state.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
aungierRedlichKwongI.H
|
||||||
|
aungierRedlichKwong.C
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef aungierRedlichKwong_H
|
||||||
|
#define aungierRedlichKwong_H
|
||||||
|
|
||||||
|
#include "specie.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
#include "word.H"
|
||||||
|
#include "scalar.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class aungierRedlichKwong Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class aungierRedlichKwong
|
||||||
|
:
|
||||||
|
public specie
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
inline aungierRedlichKwong(
|
||||||
|
const specie& sp,
|
||||||
|
scalar pcrit,
|
||||||
|
scalar Tcrit,
|
||||||
|
scalar azentricFactor,
|
||||||
|
scalar rhocrit
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from Istream
|
||||||
|
aungierRedlichKwong(Istream&);
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
inline aungierRedlichKwong(const word& name, aungierRedlichKwong&);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
inline autoPtr<aungierRedlichKwong> clone() const;
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline static autoPtr<aungierRedlichKwong> New(Istream& is);
|
||||||
|
|
||||||
|
//Member Variabels
|
||||||
|
scalar pcrit_;
|
||||||
|
scalar Tcrit_;
|
||||||
|
scalar rhostd_;
|
||||||
|
scalar azentricFactor_;
|
||||||
|
scalar rhocrit_;
|
||||||
|
scalar rhoMax_; //should be read from the fvSolution file where rhoMax and rhoMin values must be define ( for rhoSimpleFoam)
|
||||||
|
scalar rhoMin_;
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
inline scalar pcrit() const;
|
||||||
|
inline scalar Tcrit() const;
|
||||||
|
inline scalar azentricFactor() const;
|
||||||
|
inline scalar rhostd()const;
|
||||||
|
inline scalar rhocrit() const;
|
||||||
|
inline scalar pReturn(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//-Redlich Kwong factors
|
||||||
|
inline scalar a() const;
|
||||||
|
inline scalar b() const;
|
||||||
|
inline scalar c() const;
|
||||||
|
inline scalar n() const;
|
||||||
|
//derivatives
|
||||||
|
inline scalar dpdv(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar dpdT(const scalar rho, const scalar T) const;
|
||||||
|
inline scalar dvdT(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar dvdp(const scalar rho, const scalar T) const;
|
||||||
|
inline scalar isobarExpCoef(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar isothermalCompressiblity(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar integral_d2pdT2_dv(const scalar rho,const scalar T) const ; // Used for cv
|
||||||
|
inline scalar d2pdv2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2pdT2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2pdvdT(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2vdT2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar integral_p_dv(const scalar rho,const scalar T) const; //Used for internal Energy
|
||||||
|
inline scalar integral_dpdT_dv(const scalar rho,const scalar T) const; //Used for Entropy
|
||||||
|
|
||||||
|
//- Return density [kg/m^3] // rho0 is the starting point of the newton solver used to calculate rho
|
||||||
|
inline scalar rho(const scalar p,const scalar T,const scalar rho0) const;
|
||||||
|
inline scalar rho(const scalar p,const scalar T) const;
|
||||||
|
|
||||||
|
//- Return compressibility drho/dp [s^2/m^2]
|
||||||
|
inline scalar psi(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Return compression factor [] // rho0 is the starting point of the newton solver used to calculate rho
|
||||||
|
inline scalar Z(const scalar p,const scalar T,const scalar rho0) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member operators
|
||||||
|
|
||||||
|
inline void operator+=(const aungierRedlichKwong&);
|
||||||
|
inline void operator-=(const aungierRedlichKwong&);
|
||||||
|
|
||||||
|
inline void operator*=(const scalar);
|
||||||
|
|
||||||
|
|
||||||
|
/* // Friend operators
|
||||||
|
|
||||||
|
inline friend aungierRedlichKwong operator+
|
||||||
|
(
|
||||||
|
const aungierRedlichKwong&,
|
||||||
|
const aungierRedlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend aungierRedlichKwong operator-
|
||||||
|
(
|
||||||
|
const aungierRedlichKwong&,
|
||||||
|
const aungierRedlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend aungierRedlichKwong operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const aungierRedlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend aungierRedlichKwong operator==
|
||||||
|
(
|
||||||
|
const aungierRedlichKwong&,
|
||||||
|
const aungierRedlichKwong&
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Ostream Operator
|
||||||
|
|
||||||
|
friend Ostream& operator<<(Ostream&, const aungierRedlichKwong&);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "aungierRedlichKwongI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,497 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "aungierRedlichKwong.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline scalar aungierRedlichKwong::pcrit()const
|
||||||
|
{
|
||||||
|
return pcrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline scalar aungierRedlichKwong::Tcrit()const
|
||||||
|
{
|
||||||
|
return Tcrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline scalar aungierRedlichKwong::rhostd()const
|
||||||
|
{
|
||||||
|
return rhostd_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline scalar aungierRedlichKwong::rhocrit()const
|
||||||
|
{
|
||||||
|
return rhocrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the Azentric Factor (Acentric Factor)
|
||||||
|
inline scalar aungierRedlichKwong::azentricFactor() const
|
||||||
|
{
|
||||||
|
return azentricFactor_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//returns the pressure for a given density and temperature
|
||||||
|
inline scalar aungierRedlichKwong::pReturn(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
|
||||||
|
return this->RR*T/((this->W()/rho)-this->b()+this->c())
|
||||||
|
-this->a()*pow(T,-this->n())/(pow(this->Tcrit(),-this->n())*(this->W()/rho)*((this->W()/rho)+this->b()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Factor a of the redlich Kwong equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::a() const
|
||||||
|
{
|
||||||
|
return 0.42747*pow(this->RR,2)*pow(this->Tcrit(),2)/this->pcrit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Faktor b of the redlich Kwong equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::b() const
|
||||||
|
{
|
||||||
|
return 0.08664*this->RR*this->Tcrit()/this->pcrit();
|
||||||
|
}
|
||||||
|
// Factor c of the redlich Kwong equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::c() const
|
||||||
|
{
|
||||||
|
return this->RR*this->Tcrit()/(this->pcrit()+(this->a()/(this->W()/this->rhocrit()*(this->W()/this->rhocrit()+this->b()))))+this->b()-this->W()/this->rhocrit();
|
||||||
|
}
|
||||||
|
// Factor n of the redlich Kwong equation of state
|
||||||
|
inline scalar aungierRedlichKwong::n() const
|
||||||
|
{
|
||||||
|
return 0.4986+1.2735*this->azentricFactor()+0.4754*pow(this->azentricFactor(),2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * Derivatives * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dp/dv at constant temperature
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::dpdv(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
return this->a()*pow(T,-this->n())*pow(this->Tcrit(),this->n())*(this->b()+2*(this->W()/rho))/(pow((this->W()/rho),2)*pow((this->b()+(this->W()/rho)),2))-this->RR*T/(pow((this->b()-(this->W()/rho)-this->c()),2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dp/dT at constant molar volume
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::dpdT(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->a()*this->n()*pow(T,-this->n()-1)*pow(this->Tcrit(),this->n())/((this->W()/rho)*((this->W()/rho)+this->b()))-
|
||||||
|
this->RR/(this->b()-(this->W()/rho)-this->c());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dv/dT at constant pressure
|
||||||
|
//using implicit differentiation
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::dvdT(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return (-1)*this->dpdT(rho,T)/this->dpdv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dv/dp at constant temperature
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::dvdp(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return 1/this->dpdv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//needed to calculate the internal energy
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::integral_p_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return -pow((T/this->Tcrit()),-this->n())*(this->a()*log((this->W()/rho))/(this->b())-this->a()*log(this->b()+(this->W()/rho))/this->b())+this->RR*T*log((this->W()/rho)-this->b()+this->c());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//needed to calculate the entropy
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::integral_dpdT_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return pow(T,-this->n()-1)*pow(this->Tcrit(),this->n())*
|
||||||
|
(this->a()*this->n()*log((this->W()/rho))/(this->b())
|
||||||
|
-this->a()*this->n()*log(this->b()+(this->W()/rho))/(this->b()))
|
||||||
|
+ this->RR*log(-this->b()+this->c()+(this->W()/rho));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * second order Derivative based functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::d2pdT2(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return -this->a()*this->n()*pow(T,-this->n()-2)*pow(this->Tcrit(),this->n())*(this->n()+1)/((this->W()/rho)*(this->b()+(this->W()/rho)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::d2pdv2(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return -2*this->a()*pow(T,-this->n())*pow(this->Tcrit(),this->n())*(pow(this->b(),2)+3*this->b()*(this->W()/rho)+3*pow((this->W()/rho),2))/(pow((this->W()/rho),3)*pow((this->b()+(this->W()/rho)),3))-2*this->RR*T/(pow((this->b()-(this->W()/rho)-this->c()),3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
//using second order implicit differentiation
|
||||||
|
inline scalar aungierRedlichKwong::d2vdT2(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -(pow(this->dpdT(rho,T),2)*this->d2pdv2(rho,T)+ pow(this->dpdv(rho,T),2) *this->d2pdT2(rho,T)- 2*this->dpdv(rho,T)*this->dpdT(rho,T)*this->d2pdvdT(rho,T))/( pow(this->dpdv(rho,T),3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::d2pdvdT(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -this->a()*this->n()*pow(T,-this->n()-1)*pow(this->Tcrit(),this->n())*(this->b()+2*(this->W()/rho))/(pow((this->W()/rho),2)*pow((this->b()+(this->W()/rho)),2))-this->RR/(pow((this->b()-this->c()-(this->W()/rho)),2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// the result of this intergal is needed for the nasa based cp polynomial
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::integral_d2pdT2_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return pow(T,-this->n()-2)*pow(this->Tcrit(),this->n())*(this->a()*this->n()*(this->n()+1)*log(this->b()+(this->W()/rho))/this->b()-this->a()*this->n()*(1+this->n())*log((this->W()/rho))/this->b());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * thermodynamic properties * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
//Isobar expansion Coefficent beta = 1/v (dv/dt) at constant p
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::isobarExpCoef(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->dvdT(rho, T)*rho/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
//isothemal compressiblity kappa
|
||||||
|
//(molar values)
|
||||||
|
inline scalar aungierRedlichKwong::isothermalCompressiblity(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->isobarExpCoef(rho, T)/this->dpdT(rho, T);
|
||||||
|
//also possible : return -this->dvdp(rho,T)*rho/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Construct from components
|
||||||
|
// Starting GUESS for the density by ideal gas law
|
||||||
|
inline aungierRedlichKwong::aungierRedlichKwong
|
||||||
|
(
|
||||||
|
const specie& sp,
|
||||||
|
scalar pcrit,
|
||||||
|
scalar Tcrit,
|
||||||
|
scalar azentricFactor,
|
||||||
|
scalar rhocrit
|
||||||
|
)
|
||||||
|
:
|
||||||
|
specie(sp),
|
||||||
|
pcrit_(pcrit),
|
||||||
|
Tcrit_(Tcrit),
|
||||||
|
azentricFactor_(azentricFactor),
|
||||||
|
rhocrit_(rhocrit)
|
||||||
|
{
|
||||||
|
rhostd_=this->rho(Pstd,Tstd,Pstd*this->W()/(Tstd*this->R())); // Starting GUESS for the density by ideal gas law
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Construct as named copy
|
||||||
|
|
||||||
|
inline aungierRedlichKwong::aungierRedlichKwong(const word& name, aungierRedlichKwong& pg)
|
||||||
|
:
|
||||||
|
specie(name, pg),
|
||||||
|
pcrit_(pg.pcrit_),
|
||||||
|
Tcrit_(pg.Tcrit_),
|
||||||
|
azentricFactor_(pg.azentricFactor_)
|
||||||
|
{
|
||||||
|
pg.rhostd_=this->rho(Pstd,Tstd, (Pstd*this->W()/(Tstd*this->R()))); // Starting GUESS for the density by ideal gas law
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Construct and return a clone
|
||||||
|
inline autoPtr<aungierRedlichKwong> aungierRedlichKwong::clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<aungierRedlichKwong>(new aungierRedlichKwong(*this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline autoPtr<aungierRedlichKwong> aungierRedlichKwong::New(Istream& is)
|
||||||
|
{
|
||||||
|
return autoPtr<aungierRedlichKwong>(new aungierRedlichKwong(is));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
//- Return density [kg/m^3]
|
||||||
|
inline scalar aungierRedlichKwong::rho(const scalar p,const scalar T,const scalar rho0) const
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
scalar molarVolumePrevIteration;
|
||||||
|
scalar molarVolume;
|
||||||
|
int iter=0;
|
||||||
|
int maxIter_=400;
|
||||||
|
scalar tol_=1e-8;
|
||||||
|
int i;
|
||||||
|
scalar rho1=rhoMax_, rho2=rhoMin_,rho3, f1,f2,f3;
|
||||||
|
|
||||||
|
|
||||||
|
molarVolume=this->W()/rho0;
|
||||||
|
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
molarVolumePrevIteration= molarVolume;
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
molarVolume=molarVolumePrevIteration-((this->pReturn((this->W()/molarVolumePrevIteration),T)-p)/(this->dpdv((this->W()/
|
||||||
|
molarVolumePrevIteration),T)))/(pow(2,i));
|
||||||
|
i++;
|
||||||
|
if(i>8)
|
||||||
|
{
|
||||||
|
|
||||||
|
//using bisection methode as backup, solution must be between rho=0.001 to rho=1500;
|
||||||
|
for(i=0;i<200;i++)
|
||||||
|
{
|
||||||
|
f1= (this->pReturn(rho1,T)-p);
|
||||||
|
f2= (this->pReturn(rho2,T)-p);
|
||||||
|
rho3=(rho1+rho2)/2;
|
||||||
|
f3=(this->pReturn(rho3,T)-p);
|
||||||
|
|
||||||
|
if ((f2<0 && f3>0)||(f2>0 &&f3<0))
|
||||||
|
{
|
||||||
|
rho1=rho3;
|
||||||
|
}
|
||||||
|
else if ((f1<0 && f3>0)||(f1>0 &&f3<0))
|
||||||
|
{
|
||||||
|
rho2=rho3;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rho2=(rho2+rho3)/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mag(f3)<p*tol_)
|
||||||
|
{
|
||||||
|
molarVolume=this->W()/rho3;
|
||||||
|
molarVolumePrevIteration=this->W()/rho3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
molarVolumePrevIteration=this->W()/rho3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(mag(this->pReturn((this->W()/molarVolume),T)-p)>mag(this->pReturn((this->W()/molarVolumePrevIteration),T)-p));
|
||||||
|
|
||||||
|
if (iter++ > maxIter_)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"inline scalar aungierRedlichKwong::rho(const scalar p,const scalar T,const scalar rho0) const "
|
||||||
|
) << "Maximum number of iterations exceeded"
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
while(mag(molarVolumePrevIteration-molarVolume)>tol_*(this->W()/rho0));
|
||||||
|
|
||||||
|
return this->W()/molarVolume;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return density [kg/m^3]on
|
||||||
|
inline scalar aungierRedlichKwong::rho(const scalar p,const scalar T) const
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
scalar rho0=p/(this->R()*T); //using perfect gas equation as starting point
|
||||||
|
return rho(p,T,rho0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return compressibility drho/dp [s^2/m^2]
|
||||||
|
inline scalar aungierRedlichKwong::psi(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -this->dvdp(rho,T)*pow(rho,2)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return compression factor []
|
||||||
|
inline scalar aungierRedlichKwong::Z( const scalar p, const scalar T,const scalar rho0) const
|
||||||
|
{
|
||||||
|
return (p*this->rho(p,T,rho0))/(this->R()*T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline void aungierRedlichKwong::operator+=(const aungierRedlichKwong& pg)
|
||||||
|
{
|
||||||
|
specie::operator+=(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void aungierRedlichKwong::operator-=(const aungierRedlichKwong& pg)
|
||||||
|
{
|
||||||
|
specie::operator-=(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void aungierRedlichKwong::operator*=(const scalar s)
|
||||||
|
{
|
||||||
|
specie::operator*=(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
//****************not working**************//
|
||||||
|
/*
|
||||||
|
inline aungierRedlichKwong operator+
|
||||||
|
(
|
||||||
|
const aungierRedlichKwong& pg1,
|
||||||
|
const aungierRedlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return aungierRedlichKwong
|
||||||
|
(
|
||||||
|
static_cast<const specie&>(pg1)
|
||||||
|
+ static_cast<const specie&>(pg2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline aungierRedlichKwong operator-
|
||||||
|
(
|
||||||
|
const aungierRedlichKwong& pg1,
|
||||||
|
const aungierRedlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return aungierRedlichKwong
|
||||||
|
(
|
||||||
|
static_cast<const specie&>(pg1)
|
||||||
|
- static_cast<const specie&>(pg2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline aungierRedlichKwong operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const aungierRedlichKwong& pg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return aungierRedlichKwong(s*static_cast<const specie&>(pg));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline aungierRedlichKwong operator==
|
||||||
|
(
|
||||||
|
const aungierRedlichKwong& pg1,
|
||||||
|
const aungierRedlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return pg2 - pg1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
79
src/thermophysicalModels/specie/equationOfState/pengRobinson/pengRobinson.C
Executable file
79
src/thermophysicalModels/specie/equationOfState/pengRobinson/pengRobinson.C
Executable file
|
@ -0,0 +1,79 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Description
|
||||||
|
Peng Robinson equation of state.
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "pengRobinson.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
pengRobinson::pengRobinson(Istream& is)
|
||||||
|
:
|
||||||
|
specie(is),
|
||||||
|
pcrit_(readScalar(is)),
|
||||||
|
Tcrit_(readScalar(is)),
|
||||||
|
azentricFactor_(readScalar(is))
|
||||||
|
{
|
||||||
|
is.check("pengRobinson::pengRobinson(Istream& is)");
|
||||||
|
rhostd_=this->rho(Pstd,Tstd,Pstd*this->W()/(Tstd*this->R()));
|
||||||
|
rhoMax_=1500;
|
||||||
|
rhoMin_=0.001;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Ostream& operator<<(Ostream& os, const pengRobinson& pg)
|
||||||
|
{
|
||||||
|
os << static_cast<const specie&>(pg)<< tab
|
||||||
|
<< pg.pcrit_ << tab<< pg.Tcrit_<< tab << pg.azentricFactor_;
|
||||||
|
|
||||||
|
os.check("Ostream& operator<<(Ostream& os, const pengRobinson& st)");
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
192
src/thermophysicalModels/specie/equationOfState/pengRobinson/pengRobinson.H
Executable file
192
src/thermophysicalModels/specie/equationOfState/pengRobinson/pengRobinson.H
Executable file
|
@ -0,0 +1,192 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::pengRobinson
|
||||||
|
|
||||||
|
Description
|
||||||
|
Peng Robinson equation of state.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
pengRobinsonI.H
|
||||||
|
pengRobinson.C
|
||||||
|
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef pengRobinson_H
|
||||||
|
#define pengRobinson_H
|
||||||
|
|
||||||
|
#include "specie.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
#include "word.H"
|
||||||
|
#include "scalar.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class perfectGas Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class pengRobinson
|
||||||
|
:
|
||||||
|
public specie
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
inline pengRobinson(
|
||||||
|
const specie& sp,
|
||||||
|
scalar pcrit,
|
||||||
|
scalar Tcrit,
|
||||||
|
scalar azentricFactor
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from Istream
|
||||||
|
pengRobinson(Istream&);
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
inline pengRobinson(const word& name, pengRobinson&);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
inline autoPtr<pengRobinson> clone() const;
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline static autoPtr<pengRobinson> New(Istream& is);
|
||||||
|
|
||||||
|
//Member Variabels
|
||||||
|
scalar pcrit_;
|
||||||
|
scalar Tcrit_;
|
||||||
|
scalar rhostd_;
|
||||||
|
scalar azentricFactor_;
|
||||||
|
scalar rhoMax_; //should be read from the fvSolution file where rhoMax and rhoMin values must be define ( for rhoSimpleFoam)
|
||||||
|
scalar rhoMin_;
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
inline scalar pcrit() const;
|
||||||
|
inline scalar Tcrit() const;
|
||||||
|
inline scalar azentricFactor() const;
|
||||||
|
inline scalar rhostd()const;
|
||||||
|
inline scalar pReturn(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//-Redlich Kwong factors
|
||||||
|
inline scalar a() const;
|
||||||
|
inline scalar b() const;
|
||||||
|
inline scalar n() const;
|
||||||
|
|
||||||
|
//derivatives
|
||||||
|
inline scalar dpdv(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar dpdT(const scalar rho, const scalar T) const;
|
||||||
|
inline scalar dvdT(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar dvdp(const scalar rho, const scalar T) const;
|
||||||
|
inline scalar isobarExpCoef(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar isothermalCompressiblity(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar integral_d2pdT2_dv(const scalar rho,const scalar T) const ; // Used for cv
|
||||||
|
inline scalar d2pdv2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2pdT2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2pdvdT(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2vdT2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar integral_p_dv(const scalar rho,const scalar T) const; //Used for internal Energy
|
||||||
|
inline scalar integral_dpdT_dv(const scalar rho,const scalar T) const; //Used for Entropy
|
||||||
|
|
||||||
|
//- Return density [kg/m^3] // rho0 is the starting point of the newton solver used to calculate rho
|
||||||
|
inline scalar rho(const scalar p,const scalar T,const scalar rho0) const;
|
||||||
|
inline scalar rho(const scalar p,const scalar T) const;
|
||||||
|
//- Return compressibility rho/p [s^2/m^2] // rho0 is the starting point of the newton solver used to calculate rho
|
||||||
|
inline scalar psi(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Return compression factor []
|
||||||
|
inline scalar Z(const scalar p,const scalar T,const scalar rho0) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member operators
|
||||||
|
|
||||||
|
inline void operator+=(const pengRobinson&);
|
||||||
|
inline void operator-=(const pengRobinson&);
|
||||||
|
|
||||||
|
inline void operator*=(const scalar);
|
||||||
|
|
||||||
|
|
||||||
|
/* // Friend operators
|
||||||
|
|
||||||
|
inline friend pengRobinson operator+
|
||||||
|
(
|
||||||
|
const pengRobinson&,
|
||||||
|
const pengRobinson&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend pengRobinson operator-
|
||||||
|
(
|
||||||
|
const pengRobinson&,
|
||||||
|
const pengRobinson&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend pengRobinson operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const pengRobinson&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend pengRobinson operator==
|
||||||
|
(
|
||||||
|
const pengRobinson&,
|
||||||
|
const pengRobinson&
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Ostream Operator
|
||||||
|
|
||||||
|
friend Ostream& operator<<(Ostream&, const pengRobinson&);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "pengRobinsonI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
513
src/thermophysicalModels/specie/equationOfState/pengRobinson/pengRobinsonI.H
Executable file
513
src/thermophysicalModels/specie/equationOfState/pengRobinson/pengRobinsonI.H
Executable file
|
@ -0,0 +1,513 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "pengRobinson.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline scalar pengRobinson::pcrit()const
|
||||||
|
{
|
||||||
|
return pcrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline scalar pengRobinson::Tcrit()const
|
||||||
|
{
|
||||||
|
return Tcrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline scalar pengRobinson::rhostd()const
|
||||||
|
{
|
||||||
|
return rhostd_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns the Azentric Factor (Acentric Factor)
|
||||||
|
inline scalar pengRobinson::azentricFactor() const
|
||||||
|
{
|
||||||
|
return azentricFactor_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//returns the pressure for a given density and temperature
|
||||||
|
inline scalar pengRobinson::pReturn(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->RR*T/((this->W()/rho)-this->b())-(this->a()*pow((1+this->n()*(1-pow((T/this->Tcrit()),0.5))),2))/(pow((this->W()/rho),2)+2*this->b()*(this->W()/rho)-pow(this->b(),2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Factor a of the pengRobinson equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::a() const
|
||||||
|
{
|
||||||
|
return 0.457235*pow(this->RR,2)*pow(this->Tcrit(),2)/this->pcrit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Factor b of the pengRobinson equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::b() const
|
||||||
|
{
|
||||||
|
return 0.077796*this->RR*this->Tcrit()/this->pcrit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Factor nb of the pengRobinson equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::n() const
|
||||||
|
{
|
||||||
|
// this equation is only valid for asentricFactors <0.49.
|
||||||
|
return 0.37464+1.54226*this->azentricFactor()-0.26992*pow(this->azentricFactor(),2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * Derivatives * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dp/dv at constant temperature
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::dpdv(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -(4*this->a()*this->n()*this->Tcrit()*(this->b()-(this->W()/rho))*(pow(this->b(),2)-pow((this->W()/rho),2))*(this->n()+1)
|
||||||
|
*pow((T/this->Tcrit()),0.5)
|
||||||
|
+this->Tcrit()*(-2*this->a()*pow((this->n()+1),2)*(pow(this->b(),3)-pow(this->b(),2)*(this->W()/rho)
|
||||||
|
-this->b()*pow((this->W()/rho),2)+pow((this->W()/rho),3))
|
||||||
|
+this->RR*T*(pow(this->b(),4)-4*pow(this->b(),3)*(this->W()/rho)+2*pow(this->b(),2)*pow((this->W()/rho),2)
|
||||||
|
+4*this->b()*pow((this->W()/rho),3)+pow((this->W()/rho),4)))
|
||||||
|
-2*this->a()*pow(this->n(),2)*T*(pow(this->b(),3)-pow(this->b(),2)*(this->W()/rho)-this->b()*pow((this->W()/rho),2)+pow((this->W()/rho),3)))
|
||||||
|
/(this->Tcrit()*pow((this->b()-(this->W()/rho)),2)*pow((pow(this->b(),2)-2*this->b()*(this->W()/rho)-pow((this->W()/rho),2)),2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dp/dT at constant molar volume
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::dpdT(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return (-this->a()*this->n()*(this->n()+1)*pow((T/this->Tcrit()),0.5)/(T*(pow(this->b(),2)-2*this->b()*(this->W()/rho)-pow((this->W()/rho),2)))+this->a()*pow(this->n(),2)/(this->Tcrit()*(pow(this->b(),2)-2*this->b()*(this->W()/rho)-pow((this->W()/rho),2)))-this->RR/(this->b()-(this->W()/rho)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dv/dT at constant pressure
|
||||||
|
//by using implicit differentiation
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::dvdT(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return (-1)*this->dpdT(rho,T)/this->dpdv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::dvdp(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return 1/this->dpdv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
//needed to calculate the internal energy
|
||||||
|
inline scalar pengRobinson::integral_p_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return pow(2,0.5)*this->a()*(2*this->n()*this->Tcrit()*(this->n()+1)*pow(T/this->Tcrit(),0.5)
|
||||||
|
-this->Tcrit()*(pow(this->n(),2)+2*this->n()+1)-pow(this->n(),2)*T)*log(this->b()*(1-pow(2,0.5))+(this->W()/rho))/(4*this->b()*this->Tcrit())
|
||||||
|
+this->RR*T*log((this->W()/rho)-this->b())
|
||||||
|
-pow(2,0.5)*this->a()*(2*this->n()*this->Tcrit()*(this->n()+1)*pow(T/this->Tcrit(),0.5)
|
||||||
|
-this->Tcrit()*(pow(this->n(),2)+2*this->n()+1)-pow(this->n(),2)*T)
|
||||||
|
*log(this->b()*(pow(2,0.5)+1)+(this->W()/rho))/(4*this->b()*this->Tcrit());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
//needed to calculate the entropy
|
||||||
|
inline scalar pengRobinson::integral_dpdT_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
|
||||||
|
return (pow(2,0.5)*this->a()*this->n()*(this->n()+1)*pow(T/this->Tcrit(),0.5)/(4*this->b()*T)
|
||||||
|
-pow(2,0.5)*this->a()*pow(this->n(),2)/(4*this->b()*this->Tcrit()))
|
||||||
|
*log(this->b()*(1-pow(2,0.5))+(this->W()/rho))
|
||||||
|
+this->RR*log((this->W()/rho)-this->b())
|
||||||
|
+(pow(2,0.5)*this->a()*pow(this->n(),2)/(4*this->b()*this->Tcrit())
|
||||||
|
-pow(2,0.5)*this->a()*this->n()*(this->n()+1)*pow(T/this->Tcrit(),0.5)/(4*this->b()*T))
|
||||||
|
*log(this->b()*(pow(2,0.5)+1)+(this->W()/rho));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * second order Derivative based functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::d2pdT2(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->a()*this->n()*(this->n()+1)*pow((T/this->Tcrit()),0.5)/(2*pow(T,2)*(pow(this->b(),2)-2*this->b()*(this->W()/rho)-pow((this->W()/rho),2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::d2pdv2(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return 2*(2*this->a()*this->n()*this->Tcrit()*(this->b()-(this->W()/rho))*(this->n()+1)*
|
||||||
|
(5*pow(this->b(),4)-4*pow(this->b(),3)*(this->W()/rho)-4*pow(this->b(),2)*pow((this->W()/rho),2)
|
||||||
|
+3*pow((this->W()/rho),4))*pow(T/this->Tcrit(),0.5)
|
||||||
|
+this->Tcrit()*(this->RR*T*(pow(this->b(),6)-6*pow(this->b(),5)*(this->W()/rho)+9*pow(this->b(),4)*pow((this->W()/rho),2)
|
||||||
|
+4*pow(this->b(),3)*pow((this->W()/rho),3)-9*pow(this->b(),2)*pow((this->W()/rho),4)-6*this->b()*pow((this->W()/rho),5)
|
||||||
|
-pow((this->W()/rho),6))
|
||||||
|
-this->a()*pow((this->n()+1),2)*(5*pow(this->b(),5)-9*pow(this->b(),4)*(this->W()/rho)
|
||||||
|
+4*pow(this->b(),2)*pow((this->W()/rho),3)+3*this->b()*pow((this->W()/rho),4)-3*pow((this->W()/rho),5)))
|
||||||
|
-this->a()*pow(this->n(),2)*T*(5*pow(this->b(),5)-9*pow(this->b(),4)*(this->W()/rho)+4*pow(this->b(),2)*pow((this->W()/rho),3)
|
||||||
|
+3*this->b()*pow((this->W()/rho),4)-3*pow((this->W()/rho),5)))
|
||||||
|
/(this->Tcrit()*pow((pow(this->b(),2)-2*this->b()*(this->W()/rho)-pow((this->W()/rho),2)),3)*pow(((this->W()/rho)-this->b()),3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
//using second order implicit differentiation
|
||||||
|
inline scalar pengRobinson::d2vdT2(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -(pow(this->dpdT(rho,T),2)*this->d2pdv2(rho,T)+ pow(this->dpdv(rho,T),2) *this->d2pdT2(rho,T)- 2*this->dpdv(rho,T)*this->dpdT(rho,T)*this->d2pdvdT(rho,T))/( pow(this->dpdv(rho,T),3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::d2pdvdT(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -2*this->a()*this->n()*(this->b()+(this->W()/rho))*(this->n()+1)*pow(T/this->Tcrit(),0.5)
|
||||||
|
/(T*pow((pow(this->b(),2)-2*this->b()*(this->W()/rho)-pow((this->W()/rho),2)),2))+(2*this->a()*pow(this->n(),2)*(this->b()+(this->W()/rho)))/(this->Tcrit()*pow(pow(this->b(),2)-2*this->b()*(this->W()/rho)-pow((this->W()/rho),2),2))-this->RR/(pow(this->b()-(this->W()/rho),2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// the result of this intergal is needed for the nasa based cp polynomial
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::integral_d2pdT2_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return pow(2,0.5)*this->a()*this->n()*(this->n()+1)*pow(T/this->Tcrit(),0.5)
|
||||||
|
*log(this->b()*(pow(2,0.5)+1)+(this->W()/rho))/(8*this->b()*pow(T,2))
|
||||||
|
-pow(2,0.5)*this->a()*this->n()*(this->n()+1)*pow(T/this->Tcrit(),0.5)
|
||||||
|
*log(this->b()*(1-pow(2,0.5))+(this->W()/rho))/(8*this->b()*pow(T,2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * thermodynamic properties * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
//Isobar expansion Coefficent beta = 1/v (dv/dt) at constant p
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::isobarExpCoef(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->dvdT(rho, T)*rho/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
//isothemal compressiblity kappa
|
||||||
|
//(molar values)
|
||||||
|
inline scalar pengRobinson::isothermalCompressiblity(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->isobarExpCoef(rho, T)/this->dpdT(rho, T);
|
||||||
|
//also possible : return -this->dvdp(rho,T)*rho/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Construct from components
|
||||||
|
inline pengRobinson::pengRobinson
|
||||||
|
(
|
||||||
|
const specie& sp,
|
||||||
|
scalar pcrit,
|
||||||
|
scalar Tcrit,
|
||||||
|
scalar azentricFactor
|
||||||
|
|
||||||
|
)
|
||||||
|
:
|
||||||
|
specie(sp),
|
||||||
|
pcrit_(pcrit),
|
||||||
|
Tcrit_(Tcrit),
|
||||||
|
azentricFactor_(azentricFactor)
|
||||||
|
{
|
||||||
|
rhostd_=this->rho(Pstd,Tstd,Pstd*this->W()/(Tstd*this->R())); // Starting GUESS for the density by ideal gas law
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Construct as named copy
|
||||||
|
|
||||||
|
inline pengRobinson::pengRobinson(const word& name, pengRobinson& pg)
|
||||||
|
:
|
||||||
|
specie(name, pg),
|
||||||
|
pcrit_(pg.pcrit_),
|
||||||
|
Tcrit_(pg.Tcrit_),
|
||||||
|
azentricFactor_(pg.azentricFactor_)
|
||||||
|
{
|
||||||
|
pg.rhostd_=this->rho(Pstd,Tstd, (Pstd*this->W()/(Tstd*this->R()))); // Starting GUESS for the density by ideal gas law
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Construct and return a clone
|
||||||
|
inline autoPtr<pengRobinson> pengRobinson::clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<pengRobinson>(new pengRobinson(*this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline autoPtr<pengRobinson> pengRobinson::New(Istream& is)
|
||||||
|
{
|
||||||
|
return autoPtr<pengRobinson>(new pengRobinson(is));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
//- Return density [kg/m^3]
|
||||||
|
// TO DO Include a max Iteration number loop and abort function
|
||||||
|
inline scalar pengRobinson::rho(const scalar p,const scalar T,const scalar rho0) const
|
||||||
|
{
|
||||||
|
|
||||||
|
scalar molarVolumePrevIteration;
|
||||||
|
scalar molarVolume;
|
||||||
|
int iter=0;
|
||||||
|
int i;
|
||||||
|
int maxIter_=400;
|
||||||
|
scalar tol_=1e-8;
|
||||||
|
scalar rho1=rhoMax_, rho2=rhoMin_,rho3, f1,f2,f3;
|
||||||
|
|
||||||
|
molarVolume=this->W()/rho0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
molarVolumePrevIteration= molarVolume;
|
||||||
|
i=0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
|
||||||
|
molarVolume=molarVolumePrevIteration-((this->pReturn((this->W()/molarVolumePrevIteration),T)-p)/(this->dpdv((this->W()/
|
||||||
|
molarVolumePrevIteration),T)))/(pow(2,i));
|
||||||
|
|
||||||
|
|
||||||
|
i++;
|
||||||
|
if(i>8)
|
||||||
|
{
|
||||||
|
//using bisection methode as backup, solution must be between rho=0.001 to rho=1500;
|
||||||
|
for(i=0;i<200;i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
f1= (this->pReturn(rho1,T)-p);
|
||||||
|
f2= (this->pReturn(rho2,T)-p);
|
||||||
|
rho3=(rho1+rho2)/2;
|
||||||
|
f3=(this->pReturn(rho3,T)-p);
|
||||||
|
|
||||||
|
if ((f2<0 && f3>0)||(f2>0 &&f3<0))
|
||||||
|
{
|
||||||
|
rho1=rho3;
|
||||||
|
}
|
||||||
|
else if ((f1<0 && f3>0)||(f1>0 &&f3<0))
|
||||||
|
{
|
||||||
|
rho2=rho3;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rho2=(rho2+rho3)/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mag(f3)<p*tol_)
|
||||||
|
{
|
||||||
|
molarVolume=this->W()/rho3;
|
||||||
|
molarVolumePrevIteration=this->W()/rho3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
molarVolumePrevIteration=this->W()/rho3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
while(mag(this->pReturn((this->W()/molarVolume),T)-p)>mag(this->pReturn((this->W()/molarVolumePrevIteration),T)-p));
|
||||||
|
|
||||||
|
if (iter++ > maxIter_)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"inline scalar pengRobinson::rho(const scalar p,const scalar T,const scalar rho0) const "
|
||||||
|
) << "Maximum number of iterations exceeded"
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
while(mag(molarVolumePrevIteration-molarVolume)>tol_*(this->W()/rho0));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return this->W()/molarVolume;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return density [kg/m^3]on
|
||||||
|
inline scalar pengRobinson::rho(const scalar p,const scalar T) const
|
||||||
|
{
|
||||||
|
scalar rho0=p/(this->R()*T); //using perfect gas equation as starting point
|
||||||
|
return rho(p,T,rho0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return compressibility drho/dp [s^2/m^2]
|
||||||
|
inline scalar pengRobinson::psi(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -this->dvdp(rho,T)*pow(rho,2)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return compression factor []
|
||||||
|
inline scalar pengRobinson::Z( const scalar p, const scalar T,const scalar rho0) const
|
||||||
|
{
|
||||||
|
return (p*this->rho(p,T,rho0))/(this->R()*T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline void pengRobinson::operator+=(const pengRobinson& pg)
|
||||||
|
{
|
||||||
|
specie::operator+=(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void pengRobinson::operator-=(const pengRobinson& pg)
|
||||||
|
{
|
||||||
|
specie::operator-=(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void pengRobinson::operator*=(const scalar s)
|
||||||
|
{
|
||||||
|
specie::operator*=(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
//****************not working**************//
|
||||||
|
/*
|
||||||
|
inline pengRobinson operator+
|
||||||
|
(
|
||||||
|
const pengRobinson& pg1,
|
||||||
|
const pengRobinson& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return pengRobinson
|
||||||
|
(
|
||||||
|
static_cast<const specie&>(pg1)
|
||||||
|
+ static_cast<const specie&>(pg2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline pengRobinson operator-
|
||||||
|
(
|
||||||
|
const pengRobinson& pg1,
|
||||||
|
const pengRobinson& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return pengRobinson
|
||||||
|
(
|
||||||
|
static_cast<const specie&>(pg1)
|
||||||
|
- static_cast<const specie&>(pg2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline pengRobinson operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const pengRobinson& pg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return pengRobinson(s*static_cast<const specie&>(pg));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline pengRobinson operator==
|
||||||
|
(
|
||||||
|
const pengRobinson& pg1,
|
||||||
|
const pengRobinson& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return pg2 - pg1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
77
src/thermophysicalModels/specie/equationOfState/redlichKwong/redlichKwong.C
Executable file
77
src/thermophysicalModels/specie/equationOfState/redlichKwong/redlichKwong.C
Executable file
|
@ -0,0 +1,77 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Description
|
||||||
|
Redlich Kwong equation of state.
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "redlichKwong.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
redlichKwong::redlichKwong(Istream& is)
|
||||||
|
:
|
||||||
|
specie(is),
|
||||||
|
pcrit_(readScalar(is)),
|
||||||
|
Tcrit_(readScalar(is)),
|
||||||
|
azentricFactor_(readScalar(is))
|
||||||
|
{
|
||||||
|
is.check("redlichKwong::redlichKwong(Istream& is)");
|
||||||
|
rhostd_=this->rho(Pstd,Tstd,Pstd*this->W()/(Tstd*this->R()));
|
||||||
|
rhoMax_=1500;
|
||||||
|
rhoMin_=0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Ostream& operator<<(Ostream& os, const redlichKwong& pg)
|
||||||
|
{
|
||||||
|
os << static_cast<const specie&>(pg)<< tab
|
||||||
|
<< pg.pcrit_ << tab<< pg.Tcrit_<< tab << pg.azentricFactor_;
|
||||||
|
|
||||||
|
os.check("Ostream& operator<<(Ostream& os, const redlichKwong& st)");
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
191
src/thermophysicalModels/specie/equationOfState/redlichKwong/redlichKwong.H
Executable file
191
src/thermophysicalModels/specie/equationOfState/redlichKwong/redlichKwong.H
Executable file
|
@ -0,0 +1,191 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::redlichKwong
|
||||||
|
|
||||||
|
Description
|
||||||
|
Redlich Kwong equation of state.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
redlichKwongI.H
|
||||||
|
redlichKwong.C
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef redlichKwong_H
|
||||||
|
#define redlichKwong_H
|
||||||
|
|
||||||
|
#include "specie.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
#include "word.H"
|
||||||
|
#include "scalar.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class perfectGas Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class redlichKwong
|
||||||
|
:
|
||||||
|
public specie
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
inline redlichKwong(
|
||||||
|
const specie& sp,
|
||||||
|
scalar pcrit,
|
||||||
|
scalar Tcrit,
|
||||||
|
scalar azentricFactor
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from Istream
|
||||||
|
redlichKwong(Istream&);
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
inline redlichKwong(const word& name, redlichKwong&);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
inline autoPtr<redlichKwong> clone() const;
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline static autoPtr<redlichKwong> New(Istream& is);
|
||||||
|
|
||||||
|
//Member Variabels
|
||||||
|
scalar pcrit_;
|
||||||
|
scalar Tcrit_;
|
||||||
|
scalar rhostd_;
|
||||||
|
scalar azentricFactor_;
|
||||||
|
scalar rhoMax_; //should be read from the fvSolution file where rhoMax and rhoMin values must be define ( for rhoSimpleFoam)
|
||||||
|
scalar rhoMin_;
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
inline scalar pcrit() const;
|
||||||
|
inline scalar Tcrit() const;
|
||||||
|
inline scalar rhostd()const;
|
||||||
|
inline scalar azentricFactor() const;
|
||||||
|
inline scalar pReturn(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//-Redlich Kwong factors
|
||||||
|
inline scalar a() const;
|
||||||
|
inline scalar b() const;
|
||||||
|
|
||||||
|
|
||||||
|
//derivatives
|
||||||
|
inline scalar dpdv(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar dpdT(const scalar rho, const scalar T) const;
|
||||||
|
inline scalar dvdT(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar dvdp(const scalar rho, const scalar T) const;
|
||||||
|
inline scalar isobarExpCoef(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar isothermalCompressiblity(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar integral_d2pdT2_dv(const scalar rho,const scalar T) const ; // Used for cv
|
||||||
|
inline scalar d2pdv2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2pdT2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2pdvdT(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2vdT2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar integral_p_dv(const scalar rho,const scalar T) const; //Used for internal Energy
|
||||||
|
inline scalar integral_dpdT_dv(const scalar rho,const scalar T) const; //Used for Entropy
|
||||||
|
|
||||||
|
//- Return density [kg/m^3] // rho0 is the starting point of the newton solver used to calculate rho
|
||||||
|
inline scalar rho(const scalar p,const scalar T,const scalar rho0) const;
|
||||||
|
inline scalar rho(const scalar p,const scalar T) const;
|
||||||
|
//- Return compressibility drho/dp [s^2/m^2]
|
||||||
|
inline scalar psi(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Return compression factor []
|
||||||
|
inline scalar Z(const scalar p,const scalar T,const scalar rho0) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member operators
|
||||||
|
|
||||||
|
inline void operator+=(const redlichKwong&);
|
||||||
|
inline void operator-=(const redlichKwong&);
|
||||||
|
|
||||||
|
inline void operator*=(const scalar);
|
||||||
|
|
||||||
|
|
||||||
|
/* // Friend operators
|
||||||
|
|
||||||
|
inline friend redlichKwong operator+
|
||||||
|
(
|
||||||
|
const redlichKwong&,
|
||||||
|
const redlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend redlichKwong operator-
|
||||||
|
(
|
||||||
|
const redlichKwong&,
|
||||||
|
const redlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend redlichKwong operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const redlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend redlichKwong operator==
|
||||||
|
(
|
||||||
|
const redlichKwong&,
|
||||||
|
const redlichKwong&
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Ostream Operator
|
||||||
|
|
||||||
|
friend Ostream& operator<<(Ostream&, const redlichKwong&);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "redlichKwongI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
476
src/thermophysicalModels/specie/equationOfState/redlichKwong/redlichKwongI.H
Executable file
476
src/thermophysicalModels/specie/equationOfState/redlichKwong/redlichKwongI.H
Executable file
|
@ -0,0 +1,476 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "redlichKwong.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline scalar redlichKwong::pcrit()const
|
||||||
|
{
|
||||||
|
return pcrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline scalar redlichKwong::Tcrit()const
|
||||||
|
{
|
||||||
|
return Tcrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the Azentric Factor (Acentric Factor)
|
||||||
|
inline scalar redlichKwong::azentricFactor() const
|
||||||
|
{
|
||||||
|
return azentricFactor_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline scalar redlichKwong::rhostd()const
|
||||||
|
{
|
||||||
|
return rhostd_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//returns the pressure for a given density and temperature
|
||||||
|
inline scalar redlichKwong::pReturn(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return (this->RR *T/((this->W()/rho)-this->b()) - (this->a()/(sqrt(T)*(this->W()/rho)*((this->W()/rho)+this->b()))));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Faktor a of the redlich Kwong equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::a() const
|
||||||
|
{
|
||||||
|
return 0.42748*pow(this->RR,2)*pow(this->Tcrit(),2.5)/(this->pcrit());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Faktor b of the redlich Kwong equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::b() const
|
||||||
|
{
|
||||||
|
return 0.08664*this->RR*this->Tcrit()/this->pcrit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * Derivatives * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dp/dv at constant temperature
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::dpdv(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return (this->a()*(pow(this->b(),3)-3*this->b()*pow((this->W()/rho),2)+2*pow((this->W()/rho),3))-this->RR*pow(T,1.5)*pow((this->W()/rho),2) *(pow(this->b(),2)+2*this->b()*(this->W()/rho)+pow((this->W()/rho),2))) / ( sqrt(T) * pow((this->W()/rho),2) * pow((this->b()+(this->W()/rho)),2) *pow( (this->b()-(this->W()/rho)),2) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dp/dT at constant molar volume
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::dpdT(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return 0.5*this->a()/(pow(T,1.5)*(this->W()/rho)*(this->b()+(this->W()/rho)))-this->RR/(this->b()-(this->W()/rho));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dv/dT at constant pressure
|
||||||
|
//using implicit differentiation
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::dvdT(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return (-1)*this->dpdT(rho,T)/this->dpdv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dv/dp at constant temperature
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::dvdp(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return 1/this->dpdv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//needed to calculate the internal energy
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::integral_p_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->RR*T*log((this->W()/rho)-this->b())+(this->a()*log(this->b()+(this->W()/rho)))/(this->b()*sqrt(T))-(this->a()*log(this->W()/rho))/(this->b()*sqrt(T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//needed to calculate the entropy
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::integral_dpdT_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->RR*log((this->W()/rho)-this->b())
|
||||||
|
-(this->a()*log(this->b()+(this->W()/rho)))/(2*this->b()* pow(T,1.5) )
|
||||||
|
+(this->a()*log(this->W()/rho))/(2*this->b()* pow(T,1.5));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * second order Derivative based functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::d2pdT2(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return -0.75*this->a()/( pow(T,2.5)*(this->W()/rho)*(this->b()+(this->W()/rho)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::d2pdv2(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(
|
||||||
|
2*(this->a()*(pow(this->b(),5)-3*pow(this->b(),3)*pow((this->W()/rho),2)-pow(this->b(),2)*pow((this->W()/rho),3)+6*this->b()*pow((this->W()/rho),4)-3*pow((this->W()/rho),5))+this->RR*pow(T,1.5)*pow((this->W()/rho),3)
|
||||||
|
*(pow(this->b(),3)+3*pow(this->b(),2)*(this->W()/rho)+3*this->b()*pow((this->W()/rho),2)+pow((this->W()/rho),3)))/( sqrt(T)* pow((this->W()/rho),3) *pow( (this->b()+(this->W()/rho)) ,3)* pow((this->W()/rho)-this->b(),3)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
//using second Order implicit differentiation
|
||||||
|
inline scalar redlichKwong::d2vdT2(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -(pow(this->dpdT(rho,T),2)*this->d2pdv2(rho,T)+ pow(this->dpdv(rho,T),2) *this->d2pdT2(rho,T)- 2*this->dpdv(rho,T)*this->dpdT(rho,T)*this->d2pdvdT(rho,T))/( pow(this->dpdv(rho,T),3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::d2pdvdT(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -(0.5*(this->a()*( pow(this->b(),3)-3*this->b()* pow((this->W()/rho),2) +2* pow((this->W()/rho),3) )+2*this->RR*pow(T,1.5)* pow((this->W()/rho),2)*( pow(this->b(),2) + 2*this->b()*(this->W()/rho)+ pow((this->W()/rho),2) )))/( pow(T,1.5)* pow((this->W()/rho),2)*pow(this->b()+(this->W()/rho),2)*pow(this->b()-(this->W()/rho),2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// the result of this intergal is needed for the nasa based cp polynomial
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::integral_d2pdT2_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return 0.75*this->a()*log(this->b() + (this->W()/rho))/(pow(T,2.5)*this->b()) - 0.75*this->a()*log((this->W()/rho))/(pow(T,2.5)*this->b());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * thermodynamic properties * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
//Isobar expansion Coefficent beta = 1/v (dv/dt) at constant p
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::isobarExpCoef(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->dvdT(rho, T)*rho/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
//isothemal compressiblity kappa
|
||||||
|
//(molar values)
|
||||||
|
inline scalar redlichKwong::isothermalCompressiblity(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->isobarExpCoef(rho, T)/this->dpdT(rho, T);
|
||||||
|
//also possible : return -this->dvdp(rho,T)*rho/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Construct from components
|
||||||
|
|
||||||
|
inline redlichKwong::redlichKwong
|
||||||
|
(
|
||||||
|
const specie& sp,
|
||||||
|
scalar pcrit,
|
||||||
|
scalar Tcrit,
|
||||||
|
scalar azentricFactor
|
||||||
|
)
|
||||||
|
:
|
||||||
|
specie(sp),
|
||||||
|
pcrit_(pcrit),
|
||||||
|
Tcrit_(Tcrit),
|
||||||
|
azentricFactor_(azentricFactor)
|
||||||
|
{
|
||||||
|
rhostd_=this->rho(Pstd,Tstd,Pstd*this->W()/(Tstd*this->R())); // Starting GUESS for the density by ideal gas law
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Construct as named copy
|
||||||
|
// Starting GUESS for the density by ideal gas law
|
||||||
|
inline redlichKwong::redlichKwong(const word& name, redlichKwong& pg)
|
||||||
|
:
|
||||||
|
specie(name, pg),
|
||||||
|
pcrit_(pg.pcrit_),
|
||||||
|
Tcrit_(pg.Tcrit_),
|
||||||
|
azentricFactor_(pg.azentricFactor_)
|
||||||
|
{
|
||||||
|
pg.rhostd_=this->rho(Pstd,Tstd, (Pstd*this->W()/(Tstd*this->R()))); // Starting GUESS for the density by ideal gas law
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Construct and return a clone
|
||||||
|
inline autoPtr<redlichKwong> redlichKwong::clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<redlichKwong>(new redlichKwong(*this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline autoPtr<redlichKwong> redlichKwong::New(Istream& is)
|
||||||
|
{
|
||||||
|
return autoPtr<redlichKwong>(new redlichKwong(is));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
//- Return density [kg/m^3]on
|
||||||
|
inline scalar redlichKwong::rho(const scalar p,const scalar T,const scalar rho0) const
|
||||||
|
{
|
||||||
|
|
||||||
|
scalar molarVolumePrevIteration;
|
||||||
|
scalar molarVolume;
|
||||||
|
int iter=0;
|
||||||
|
int maxIter_=400;
|
||||||
|
scalar tol_=1e-8;
|
||||||
|
int i;
|
||||||
|
scalar rho1=rhoMax_, rho2=rhoMin_,rho3, f1,f2,f3;
|
||||||
|
|
||||||
|
molarVolume=this->W()/rho0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
molarVolumePrevIteration= molarVolume;
|
||||||
|
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
molarVolume=molarVolumePrevIteration-((this->pReturn((this->W()/molarVolumePrevIteration),T)-p)/(this->dpdv((this->W()/
|
||||||
|
molarVolumePrevIteration),T)))/(pow(2,i));
|
||||||
|
|
||||||
|
i++;
|
||||||
|
if(i>8)
|
||||||
|
{
|
||||||
|
//using bisection methode as backup, solution must be between rho=0.001 to rho=1500;
|
||||||
|
for(i=0;i<200;i++)
|
||||||
|
{
|
||||||
|
f1= (this->pReturn(rho1,T)-p);
|
||||||
|
f2= (this->pReturn(rho2,T)-p);
|
||||||
|
rho3=(rho1+rho2)/2;
|
||||||
|
f3=(this->pReturn(rho3,T)-p);
|
||||||
|
|
||||||
|
if ((f2<0 && f3>0)||(f2>0 &&f3<0))
|
||||||
|
{
|
||||||
|
rho1=rho3;
|
||||||
|
}
|
||||||
|
else if ((f1<0 && f3>0)||(f1>0 &&f3<0))
|
||||||
|
{
|
||||||
|
rho2=rho3;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rho2=(rho2+rho3)/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mag(f3)<p*tol_)
|
||||||
|
{
|
||||||
|
molarVolume=this->W()/rho3;
|
||||||
|
molarVolumePrevIteration=this->W()/rho3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
molarVolumePrevIteration=this->W()/rho3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(mag(this->pReturn((this->W()/molarVolume),T)-p)>mag(this->pReturn((this->W()/molarVolumePrevIteration),T)-p));
|
||||||
|
|
||||||
|
|
||||||
|
if (iter++ > maxIter_)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"inline scalar redlichKwong::rho(const scalar p,const scalar T,const scalar rho0) const "
|
||||||
|
) << "Maximum number of iterations exceeded"
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
while(mag(molarVolumePrevIteration-molarVolume)>tol_*(this->W()/rho0));
|
||||||
|
|
||||||
|
return this->W()/molarVolume;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return density [kg/m^3]on
|
||||||
|
inline scalar redlichKwong::rho(const scalar p,const scalar T) const
|
||||||
|
{
|
||||||
|
|
||||||
|
scalar rho0=p/(this->R()*T); //using perfect gas equation as starting point
|
||||||
|
return rho(p,T,rho0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return compressibility drho/dp [s^2/m^2]
|
||||||
|
inline scalar redlichKwong::psi(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -this->dvdp(rho,T)*pow(rho,2)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return compression factor []
|
||||||
|
inline scalar redlichKwong::Z( const scalar p, const scalar T,const scalar rho0) const
|
||||||
|
{
|
||||||
|
return (p*this->rho(p,T,rho0))/(this->R()*T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline void redlichKwong::operator+=(const redlichKwong& pg)
|
||||||
|
{
|
||||||
|
specie::operator+=(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void redlichKwong::operator-=(const redlichKwong& pg)
|
||||||
|
{
|
||||||
|
specie::operator-=(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void redlichKwong::operator*=(const scalar s)
|
||||||
|
{
|
||||||
|
specie::operator*=(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
//****************not working**************////
|
||||||
|
/*
|
||||||
|
inline redlichKwong operator+
|
||||||
|
(
|
||||||
|
const redlichKwong& pg1,
|
||||||
|
const redlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return redlichKwong
|
||||||
|
(
|
||||||
|
static_cast<const specie&>(pg1)
|
||||||
|
+ static_cast<const specie&>(pg2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline redlichKwong operator-
|
||||||
|
(
|
||||||
|
const redlichKwong& pg1,
|
||||||
|
const redlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return redlichKwong
|
||||||
|
(
|
||||||
|
static_cast<const specie&>(pg1)
|
||||||
|
- static_cast<const specie&>(pg2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline redlichKwong operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const redlichKwong& pg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return redlichKwong(s*static_cast<const specie&>(pg));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline redlichKwong operator==
|
||||||
|
(
|
||||||
|
const redlichKwong& pg1,
|
||||||
|
const redlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return pg2 - pg1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Description
|
||||||
|
Soave Redlich Kwong equation of state.
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "soaveRedlichKwong.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
soaveRedlichKwong::soaveRedlichKwong(Istream& is)
|
||||||
|
:
|
||||||
|
specie(is),
|
||||||
|
pcrit_(readScalar(is)),
|
||||||
|
Tcrit_(readScalar(is)),
|
||||||
|
azentricFactor_(readScalar(is))
|
||||||
|
{
|
||||||
|
is.check("soaveRedlichKwong::soaveRedlichKwong(Istream& is)");
|
||||||
|
rhostd_=this->rho(Pstd,Tstd,Pstd*this->W()/(Tstd*this->R()));
|
||||||
|
rhoMax_=1500;
|
||||||
|
rhoMin_=0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Ostream& operator<<(Ostream& os, const soaveRedlichKwong& pg)
|
||||||
|
{
|
||||||
|
os << static_cast<const specie&>(pg)<< tab
|
||||||
|
<< pg.pcrit_ << tab<< pg.Tcrit_<<tab<<pg.azentricFactor_;
|
||||||
|
|
||||||
|
os.check("Ostream& operator<<(Ostream& os, const soaveRedlichKwong& st)");
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,191 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::soaveRedlichKwong
|
||||||
|
|
||||||
|
Description
|
||||||
|
Soave Redlich Kwong equation of state.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
soaveRedlichKwongI.H
|
||||||
|
soaveRedlichKwong.C
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef soaveRedlichKwong_H
|
||||||
|
#define soaveRedlichKwong_H
|
||||||
|
|
||||||
|
#include "specie.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
#include "word.H"
|
||||||
|
#include "scalar.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class perfectGas Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class soaveRedlichKwong
|
||||||
|
:
|
||||||
|
public specie
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
inline soaveRedlichKwong(
|
||||||
|
const specie& sp,
|
||||||
|
scalar pcrit,
|
||||||
|
scalar Tcrit,
|
||||||
|
scalar azentricFactor
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from Istream
|
||||||
|
soaveRedlichKwong(Istream&);
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
inline soaveRedlichKwong(const word& name, soaveRedlichKwong&);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
inline autoPtr<soaveRedlichKwong> clone() const;
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline static autoPtr<soaveRedlichKwong> New(Istream& is);
|
||||||
|
|
||||||
|
//Member Variabels
|
||||||
|
scalar pcrit_;
|
||||||
|
scalar Tcrit_;
|
||||||
|
scalar rhostd_;
|
||||||
|
scalar azentricFactor_;
|
||||||
|
scalar rhoMax_; //should be read from the fvSolution file where rhoMax and rhoMin values must be define ( for rhoSimpleFoam)
|
||||||
|
scalar rhoMin_;
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
inline scalar pcrit() const;
|
||||||
|
inline scalar Tcrit() const;
|
||||||
|
inline scalar azentricFactor() const;
|
||||||
|
inline scalar rhostd()const;
|
||||||
|
inline scalar pReturn(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//-Redlich Kwong factors
|
||||||
|
inline scalar a() const;
|
||||||
|
inline scalar b() const;
|
||||||
|
inline scalar n() const;
|
||||||
|
|
||||||
|
//derivatives
|
||||||
|
inline scalar dpdv(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar dpdT(const scalar rho, const scalar T) const;
|
||||||
|
inline scalar dvdT(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar dvdp(const scalar rho, const scalar T) const;
|
||||||
|
inline scalar isobarExpCoef(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar isothermalCompressiblity(const scalar rho,const scalar T) const;
|
||||||
|
inline scalar integral_d2pdT2_dv(const scalar rho,const scalar T) const ; // Used for cv
|
||||||
|
inline scalar d2pdv2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2pdT2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2pdvdT(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar d2vdT2(const scalar rho,const scalar T) const; // not Used At The Moment
|
||||||
|
inline scalar integral_p_dv(const scalar rho,const scalar T) const; //Used for internal Energy
|
||||||
|
inline scalar integral_dpdT_dv(const scalar rho,const scalar T) const; //Used for Entropy
|
||||||
|
|
||||||
|
//- Return density [kg/m^3] // rho0 is the starting point of the newton solver used to calculate rho
|
||||||
|
inline scalar rho(const scalar p,const scalar T,const scalar rho0) const;
|
||||||
|
inline scalar rho(const scalar p,const scalar T) const;
|
||||||
|
//- Return compressibility rho/p [s^2/m^2]
|
||||||
|
inline scalar psi(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Return compression factor []
|
||||||
|
inline scalar Z(const scalar p,const scalar T,const scalar rho0) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member operators
|
||||||
|
|
||||||
|
inline void operator+=(const soaveRedlichKwong&);
|
||||||
|
inline void operator-=(const soaveRedlichKwong&);
|
||||||
|
|
||||||
|
inline void operator*=(const scalar);
|
||||||
|
|
||||||
|
|
||||||
|
/* // Friend operators
|
||||||
|
|
||||||
|
inline friend soaveRedlichKwong operator+
|
||||||
|
(
|
||||||
|
const soaveRedlichKwong&,
|
||||||
|
const soaveRedlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend soaveRedlichKwong operator-
|
||||||
|
(
|
||||||
|
const soaveRedlichKwong&,
|
||||||
|
const soaveRedlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend soaveRedlichKwong operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const soaveRedlichKwong&
|
||||||
|
);
|
||||||
|
|
||||||
|
inline friend soaveRedlichKwong operator==
|
||||||
|
(
|
||||||
|
const soaveRedlichKwong&,
|
||||||
|
const soaveRedlichKwong&
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Ostream Operator
|
||||||
|
|
||||||
|
friend Ostream& operator<<(Ostream&, const soaveRedlichKwong&);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "soaveRedlichKwongI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,488 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "soaveRedlichKwong.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline scalar soaveRedlichKwong::pcrit()const
|
||||||
|
{
|
||||||
|
return pcrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline scalar soaveRedlichKwong::Tcrit()const
|
||||||
|
{
|
||||||
|
return Tcrit_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline scalar soaveRedlichKwong::rhostd()const
|
||||||
|
{
|
||||||
|
return rhostd_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns the Azentric Factor (Acentric Factor)
|
||||||
|
inline scalar soaveRedlichKwong::azentricFactor() const
|
||||||
|
{
|
||||||
|
return azentricFactor_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//returns the pressure for a given density and temperature
|
||||||
|
inline scalar soaveRedlichKwong::pReturn(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return (this->RR*T/((this->W()/rho)-this->b())-this->a()*pow((1+this->n()*(1-pow((T/this->Tcrit()),0.5))),2)/((this->W()/rho)*((this->W()/rho)+this->b())));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Faktor a of the soave redlich Kwong equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::a() const
|
||||||
|
{
|
||||||
|
return 0.42747*pow(this->RR,2)*pow(this->Tcrit(),2)/(this->pcrit());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Faktor b of the soave redlich Kwong equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::b() const
|
||||||
|
{
|
||||||
|
return 0.08664*this->RR*this->Tcrit()/this->pcrit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Faktor n of the soave redlich Kwong equation of state
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::n() const
|
||||||
|
{
|
||||||
|
return 0.48508+1.55171*this->azentricFactor()-0.15613*pow(this->azentricFactor(),2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * Derivatives * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dp/dv at constant temperature
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::dpdv(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -(2*this->a()*this->n()*this->Tcrit()*(this->b()-(this->W()/rho))*(pow(this->b(),2)+this->b()*(this->W()/rho)-2*pow((this->W()/rho),2))*(this->n()+1)*pow((T/this->Tcrit()),0.5)+this->Tcrit()*(this->RR*T*pow((this->W()/rho),2)*(pow(this->b(),2)+2*this->b()*(this->W()/rho)+pow((this->W()/rho),2))-this->a()*(pow(this->b(),3)-3*this->b()*pow((this->W()/rho),2)+2*pow((this->W()/rho),3))*pow((this->n()+1),2))-this->a()*pow(this->n(),2)*T*(pow(this->b(),3)-3*this->b()*pow((this->W()/rho),2)+2*pow((this->W()/rho),3)))/(pow((this->W()/rho),2)*this->Tcrit()*pow((this->b()+(this->W()/rho)),2)*pow((this->b()-(this->W()/rho)),2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dp/dT at constant molar volume
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::dpdT(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->a()*this->n()*(this->n()+1)*pow((T/this->Tcrit()),0.5)/(T*(this->W()/rho)*(this->b()+(this->W()/rho)))-this->a()*pow(this->n(),2)/((this->W()/rho)*this->Tcrit()*(this->b()+(this->W()/rho)))-this->RR/(this->b()-(this->W()/rho));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dv/dT at constant pressure
|
||||||
|
//using implicit differentiation
|
||||||
|
// (molar values)
|
||||||
|
inline scalar soaveRedlichKwong::dvdT(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return (-1)*this->dpdT(rho,T)/this->dpdv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Real deviative dv/dp at constant temperature
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::dvdp(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return 1/this->dpdv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//needed to calculate the internal energy
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::integral_p_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->RR*T*log((this->W()/rho)-this->b())
|
||||||
|
-(this->a()*(2*this->n()*this->Tcrit()*(this->n()+1)*pow(T/this->Tcrit(),0.5)-this->Tcrit()*(pow(this->n(),2)+2*this->n()+1)-pow(this->n(),2)*T)*log(this->b()+(this->W()/rho)))/(this->b()*this->Tcrit())
|
||||||
|
+this->a()*(2*this->n()*this->Tcrit()*(this->n()+1)*pow(T/this->Tcrit(),0.5)-this->Tcrit()*(pow(this->n(),2)+2*this->n()+1)-pow(this->n(),2)*T)*log((this->W()/rho))/(this->b()*this->Tcrit());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//needed to calculate the entropy
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::integral_dpdT_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->RR*log((this->W()/rho)-this->b())+(pow(this->n(),2)*this->a()/(this->b()*this->Tcrit())-this->a()*this->n()*(this->n()+1)*pow((T/this->Tcrit()),0.5)/(this->b()*T))*log(this->b()+(this->W()/rho))+(this->a()*this->n()*(this->n()+1)*pow((T/this->Tcrit()),0.5)/(this->b()*T)-this->a()*pow(this->n(),2)/(this->b()*this->Tcrit()))*log((this->W()/rho));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * second order Derivative based functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::d2pdT2(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return -this->a()*this->n()*(this->n()+1)*pow(T/this->Tcrit(),0.5)/(2*pow(T,2)*(this->W()/rho)*(this->b()+(this->W()/rho)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::d2pdv2(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return 2*(2*this->a()*this->n()*this->Tcrit()*(this->b()-(this->W()/rho))
|
||||||
|
*(pow(this->b(),4)+pow(this->b(),3)*(this->W()/rho)-2*pow(this->b(),2)*pow((this->W()/rho),2)
|
||||||
|
-3*this->b()*pow((this->W()/rho),3)+3*pow((this->W()/rho),4))*(this->n()+1)*pow(T/this->Tcrit(),0.5)
|
||||||
|
-this->Tcrit()*(this->a()*(pow(this->b(),5)-3*pow(this->b(),3)*pow((this->W()/rho),2)-pow(this->b(),2)*pow((this->W()/rho),3)
|
||||||
|
+6*this->b()*pow((this->W()/rho),4)-3*pow((this->W()/rho),5))*pow((this->n()+1),2)
|
||||||
|
+this->RR*T*pow((this->W()/rho),3)*(pow(this->b(),3)+3*pow(this->b(),2)*(this->W()/rho)+3*this->b()*pow((this->W()/rho),2)+pow((this->W()/rho),3)))
|
||||||
|
-this->a()*pow(this->n(),2)*T*(pow(this->b(),5)-3*pow(this->b(),3)*pow((this->W()/rho),2)-pow(this->b(),2)*pow((this->W()/rho),3)
|
||||||
|
+6*this->b()*pow((this->W()/rho),4)-3*pow((this->W()/rho),5)))
|
||||||
|
/(pow((this->W()/rho),3)*this->Tcrit()*pow(((this->W()/rho)+this->b()),3)*pow((this->b()-(this->W()/rho)),3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
// using second Order implicit differentiation
|
||||||
|
inline scalar soaveRedlichKwong::d2vdT2(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -(pow(this->dpdT(rho,T),2)*this->d2pdv2(rho,T)+ pow(this->dpdv(rho,T),2) *this->d2pdT2(rho,T)- 2*this->dpdv(rho,T)*this->dpdT(rho,T)*this->d2pdvdT(rho,T))/( pow(this->dpdv(rho,T),3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::d2pdvdT(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -this->a()*this->n()*(this->b()+2*(this->W()/rho))*(this->n()+1)*pow(T/this->Tcrit(),0.5)
|
||||||
|
/(T*pow((this->W()/rho),2)*pow((this->b()+(this->W()/rho)),2))
|
||||||
|
-(this->RR*pow((this->W()/rho),2)*this->Tcrit()*(pow(this->b(),2)+2*this->b()*(this->W()/rho)+pow((this->W()/rho),2))
|
||||||
|
-this->a()*pow(this->n(),2)*(pow(this->b(),3)-3*this->b()*pow((this->W()/rho),2)+2*pow((this->W()/rho),3)))
|
||||||
|
/(pow((this->W()/rho),2)*this->Tcrit()*pow((this->b()+(this->W()/rho)),2)*pow((this->b()-(this->W()/rho)),2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// the result of this intergal is needed for the nasa based cp polynomial
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::integral_d2pdT2_dv(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->a()*this->n()*(this->n()+1)*pow(T/this->Tcrit(),0.5)*log(this->b()+(this->W()/rho))
|
||||||
|
/(2*this->b()*pow(T,2))
|
||||||
|
-this->a()*this->n()*(this->n()+1)*pow(T/this->Tcrit(),0.5)*log((this->W()/rho))/(2*this->b()*pow(T,2));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//* * * * * * * * * * * * * thermodynamic properties * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
//Isobar expansion Coefficent beta = 1/v (dv/dt) at constant p
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::isobarExpCoef(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->dvdT(rho, T)*rho/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
//isothemal compressiblity kappa
|
||||||
|
//(molar values)
|
||||||
|
inline scalar soaveRedlichKwong::isothermalCompressiblity(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->isobarExpCoef(rho, T)/this->dpdT(rho, T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Construct from components
|
||||||
|
inline soaveRedlichKwong::soaveRedlichKwong
|
||||||
|
(
|
||||||
|
const specie& sp,
|
||||||
|
scalar pcrit,
|
||||||
|
scalar Tcrit,
|
||||||
|
scalar azentricFactor
|
||||||
|
|
||||||
|
)
|
||||||
|
:
|
||||||
|
specie(sp),
|
||||||
|
pcrit_(pcrit),
|
||||||
|
Tcrit_(Tcrit),
|
||||||
|
azentricFactor_(azentricFactor)
|
||||||
|
{
|
||||||
|
rhostd_=this->rho(Pstd,Tstd,Pstd*this->W()/(Tstd*this->R()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Construct as named copy
|
||||||
|
inline soaveRedlichKwong::soaveRedlichKwong(const word& name, soaveRedlichKwong& pg)
|
||||||
|
:
|
||||||
|
specie(name, pg),
|
||||||
|
pcrit_(pg.pcrit_),
|
||||||
|
Tcrit_(pg.Tcrit_),
|
||||||
|
azentricFactor_(pg.azentricFactor_)
|
||||||
|
{
|
||||||
|
pg.rhostd_=this->rho(Pstd,Tstd, (Pstd*this->W()/(Tstd*this->R())));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Construct and return a clone
|
||||||
|
inline autoPtr<soaveRedlichKwong> soaveRedlichKwong::clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<soaveRedlichKwong>(new soaveRedlichKwong(*this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline autoPtr<soaveRedlichKwong> soaveRedlichKwong::New(Istream& is)
|
||||||
|
{
|
||||||
|
return autoPtr<soaveRedlichKwong>(new soaveRedlichKwong(is));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
//- Return density [kg/m^3]on
|
||||||
|
inline scalar soaveRedlichKwong::rho(const scalar p,const scalar T,const scalar rho0) const
|
||||||
|
{
|
||||||
|
|
||||||
|
scalar molarVolumePrevIteration;
|
||||||
|
scalar molarVolume;
|
||||||
|
int iter=0;
|
||||||
|
int maxIter_=400;
|
||||||
|
scalar tol_=1e-8;
|
||||||
|
int i;
|
||||||
|
scalar rho1=rhoMax_, rho2=rhoMin_,rho3, f1,f2,f3;
|
||||||
|
|
||||||
|
molarVolume=this->W()/rho0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
molarVolumePrevIteration= molarVolume;
|
||||||
|
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
molarVolume=molarVolumePrevIteration-((this->pReturn((this->W()/molarVolumePrevIteration),T)-p)/(this->dpdv((this->W()/
|
||||||
|
molarVolumePrevIteration),T)))/(pow(2,i));
|
||||||
|
|
||||||
|
i++;
|
||||||
|
if(i>8)
|
||||||
|
{
|
||||||
|
//using bisection methode as backup, solution must be between rho=0.001 to rho=1500;
|
||||||
|
for(i=0;i<200;i++)
|
||||||
|
{
|
||||||
|
f1= (this->pReturn(rho1,T)-p);
|
||||||
|
f2= (this->pReturn(rho2,T)-p);
|
||||||
|
rho3=(rho1+rho2)/2;
|
||||||
|
f3=(this->pReturn(rho3,T)-p);
|
||||||
|
|
||||||
|
if ((f2<0 && f3>0)||(f2>0 &&f3<0))
|
||||||
|
{
|
||||||
|
rho1=rho3;
|
||||||
|
}
|
||||||
|
else if ((f1<0 && f3>0)||(f1>0 &&f3<0))
|
||||||
|
{
|
||||||
|
rho2=rho3;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rho2=(rho2+rho3)/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mag(f3)<p*tol_)
|
||||||
|
{
|
||||||
|
molarVolume=this->W()/rho3;
|
||||||
|
molarVolumePrevIteration=this->W()/rho3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
molarVolumePrevIteration=this->W()/rho3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(mag(this->pReturn((this->W()/molarVolume),T)-p)>mag(this->pReturn((this->W()/molarVolumePrevIteration),T)-p));
|
||||||
|
|
||||||
|
|
||||||
|
if (iter++ > maxIter_)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"inline scalar soaveRedlichKwong::rho(const scalar p,const scalar T,const scalar rho0) const "
|
||||||
|
) << "Maximum number of iterations exceeded"
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
while(mag(molarVolumePrevIteration-molarVolume)>tol_*(this->W()/rho0));
|
||||||
|
|
||||||
|
return this->W()/molarVolume;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return density [kg/m^3]on
|
||||||
|
inline scalar soaveRedlichKwong::rho(const scalar p,const scalar T) const
|
||||||
|
{
|
||||||
|
|
||||||
|
scalar rho0=p/(this->R()*T); //using perfect gas equation as starting point
|
||||||
|
return rho(p,T,rho0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return compressibility drho/dp [s^2/m^2]
|
||||||
|
inline scalar soaveRedlichKwong::psi(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return -this->dvdp(rho,T)*pow(rho,2)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return compression factor []
|
||||||
|
inline scalar soaveRedlichKwong::Z( const scalar p, const scalar T,const scalar rho0) const
|
||||||
|
{
|
||||||
|
return (p*this->rho(p,T,rho0))/(this->R()*T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline void soaveRedlichKwong::operator+=(const soaveRedlichKwong& pg)
|
||||||
|
{
|
||||||
|
specie::operator+=(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void soaveRedlichKwong::operator-=(const soaveRedlichKwong& pg)
|
||||||
|
{
|
||||||
|
specie::operator-=(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void soaveRedlichKwong::operator*=(const scalar s)
|
||||||
|
{
|
||||||
|
specie::operator*=(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
//**************** not working**************//
|
||||||
|
/*
|
||||||
|
inline soaveRedlichKwong operator+
|
||||||
|
(
|
||||||
|
const soaveRedlichKwong& pg1,
|
||||||
|
const soaveRedlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return soaveRedlichKwong
|
||||||
|
(
|
||||||
|
static_cast<const specie&>(pg1)
|
||||||
|
+ static_cast<const specie&>(pg2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline soaveRedlichKwong operator-
|
||||||
|
(
|
||||||
|
const soaveRedlichKwong& pg1,
|
||||||
|
const soaveRedlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return soaveRedlichKwong
|
||||||
|
(
|
||||||
|
static_cast<const specie&>(pg1)
|
||||||
|
- static_cast<const specie&>(pg2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline soaveRedlichKwong operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const soaveRedlichKwong& pg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return soaveRedlichKwong(s*static_cast<const specie&>(pg));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline soaveRedlichKwong operator==
|
||||||
|
(
|
||||||
|
const soaveRedlichKwong& pg1,
|
||||||
|
const soaveRedlichKwong& pg2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return pg2 - pg1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,73 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "nasaHeatCapacityPolynomial.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
Foam::nasaHeatCapacityPolynomial<equationOfState>::nasaHeatCapacityPolynomial(Istream& is)
|
||||||
|
:
|
||||||
|
equationOfState(is),
|
||||||
|
a1_(readScalar(is)),
|
||||||
|
a2_(readScalar(is)),
|
||||||
|
a3_(readScalar(is)),
|
||||||
|
a4_(readScalar(is)),
|
||||||
|
a5_(readScalar(is)),
|
||||||
|
a6_(readScalar(is)),
|
||||||
|
a7_(readScalar(is))
|
||||||
|
{
|
||||||
|
is.check("nasaHeatCapacityPolynomial::nasaHeatCapacityPolynomial(Istream& is)");
|
||||||
|
cp_std=this->cp_nonLimited(this->rhostd_,this->Tstd); // cp @ STD (needed to limit cp for stability
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
Foam::Ostream& Foam::operator<<
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct
|
||||||
|
)
|
||||||
|
{
|
||||||
|
os << static_cast<const equationOfState&>(ct) << tab
|
||||||
|
<< ct.a1_ << tab<< ct.a2_ << tab << ct.a3_ << tab << ct.a4_ << tab << ct.a5_ << tab << ct.a6_ << tab << ct.a7_ ;
|
||||||
|
cout<<"nasa polynomal start"<<nl<<endl;
|
||||||
|
os.check("Ostream& operator<<(Ostream& os, const nasaHeatCapacityPolynomial& ct)");
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,259 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::nasaHeatCapacityPolynomial
|
||||||
|
|
||||||
|
Description
|
||||||
|
Nasa Heat Capacity Polynomial for perfect Gas (7.order polynominal) --> freely available for many fluids
|
||||||
|
--> paper title: NASA Glenn Coefficients for Calculating Thermodynamic Properties of Individual Species
|
||||||
|
|
||||||
|
templated into the equationOfState
|
||||||
|
-> uses the equation of state to calculate all real Gas properties like Enthalpy, Entropy ...
|
||||||
|
-> can not be used with the perfectGas equation of state
|
||||||
|
|
||||||
|
Equations for the real gas correction: Have a look at thermodnamics books e.g. Thermodynamics: An Engineering Approch, 5 Edition, Chapter 12
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
nasaHeatCapacityPolynomialI.H
|
||||||
|
nasaHeatCapacityPolynomial.C
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef nasaHeatCapacityPolynomial_H
|
||||||
|
#define nasaHeatCapacityPolynomial_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of friend functions and operators
|
||||||
|
|
||||||
|
template<class equationOfState> class nasaHeatCapacityPolynomial;
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline nasaHeatCapacityPolynomial<equationOfState> operator+
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>&,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline nasaHeatCapacityPolynomial<equationOfState> operator-
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>&,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline nasaHeatCapacityPolynomial<equationOfState> operator*
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline nasaHeatCapacityPolynomial<equationOfState> operator==
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>&,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
Ostream& operator<<
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class nasaHeatCapacityPolynomial Thermo Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
class nasaHeatCapacityPolynomial
|
||||||
|
:
|
||||||
|
public equationOfState
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
scalar a1_;
|
||||||
|
scalar a2_;
|
||||||
|
scalar a3_;
|
||||||
|
scalar a4_;
|
||||||
|
scalar a5_;
|
||||||
|
scalar a6_;
|
||||||
|
scalar a7_;
|
||||||
|
scalar cp_std;
|
||||||
|
|
||||||
|
// Private member functions
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
inline nasaHeatCapacityPolynomial
|
||||||
|
(
|
||||||
|
const equationOfState& st,
|
||||||
|
const scalar a1,
|
||||||
|
const scalar a2,
|
||||||
|
const scalar a3,
|
||||||
|
const scalar a4,
|
||||||
|
const scalar a5,
|
||||||
|
const scalar a6,
|
||||||
|
const scalar a7
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//Variable
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from Istream
|
||||||
|
nasaHeatCapacityPolynomial(Istream&);
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
inline nasaHeatCapacityPolynomial(const word&, const nasaHeatCapacityPolynomial&);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
inline autoPtr<nasaHeatCapacityPolynomial> clone() const;
|
||||||
|
|
||||||
|
//- Selector from Istream
|
||||||
|
inline static autoPtr<nasaHeatCapacityPolynomial> New(Istream& is);
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//useful functions
|
||||||
|
//used to calculate the internal energy
|
||||||
|
//ideal Gas Enthalpy
|
||||||
|
inline scalar h0(const scalar T) const;
|
||||||
|
|
||||||
|
|
||||||
|
// used to calculate the entropy
|
||||||
|
//ideal Gas Entropy
|
||||||
|
inline scalar s0(const scalar T) const;
|
||||||
|
|
||||||
|
|
||||||
|
//used to calculate the internal energy
|
||||||
|
//ideal Gas Enthalpy
|
||||||
|
inline scalar e0(const scalar T) const;
|
||||||
|
|
||||||
|
// Fundamental properties
|
||||||
|
|
||||||
|
//- ideal gas Heat capacity at constant pressure [J/(kmol K)]
|
||||||
|
inline scalar cv0(const scalar T) const;
|
||||||
|
|
||||||
|
//- ideal gas Heat capacity at constant pressure [J/(kmol K)]
|
||||||
|
inline scalar cp0(const scalar T) const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant pressure [J/(kmol K)]
|
||||||
|
inline scalar cp(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant pressure [J/(kmol K)]
|
||||||
|
inline scalar cp_nonLimited(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant pressure [J/(kmol K)]
|
||||||
|
inline scalar cv(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Enthalpy [J/kmol]
|
||||||
|
inline scalar h(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Entropy [J/(kmol K)]
|
||||||
|
inline scalar s(const scalar rho,const scalar T) const;
|
||||||
|
|
||||||
|
//- Internal Energy [J/kmol]
|
||||||
|
inline scalar e(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member operators
|
||||||
|
|
||||||
|
inline void operator+=(const nasaHeatCapacityPolynomial&);
|
||||||
|
inline void operator-=(const nasaHeatCapacityPolynomial&);
|
||||||
|
|
||||||
|
|
||||||
|
// Friend operators
|
||||||
|
|
||||||
|
friend nasaHeatCapacityPolynomial operator+ <equationOfState>
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial&,
|
||||||
|
const nasaHeatCapacityPolynomial&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend nasaHeatCapacityPolynomial operator- <equationOfState>
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial&,
|
||||||
|
const nasaHeatCapacityPolynomial&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend nasaHeatCapacityPolynomial operator* <equationOfState>
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const nasaHeatCapacityPolynomial&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend nasaHeatCapacityPolynomial operator== <equationOfState>
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial&,
|
||||||
|
const nasaHeatCapacityPolynomial&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// IOstream Operators
|
||||||
|
|
||||||
|
friend Ostream& operator<< <equationOfState>
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const nasaHeatCapacityPolynomial&
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "nasaHeatCapacityPolynomialI.H"
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "nasaHeatCapacityPolynomial.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,419 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::nasaHeatCapacityPolynomial<equationOfState>::nasaHeatCapacityPolynomial
|
||||||
|
(
|
||||||
|
const equationOfState& st,
|
||||||
|
const scalar a1,
|
||||||
|
const scalar a2,
|
||||||
|
const scalar a3,
|
||||||
|
const scalar a4,
|
||||||
|
const scalar a5,
|
||||||
|
const scalar a6,
|
||||||
|
const scalar a7
|
||||||
|
)
|
||||||
|
:
|
||||||
|
equationOfState(st),
|
||||||
|
a1_(a1),
|
||||||
|
a2_(a2),
|
||||||
|
a3_(a3),
|
||||||
|
a4_(a4),
|
||||||
|
a5_(a5),
|
||||||
|
a6_(a6),
|
||||||
|
a7_(a7)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::nasaHeatCapacityPolynomial<equationOfState>::nasaHeatCapacityPolynomial
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const nasaHeatCapacityPolynomial& ct
|
||||||
|
)
|
||||||
|
:
|
||||||
|
equationOfState(name, ct),
|
||||||
|
a1_(ct.a1_),
|
||||||
|
a2_(ct.a2_),
|
||||||
|
a3_(ct.a3_),
|
||||||
|
a4_(ct.a4_),
|
||||||
|
a5_(ct.a5_),
|
||||||
|
a6_(ct.a6_),
|
||||||
|
a7_(ct.a7_)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::autoPtr<Foam::nasaHeatCapacityPolynomial<equationOfState> >
|
||||||
|
Foam::nasaHeatCapacityPolynomial<equationOfState>::clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<nasaHeatCapacityPolynomial<equationOfState> >
|
||||||
|
(
|
||||||
|
new nasaHeatCapacityPolynomial<equationOfState>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::autoPtr<Foam::nasaHeatCapacityPolynomial<equationOfState> >
|
||||||
|
Foam::nasaHeatCapacityPolynomial<equationOfState>::New(Istream& is)
|
||||||
|
{
|
||||||
|
return autoPtr<nasaHeatCapacityPolynomial<equationOfState> >
|
||||||
|
(
|
||||||
|
new nasaHeatCapacityPolynomial<equationOfState>(is)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * *useful functions* * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
//used to calculate the internal energy
|
||||||
|
//perfect gas enthalpy
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::h0
|
||||||
|
(
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return this->RR*T*(-this->a1_*pow(T,-2)+this->a2_*log(T)/T+this->a3_+0.5*this->a4_*T+(this->a5_*pow(T,2))/3+(this->a6_*pow(T,3))/4+(this->a7_*pow(T,4))/5);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//used to calculate the internal energy
|
||||||
|
//perfect gas internal energy
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::e0
|
||||||
|
(
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return this->h0(T) - this->RR*T;
|
||||||
|
}
|
||||||
|
|
||||||
|
// used to calculate the entropy
|
||||||
|
// perfect gas entropy
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::s0
|
||||||
|
(
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return this->RR*( this->a1_*(-1)/(2*pow(T,2))-this->a2_/T+this->a3_*log(T)+this->a4_*T+(this->a5_*pow(T,2))/2+(this->a6_*pow(T,3))/3+(this->a7_*pow(T,4))/4);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
//perfect gas cp
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::cp0
|
||||||
|
(
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
return this->RR*(this->a1_*1/pow(T,2)+this->a2_*1/T+this->a3_+this->a4_*T+this->a5_*pow(T,2)+this->a6_*pow(T,3)+this->a7_*pow(T,4));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//perfect gas cv
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::cv0
|
||||||
|
(
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
return this->cp0(T)-this->RR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//function to calculate real gas cp
|
||||||
|
//using cp=cv+(dp/dT)^2/(dp/dv)
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::cp
|
||||||
|
(
|
||||||
|
const scalar rho,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
// Problem --> dpdv(rho,T) is =0 at some points within the vapour dome. To increase stability, (dp/dv) has to be limited
|
||||||
|
// cp can be negative within the vapor dome. To avoid this nonphysical result, the absolute value is used.
|
||||||
|
// within the vapourdome and at the critical point, cp increases to very high values --> infinity,
|
||||||
|
// this would decrease the stability, so cp will be limited to 20 time the cp @ STD
|
||||||
|
return min(cp_std*20,fabs(this->cv(rho,T)-T*pow((this->dpdT(rho, T)),2)/min(this->dpdv(rho, T),-1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// this function is needed to get cp @ STD (without the limit imposed in the function above), which in turn is needed to limit the cp in the function above
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::cp_nonLimited
|
||||||
|
(
|
||||||
|
const scalar rho,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return fabs(this->cv(rho,T)-T*pow((this->dpdT(rho, T)),2)/min(this->dpdv(rho, T),-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//function to calculate real gas cv
|
||||||
|
//cv=cv0+T*integral d2p/dT2 dv
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::cv
|
||||||
|
(
|
||||||
|
const scalar rho,
|
||||||
|
const scalar T
|
||||||
|
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
return this->cv0(T)+T*this->integral_d2pdT2_dv(rho, T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//function to calculate real gas enthalpy
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::h
|
||||||
|
(
|
||||||
|
const scalar rho,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return this->e(rho,T)+this->pReturn(rho,T)/rho*this->W()-this->Pstd/this->rhostd()*this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// function to calculate real gas internal energy
|
||||||
|
// important assumption used is that the internal Energie is 0 at STD conditions.
|
||||||
|
// equation: du= cv0 dT +[T*dp/dT -p]dv
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::e
|
||||||
|
(
|
||||||
|
const scalar rho,
|
||||||
|
const scalar T
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return ( -this->Tstd*this->integral_dpdT_dv(this->rhostd(),this->Tstd)
|
||||||
|
+this->integral_p_dv(this->rhostd(),this->Tstd)
|
||||||
|
+this->e0(T)-this->e0(this->Tstd)
|
||||||
|
+T*this->integral_dpdT_dv(rho,T)
|
||||||
|
-this->integral_p_dv(rho,T)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//function to calculate real gas entropy
|
||||||
|
// important assumption used is that the Entropy is 0 at STD conditions.
|
||||||
|
// equation: ds= cv0/T * dT + dp/dT *dv
|
||||||
|
// --> integral cv0/T dT = s0(T) -s0(Tstd) - R*ln(T/Tstd) --> due to s0(T)-s0(Tstd)=integral cp0/T dT
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::scalar Foam::nasaHeatCapacityPolynomial<equationOfState>::s
|
||||||
|
(
|
||||||
|
const scalar rho,
|
||||||
|
const scalar T
|
||||||
|
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return -this->integral_dpdT_dv(this->rhostd(),this->Tstd)+(this->s0(T)-this->s0(this->Tstd))-this->RR*log(T/this->Tstd)+ this->integral_dpdT_dv(rho,T);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline void Foam::nasaHeatCapacityPolynomial<equationOfState>::operator+=
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
scalar molr1 = this->nMoles();
|
||||||
|
|
||||||
|
equationOfState::operator+=(ct);
|
||||||
|
|
||||||
|
molr1 /= this->nMoles();
|
||||||
|
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||||
|
|
||||||
|
a1_ = molr1*a1_ + molr2*ct.a1_;
|
||||||
|
a2_ = molr1*a2_ + molr2*ct.a2_;
|
||||||
|
a3_ = molr1*a3_ + molr2*ct.a3_;
|
||||||
|
a4_ = molr1*a4_ + molr2*ct.a4_;
|
||||||
|
a5_ = molr1*a5_ + molr2*ct.a5_;
|
||||||
|
a6_ = molr1*a6_ + molr2*ct.a6_;
|
||||||
|
a7_ = molr1*a7_ + molr2*ct.a7_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline void Foam::nasaHeatCapacityPolynomial<equationOfState>::operator-=
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct
|
||||||
|
)
|
||||||
|
{
|
||||||
|
scalar molr1 = this->nMoles();
|
||||||
|
|
||||||
|
nasaHeatCapacityPolynomial::operator-=(ct);
|
||||||
|
|
||||||
|
molr1 /= this->nMoles();
|
||||||
|
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||||
|
|
||||||
|
a1_ = molr1*a1_ - molr2*ct.a1_;
|
||||||
|
a2_ = molr1*a2_ - molr2*ct.a2_;
|
||||||
|
a3_ = molr1*a3_ - molr2*ct.a3_;
|
||||||
|
a4_ = molr1*a4_ - molr2*ct.a4_;
|
||||||
|
a5_ = molr1*a5_ - molr2*ct.a5_;
|
||||||
|
a6_ = molr1*a6_ - molr2*ct.a6_;
|
||||||
|
a7_ = molr1*a7_ - molr2*ct.a7_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::nasaHeatCapacityPolynomial<equationOfState> Foam::operator+
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct1,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
equationOfState eofs
|
||||||
|
(
|
||||||
|
static_cast<const equationOfState&>(ct1)
|
||||||
|
+ static_cast<const equationOfState&>(ct2)
|
||||||
|
);
|
||||||
|
|
||||||
|
return nasaHeatCapacityPolynomial<equationOfState>
|
||||||
|
(
|
||||||
|
eofs,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a1_
|
||||||
|
+ ct2.nMoles()/eofs.nMoles()*ct2.a1_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a2_
|
||||||
|
+ ct2.nMoles()/eofs.nMoles()*ct2.a2_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a3_
|
||||||
|
+ ct2.nMoles()/eofs.nMoles()*ct2.a3_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a4_
|
||||||
|
+ ct2.nMoles()/eofs.nMoles()*ct2.a4_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a5_
|
||||||
|
+ ct2.nMoles()/eofs.nMoles()*ct2.a5_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a6_
|
||||||
|
+ ct2.nMoles()/eofs.nMoles()*ct2.a6_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a7_
|
||||||
|
+ ct2.nMoles()/eofs.nMoles()*ct2.a7_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::nasaHeatCapacityPolynomial<equationOfState> Foam::operator-
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct1,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
equationOfState eofs
|
||||||
|
(
|
||||||
|
static_cast<const equationOfState&>(ct1)
|
||||||
|
- static_cast<const equationOfState&>(ct2)
|
||||||
|
);
|
||||||
|
|
||||||
|
return nasaHeatCapacityPolynomial<equationOfState>
|
||||||
|
(
|
||||||
|
eofs,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a1_
|
||||||
|
- ct2.nMoles()/eofs.nMoles()*ct2.a1_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a2_
|
||||||
|
- ct2.nMoles()/eofs.nMoles()*ct2.a2_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a3_
|
||||||
|
- ct2.nMoles()/eofs.nMoles()*ct2.a3_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a4_
|
||||||
|
- ct2.nMoles()/eofs.nMoles()*ct2.a4_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a5_
|
||||||
|
- ct2.nMoles()/eofs.nMoles()*ct2.a5_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a6_
|
||||||
|
- ct2.nMoles()/eofs.nMoles()*ct2.a6_,
|
||||||
|
ct1.nMoles()/eofs.nMoles()*ct1.a7_
|
||||||
|
- ct2.nMoles()/eofs.nMoles()*ct2.a7_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::nasaHeatCapacityPolynomial<equationOfState> Foam::operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return nasaHeatCapacityPolynomial<equationOfState>
|
||||||
|
(
|
||||||
|
s*static_cast<const equationOfState&>(ct),
|
||||||
|
ct.a1_,
|
||||||
|
ct.a2_,
|
||||||
|
ct.a3_,
|
||||||
|
ct.a4_,
|
||||||
|
ct.a5_,
|
||||||
|
ct.a6_,
|
||||||
|
ct.a7_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class equationOfState>
|
||||||
|
inline Foam::nasaHeatCapacityPolynomial<equationOfState> Foam::operator==
|
||||||
|
(
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct1,
|
||||||
|
const nasaHeatCapacityPolynomial<equationOfState>& ct2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return ct2 - ct1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "realGasSpecieThermo.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
const Foam::scalar Foam::realGasSpecieThermo<thermo>::tol_ = 1.0e-9;
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
const int Foam::realGasSpecieThermo<thermo>::maxIter_ = 500;
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
Foam::realGasSpecieThermo<thermo>::realGasSpecieThermo(Istream& is)
|
||||||
|
:
|
||||||
|
thermo(is)
|
||||||
|
{
|
||||||
|
is.check("realGasSpecieThermo::realGasSpecieThermo(Istream& is)");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
Foam::Ostream& Foam::operator<<(Ostream& os, const realGasSpecieThermo<thermo>& st)
|
||||||
|
{
|
||||||
|
os << static_cast<const thermo&>(st);
|
||||||
|
|
||||||
|
os.check("Ostream& operator<<(Ostream& os, const realGasSpecieThermo& st)");
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
305
src/thermophysicalModels/specie/thermo/realGasSpecieThermo/realGasSpecieThermo.H
Executable file
305
src/thermophysicalModels/specie/thermo/realGasSpecieThermo/realGasSpecieThermo.H
Executable file
|
@ -0,0 +1,305 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::realGasSpecieThermo
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
This is an subversion of the specieThermo function. While the "orginal" specieThermo function
|
||||||
|
is only valid for perfect Gases, this function is valid for real gases.
|
||||||
|
|
||||||
|
Basic thermodynamics type based on the use of fitting functions for
|
||||||
|
cp, h, s obtained from the template argument type thermo. All other
|
||||||
|
properties are derived from these primitive functions.
|
||||||
|
|
||||||
|
Some function copied from the "orginal" specieThermo!
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
realGasSpecieThermoI.H
|
||||||
|
realGasSpecieThermo.C
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef realGasSpecieThermo_H
|
||||||
|
#define realGasSpecieThermo_H
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of friend functions and operators
|
||||||
|
|
||||||
|
template<class thermo> class realGasSpecieThermo;
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSpecieThermo<thermo> operator+
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo<thermo>&,
|
||||||
|
const realGasSpecieThermo<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSpecieThermo<thermo> operator-
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo<thermo>&,
|
||||||
|
const realGasSpecieThermo<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSpecieThermo<thermo> operator*
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const realGasSpecieThermo<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSpecieThermo<thermo> operator==
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo<thermo>&,
|
||||||
|
const realGasSpecieThermo<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
Ostream& operator<<
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const realGasSpecieThermo<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class specieThermo Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
class realGasSpecieThermo
|
||||||
|
:
|
||||||
|
public thermo
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Convergence tolerance of energy -> temperature inversion functions
|
||||||
|
static const scalar tol_;
|
||||||
|
|
||||||
|
//- Max number of iterations in energy->temperature inversion functions
|
||||||
|
static const int maxIter_;
|
||||||
|
|
||||||
|
|
||||||
|
// Private member functions
|
||||||
|
|
||||||
|
// return the temperature corresponding to the value of the
|
||||||
|
// thermodynamic property f, given the function f = F(T) and dF(T)/dT
|
||||||
|
inline void T
|
||||||
|
(
|
||||||
|
scalar f,
|
||||||
|
scalar &T0,
|
||||||
|
scalar p,
|
||||||
|
scalar &rho0,
|
||||||
|
scalar (realGasSpecieThermo::*F)(const scalar,const scalar) const,
|
||||||
|
scalar (realGasSpecieThermo::*dFdT)(const scalar,const scalar) const
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- construct from components
|
||||||
|
inline realGasSpecieThermo(const thermo& sp);
|
||||||
|
|
||||||
|
//- Construct from Istream
|
||||||
|
realGasSpecieThermo(Istream&);
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
inline realGasSpecieThermo(const word& name, const realGasSpecieThermo&);
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Fundamaental properties
|
||||||
|
// (These functions must be provided in derived types)
|
||||||
|
|
||||||
|
// Heat capacity at constant pressure [J/(kmol K)]
|
||||||
|
//scalar cp(const scalar) const;
|
||||||
|
|
||||||
|
// Enthalpy [J/kmol]
|
||||||
|
//scalar h(const scalar) const;
|
||||||
|
|
||||||
|
// Sensible enthalpy [J/kmol]
|
||||||
|
//virtual scalar hs(const scalar) const;
|
||||||
|
|
||||||
|
// Chemical enthalpy [J/kmol]
|
||||||
|
//virtual scalar hc(const scalar) const;
|
||||||
|
|
||||||
|
// Entropy [J/(kmol K)]
|
||||||
|
//virtual scalar s(const scalar) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Calculate and return derived properties
|
||||||
|
// (These functions need not provided in derived types)
|
||||||
|
|
||||||
|
// Mole specific properties
|
||||||
|
|
||||||
|
//- Heat capacity at constant volume [J/(kmol K)]
|
||||||
|
//inline scalar cv(const scalar T, const scalar rho) const;
|
||||||
|
|
||||||
|
//- gamma = cp/cv []
|
||||||
|
//inline scalar gamma(const scalar T, const scalar rho) const;
|
||||||
|
|
||||||
|
// Internal energy [J/kmol]
|
||||||
|
// inline scalar e(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Sensible internal energy [J/kmol]
|
||||||
|
// inline scalar es(const scalar p, const scalar rho) const;
|
||||||
|
|
||||||
|
//- Gibbs free energy [J/kmol]
|
||||||
|
inline scalar g(const scalar rho, const scalar T ) const;
|
||||||
|
|
||||||
|
//- Helmholtz free energy [J/kmol]
|
||||||
|
inline scalar a(const scalar rho, const scalar T ) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Mass specific properties
|
||||||
|
|
||||||
|
//- Heat capacity at constant pressure [J/(kg K)]
|
||||||
|
inline scalar Cp(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant volume [J/(kg K)]
|
||||||
|
inline scalar Cv(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Enthalpy [J/kg]
|
||||||
|
inline scalar H(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//- Sensible enthalpy [J/kg]
|
||||||
|
// inline scalar Hs(const scalar T) const;
|
||||||
|
|
||||||
|
//- Chemical enthalpy [J/kg]
|
||||||
|
// inline scalar Hc() const;
|
||||||
|
|
||||||
|
//- Entropy [J/(kg K)]
|
||||||
|
inline scalar S(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Internal energy [J/kg]
|
||||||
|
inline scalar E(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Gibbs free energy [J/kg]
|
||||||
|
inline scalar G(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
//- Helmholtz free energy [J/kg]
|
||||||
|
inline scalar A(const scalar rho, const scalar T) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Energy->temperature inversion functions
|
||||||
|
|
||||||
|
//- Temperature from Enthalpy given an initial temperature T0
|
||||||
|
inline void TH(const scalar H, scalar &T0,const scalar p, scalar &psi0) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//- Temperature from internal energy given an initial temperature T0
|
||||||
|
inline void TE(const scalar E, scalar &T0,const scalar p, scalar &psi0) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member operators
|
||||||
|
|
||||||
|
inline void operator+=(const realGasSpecieThermo&);
|
||||||
|
inline void operator-=(const realGasSpecieThermo&);
|
||||||
|
|
||||||
|
inline void operator*=(const scalar);
|
||||||
|
|
||||||
|
|
||||||
|
// Friend operators
|
||||||
|
|
||||||
|
friend realGasSpecieThermo operator+ <thermo>
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo&,
|
||||||
|
const realGasSpecieThermo&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasSpecieThermo operator- <thermo>
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo&,
|
||||||
|
const realGasSpecieThermo&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasSpecieThermo operator* <thermo>
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const realGasSpecieThermo&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasSpecieThermo operator== <thermo>
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo&,
|
||||||
|
const realGasSpecieThermo&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Ostream Operator
|
||||||
|
|
||||||
|
friend Ostream& operator<< <thermo>
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const realGasSpecieThermo&
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "realGasSpecieThermoI.H"
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "realGasSpecieThermo.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,298 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Author
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "realGasSpecieThermo.H"
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::realGasSpecieThermo<thermo>::realGasSpecieThermo
|
||||||
|
(
|
||||||
|
const thermo& sp
|
||||||
|
)
|
||||||
|
:
|
||||||
|
thermo(sp)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
// using a stabilizing newton solver
|
||||||
|
template<class thermo>
|
||||||
|
inline void Foam::realGasSpecieThermo<thermo>::T
|
||||||
|
(
|
||||||
|
scalar f,
|
||||||
|
scalar &T0,
|
||||||
|
scalar p,
|
||||||
|
scalar &rho0,
|
||||||
|
scalar (realGasSpecieThermo<thermo>::*F)(const scalar,const scalar) const,
|
||||||
|
scalar (realGasSpecieThermo<thermo>::*dFdT)(const scalar,const scalar) const
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
scalar Test = T0;
|
||||||
|
scalar Tnew = T0;
|
||||||
|
scalar rho=rho0;
|
||||||
|
scalar Ttol = T0*tol_;
|
||||||
|
int iter = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
Test = Tnew;
|
||||||
|
|
||||||
|
rho=this->rho(p,Test,rho);
|
||||||
|
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
Tnew = Test - ((this->*F)(rho,Test) - f)/(this->*dFdT)(rho,Test)/(pow(2,i));
|
||||||
|
i++; // if the solve is diverging, the time step is reduced until the solver converges
|
||||||
|
}while((i<20)&&((mag((this->*F)(rho,Tnew) - f) > mag((this->*F)(rho,Test) - f))));
|
||||||
|
|
||||||
|
if (iter++ > maxIter_)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"realGasSpecieThermo<thermo>::T(scalar f, scalar T0, "
|
||||||
|
"scalar (realGasSpecieThermo<thermo>::*F)(const scalar) const, "
|
||||||
|
"scalar (realGasSpecieThermo<thermo>::*dFdT)(const scalar) const"
|
||||||
|
") const"
|
||||||
|
) << "Maximum number of iterations exceeded"
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} while (mag(mag(Tnew) - mag(Test)) > Ttol);
|
||||||
|
|
||||||
|
rho0=rho;
|
||||||
|
T0=Tnew;
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::realGasSpecieThermo<thermo>::realGasSpecieThermo
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const realGasSpecieThermo& st
|
||||||
|
)
|
||||||
|
:
|
||||||
|
thermo(name, st)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::g(const scalar rho, const scalar T ) const
|
||||||
|
{
|
||||||
|
return this->h(rho, this->pReturn(rho,T)) - T*this->s(rho, this->pReturn(rho,T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::a(const scalar rho, const scalar T ) const
|
||||||
|
{
|
||||||
|
return this->e(rho,this->pReturn(rho,T)) - T*this->s(rho,this->pReturn(rho,T));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::Cp( const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->cp(rho, T)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::Cv( const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->cv(rho, T)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::H(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->h(rho, T)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::S(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->s(rho, T)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::E(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->e(rho, T)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::G(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->g(rho, T)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::scalar Foam::realGasSpecieThermo<thermo>::A(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
return this->a(rho, T)/this->W();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline void Foam::realGasSpecieThermo<thermo>::TH
|
||||||
|
(
|
||||||
|
const scalar h,
|
||||||
|
scalar &T0,
|
||||||
|
const scalar p,
|
||||||
|
scalar &rho0
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
T(h, T0, p,rho0, &realGasSpecieThermo<thermo>::H, &realGasSpecieThermo<thermo>::Cp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline void Foam::realGasSpecieThermo<thermo>::TE
|
||||||
|
(
|
||||||
|
const scalar e,
|
||||||
|
scalar &T0,
|
||||||
|
const scalar p,
|
||||||
|
scalar &rho0
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
T(e, T0, p,rho0, &realGasSpecieThermo<thermo>::E, &realGasSpecieThermo<thermo>::Cv);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline void Foam::realGasSpecieThermo<thermo>::operator+=
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo<thermo>& st
|
||||||
|
)
|
||||||
|
{
|
||||||
|
thermo::operator+=(st);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline void Foam::realGasSpecieThermo<thermo>::operator-=
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo<thermo>& st
|
||||||
|
)
|
||||||
|
{
|
||||||
|
thermo::operator-=(st);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline void Foam::realGasSpecieThermo<thermo>::operator*=(const scalar s)
|
||||||
|
{
|
||||||
|
thermo::operator*=(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::realGasSpecieThermo<thermo> Foam::operator+
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo<thermo>& st1,
|
||||||
|
const realGasSpecieThermo<thermo>& st2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return realGasSpecieThermo<thermo>
|
||||||
|
(
|
||||||
|
static_cast<const thermo&>(st1) + static_cast<const thermo&>(st2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::realGasSpecieThermo<thermo> Foam::operator-
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo<thermo>& st1,
|
||||||
|
const realGasSpecieThermo<thermo>& st2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return realGasSpecieThermo<thermo>
|
||||||
|
(
|
||||||
|
static_cast<const thermo&>(st1) - static_cast<const thermo&>(st2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::realGasSpecieThermo<thermo> Foam::operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const realGasSpecieThermo<thermo>& st
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return realGasSpecieThermo<thermo>
|
||||||
|
(
|
||||||
|
s*static_cast<const thermo&>(st)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline Foam::realGasSpecieThermo<thermo> Foam::operator==
|
||||||
|
(
|
||||||
|
const realGasSpecieThermo<thermo>& st1,
|
||||||
|
const realGasSpecieThermo<thermo>& st2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return st2 - st1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,79 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright held by original author
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
Modified version of constTransport, modified to be used with realGases
|
||||||
|
|
||||||
|
Constant properties Transport package. Templated ito a given
|
||||||
|
thermodynamics package (needed for thermal conductivity).
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "realGasConstTransport.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
realGasConstTransport<thermo>::realGasConstTransport(Istream& is)
|
||||||
|
:
|
||||||
|
thermo(is),
|
||||||
|
Mu(readScalar(is)),
|
||||||
|
rPr(1.0/readScalar(is))
|
||||||
|
{
|
||||||
|
is.check("realGasConstTransport::realGasConstTransport(Istream& is)");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
Ostream& operator<<(Ostream& os, const realGasConstTransport<thermo>& ct)
|
||||||
|
{
|
||||||
|
operator<<(os, static_cast<const thermo&>(ct));
|
||||||
|
os << tab << ct.Mu << tab << 1.0/ct.rPr;
|
||||||
|
|
||||||
|
os.check("Ostream& operator<<(Ostream& os, const realGasConstTransport& ct)");
|
||||||
|
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,204 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright held by original author
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::realGasConstTransport
|
||||||
|
|
||||||
|
Description
|
||||||
|
Constant properties Transport package.
|
||||||
|
Templated into a given thermodynamics package (needed for thermal
|
||||||
|
conductivity).
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
realGasConstTransportI.H
|
||||||
|
realGasConstTransport.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef realGasConstTransport_H
|
||||||
|
#define realGasConstTransport_H
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of friend functions and operators
|
||||||
|
|
||||||
|
template<class thermo> class realGasConstTransport;
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo> operator+
|
||||||
|
(
|
||||||
|
const realGasConstTransport<thermo>&,
|
||||||
|
const realGasConstTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo> operator-
|
||||||
|
(
|
||||||
|
const realGasConstTransport<thermo>&,
|
||||||
|
const realGasConstTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo> operator*
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const realGasConstTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo> operator==
|
||||||
|
(
|
||||||
|
const realGasConstTransport<thermo>&,
|
||||||
|
const realGasConstTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
Ostream& operator<<
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const realGasConstTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class realGasConstTransport Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
class realGasConstTransport
|
||||||
|
:
|
||||||
|
public thermo
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Constant viscosity and reciprocal Prandtl Number.
|
||||||
|
scalar Mu, rPr;
|
||||||
|
|
||||||
|
|
||||||
|
// Private member functions
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
inline realGasConstTransport
|
||||||
|
(
|
||||||
|
const thermo& t,
|
||||||
|
const scalar nu,
|
||||||
|
const scalar Pr
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
inline realGasConstTransport(const word&, const realGasConstTransport&);
|
||||||
|
|
||||||
|
//- Construct from Istream
|
||||||
|
realGasConstTransport(Istream&);
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
//- Dynamic viscosity [kg/ms]
|
||||||
|
inline scalar mu(const scalar T) const;
|
||||||
|
|
||||||
|
//- Thermal conductivity [W/mK]
|
||||||
|
inline scalar kappa(const scalar rho,const scalar T) const;
|
||||||
|
|
||||||
|
//- Thermal diffusivity for enthalpy [kg/ms]
|
||||||
|
inline scalar alpha(const scalar rho,const scalar T) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Member operators
|
||||||
|
|
||||||
|
inline realGasConstTransport& operator=
|
||||||
|
(
|
||||||
|
const realGasConstTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Friend operators
|
||||||
|
|
||||||
|
friend realGasConstTransport operator+ <thermo>
|
||||||
|
(
|
||||||
|
const realGasConstTransport&,
|
||||||
|
const realGasConstTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasConstTransport operator- <thermo>
|
||||||
|
(
|
||||||
|
const realGasConstTransport&,
|
||||||
|
const realGasConstTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasConstTransport operator* <thermo>
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const realGasConstTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasConstTransport operator== <thermo>
|
||||||
|
(
|
||||||
|
const realGasConstTransport&,
|
||||||
|
const realGasConstTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Ostream Operator
|
||||||
|
|
||||||
|
friend Ostream& operator<< <thermo>
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const realGasConstTransport&
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "realGasConstTransportI.H"
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "realGasConstTransport.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,199 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright held by original author
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Construct from components
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo>::realGasConstTransport
|
||||||
|
(
|
||||||
|
const thermo& t,
|
||||||
|
const scalar mu,
|
||||||
|
const scalar Pr
|
||||||
|
)
|
||||||
|
:
|
||||||
|
thermo(t),
|
||||||
|
Mu(mu),
|
||||||
|
rPr(1.0/Pr)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// Construct as named copy
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo>::realGasConstTransport
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const realGasConstTransport& ct
|
||||||
|
)
|
||||||
|
:
|
||||||
|
thermo(name, ct),
|
||||||
|
Mu(ct.Mu),
|
||||||
|
rPr(ct.rPr)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Dynamic viscosity [kg/ms]
|
||||||
|
template<class thermo>
|
||||||
|
inline scalar realGasConstTransport<thermo>::mu(const scalar T) const
|
||||||
|
{
|
||||||
|
return Mu;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Thermal conductivity [W/mK]
|
||||||
|
template<class thermo>
|
||||||
|
inline scalar realGasConstTransport<thermo>::kappa(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
return this->Cp(rho,T)*mu(T)*rPr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Thermal diffusivity for enthalpy [kg/ms]
|
||||||
|
template<class thermo>
|
||||||
|
inline scalar realGasConstTransport<thermo>::alpha(const scalar rho,const scalar T) const
|
||||||
|
{
|
||||||
|
scalar Cp_ = this->Cp(rho,T);
|
||||||
|
|
||||||
|
scalar deltaT = T - specie::Tstd;
|
||||||
|
scalar CpBar =
|
||||||
|
(deltaT*(this->H(rho,T) - this->H(this->rhostd_,specie::Tstd)) + Cp_)/(sqr(deltaT) + 1);
|
||||||
|
|
||||||
|
return Cp_*mu(T)*rPr/CpBar;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo>& realGasConstTransport<thermo>::operator=
|
||||||
|
(
|
||||||
|
const realGasConstTransport<thermo>& ct
|
||||||
|
)
|
||||||
|
{
|
||||||
|
thermo::operator=(ct);
|
||||||
|
|
||||||
|
Mu = ct.Mu;
|
||||||
|
rPr = ct.rPr;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo> operator+
|
||||||
|
(
|
||||||
|
const realGasConstTransport<thermo>& ct1,
|
||||||
|
const realGasConstTransport<thermo>& ct2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
thermo t
|
||||||
|
(
|
||||||
|
static_cast<const thermo&>(ct1) + static_cast<const thermo&>(ct2)
|
||||||
|
);
|
||||||
|
|
||||||
|
scalar molr1 = ct1.nMoles()/t.nMoles();
|
||||||
|
scalar molr2 = ct2.nMoles()/t.nMoles();
|
||||||
|
|
||||||
|
return realGasConstTransport<thermo>
|
||||||
|
(
|
||||||
|
t,
|
||||||
|
molr1*ct1.Mu + molr2*ct2.Mu,
|
||||||
|
molr1*ct1.rPr + molr2*ct2.rPr
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo> operator-
|
||||||
|
(
|
||||||
|
const realGasConstTransport<thermo>& ct1,
|
||||||
|
const realGasConstTransport<thermo>& ct2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
thermo t
|
||||||
|
(
|
||||||
|
static_cast<const thermo&>(ct1) - static_cast<const thermo&>(ct2)
|
||||||
|
);
|
||||||
|
|
||||||
|
scalar molr1 = ct1.nMoles()/t.nMoles();
|
||||||
|
scalar molr2 = ct2.nMoles()/t.nMoles();
|
||||||
|
|
||||||
|
return realGasConstTransport<thermo>
|
||||||
|
(
|
||||||
|
t,
|
||||||
|
molr1*ct1.Mu - molr2*ct2.Mu,
|
||||||
|
molr1*ct1.rPr - molr2*ct2.rPr
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo> operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const realGasConstTransport<thermo>& ct
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return realGasConstTransport<thermo>
|
||||||
|
(
|
||||||
|
s*static_cast<const thermo&>(ct),
|
||||||
|
ct.Mu,
|
||||||
|
ct.rPr
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasConstTransport<thermo> operator==
|
||||||
|
(
|
||||||
|
const realGasConstTransport<thermo>& ct1,
|
||||||
|
const realGasConstTransport<thermo>& ct2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return ct2 - ct1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "realGasSutherlandTransport.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
realGasSutherlandTransport<thermo>::realGasSutherlandTransport(Istream& is)
|
||||||
|
:
|
||||||
|
thermo(is),
|
||||||
|
As(readScalar(is)),
|
||||||
|
Ts(readScalar(is))
|
||||||
|
{
|
||||||
|
is.check("realGasSutherlandTransport<thermo>::realGasSutherlandTransport(Istream&)");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
Ostream& operator<<(Ostream& os, const realGasSutherlandTransport<thermo>& st)
|
||||||
|
{
|
||||||
|
os << static_cast<const thermo&>(st) << tab << st.As << tab << st.Ts;
|
||||||
|
cout<<"sutherland start"<<nl<<endl;
|
||||||
|
os.check
|
||||||
|
(
|
||||||
|
"Ostream& operator<<(Ostream&, const realGasSutherlandTransport<thermo>&)"
|
||||||
|
);
|
||||||
|
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,237 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::realGasSutherlandTransport
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
Copy of the sutherlandTransport class, modified to be used with real gas properties
|
||||||
|
|
||||||
|
Transport package using Sutherland's formula.
|
||||||
|
|
||||||
|
Templated into a given thermodynamics package (needed for thermal
|
||||||
|
conductivity).
|
||||||
|
|
||||||
|
Dynamic viscosity [kg/m.s]
|
||||||
|
@f[
|
||||||
|
\mu = A_s \frac{\sqrt{T}}{1 + T_s / T}
|
||||||
|
@f]
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
realGasSutherlandTransportI.H
|
||||||
|
realGasSutherlandTransport.C
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef realGasSutherlandTransport_H
|
||||||
|
#define realGasSutherlandTransport_H
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of friend functions and operators
|
||||||
|
|
||||||
|
template<class thermo> class realGasSutherlandTransport;
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo> operator+
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport<thermo>&,
|
||||||
|
const realGasSutherlandTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo> operator-
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport<thermo>&,
|
||||||
|
const realGasSutherlandTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo> operator*
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const realGasSutherlandTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo> operator==
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport<thermo>&,
|
||||||
|
const realGasSutherlandTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
Ostream& operator<<
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const realGasSutherlandTransport<thermo>&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class realGasSutherlandTransport Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
class realGasSutherlandTransport
|
||||||
|
:
|
||||||
|
public thermo
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
// Sutherland's coefficients
|
||||||
|
scalar As, Ts;
|
||||||
|
|
||||||
|
|
||||||
|
// Private member functions
|
||||||
|
|
||||||
|
//- Calculate the Sutherland coefficients
|
||||||
|
// given two viscosities and temperatures
|
||||||
|
inline void calcCoeffs
|
||||||
|
(
|
||||||
|
const scalar mu1, const scalar T1,
|
||||||
|
const scalar mu2, const scalar T2
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
inline realGasSutherlandTransport
|
||||||
|
(
|
||||||
|
const thermo& t,
|
||||||
|
const scalar as,
|
||||||
|
const scalar ts
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from two viscosities
|
||||||
|
inline realGasSutherlandTransport
|
||||||
|
(
|
||||||
|
const thermo& t,
|
||||||
|
const scalar mu1, const scalar T1,
|
||||||
|
const scalar mu2, const scalar T2
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
inline realGasSutherlandTransport(const word&, const realGasSutherlandTransport&);
|
||||||
|
|
||||||
|
//- Construct from Istream
|
||||||
|
realGasSutherlandTransport(Istream&);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
inline autoPtr<realGasSutherlandTransport> clone() const;
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
inline static autoPtr<realGasSutherlandTransport> New(Istream& is);
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
|
||||||
|
//- Dynamic viscosity [kg/ms]
|
||||||
|
inline scalar mu(const scalar T) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Thermal conductivity [W/mK]
|
||||||
|
inline scalar kappa(const scalar rho,const scalar T) const;
|
||||||
|
|
||||||
|
//- Thermal diffusivity for enthalpy [kg/ms]
|
||||||
|
inline scalar alpha(const scalar rho,const scalar T) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Member operators
|
||||||
|
|
||||||
|
inline realGasSutherlandTransport& operator=
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Friend operators
|
||||||
|
|
||||||
|
friend realGasSutherlandTransport operator+ <thermo>
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport&,
|
||||||
|
const realGasSutherlandTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasSutherlandTransport operator- <thermo>
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport&,
|
||||||
|
const realGasSutherlandTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasSutherlandTransport operator* <thermo>
|
||||||
|
(
|
||||||
|
const scalar,
|
||||||
|
const realGasSutherlandTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
friend realGasSutherlandTransport operator== <thermo>
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport&,
|
||||||
|
const realGasSutherlandTransport&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Ostream Operator
|
||||||
|
|
||||||
|
friend Ostream& operator<< <thermo>
|
||||||
|
(
|
||||||
|
Ostream&,
|
||||||
|
const realGasSutherlandTransport&
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "realGasSutherlandTransportI.H"
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "realGasSutherlandTransport.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,262 @@
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd |
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Modified by
|
||||||
|
Christian Lucas
|
||||||
|
Institut für Thermodynamik
|
||||||
|
Technische Universität Braunschweig
|
||||||
|
Germany
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "specie.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline void realGasSutherlandTransport<thermo>::calcCoeffs
|
||||||
|
(
|
||||||
|
const scalar mu1, const scalar T1,
|
||||||
|
const scalar mu2, const scalar T2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
scalar rootT1 = sqrt(T1);
|
||||||
|
scalar mu1rootT2 = mu1*sqrt(T2);
|
||||||
|
scalar mu2rootT1 = mu2*rootT1;
|
||||||
|
|
||||||
|
Ts = (mu2rootT1 - mu1rootT2)/(mu1rootT2/T1 - mu2rootT1/T2);
|
||||||
|
|
||||||
|
As = mu1*(1.0 + Ts/T1)/rootT1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Construct from components
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo>::realGasSutherlandTransport
|
||||||
|
(
|
||||||
|
const thermo& t,
|
||||||
|
const scalar as,
|
||||||
|
const scalar ts
|
||||||
|
)
|
||||||
|
:
|
||||||
|
thermo(t),
|
||||||
|
As(as),
|
||||||
|
Ts(ts)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// Construct from components
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo>::realGasSutherlandTransport
|
||||||
|
(
|
||||||
|
const thermo& t,
|
||||||
|
const scalar mu1, const scalar T1,
|
||||||
|
const scalar mu2, const scalar T2
|
||||||
|
)
|
||||||
|
:
|
||||||
|
thermo(t)
|
||||||
|
{
|
||||||
|
calcCoeffs(mu1, T1, mu2, T2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//- Construct as named copy
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo>::realGasSutherlandTransport
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const realGasSutherlandTransport& st
|
||||||
|
)
|
||||||
|
:
|
||||||
|
thermo(name, st),
|
||||||
|
As(st.As),
|
||||||
|
Ts(st.Ts)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// Construct and return a clone
|
||||||
|
template<class thermo>
|
||||||
|
inline autoPtr<realGasSutherlandTransport<thermo> > realGasSutherlandTransport<thermo>::clone
|
||||||
|
() const
|
||||||
|
{
|
||||||
|
return autoPtr<realGasSutherlandTransport<thermo> >
|
||||||
|
(
|
||||||
|
new realGasSutherlandTransport<thermo>(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Selector from Istream
|
||||||
|
template<class thermo>
|
||||||
|
inline autoPtr<realGasSutherlandTransport<thermo> > realGasSutherlandTransport<thermo>::New
|
||||||
|
(
|
||||||
|
Istream& is
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return autoPtr<realGasSutherlandTransport<thermo> >
|
||||||
|
(
|
||||||
|
new realGasSutherlandTransport<thermo>(is)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Dynamic viscosity [kg/ms]
|
||||||
|
template<class thermo>
|
||||||
|
inline scalar realGasSutherlandTransport<thermo>::mu(const scalar T) const
|
||||||
|
{
|
||||||
|
return As*::sqrt(T)/(1.0 + Ts/T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Thermal conductivity [W/mK]
|
||||||
|
template<class thermo>
|
||||||
|
inline scalar realGasSutherlandTransport<thermo>::kappa(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
scalar Cv_ = this->Cv(rho,T);
|
||||||
|
return mu(T)*Cv_*(1.32 + 1.77*this->R()/Cv_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Thermal diffusivity for enthalpy [kg/ms]
|
||||||
|
template<class thermo>
|
||||||
|
inline scalar realGasSutherlandTransport<thermo>::alpha(const scalar rho, const scalar T) const
|
||||||
|
{
|
||||||
|
scalar Cv_ = this->Cv(rho,T);
|
||||||
|
scalar Cp_ = this->Cp(rho,T);
|
||||||
|
|
||||||
|
scalar deltaT = T - specie::Tstd;
|
||||||
|
scalar CpBar =
|
||||||
|
(deltaT*(this->H(rho, T) - this->H(this->rhostd(),specie::Tstd)) + Cp_)/(sqr(deltaT) + 1);
|
||||||
|
|
||||||
|
return mu(T)*Cv_*(1.32 + 1.77*this->R()/Cv_)/CpBar;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo>& realGasSutherlandTransport<thermo>::operator=
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport<thermo>& st
|
||||||
|
)
|
||||||
|
{
|
||||||
|
thermo::operator=(st);
|
||||||
|
|
||||||
|
As = st.As;
|
||||||
|
Ts = st.Ts;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo> operator+
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport<thermo>& st1,
|
||||||
|
const realGasSutherlandTransport<thermo>& st2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
thermo t
|
||||||
|
(
|
||||||
|
static_cast<const thermo&>(st1) + static_cast<const thermo&>(st2)
|
||||||
|
);
|
||||||
|
|
||||||
|
scalar molr1 = st1.nMoles()/t.nMoles();
|
||||||
|
scalar molr2 = st2.nMoles()/t.nMoles();
|
||||||
|
|
||||||
|
return realGasSutherlandTransport<thermo>
|
||||||
|
(
|
||||||
|
t,
|
||||||
|
molr1*st1.As + molr2*st2.As,
|
||||||
|
molr1*st1.Ts + molr2*st2.Ts
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo> operator-
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport<thermo>& st1,
|
||||||
|
const realGasSutherlandTransport<thermo>& st2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
thermo t
|
||||||
|
(
|
||||||
|
static_cast<const thermo&>(st1) - static_cast<const thermo&>(st2)
|
||||||
|
);
|
||||||
|
|
||||||
|
scalar molr1 = st1.nMoles()/t.nMoles();
|
||||||
|
scalar molr2 = st2.nMoles()/t.nMoles();
|
||||||
|
|
||||||
|
return realGasSutherlandTransport<thermo>
|
||||||
|
(
|
||||||
|
t,
|
||||||
|
molr1*st1.As - molr2*st2.As,
|
||||||
|
molr1*st1.Ts - molr2*st2.Ts
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo> operator*
|
||||||
|
(
|
||||||
|
const scalar s,
|
||||||
|
const realGasSutherlandTransport<thermo>& st
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return realGasSutherlandTransport<thermo>
|
||||||
|
(
|
||||||
|
s*static_cast<const thermo&>(st),
|
||||||
|
st.As,
|
||||||
|
st.Ts
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class thermo>
|
||||||
|
inline realGasSutherlandTransport<thermo> operator==
|
||||||
|
(
|
||||||
|
const realGasSutherlandTransport<thermo>& st1,
|
||||||
|
const realGasSutherlandTransport<thermo>& st2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return st2 - st1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
49
tutorials/compressible/rhoPisoFoam/ras/pipe/0/T
Executable file
49
tutorials/compressible/rhoPisoFoam/ras/pipe/0/T
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.7.1 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object T;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 0 1 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 333.15;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform 333.15;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
52
tutorials/compressible/rhoPisoFoam/ras/pipe/0/U
Executable file
52
tutorials/compressible/rhoPisoFoam/ras/pipe/0/U
Executable file
|
@ -0,0 +1,52 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.7.1 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volVectorField;
|
||||||
|
location "0";
|
||||||
|
object U;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform (5 0 0);
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue uniform (5 0 0);
|
||||||
|
value uniform (5 0 0);
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform (0 0 0);
|
||||||
|
}
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform (0 0 0);
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
53
tutorials/compressible/rhoPisoFoam/ras/pipe/0/alphat
Executable file
53
tutorials/compressible/rhoPisoFoam/ras/pipe/0/alphat
Executable file
|
@ -0,0 +1,53 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object alphat;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [1 -1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type alphatWallFunction;
|
||||||
|
Prt 0.85;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type alphatWallFunction;
|
||||||
|
Prt 0.85;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
58
tutorials/compressible/rhoPisoFoam/ras/pipe/0/epsilon
Executable file
58
tutorials/compressible/rhoPisoFoam/ras/pipe/0/epsilon
Executable file
|
@ -0,0 +1,58 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object epsilon;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -3 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 1120;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type compressible::epsilonWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
value uniform 1120;
|
||||||
|
}
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type compressible::epsilonWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
value uniform 1120;
|
||||||
|
}
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform 1120;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue uniform 1120;
|
||||||
|
value uniform 1120;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
59
tutorials/compressible/rhoPisoFoam/ras/pipe/0/epsilon.old
Executable file
59
tutorials/compressible/rhoPisoFoam/ras/pipe/0/epsilon.old
Executable file
|
@ -0,0 +1,59 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object epsilon;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -3 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 1120;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type compressible::epsilonWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
value uniform 1120;
|
||||||
|
}
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform 1120;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue uniform 1120;
|
||||||
|
value uniform 1120;
|
||||||
|
}
|
||||||
|
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type compressible::epsilonWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
value uniform 1120;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
51
tutorials/compressible/rhoPisoFoam/ras/pipe/0/k
Executable file
51
tutorials/compressible/rhoPisoFoam/ras/pipe/0/k
Executable file
|
@ -0,0 +1,51 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object k;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 5;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type compressible::kqRWallFunction;
|
||||||
|
value uniform 5;
|
||||||
|
}
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type compressible::kqRWallFunction;
|
||||||
|
value uniform 5;
|
||||||
|
}
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type turbulentIntensityKineticEnergyInlet;
|
||||||
|
intensity 0.01;
|
||||||
|
value uniform 5;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
52
tutorials/compressible/rhoPisoFoam/ras/pipe/0/k.old
Executable file
52
tutorials/compressible/rhoPisoFoam/ras/pipe/0/k.old
Executable file
|
@ -0,0 +1,52 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object k;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 2 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 5;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type compressible::kqRWallFunction;
|
||||||
|
value uniform 5;
|
||||||
|
}
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type turbulentIntensityKineticEnergyInlet;
|
||||||
|
intensity 0.01;
|
||||||
|
value uniform 5;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type compressible::kqRWallFunction;
|
||||||
|
value uniform 5;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
57
tutorials/compressible/rhoPisoFoam/ras/pipe/0/mut
Executable file
57
tutorials/compressible/rhoPisoFoam/ras/pipe/0/mut
Executable file
|
@ -0,0 +1,57 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object mut;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [1 -1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type mutWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type mutWallFunction;
|
||||||
|
Cmu 0.09;
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type calculated;
|
||||||
|
value uniform 0;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
49
tutorials/compressible/rhoPisoFoam/ras/pipe/0/p
Executable file
49
tutorials/compressible/rhoPisoFoam/ras/pipe/0/p
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.7.1 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
location "0";
|
||||||
|
object p;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [1 -1 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 80e5;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type fixedValue;
|
||||||
|
value uniform 8e+06;
|
||||||
|
}
|
||||||
|
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
BIN
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/.RASProperties.swp
Executable file
BIN
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/.RASProperties.swp
Executable file
Binary file not shown.
25
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/RASProperties
Executable file
25
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/RASProperties
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.6 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object RASProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
RASModel kEpsilon;
|
||||||
|
|
||||||
|
turbulence on;
|
||||||
|
|
||||||
|
printCoeffs on;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
52
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/boundary
Executable file
52
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/boundary
Executable file
|
@ -0,0 +1,52 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class polyBoundaryMesh;
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object boundary;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
5
|
||||||
|
(
|
||||||
|
WALL_1
|
||||||
|
{
|
||||||
|
type wall;
|
||||||
|
nFaces 99;
|
||||||
|
startFace 3644;
|
||||||
|
}
|
||||||
|
WALL_2
|
||||||
|
{
|
||||||
|
type wall;
|
||||||
|
nFaces 99;
|
||||||
|
startFace 3743;
|
||||||
|
}
|
||||||
|
INLET
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
nFaces 19;
|
||||||
|
startFace 3842;
|
||||||
|
}
|
||||||
|
OUTLET
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
nFaces 19;
|
||||||
|
startFace 3861;
|
||||||
|
}
|
||||||
|
frontAndBackPlanes
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
nFaces 3762;
|
||||||
|
startFace 3880;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
21
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/cellZones
Executable file
21
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/cellZones
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class regIOobject;
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object cellZones;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
0
|
||||||
|
()
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
21
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/faceZones
Executable file
21
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/faceZones
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class regIOobject;
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object faceZones;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
0
|
||||||
|
()
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
7666
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/faces
Executable file
7666
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/faces
Executable file
File diff suppressed because it is too large
Load diff
3669
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/neighbour
Executable file
3669
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/neighbour
Executable file
File diff suppressed because it is too large
Load diff
7667
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/owner
Executable file
7667
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/owner
Executable file
File diff suppressed because it is too large
Load diff
21
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/pointZones
Executable file
21
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/pointZones
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class regIOobject;
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object pointZones;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
0
|
||||||
|
()
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
4024
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/points
Executable file
4024
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/polyMesh/points
Executable file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,40 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class wordList;
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object zoneToPatchName;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
16
|
||||||
|
(
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
unknown
|
||||||
|
int_SOLID
|
||||||
|
WALL_1
|
||||||
|
WALL_2
|
||||||
|
INLET
|
||||||
|
OUTLET
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
|
@ -0,0 +1,59 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.6 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
|
||||||
|
location "constant";
|
||||||
|
object thermophysicalProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
thermoType realGasHThermo<pureMixture<realGasSutherlandTransport<realGasSpecieThermo<nasaHeatCapacityPolynomial<aungierRedlichKwong>>>>>;
|
||||||
|
mixture CO2 1 44.01 73.773e5 304.13 0.22394 467.6 49436.5054 -626.411601 5.30172524 0.002503813816 -0.0000002127308728 -0.000000000768998878 2.849677801E-13 1.4792e-06 116;
|
||||||
|
|
||||||
|
//thermoType realGasHThermo<pureMixture<realGasSutherlandTransport<realGasSpecieThermo<nasaHeatCapacityPolynomial<redlichKwong>>>>>;
|
||||||
|
//mixture CO2 1 44.01 73.773e5 304.13 0.22394 49436.5054 -626.411601 5.30172524 0.002503813816 -0.0000002127308728 -0.000000000768998878 2.849677801e-13 1.4792e-06 116;
|
||||||
|
|
||||||
|
//thermoType realGasHThermo<pureMixture<realGasSutherlandTransport<realGasSpecieThermo<nasaHeatCapacityPolynomial<pengRobinson>>>>>;
|
||||||
|
//mixture CO2 1 44.01 73.773e5 304.13 0.22394 49436.5054 -626.411601 5.30172524 0.002503813816 -0.0000002127308728 -0.000000000768998878 2.849677801e-13 1.4792e-06 116;
|
||||||
|
|
||||||
|
//thermoType realGasHThermo<pureMixture<realGasSutherlandTransport<realGasSpecieThermo<nasaHeatCapacityPolynomial<soaveRedlichKwong>>>>>;
|
||||||
|
//mixture CO2 1 44.01 73.773e5 304.13 0.22394 49436.5054 -626.411601 5.30172524 0.002503813816 -0.0000002127308728 -0.000000000768998878 2.849677801e-13 1.4792e-06 116;
|
||||||
|
|
||||||
|
//thermoType realGasHThermo<pureMixture<realGasConstTransport<realGasSpecieThermo<nasaHeatCapacityPolynomial<aungierRedlichKwong>>>>>;
|
||||||
|
//mixture CO2 1 44.01 73.773e5 304.13 0.22394 467.6 49436.5054 -626.411601 5.30172524 0.002503813816 -0.0000002127308728 -0.000000000768998878 2.849677801E-13 1e-06 0.7;
|
||||||
|
|
||||||
|
//thermoType realGasHThermo<pureMixture<realGasConstTransport<realGasSpecieThermo<nasaHeatCapacityPolynomial<redlichKwong>>>>>;
|
||||||
|
//mixture CO2 1 44.01 73.773e5 304.13 0.22394 49436.5054 -626.411601 5.30172524 0.002503813816 -0.0000002127308728 -0.000000000768998878 2.849677801e-13 1e-06 0.7;
|
||||||
|
|
||||||
|
//thermoType realGasHThermo<pureMixture<realGasConstTransport<realGasSpecieThermo<nasaHeatCapacityPolynomial<pengRobinson>>>>>;
|
||||||
|
//mixture CO2 1 44.01 73.773e5 304.13 0.22394 49436.5054 -626.411601 5.30172524 0.002503813816 -0.0000002127308728 -0.000000000768998878 2.849677801e-13 1e-06 0.7;
|
||||||
|
|
||||||
|
//thermoType realGasHThermo<pureMixture<realGasConstTransport<realGasSpecieThermo<nasaHeatCapacityPolynomial<soaveRedlichKwong>>>>>;
|
||||||
|
//mixture CO2 1 44.01 73.773e5 304.13 0.22394 49436.5054 -626.411601 5.30172524 0.002503813816 -0.0000002127308728 -0.000000000768998878 2.849677801e-13 1e-06 0.7;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// *********************************************************************************************************************** //
|
||||||
|
// Coefficient
|
||||||
|
// CO2 --> Name
|
||||||
|
// 1
|
||||||
|
// 44.01 --> Molar Volume
|
||||||
|
// 77.773e5 --> critical pressure
|
||||||
|
// 304.13 --> critical temperatur
|
||||||
|
// 0.22394 --> acentric factor
|
||||||
|
// 467.6 --> critical density (only for aungier redlich kwong
|
||||||
|
// 49436.5054 --> 2.849677801e-13 --> 7 heat capacity polynomial coefficent's
|
||||||
|
// .... --> two coefficent's for sutherland model or for the constTransport model
|
||||||
|
// *********************************************************************************************************************** //
|
||||||
|
// ************************************************************************* //
|
21
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/turbulenceProperties
Executable file
21
tutorials/compressible/rhoPisoFoam/ras/pipe/constant/turbulenceProperties
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.6 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object turbulenceProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
simulationType RASModel;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
55
tutorials/compressible/rhoPisoFoam/ras/pipe/system/controlDict
Executable file
55
tutorials/compressible/rhoPisoFoam/ras/pipe/system/controlDict
Executable file
|
@ -0,0 +1,55 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.6 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object controlDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
application rhoPisoFoam;
|
||||||
|
|
||||||
|
startFrom latestTime;
|
||||||
|
|
||||||
|
//startTime 0;
|
||||||
|
|
||||||
|
stopAt endTime;
|
||||||
|
|
||||||
|
endTime 0.5;
|
||||||
|
|
||||||
|
deltaT 1e-5;
|
||||||
|
|
||||||
|
writeControl runTime;
|
||||||
|
|
||||||
|
writeInterval 1e-2;
|
||||||
|
|
||||||
|
purgeWrite 0;
|
||||||
|
|
||||||
|
writeFormat ascii;
|
||||||
|
|
||||||
|
writePrecision 6;
|
||||||
|
|
||||||
|
writeCompression uncompressed;
|
||||||
|
|
||||||
|
timeFormat general;
|
||||||
|
|
||||||
|
timePrecision 20;
|
||||||
|
|
||||||
|
adjustTimeStep yes;
|
||||||
|
|
||||||
|
maxCo 0.05;
|
||||||
|
|
||||||
|
maxDeltaT 1e-4;
|
||||||
|
|
||||||
|
runTimeModifiable yes;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
76
tutorials/compressible/rhoPisoFoam/ras/pipe/system/fvSchemes
Executable file
76
tutorials/compressible/rhoPisoFoam/ras/pipe/system/fvSchemes
Executable file
|
@ -0,0 +1,76 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.6 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object fvSchemes;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
ddtSchemes
|
||||||
|
{
|
||||||
|
default Euler;
|
||||||
|
}
|
||||||
|
|
||||||
|
gradSchemes
|
||||||
|
{
|
||||||
|
default cellMDLimited Gauss linear 0.333;
|
||||||
|
grad(p) cellMDLimited Gauss linear 0.333;
|
||||||
|
}
|
||||||
|
|
||||||
|
divSchemes
|
||||||
|
{
|
||||||
|
default none;
|
||||||
|
div(phi,U) Gauss limitedLinearV 0.5;
|
||||||
|
div(phid,p) Gauss limitedLinear 0.5;
|
||||||
|
div(phiU,p) Gauss limitedLinear 0.5;
|
||||||
|
div(phi,h) Gauss limitedLinear 0.5;
|
||||||
|
div(phi,k) Gauss limitedLinear 0.5;
|
||||||
|
div(phi,epsilon) Gauss limitedLinear 0.5;
|
||||||
|
div(phi,R) Gauss limitedLinear 0.5;
|
||||||
|
div(phi,omega) Gauss limitedLinear 0.5;;
|
||||||
|
div(U) Gauss limitedLinear 0.5;
|
||||||
|
div((muEff*dev2(grad(U).T()))) Gauss linear;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
laplacianSchemes
|
||||||
|
{
|
||||||
|
default none;
|
||||||
|
laplacian(muEff,U) Gauss linear corrected;
|
||||||
|
laplacian(mut,U) Gauss linear corrected;
|
||||||
|
laplacian(DkEff,k) Gauss linear corrected;
|
||||||
|
laplacian(DepsilonEff,epsilon) Gauss linear corrected;
|
||||||
|
laplacian(DREff,R) Gauss linear corrected;
|
||||||
|
laplacian(DomegaEff,omega) Gauss linear corrected;
|
||||||
|
laplacian((rho*(1|A(U))),p) Gauss linear corrected;
|
||||||
|
laplacian(alphaEff,h) Gauss linear corrected;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interpolationSchemes
|
||||||
|
{
|
||||||
|
default linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
snGradSchemes
|
||||||
|
{
|
||||||
|
default corrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
fluxRequired
|
||||||
|
{
|
||||||
|
default no;
|
||||||
|
p ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
100
tutorials/compressible/rhoPisoFoam/ras/pipe/system/fvSolution
Executable file
100
tutorials/compressible/rhoPisoFoam/ras/pipe/system/fvSolution
Executable file
|
@ -0,0 +1,100 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | |
|
||||||
|
| \\ / A nd |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object fvSolution;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
solvers
|
||||||
|
{
|
||||||
|
|
||||||
|
p
|
||||||
|
{
|
||||||
|
solver GAMG;
|
||||||
|
tolerance 1e-14;
|
||||||
|
relTol 0.001;
|
||||||
|
smoother GaussSeidel;
|
||||||
|
minIter 4;
|
||||||
|
//maxIter 100;
|
||||||
|
cacheAgglomeration true;
|
||||||
|
nPreSweeps 1;
|
||||||
|
nPostSweeps 3;
|
||||||
|
nFinestSweeps 3;
|
||||||
|
nCellsInCoarsestLevel 20;
|
||||||
|
agglomerator faceAreaPair;
|
||||||
|
mergeLevels 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
U
|
||||||
|
{
|
||||||
|
solver smoothSolver;
|
||||||
|
smoother GaussSeidel;
|
||||||
|
nSweeps 2;
|
||||||
|
tolerance 1e-14;
|
||||||
|
relTol 0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
rho
|
||||||
|
{
|
||||||
|
solver PCG;
|
||||||
|
preconditioner DIC;
|
||||||
|
tolerance 1e-10;
|
||||||
|
relTol 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
htot
|
||||||
|
{
|
||||||
|
solver smoothSolver;
|
||||||
|
smoother GaussSeidel;
|
||||||
|
nSweeps 2;
|
||||||
|
tolerance 1e-14;
|
||||||
|
relTol 0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
h
|
||||||
|
{
|
||||||
|
solver smoothSolver;
|
||||||
|
smoother GaussSeidel;
|
||||||
|
nSweeps 2;
|
||||||
|
tolerance 1e-14;
|
||||||
|
relTol 0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
k
|
||||||
|
{
|
||||||
|
solver PBiCG;
|
||||||
|
preconditioner DILU;
|
||||||
|
tolerance 1e-10;
|
||||||
|
relTol 0;
|
||||||
|
}
|
||||||
|
epsilon
|
||||||
|
{
|
||||||
|
solver PBiCG;
|
||||||
|
preconditioner DILU;
|
||||||
|
tolerance 1e-10;
|
||||||
|
relTol 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PISO
|
||||||
|
{
|
||||||
|
nNonOrthogonalCorrectors 0;
|
||||||
|
nCorrectors 6;
|
||||||
|
momentumPredictor yes;
|
||||||
|
// transonic true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
44
tutorials/compressible/rhoPisoFoam/ras/pipe/system/sampleDict
Executable file
44
tutorials/compressible/rhoPisoFoam/ras/pipe/system/sampleDict
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM Extend Project: Open Source CFD |
|
||||||
|
| \\ / O peration | Version: 1.6-ext |
|
||||||
|
| \\ / A nd | Web: www.extend-project.de |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object sampleDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
interpolationScheme cellPoint;
|
||||||
|
|
||||||
|
setFormat raw;
|
||||||
|
|
||||||
|
sets
|
||||||
|
(
|
||||||
|
leftPatch
|
||||||
|
{
|
||||||
|
|
||||||
|
type uniform;
|
||||||
|
axis y;
|
||||||
|
start (0.49 0 0.0);
|
||||||
|
end (0.49 0.01 0);
|
||||||
|
nPoints 100;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
fields
|
||||||
|
(
|
||||||
|
U p T
|
||||||
|
);
|
||||||
|
|
||||||
|
surfaces
|
||||||
|
(
|
||||||
|
);
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
Reference in a new issue