mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
New solver: fireFoam
For non-premixed combustion using sensible enthalpy.
This commit is contained in:
9
applications/solvers/combustion/fireFoam/Allwclean
Executable file
9
applications/solvers/combustion/fireFoam/Allwclean
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
|
set -x
|
||||||
|
|
||||||
|
wclean libso combustionModels
|
||||||
|
wclean all sensibleEnthalpyCombustionThermophysicalModels
|
||||||
|
wclean
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------- end-of-file
|
||||||
9
applications/solvers/combustion/fireFoam/Allwmake
Executable file
9
applications/solvers/combustion/fireFoam/Allwmake
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
|
set -x
|
||||||
|
|
||||||
|
sensibleEnthalpyCombustionThermophysicalModels/Allwmake
|
||||||
|
wmake libso combustionModels
|
||||||
|
wmake
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------- end-of-file
|
||||||
4
applications/solvers/combustion/fireFoam/Make/files
Normal file
4
applications/solvers/combustion/fireFoam/Make/files
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
fireFoam.C
|
||||||
|
|
||||||
|
EXE = $(FOAM_APPBIN)/fireFoam
|
||||||
|
|
||||||
23
applications/solvers/combustion/fireFoam/Make/options
Normal file
23
applications/solvers/combustion/fireFoam/Make/options
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I./combustionModels/lnInclude \
|
||||||
|
-I./sensibleEnthalpyCombustionThermophysicalModels/basic/lnInclude \
|
||||||
|
-I./sensibleEnthalpyCombustionThermophysicalModels/reactionThermo/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
|
-I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude
|
||||||
|
|
||||||
|
|
||||||
|
EXE_LIBS = \
|
||||||
|
-lbasicSensibleEnthalpyThermophysicalModels \
|
||||||
|
-lreactionSensibleEnthalpyThermophysicalModels \
|
||||||
|
-lcombustionModels \
|
||||||
|
-lspecie \
|
||||||
|
-lreactionThermophysicalModels \
|
||||||
|
-lbasicThermophysicalModels \
|
||||||
|
-lfiniteVolume \
|
||||||
|
-lcompressibleLESModels \
|
||||||
|
-lcompressibleRASModels \
|
||||||
|
-lradiation
|
||||||
36
applications/solvers/combustion/fireFoam/UEqn.H
Normal file
36
applications/solvers/combustion/fireFoam/UEqn.H
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
fvVectorMatrix UEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(rho, U)
|
||||||
|
+ fvm::div(phi, U)
|
||||||
|
+ turbulence->divDevRhoReff(U)
|
||||||
|
);
|
||||||
|
|
||||||
|
UEqn.relax();
|
||||||
|
|
||||||
|
if (oCorr == nOuterCorr - 1)
|
||||||
|
{
|
||||||
|
solve
|
||||||
|
(
|
||||||
|
UEqn
|
||||||
|
==
|
||||||
|
fvc::reconstruct
|
||||||
|
(
|
||||||
|
fvc::interpolate(rho)*(g & mesh.Sf())
|
||||||
|
- fvc::snGrad(p)*mesh.magSf()
|
||||||
|
),
|
||||||
|
mesh.solver("UFinal")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
solve
|
||||||
|
(
|
||||||
|
UEqn
|
||||||
|
==
|
||||||
|
fvc::reconstruct
|
||||||
|
(
|
||||||
|
fvc::interpolate(rho)*(g & mesh.Sf())
|
||||||
|
- fvc::snGrad(p)*mesh.magSf()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
combustionModel/combustionModel.C
|
||||||
|
combustionModel/newCombustionModel.C
|
||||||
|
|
||||||
|
infinitelyFastChemistry/infinitelyFastChemistry.C
|
||||||
|
|
||||||
|
noCombustion/noCombustion.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/libcombustionModels
|
||||||
|
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I../sensibleEnthalpyCombustionThermophysicalModels/basic/lnInclude \
|
||||||
|
-I../sensibleEnthalpyCombustionThermophysicalModels/reactionThermo/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||||
|
-I$(FOAM_SRC)/turbulenceModels/compressible/turbulenceModel \
|
||||||
|
-I$(FOAM_SRC)/finiteVolume/lnInclude
|
||||||
|
|
||||||
|
LIB_LIBS = \
|
||||||
|
-lfiniteVolume
|
||||||
@ -0,0 +1,109 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "combustionModel.H"
|
||||||
|
#include "fvm.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(combustionModel, 0);
|
||||||
|
defineRunTimeSelectionTable(combustionModel, dictionary);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::combustionModel::combustionModel
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
)
|
||||||
|
:
|
||||||
|
combustionModelCoeffs_
|
||||||
|
(
|
||||||
|
combustionProperties.subDict
|
||||||
|
(
|
||||||
|
word(combustionProperties.lookup("combustionModel")) + "Coeffs"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
thermo_(thermo),
|
||||||
|
turbulence_(turbulence),
|
||||||
|
mesh_(phi.mesh()),
|
||||||
|
phi_(phi),
|
||||||
|
rho_(rho),
|
||||||
|
stoicRatio_(thermo.lookup("stoichiometricAirFuelMassRatio")),
|
||||||
|
s_(thermo.lookup("stoichiometricOxygenFuelMassRatio")),
|
||||||
|
qFuel_(thermo_.lookup("qFuel")),
|
||||||
|
composition_(thermo.composition())
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::combustionModel::~combustionModel()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::fvScalarMatrix>
|
||||||
|
Foam::combustionModel::combustionModel::R(volScalarField& fu) const
|
||||||
|
{
|
||||||
|
const basicMultiComponentMixture& composition = thermo_.composition();
|
||||||
|
const volScalarField& ft = composition.Y("ft");
|
||||||
|
volScalarField fres = composition.fres(ft, stoicRatio_.value());
|
||||||
|
volScalarField wFuelNorm = this->wFuelNorm()*pos(fu - fres);
|
||||||
|
|
||||||
|
return wFuelNorm*fres - fvm::Sp(wFuelNorm, fu);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::volScalarField> Foam::combustionModel::combustionModel::dQ
|
||||||
|
(
|
||||||
|
const fvScalarMatrix& Rfu
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const basicMultiComponentMixture& composition = thermo_.composition();
|
||||||
|
const volScalarField& fu = composition.Y("fu");
|
||||||
|
|
||||||
|
return (-qFuel_)*(Rfu & fu);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::combustionModel::read(const dictionary& combustionProperties)
|
||||||
|
{
|
||||||
|
combustionModelCoeffs_ = combustionProperties.subDict(type() + "Coeffs");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,210 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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::combustionModel
|
||||||
|
|
||||||
|
Description
|
||||||
|
Base class for all non-premixed combustion models.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
combustionModel.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef combustionModel_H
|
||||||
|
#define combustionModel_H
|
||||||
|
|
||||||
|
#include "IOdictionary.H"
|
||||||
|
#include "hsCombustionThermo.H"
|
||||||
|
#include "turbulenceModel.H"
|
||||||
|
#include "multivariateSurfaceInterpolationScheme.H"
|
||||||
|
#include "runTimeSelectionTables.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class combustionModel Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class combustionModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Dictionary of coefficients for the particular model
|
||||||
|
dictionary combustionModelCoeffs_;
|
||||||
|
|
||||||
|
//- Reference to the thermodynamic
|
||||||
|
const hsCombustionThermo& thermo_;
|
||||||
|
|
||||||
|
//- Reference to the turbulence model
|
||||||
|
const compressible::turbulenceModel& turbulence_;
|
||||||
|
|
||||||
|
//- Reference to the mesh database
|
||||||
|
const fvMesh& mesh_;
|
||||||
|
|
||||||
|
//- Reference to mass-flux field
|
||||||
|
const surfaceScalarField& phi_;
|
||||||
|
|
||||||
|
//- Reference to the density field
|
||||||
|
const volScalarField& rho_;
|
||||||
|
|
||||||
|
//- Stoichiometric air-fuel mass ratio
|
||||||
|
dimensionedScalar stoicRatio_;
|
||||||
|
|
||||||
|
//- Stoichiometric oxygen-fuel mass ratio
|
||||||
|
dimensionedScalar s_;
|
||||||
|
|
||||||
|
//- Heat of combustion (J/Kg)
|
||||||
|
dimensionedScalar qFuel_;
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Disallow copy construct
|
||||||
|
combustionModel(const combustionModel&);
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const combustionModel&);
|
||||||
|
|
||||||
|
const basicMultiComponentMixture& composition_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("combustionModel");
|
||||||
|
|
||||||
|
|
||||||
|
// Declare run-time constructor selection table
|
||||||
|
|
||||||
|
declareRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
autoPtr,
|
||||||
|
combustionModel,
|
||||||
|
dictionary,
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
),
|
||||||
|
(
|
||||||
|
combustionProperties,
|
||||||
|
thermo,
|
||||||
|
turbulence,
|
||||||
|
phi,
|
||||||
|
rho
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Selectors
|
||||||
|
|
||||||
|
//- Return a reference to the selected combustion model
|
||||||
|
static autoPtr<combustionModel> New
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
combustionModel
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~combustionModel();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access functions
|
||||||
|
|
||||||
|
//- Access composition
|
||||||
|
const basicMultiComponentMixture& composition() const
|
||||||
|
{
|
||||||
|
return composition_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Access combustion dictionary
|
||||||
|
const dictionary combustionModelCoeffs() const
|
||||||
|
{
|
||||||
|
return combustionModelCoeffs_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Access heat of combustion
|
||||||
|
const dimensionedScalar qFuel() const
|
||||||
|
{
|
||||||
|
return qFuel_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return normalised consumption rate of (fu - fres)
|
||||||
|
virtual tmp<volScalarField> wFuelNorm() const = 0;
|
||||||
|
|
||||||
|
//- Fuel consumption rate matrix i.e. source-term for the fuel equation
|
||||||
|
virtual tmp<fvScalarMatrix> R(volScalarField& fu) const;
|
||||||
|
|
||||||
|
//- Heat-release rate calculated from the given
|
||||||
|
// fuel consumption rate matrix
|
||||||
|
virtual tmp<volScalarField> dQ(const fvScalarMatrix& Rfu) const;
|
||||||
|
|
||||||
|
//- Correct combustion rate
|
||||||
|
virtual void correct() = 0;
|
||||||
|
|
||||||
|
//- Update properties from given dictionary
|
||||||
|
virtual bool read(const dictionary& combustionProperties) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "combustionModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::autoPtr<Foam::combustionModel> Foam::combustionModel::New
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
)
|
||||||
|
{
|
||||||
|
word combustionModelTypeName = combustionProperties.lookup
|
||||||
|
(
|
||||||
|
"combustionModel"
|
||||||
|
);
|
||||||
|
|
||||||
|
Info<< "Selecting combustion model " << combustionModelTypeName << endl;
|
||||||
|
|
||||||
|
dictionaryConstructorTable::iterator cstrIter =
|
||||||
|
dictionaryConstructorTablePtr_->find(combustionModelTypeName);
|
||||||
|
|
||||||
|
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"combustionModel::New"
|
||||||
|
) << "Unknown combustionModel type "
|
||||||
|
<< combustionModelTypeName << endl << endl
|
||||||
|
<< "Valid combustionModels are : " << endl
|
||||||
|
<< dictionaryConstructorTablePtr_->toc()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return autoPtr<combustionModel>
|
||||||
|
(cstrIter()(combustionProperties, thermo, turbulence, phi, rho));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,94 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "infinitelyFastChemistry.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace combustionModels
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(infinitelyFastChemistry, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
combustionModel,
|
||||||
|
infinitelyFastChemistry,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::combustionModels::infinitelyFastChemistry::infinitelyFastChemistry
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
)
|
||||||
|
:
|
||||||
|
combustionModel(combustionProperties, thermo, turbulence, phi, rho),
|
||||||
|
C_(readScalar(combustionModelCoeffs_.lookup("C")))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::combustionModels::infinitelyFastChemistry::~infinitelyFastChemistry()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::combustionModels::infinitelyFastChemistry::correct()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::volScalarField>
|
||||||
|
Foam::combustionModels::infinitelyFastChemistry::wFuelNorm() const
|
||||||
|
{
|
||||||
|
return rho_/(mesh_.time().deltaT()*C_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::combustionModels::infinitelyFastChemistry::read
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties
|
||||||
|
)
|
||||||
|
{
|
||||||
|
combustionModel::read(combustionProperties);
|
||||||
|
combustionModelCoeffs_.lookup("C") >> C_ ;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,119 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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::combustionModels::infinitelyFastChemistry
|
||||||
|
|
||||||
|
Description
|
||||||
|
Simple infinitely fast chemistry combustion model based on the principle
|
||||||
|
mixed is burnt. Additional parameter C is used to distribute the heat
|
||||||
|
release rate.in time
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
infinitelyFastChemistry.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef infinitelyFastChemistry_H
|
||||||
|
#define infinitelyFastChemistry_H
|
||||||
|
|
||||||
|
#include "fvc.H"
|
||||||
|
#include "combustionModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace combustionModels
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class infinitelyFastChemistry Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class infinitelyFastChemistry
|
||||||
|
:
|
||||||
|
public combustionModel
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Model constant
|
||||||
|
scalar C_;
|
||||||
|
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Disallow copy construct
|
||||||
|
infinitelyFastChemistry(const infinitelyFastChemistry&);
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const infinitelyFastChemistry&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("infinitelyFastChemistry");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
infinitelyFastChemistry
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
|
||||||
|
virtual ~infinitelyFastChemistry();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Update properties from given dictionary
|
||||||
|
virtual bool read(const dictionary& combustionProperties);
|
||||||
|
|
||||||
|
//- Correct combustion rate
|
||||||
|
virtual void correct();
|
||||||
|
|
||||||
|
//- Return normalised consumption rate of (fu - fres)
|
||||||
|
virtual tmp<volScalarField> wFuelNorm() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace combustionModels
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "noCombustion.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace combustionModels
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(noCombustion, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
combustionModel,
|
||||||
|
noCombustion,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::combustionModels::noCombustion::noCombustion
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
)
|
||||||
|
:
|
||||||
|
combustionModel(combustionProperties, thermo, turbulence, phi, rho)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::combustionModels::noCombustion::~noCombustion()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::combustionModels::noCombustion::correct()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::volScalarField>
|
||||||
|
Foam::combustionModels::noCombustion::wFuelNorm() const
|
||||||
|
{
|
||||||
|
return tmp<Foam::volScalarField>
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"wFuelNorm",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar("wFuelNorm", dimMass/dimTime/pow3(dimLength), 0.0)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::combustionModels::noCombustion::read
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return combustionModel::read(combustionProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,113 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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::combustionModel::noCombustion
|
||||||
|
|
||||||
|
Description
|
||||||
|
No combustion
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
noCombustion.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef noCombustion_H
|
||||||
|
#define noCombustion_H
|
||||||
|
|
||||||
|
#include "combustionModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace combustionModels
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class noCombustion Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class noCombustion
|
||||||
|
:
|
||||||
|
public combustionModel
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Disallow copy construct
|
||||||
|
noCombustion(const noCombustion&);
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const noCombustion&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("noCombustion");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
noCombustion
|
||||||
|
(
|
||||||
|
const dictionary& combustionProperties,
|
||||||
|
const hsCombustionThermo& thermo,
|
||||||
|
const compressible::turbulenceModel& turbulence,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const volScalarField& rho
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
|
||||||
|
virtual ~noCombustion();
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Update properties from given dictionary
|
||||||
|
virtual bool read(const dictionary& combustionProperties);
|
||||||
|
|
||||||
|
//- Correct combustion rate
|
||||||
|
virtual void correct();
|
||||||
|
|
||||||
|
//- Return normalised consumption rate of (fu - fres)
|
||||||
|
virtual tmp<volScalarField> wFuelNorm() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace combustionModels
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
130
applications/solvers/combustion/fireFoam/createFields.H
Normal file
130
applications/solvers/combustion/fireFoam/createFields.H
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
Info<< "Reading thermophysical properties\n" << endl;
|
||||||
|
|
||||||
|
autoPtr<hsCombustionThermo> pThermo
|
||||||
|
(
|
||||||
|
hsCombustionThermo::New(mesh)
|
||||||
|
);
|
||||||
|
|
||||||
|
hsCombustionThermo& thermo = pThermo();
|
||||||
|
|
||||||
|
basicMultiComponentMixture& composition = thermo.composition();
|
||||||
|
|
||||||
|
volScalarField rho
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"rho",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
thermo.rho()
|
||||||
|
);
|
||||||
|
|
||||||
|
dimensionedScalar stoicRatio
|
||||||
|
(
|
||||||
|
thermo.lookup("stoichiometricAirFuelMassRatio")
|
||||||
|
);
|
||||||
|
|
||||||
|
volScalarField& p = thermo.p();
|
||||||
|
volScalarField& hs = thermo.hs();
|
||||||
|
|
||||||
|
const volScalarField& psi = thermo.psi();
|
||||||
|
|
||||||
|
volScalarField& ft = composition.Y("ft");
|
||||||
|
volScalarField& fu = composition.Y("fu");
|
||||||
|
|
||||||
|
Info<< "Reading field U\n" << endl;
|
||||||
|
|
||||||
|
volVectorField U
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"U",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
mesh
|
||||||
|
);
|
||||||
|
|
||||||
|
#include "compressibleCreatePhi.H"
|
||||||
|
|
||||||
|
Info<< "Creating turbulence model\n" << endl;
|
||||||
|
autoPtr<compressible::turbulenceModel> turbulence
|
||||||
|
(
|
||||||
|
compressible::turbulenceModel::New(rho, U, phi, thermo)
|
||||||
|
);
|
||||||
|
|
||||||
|
IOdictionary combustionProperties
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"combustionProperties",
|
||||||
|
runTime.constant(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
Info<< "Creating combustion model\n" << endl;
|
||||||
|
autoPtr<combustionModel::combustionModel> combustion
|
||||||
|
(
|
||||||
|
combustionModel::combustionModel::New
|
||||||
|
(
|
||||||
|
combustionProperties,
|
||||||
|
thermo,
|
||||||
|
turbulence(),
|
||||||
|
phi,
|
||||||
|
rho
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
volScalarField dQ
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"dQ",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar("dQ", dimMass/pow3(dimTime)/dimLength, 0.0)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
Info<< "Creating field DpDt\n" << endl;
|
||||||
|
volScalarField DpDt =
|
||||||
|
fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p);
|
||||||
|
|
||||||
|
|
||||||
|
Info<< "Calculating field g.h\n" << endl;
|
||||||
|
volScalarField gh("gh", g & mesh.C());
|
||||||
|
|
||||||
|
surfaceScalarField ghf("gh", g & mesh.Cf());
|
||||||
|
|
||||||
|
p += rho*gh;
|
||||||
|
|
||||||
|
thermo.correct();
|
||||||
|
|
||||||
|
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
||||||
|
|
||||||
|
|
||||||
|
multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
|
||||||
|
|
||||||
|
if (composition.contains("ft"))
|
||||||
|
{
|
||||||
|
fields.add(composition.Y("ft"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (composition.contains("fu"))
|
||||||
|
{
|
||||||
|
fields.add(composition.Y("fu"));
|
||||||
|
}
|
||||||
|
|
||||||
|
fields.add(hs);
|
||||||
103
applications/solvers/combustion/fireFoam/fireFoam.C
Normal file
103
applications/solvers/combustion/fireFoam/fireFoam.C
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
Application
|
||||||
|
fireFoam
|
||||||
|
|
||||||
|
Description
|
||||||
|
Transient Solver for Fires and turbulent diffusion flames
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "fvCFD.H"
|
||||||
|
#include "hsCombustionThermo.H"
|
||||||
|
#include "turbulenceModel.H"
|
||||||
|
#include "combustionModel.H"
|
||||||
|
|
||||||
|
#include "radiationModel.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
#include "setRootCase.H"
|
||||||
|
#include "createTime.H"
|
||||||
|
#include "createMesh.H"
|
||||||
|
#include "readGravitationalAcceleration.H"
|
||||||
|
#include "initContinuityErrs.H"
|
||||||
|
#include "createFields.H"
|
||||||
|
#include "createRadiationModel.H"
|
||||||
|
#include "readTimeControls.H"
|
||||||
|
#include "compressibleCourantNo.H"
|
||||||
|
#include "setInitialDeltaT.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Info<< "\nStarting time loop\n" << endl;
|
||||||
|
|
||||||
|
while (runTime.run())
|
||||||
|
{
|
||||||
|
#include "readPISOControls.H"
|
||||||
|
#include "readTimeControls.H"
|
||||||
|
#include "compressibleCourantNo.H"
|
||||||
|
#include "setDeltaT.H"
|
||||||
|
|
||||||
|
runTime++;
|
||||||
|
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||||
|
|
||||||
|
#include "rhoEqn.H"
|
||||||
|
|
||||||
|
// --- Pressure-velocity PIMPLE corrector loop
|
||||||
|
for (int oCorr=0; oCorr<nOuterCorr; oCorr++)
|
||||||
|
{
|
||||||
|
#include "UEqn.H"
|
||||||
|
|
||||||
|
#include "ftEqn.H"
|
||||||
|
#include "fuhsEqn.H"
|
||||||
|
|
||||||
|
// --- PISO loop
|
||||||
|
for (int corr=0; corr<nCorr; corr++)
|
||||||
|
{
|
||||||
|
#include "pEqn.H"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
turbulence->correct();
|
||||||
|
|
||||||
|
rho = thermo.rho();
|
||||||
|
|
||||||
|
runTime.write();
|
||||||
|
|
||||||
|
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
||||||
|
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
||||||
|
<< nl << endl;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "End\n" << endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
25
applications/solvers/combustion/fireFoam/ftEqn.H
Normal file
25
applications/solvers/combustion/fireFoam/ftEqn.H
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
tmp<fv::convectionScheme<scalar> > mvConvection
|
||||||
|
(
|
||||||
|
fv::convectionScheme<scalar>::New
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
fields,
|
||||||
|
phi,
|
||||||
|
mesh.divScheme("div(phi,ft_b_h)")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
{
|
||||||
|
fvScalarMatrix ftEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(rho, ft)
|
||||||
|
+ mvConvection->fvmDiv(phi, ft)
|
||||||
|
- fvm::laplacian(turbulence->alphaEff(), ft)
|
||||||
|
);
|
||||||
|
|
||||||
|
ftEqn.relax();
|
||||||
|
ftEqn.solve();
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "max(ft) = " << max(ft).value() << endl;
|
||||||
|
Info<< "min(ft) = " << min(ft).value() << endl;
|
||||||
47
applications/solvers/combustion/fireFoam/fuhsEqn.H
Normal file
47
applications/solvers/combustion/fireFoam/fuhsEqn.H
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
// Solve fuel equation
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~
|
||||||
|
fvScalarMatrix R = combustion->R(fu);
|
||||||
|
|
||||||
|
{
|
||||||
|
fvScalarMatrix fuEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(rho, fu)
|
||||||
|
+ mvConvection->fvmDiv(phi, fu)
|
||||||
|
- fvm::laplacian(turbulence->alphaEff(), fu)
|
||||||
|
==
|
||||||
|
R
|
||||||
|
);
|
||||||
|
|
||||||
|
fuEqn.relax();
|
||||||
|
fuEqn.solve();
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "max(fu) = " << max(fu).value() << endl;
|
||||||
|
Info<< "min(fu) = " << min(fu).value() << endl;
|
||||||
|
|
||||||
|
|
||||||
|
// Solve sensible enthalpy equation
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
radiation->correct();
|
||||||
|
dQ = combustion->dQ(R);
|
||||||
|
|
||||||
|
{
|
||||||
|
fvScalarMatrix hsEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(rho, hs)
|
||||||
|
+ mvConvection->fvmDiv(phi,hs)
|
||||||
|
- fvm::laplacian(turbulence->alphaEff(), hs)
|
||||||
|
==
|
||||||
|
DpDt
|
||||||
|
+ dQ
|
||||||
|
+ radiation->Shs(thermo)
|
||||||
|
);
|
||||||
|
|
||||||
|
hsEqn.relax();
|
||||||
|
hsEqn.solve();
|
||||||
|
}
|
||||||
|
|
||||||
|
thermo.correct();
|
||||||
|
combustion->correct();
|
||||||
|
}
|
||||||
64
applications/solvers/combustion/fireFoam/pEqn.H
Normal file
64
applications/solvers/combustion/fireFoam/pEqn.H
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
bool closedVolume = false;
|
||||||
|
|
||||||
|
rho = thermo.rho();
|
||||||
|
|
||||||
|
volScalarField rUA = 1.0/UEqn.A();
|
||||||
|
surfaceScalarField rhorUAf("(rho*(1|A(U)))", fvc::interpolate(rho*rUA));
|
||||||
|
U = rUA*UEqn.H();
|
||||||
|
|
||||||
|
surfaceScalarField phiU
|
||||||
|
(
|
||||||
|
fvc::interpolate(rho)
|
||||||
|
*(
|
||||||
|
(fvc::interpolate(U) & mesh.Sf())
|
||||||
|
+ fvc::ddtPhiCorr(rUA, rho, U, phi)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
phi = phiU + rhorUAf*fvc::interpolate(rho)*(g & mesh.Sf());
|
||||||
|
|
||||||
|
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||||
|
{
|
||||||
|
surfaceScalarField rhorUAf = fvc::interpolate(rho*rUA);
|
||||||
|
|
||||||
|
fvScalarMatrix pEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(psi,p)
|
||||||
|
+ fvc::div(phi)
|
||||||
|
- fvm::laplacian(rhorUAf, p)
|
||||||
|
);
|
||||||
|
|
||||||
|
closedVolume = p.needReference();
|
||||||
|
|
||||||
|
if (corr == nCorr-1 && nonOrth == nNonOrthCorr)
|
||||||
|
{
|
||||||
|
pEqn.solve(mesh.solver(p.name() + "Final"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pEqn.solve(mesh.solver(p.name()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nonOrth == nNonOrthCorr)
|
||||||
|
{
|
||||||
|
phi += pEqn.flux();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p);
|
||||||
|
|
||||||
|
#include "rhoEqn.H"
|
||||||
|
#include "compressibleContinuityErrs.H"
|
||||||
|
|
||||||
|
U += rUA*fvc::reconstruct((phi - phiU)/rhorUAf);
|
||||||
|
U.correctBoundaryConditions();
|
||||||
|
|
||||||
|
// For closed-volume cases adjust the pressure and density levels
|
||||||
|
// to obey overall mass continuity
|
||||||
|
if (closedVolume)
|
||||||
|
{
|
||||||
|
p +=
|
||||||
|
(initialMass - fvc::domainIntegrate(thermo.psi()*p))
|
||||||
|
/fvc::domainIntegrate(thermo.psi());
|
||||||
|
rho = thermo.rho();
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
|
set -x
|
||||||
|
|
||||||
|
wmake libso basic
|
||||||
|
wmake libso reactionThermo
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------- end-of-file
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
psiThermo/basicSensiblePsiThermo/basicSensiblePsiThermo.C
|
||||||
|
psiThermo/basicSensiblePsiThermo/newBasicSensiblePsiThermo.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/libbasicSensibleEnthalpyThermophysicalModels
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude
|
||||||
|
|
||||||
|
LIB_LIBS = \
|
||||||
|
-lfiniteVolume
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "basicSensiblePsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(basicSensiblePsiThermo, 0);
|
||||||
|
defineRunTimeSelectionTable(basicSensiblePsiThermo, fvMesh);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::basicSensiblePsiThermo::basicSensiblePsiThermo(const fvMesh& mesh)
|
||||||
|
:
|
||||||
|
basicThermo(mesh)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::basicSensiblePsiThermo::~basicSensiblePsiThermo()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,114 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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::basicSensiblePsiThermo
|
||||||
|
|
||||||
|
Description
|
||||||
|
Basic thermodynamic properties based on compressibility
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
basicSensiblePsiThermo.C
|
||||||
|
newBasicSensiblePsiThermo.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef basicSensiblePsiThermo_H
|
||||||
|
#define basicSensiblePsiThermo_H
|
||||||
|
|
||||||
|
#include "basicThermo.H"
|
||||||
|
#include "runTimeSelectionTables.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class basicSensiblePsiThermo Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class basicSensiblePsiThermo
|
||||||
|
:
|
||||||
|
public basicThermo
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected member functions
|
||||||
|
|
||||||
|
//- Construct as copy (not implemented)
|
||||||
|
basicSensiblePsiThermo(const basicSensiblePsiThermo&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("basicSensiblePsiThermo");
|
||||||
|
|
||||||
|
|
||||||
|
//- Declare run-time constructor selection table
|
||||||
|
declareRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
autoPtr,
|
||||||
|
basicSensiblePsiThermo,
|
||||||
|
fvMesh,
|
||||||
|
(const fvMesh& mesh),
|
||||||
|
(mesh)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from mesh
|
||||||
|
basicSensiblePsiThermo(const fvMesh&);
|
||||||
|
|
||||||
|
|
||||||
|
//- Selector
|
||||||
|
static autoPtr<basicSensiblePsiThermo> New(const fvMesh&);
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~basicSensiblePsiThermo();
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Fields derived from thermodynamic state variables
|
||||||
|
|
||||||
|
//- Density [kg/m^3] - uses current value of pressure
|
||||||
|
virtual tmp<volScalarField> rho() const
|
||||||
|
{
|
||||||
|
return p_*psi();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
InClass
|
||||||
|
Foam::basicSensiblePsiThermo
|
||||||
|
|
||||||
|
Description
|
||||||
|
Macros for creating 'basic' compresibility-based thermo packages
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef makeBasicSensiblePsiThermo_H
|
||||||
|
#define makeBasicSensiblePsiThermo_H
|
||||||
|
|
||||||
|
#include "basicSensiblePsiThermo.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#define makeBasicSensiblePsiThermo(Cthermo,Mixture,Transport,Thermo,EqnOfState) \
|
||||||
|
\
|
||||||
|
typedef Cthermo<Mixture<Transport<specieThermo<Thermo<EqnOfState> > > > > \
|
||||||
|
Cthermo##Mixture##Transport##Thermo##EqnOfState; \
|
||||||
|
\
|
||||||
|
defineTemplateTypeNameAndDebugWithName \
|
||||||
|
( \
|
||||||
|
Cthermo##Mixture##Transport##Thermo##EqnOfState, \
|
||||||
|
#Cthermo \
|
||||||
|
"<"#Mixture"<"#Transport"<specieThermo<"#Thermo"<"#EqnOfState">>>>>", \
|
||||||
|
0 \
|
||||||
|
); \
|
||||||
|
\
|
||||||
|
addToRunTimeSelectionTable \
|
||||||
|
( \
|
||||||
|
basicSensiblePsiThermo, \
|
||||||
|
Cthermo##Mixture##Transport##Thermo##EqnOfState, \
|
||||||
|
fvMesh \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "basicSensiblePsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::autoPtr<Foam::basicSensiblePsiThermo> Foam::basicSensiblePsiThermo::New
|
||||||
|
(
|
||||||
|
const fvMesh& mesh
|
||||||
|
)
|
||||||
|
{
|
||||||
|
word thermoTypeName;
|
||||||
|
|
||||||
|
// Enclose the creation of the thermophysicalProperties to ensure it is
|
||||||
|
// deleted before the turbulenceModel is created otherwise the dictionary
|
||||||
|
// is entered in the database twice
|
||||||
|
{
|
||||||
|
IOdictionary thermoDict
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"thermophysicalProperties",
|
||||||
|
mesh.time().constant(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
thermoDict.lookup("thermoType") >> thermoTypeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "Selecting thermodynamics package " << thermoTypeName << endl;
|
||||||
|
|
||||||
|
fvMeshConstructorTable::iterator cstrIter =
|
||||||
|
fvMeshConstructorTablePtr_->find(thermoTypeName);
|
||||||
|
|
||||||
|
if (cstrIter == fvMeshConstructorTablePtr_->end())
|
||||||
|
{
|
||||||
|
FatalErrorIn("basicSensiblePsiThermo::New(const fvMesh&)")
|
||||||
|
<< "Unknown basicSensiblePsiThermo type " << thermoTypeName << nl << nl
|
||||||
|
<< "Valid basicSensiblePsiThermo types are:" << nl
|
||||||
|
<< fvMeshConstructorTablePtr_->toc() << nl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return autoPtr<basicSensiblePsiThermo>(cstrIter()(mesh));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
combustionThermo/hsCombustionThermo/hsCombustionThermo.C
|
||||||
|
combustionThermo/hsCombustionThermo/newhsCombustionThermo.C
|
||||||
|
combustionThermo/hsCombustionThermo/hsCombustionThermos.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/libreactionSensibleEnthalpyThermophysicalModels
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I../basic/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||||
|
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude
|
||||||
|
|
||||||
|
LIB_LIBS = \
|
||||||
|
-lfiniteVolume
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "hsCombustionThermo.H"
|
||||||
|
#include "fvMesh.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(hsCombustionThermo, 0);
|
||||||
|
defineRunTimeSelectionTable(hsCombustionThermo, fvMesh);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::hsCombustionThermo::hsCombustionThermo(const fvMesh& mesh)
|
||||||
|
:
|
||||||
|
basicSensiblePsiThermo(mesh),
|
||||||
|
|
||||||
|
hs_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"hs",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionSet(0, 2, -2, 0, 0),
|
||||||
|
this->hBoundaryTypes()
|
||||||
|
)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::hsCombustionThermo::~hsCombustionThermo()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,146 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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::hsCombustionThermo
|
||||||
|
|
||||||
|
Description
|
||||||
|
Foam::hsCombustionThermo
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
hsCombustionThermo.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef hsCombustionThermo_H
|
||||||
|
#define hsCombustionThermo_H
|
||||||
|
|
||||||
|
#include "basicSensiblePsiThermo.H"
|
||||||
|
#include "basicMultiComponentMixture.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
#include "runTimeSelectionTables.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class hsCombustionThermo Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class hsCombustionThermo
|
||||||
|
:
|
||||||
|
public basicSensiblePsiThermo
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- sensible enthalpy field
|
||||||
|
volScalarField hs_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("hsCombustionThermo");
|
||||||
|
|
||||||
|
|
||||||
|
//- Declare run-time constructor selection tables
|
||||||
|
declareRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
autoPtr,
|
||||||
|
hsCombustionThermo,
|
||||||
|
fvMesh,
|
||||||
|
(const fvMesh& mesh),
|
||||||
|
(mesh)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from dictionary and mesh
|
||||||
|
hsCombustionThermo(const fvMesh&);
|
||||||
|
|
||||||
|
|
||||||
|
// Selectors
|
||||||
|
|
||||||
|
//- Standard selection based on fvMesh
|
||||||
|
static autoPtr<hsCombustionThermo> New(const fvMesh&);
|
||||||
|
|
||||||
|
//- Select and check that package contains 'thermoType'
|
||||||
|
static autoPtr<hsCombustionThermo> NewType
|
||||||
|
(
|
||||||
|
const fvMesh&,
|
||||||
|
const word& thermoType
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~hsCombustionThermo();
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
//- Return the composition of the multi-component mixture
|
||||||
|
virtual basicMultiComponentMixture& composition() = 0;
|
||||||
|
|
||||||
|
//- Return the composition of the multi-component mixture
|
||||||
|
virtual const basicMultiComponentMixture& composition() const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// Access to thermodynamic state variables
|
||||||
|
|
||||||
|
//- Sensible enthalpy [J/kg]
|
||||||
|
// Non-const access allowed for transport equations
|
||||||
|
virtual volScalarField& hs()
|
||||||
|
{
|
||||||
|
return hs_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Sensible enthalpy [J/kg]
|
||||||
|
virtual const volScalarField& hs() const
|
||||||
|
{
|
||||||
|
return hs_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Chemical enthalpy [J/kg]
|
||||||
|
virtual tmp<volScalarField> hc() const = 0;
|
||||||
|
|
||||||
|
//- Update properties
|
||||||
|
virtual void correct() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "makeHsCombustionThermo.H"
|
||||||
|
|
||||||
|
#include "hsCombustionThermo.H"
|
||||||
|
#include "hsPsiMixtureThermo.H"
|
||||||
|
|
||||||
|
#include "perfectGas.H"
|
||||||
|
|
||||||
|
#include "hConstThermo.H"
|
||||||
|
#include "janafThermo.H"
|
||||||
|
#include "specieThermo.H"
|
||||||
|
|
||||||
|
#include "sutherlandTransport.H"
|
||||||
|
|
||||||
|
#include "veryInhomogeneousMixture.H"
|
||||||
|
|
||||||
|
#include "multiComponentMixture.H"
|
||||||
|
|
||||||
|
#include "thermoPhysicsTypes.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
makeHsCombustionThermo
|
||||||
|
(
|
||||||
|
hsCombustionThermo,
|
||||||
|
hsPsiMixtureThermo,
|
||||||
|
veryInhomogeneousMixture,
|
||||||
|
sutherlandTransport,
|
||||||
|
janafThermo,
|
||||||
|
perfectGas
|
||||||
|
);
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
InClass
|
||||||
|
Foam::hsCombustionThermo
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef makeHsCombustionThermo_H
|
||||||
|
#define makeHsCombustionThermo_H
|
||||||
|
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "basicSensiblePsiThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#define makeHsCombustionThermo(CThermo,MixtureThermo,Mixture,Transport,Thermo,EqnOfState) \
|
||||||
|
\
|
||||||
|
typedef MixtureThermo \
|
||||||
|
<Mixture<Transport<specieThermo<Thermo<EqnOfState> > > > > \
|
||||||
|
MixtureThermo##Mixture##Transport##Thermo##EqnOfState; \
|
||||||
|
\
|
||||||
|
defineTemplateTypeNameAndDebugWithName \
|
||||||
|
( \
|
||||||
|
MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \
|
||||||
|
#MixtureThermo \
|
||||||
|
"<"#Mixture"<"#Transport"<specieThermo<"#Thermo"<"#EqnOfState">>>>>", \
|
||||||
|
0 \
|
||||||
|
); \
|
||||||
|
\
|
||||||
|
addToRunTimeSelectionTable \
|
||||||
|
( \
|
||||||
|
basicSensiblePsiThermo, \
|
||||||
|
MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \
|
||||||
|
fvMesh \
|
||||||
|
); \
|
||||||
|
\
|
||||||
|
addToRunTimeSelectionTable \
|
||||||
|
( \
|
||||||
|
CThermo, \
|
||||||
|
MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \
|
||||||
|
fvMesh \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#define makeHsCombustionMixtureThermo(CThermo,MixtureThermo,Mixture,ThermoPhys) \
|
||||||
|
\
|
||||||
|
typedef MixtureThermo<Mixture<ThermoPhys> > \
|
||||||
|
MixtureThermo##Mixture##ThermoPhys; \
|
||||||
|
\
|
||||||
|
defineTemplateTypeNameAndDebugWithName \
|
||||||
|
( \
|
||||||
|
MixtureThermo##Mixture##ThermoPhys, \
|
||||||
|
#MixtureThermo"<"#Mixture"<"#ThermoPhys">>", \
|
||||||
|
0 \
|
||||||
|
); \
|
||||||
|
\
|
||||||
|
addToRunTimeSelectionTable \
|
||||||
|
( \
|
||||||
|
basicSensiblePsiThermo, \
|
||||||
|
MixtureThermo##Mixture##ThermoPhys, \
|
||||||
|
fvMesh \
|
||||||
|
); \
|
||||||
|
\
|
||||||
|
addToRunTimeSelectionTable \
|
||||||
|
( \
|
||||||
|
CThermo, \
|
||||||
|
MixtureThermo##Mixture##ThermoPhys, \
|
||||||
|
fvMesh \
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,151 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "hsCombustionThermo.H"
|
||||||
|
#include "fvMesh.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::autoPtr<Foam::hsCombustionThermo> Foam::hsCombustionThermo::New
|
||||||
|
(
|
||||||
|
const fvMesh& mesh
|
||||||
|
)
|
||||||
|
{
|
||||||
|
word hsCombustionThermoTypeName;
|
||||||
|
|
||||||
|
// Enclose the creation of the thermophysicalProperties to ensure it is
|
||||||
|
// deleted before the turbulenceModel is created otherwise the dictionary
|
||||||
|
// is entered in the database twice
|
||||||
|
{
|
||||||
|
IOdictionary thermoDict
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"thermophysicalProperties",
|
||||||
|
mesh.time().constant(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
thermoDict.lookup("thermoType") >> hsCombustionThermoTypeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "Selecting thermodynamics package " << hsCombustionThermoTypeName
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
fvMeshConstructorTable::iterator cstrIter =
|
||||||
|
fvMeshConstructorTablePtr_->find(hsCombustionThermoTypeName);
|
||||||
|
|
||||||
|
if (cstrIter == fvMeshConstructorTablePtr_->end())
|
||||||
|
{
|
||||||
|
FatalErrorIn("hsCombustionThermo::New(const fvMesh&)")
|
||||||
|
<< "Unknown hsCombustionThermo type "
|
||||||
|
<< hsCombustionThermoTypeName << nl << nl
|
||||||
|
<< "Valid hsCombustionThermo types are:" << nl
|
||||||
|
<< fvMeshConstructorTablePtr_->toc() << nl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return autoPtr<hsCombustionThermo>(cstrIter()(mesh));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::autoPtr<Foam::hsCombustionThermo> Foam::hsCombustionThermo::NewType
|
||||||
|
(
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const word& thermoType
|
||||||
|
)
|
||||||
|
{
|
||||||
|
word hsCombustionThermoTypeName;
|
||||||
|
|
||||||
|
// Enclose the creation of the thermophysicalProperties to ensure it is
|
||||||
|
// deleted before the turbulenceModel is created otherwise the dictionary
|
||||||
|
// is entered in the database twice
|
||||||
|
{
|
||||||
|
IOdictionary thermoDict
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"thermophysicalProperties",
|
||||||
|
mesh.time().constant(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
thermoDict.lookup("thermoType") >> hsCombustionThermoTypeName;
|
||||||
|
|
||||||
|
if (hsCombustionThermoTypeName.find(thermoType) == string::npos)
|
||||||
|
{
|
||||||
|
wordList allModels = fvMeshConstructorTablePtr_->toc();
|
||||||
|
DynamicList<word> validModels;
|
||||||
|
forAll(allModels, i)
|
||||||
|
{
|
||||||
|
if (allModels[i].find(thermoType) != string::npos)
|
||||||
|
{
|
||||||
|
validModels.append(allModels[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"autoPtr<hsCombustionThermo> hsCombustionThermo::NewType"
|
||||||
|
"("
|
||||||
|
"const fvMesh&, "
|
||||||
|
"const word&"
|
||||||
|
")"
|
||||||
|
) << "Inconsistent thermo package selected:" << nl << nl
|
||||||
|
<< hsCombustionThermoTypeName << nl << nl << "Please select a "
|
||||||
|
<< "thermo package based on " << thermoType
|
||||||
|
<< ". Valid options include:" << nl << validModels << nl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "Selecting thermodynamics package " << hsCombustionThermoTypeName
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
fvMeshConstructorTable::iterator cstrIter =
|
||||||
|
fvMeshConstructorTablePtr_->find(hsCombustionThermoTypeName);
|
||||||
|
|
||||||
|
if (cstrIter == fvMeshConstructorTablePtr_->end())
|
||||||
|
{
|
||||||
|
FatalErrorIn("hsCombustionThermo::New(const fvMesh&)")
|
||||||
|
<< "Unknown hsCombustionThermo type "
|
||||||
|
<< hsCombustionThermoTypeName << nl << nl
|
||||||
|
<< "Valid hsCombustionThermo types are:" << nl
|
||||||
|
<< fvMeshConstructorTablePtr_->toc() << nl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return autoPtr<hsCombustionThermo>(cstrIter()(mesh));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,318 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "hsPsiMixtureThermo.H"
|
||||||
|
#include "fvMesh.H"
|
||||||
|
#include "fixedValueFvPatchFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::hsPsiMixtureThermo<MixtureType>::hsPsiMixtureThermo(const fvMesh& mesh)
|
||||||
|
:
|
||||||
|
hsCombustionThermo(mesh),
|
||||||
|
MixtureType(*this, mesh)
|
||||||
|
{
|
||||||
|
scalarField& hCells = hs_.internalField();
|
||||||
|
const scalarField& TCells = T_.internalField();
|
||||||
|
|
||||||
|
forAll(hCells, celli)
|
||||||
|
{
|
||||||
|
hCells[celli] = this->cellMixture(celli).Hs(TCells[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(hs_.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
hs_.boundaryField()[patchi] == hs(T_.boundaryField()[patchi], patchi);
|
||||||
|
}
|
||||||
|
|
||||||
|
hBoundaryCorrection(hs_);
|
||||||
|
|
||||||
|
calculate();
|
||||||
|
psi_.oldTime(); // Switch on saving old time
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::hsPsiMixtureThermo<MixtureType>::~hsPsiMixtureThermo()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
void Foam::hsPsiMixtureThermo<MixtureType>::calculate()
|
||||||
|
{
|
||||||
|
const scalarField& hsCells = hs_.internalField();
|
||||||
|
const scalarField& pCells = p_.internalField();
|
||||||
|
|
||||||
|
scalarField& TCells = T_.internalField();
|
||||||
|
scalarField& psiCells = psi_.internalField();
|
||||||
|
scalarField& muCells = mu_.internalField();
|
||||||
|
scalarField& alphaCells = alpha_.internalField();
|
||||||
|
|
||||||
|
forAll(TCells, celli)
|
||||||
|
{
|
||||||
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
|
this->cellMixture(celli);
|
||||||
|
|
||||||
|
TCells[celli] = mixture_.THs(hsCells[celli], TCells[celli]);
|
||||||
|
psiCells[celli] = mixture_.psi(pCells[celli], TCells[celli]);
|
||||||
|
|
||||||
|
muCells[celli] = mixture_.mu(TCells[celli]);
|
||||||
|
alphaCells[celli] = mixture_.alpha(TCells[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(T_.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
fvPatchScalarField& pp = p_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& pT = T_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& ppsi = psi_.boundaryField()[patchi];
|
||||||
|
|
||||||
|
fvPatchScalarField& phs = hs_.boundaryField()[patchi];
|
||||||
|
|
||||||
|
fvPatchScalarField& pmu_ = mu_.boundaryField()[patchi];
|
||||||
|
fvPatchScalarField& palpha_ = alpha_.boundaryField()[patchi];
|
||||||
|
|
||||||
|
if (pT.fixesValue())
|
||||||
|
{
|
||||||
|
forAll(pT, facei)
|
||||||
|
{
|
||||||
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
|
this->patchFaceMixture(patchi, facei);
|
||||||
|
|
||||||
|
phs[facei] = mixture_.Hs(pT[facei]);
|
||||||
|
|
||||||
|
ppsi[facei] = mixture_.psi(pp[facei], pT[facei]);
|
||||||
|
pmu_[facei] = mixture_.mu(pT[facei]);
|
||||||
|
palpha_[facei] = mixture_.alpha(pT[facei]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
forAll(pT, facei)
|
||||||
|
{
|
||||||
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
|
this->patchFaceMixture(patchi, facei);
|
||||||
|
|
||||||
|
pT[facei] = mixture_.THs(phs[facei], pT[facei]);
|
||||||
|
|
||||||
|
ppsi[facei] = mixture_.psi(pp[facei], pT[facei]);
|
||||||
|
pmu_[facei] = mixture_.mu(pT[facei]);
|
||||||
|
palpha_[facei] = mixture_.alpha(pT[facei]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
void Foam::hsPsiMixtureThermo<MixtureType>::correct()
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "entering hMixtureThermo<MixtureType>::correct()" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// force the saving of the old-time values
|
||||||
|
psi_.oldTime();
|
||||||
|
|
||||||
|
calculate();
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "exiting hMixtureThermo<MixtureType>::correct()" << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::volScalarField>
|
||||||
|
Foam::hsPsiMixtureThermo<MixtureType>::hc() const
|
||||||
|
{
|
||||||
|
const fvMesh& mesh = T_.mesh();
|
||||||
|
|
||||||
|
tmp<volScalarField> thc
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"hc",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
hs_.dimensions()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
volScalarField& hcf = thc();
|
||||||
|
scalarField& hcCells = hcf.internalField();
|
||||||
|
|
||||||
|
forAll(hcCells, celli)
|
||||||
|
{
|
||||||
|
hcCells[celli] = this->cellMixture(celli).Hc();
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(hcf.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
scalarField& hcp = hcf.boundaryField()[patchi];
|
||||||
|
|
||||||
|
forAll(hcp, facei)
|
||||||
|
{
|
||||||
|
hcp[facei] = this->patchFaceMixture(patchi, facei).Hc();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return thc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::hsPsiMixtureThermo<MixtureType>::hs
|
||||||
|
(
|
||||||
|
const scalarField& T,
|
||||||
|
const labelList& cells
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
tmp<scalarField> th(new scalarField(T.size()));
|
||||||
|
scalarField& hs = th();
|
||||||
|
|
||||||
|
forAll(T, celli)
|
||||||
|
{
|
||||||
|
hs[celli] = this->cellMixture(cells[celli]).Hs(T[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return th;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::hsPsiMixtureThermo<MixtureType>::hs
|
||||||
|
(
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
tmp<scalarField> th(new scalarField(T.size()));
|
||||||
|
scalarField& hs = th();
|
||||||
|
|
||||||
|
forAll(T, facei)
|
||||||
|
{
|
||||||
|
hs[facei] = this->patchFaceMixture(patchi, facei).Hs(T[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return th;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::scalarField>
|
||||||
|
Foam::hsPsiMixtureThermo<MixtureType>::Cp
|
||||||
|
(
|
||||||
|
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(T[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tCp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
Foam::tmp<Foam::volScalarField>
|
||||||
|
Foam::hsPsiMixtureThermo<MixtureType>::Cp() const
|
||||||
|
{
|
||||||
|
const fvMesh& mesh = T_.mesh();
|
||||||
|
|
||||||
|
tmp<volScalarField> tCp
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"Cp",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionSet(0, 2, -2, -1, 0)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
volScalarField& cp = tCp();
|
||||||
|
|
||||||
|
scalarField& cpCells = cp.internalField();
|
||||||
|
const scalarField& TCells = T_.internalField();
|
||||||
|
|
||||||
|
forAll(TCells, celli)
|
||||||
|
{
|
||||||
|
cpCells[celli] = this->cellMixture(celli).Cp(TCells[celli]);
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(T_.boundaryField(), patchi)
|
||||||
|
{
|
||||||
|
cp.boundaryField()[patchi] = Cp(T_.boundaryField()[patchi], patchi);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tCp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
bool Foam::hsPsiMixtureThermo<MixtureType>::read()
|
||||||
|
{
|
||||||
|
if (hsCombustionThermo::read())
|
||||||
|
{
|
||||||
|
MixtureType::read(*this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,147 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / 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::hsPsiMixtureThermo
|
||||||
|
|
||||||
|
Description
|
||||||
|
Foam::hsPsiMixtureThermo
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
hsPsiMixtureThermo.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef hsPsiMixtureThermo_H
|
||||||
|
#define hsPsiMixtureThermo_H
|
||||||
|
|
||||||
|
#include "hsCombustionThermo.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class hsPsiMixtureThermo Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class MixtureType>
|
||||||
|
class hsPsiMixtureThermo
|
||||||
|
:
|
||||||
|
public hsCombustionThermo,
|
||||||
|
public MixtureType
|
||||||
|
{
|
||||||
|
// Private member functions
|
||||||
|
|
||||||
|
void calculate();
|
||||||
|
|
||||||
|
//- Construct as copy (not implemented)
|
||||||
|
hsPsiMixtureThermo(const hsPsiMixtureThermo<MixtureType>&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("hsPsiMixtureThermo");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from mesh
|
||||||
|
hsPsiMixtureThermo(const fvMesh&);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~hsPsiMixtureThermo();
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
//- Return the compostion of the multi-component mixture
|
||||||
|
virtual basicMultiComponentMixture& composition()
|
||||||
|
{
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return the compostion of the multi-component mixture
|
||||||
|
virtual const basicMultiComponentMixture& composition() const
|
||||||
|
{
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Update properties
|
||||||
|
virtual void correct();
|
||||||
|
|
||||||
|
|
||||||
|
//- Chemical enthalpy [J/kg]
|
||||||
|
virtual tmp<volScalarField> hc() const;
|
||||||
|
|
||||||
|
// Fields derived from thermodynamic state variables
|
||||||
|
|
||||||
|
//- Sensible enthalpy for cell-set [J/kg]
|
||||||
|
virtual tmp<scalarField> hs
|
||||||
|
(
|
||||||
|
const scalarField& T,
|
||||||
|
const labelList& cells
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Sensible enthalpy for patch [J/kg]
|
||||||
|
virtual tmp<scalarField> hs
|
||||||
|
(
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant pressure for patch [J/kg/K]
|
||||||
|
virtual tmp<scalarField> Cp
|
||||||
|
(
|
||||||
|
const scalarField& T,
|
||||||
|
const label patchi
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Heat capacity at constant pressure [J/kg/K]
|
||||||
|
virtual tmp<volScalarField> Cp() const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Read thermophysicalProperties dictionary
|
||||||
|
virtual bool read();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
# include "hsPsiMixtureThermo.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Reference in New Issue
Block a user