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()
|
||||
{
|
||||
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