solidChemistryModel is not implemented in a general way but specialised to form the basis of the highly specific pyrolysis mode. The handling of reactions is hard-coded for forward reactions only, the Jacobian was present but incomplete so any ODE solvers requiring the Jacobian would either fail, diverge or produce incorrect results. It is not clear if many or any parts of the solidChemistryModel are correct, in particular there is no handling for the solid surface area per unit volume. After a lot of refactoring work it has become clear that solidChemistryModel needs a complete rewrite and can benefit from all the recent development work done on the now more general StandardChemistryModel.
142 lines
2.7 KiB
C
142 lines
2.7 KiB
C
Info<< "Reading thermophysical properties\n" << endl;
|
|
autoPtr<psiReactionThermo> pThermo(psiReactionThermo::New(mesh));
|
|
psiReactionThermo& thermo = pThermo();
|
|
thermo.validate(args.executable(), "h", "e");
|
|
|
|
SLGThermo slgThermo(mesh, thermo);
|
|
|
|
basicSpecieMixture& composition = thermo.composition();
|
|
PtrList<volScalarField>& Y = composition.Y();
|
|
|
|
const word inertSpecie(thermo.lookup("inertSpecie"));
|
|
if (!composition.species().found(inertSpecie))
|
|
{
|
|
FatalIOErrorIn(args.executable().c_str(), thermo)
|
|
<< "Inert specie " << inertSpecie << " not found in available species "
|
|
<< composition.species()
|
|
<< exit(FatalIOError);
|
|
}
|
|
|
|
Info<< "Creating field rho\n" << endl;
|
|
volScalarField rho
|
|
(
|
|
IOobject
|
|
(
|
|
"rho",
|
|
runTime.timeName(),
|
|
mesh,
|
|
IOobject::NO_READ,
|
|
IOobject::AUTO_WRITE
|
|
),
|
|
thermo.rho()
|
|
);
|
|
|
|
volScalarField& p = thermo.p();
|
|
|
|
Info<< "\nReading field U\n" << endl;
|
|
volVectorField U
|
|
(
|
|
IOobject
|
|
(
|
|
"U",
|
|
runTime.timeName(),
|
|
mesh,
|
|
IOobject::MUST_READ,
|
|
IOobject::AUTO_WRITE
|
|
),
|
|
mesh
|
|
);
|
|
|
|
#include "compressibleCreatePhi.H"
|
|
|
|
#include "createMRF.H"
|
|
|
|
|
|
Info<< "Creating turbulence model\n" << endl;
|
|
autoPtr<compressible::turbulenceModel> turbulence
|
|
(
|
|
compressible::turbulenceModel::New
|
|
(
|
|
rho,
|
|
U,
|
|
phi,
|
|
thermo
|
|
)
|
|
);
|
|
|
|
Info<< "Creating combustion model\n" << endl;
|
|
autoPtr<CombustionModel<psiReactionThermo>> combustion
|
|
(
|
|
CombustionModel<psiReactionThermo>::New(thermo, turbulence())
|
|
);
|
|
|
|
|
|
#include "readGravitationalAcceleration.H"
|
|
#include "readhRef.H"
|
|
#include "gh.H"
|
|
#include "readpRef.H"
|
|
|
|
volScalarField p_rgh
|
|
(
|
|
IOobject
|
|
(
|
|
"p_rgh",
|
|
runTime.timeName(),
|
|
mesh,
|
|
IOobject::MUST_READ,
|
|
IOobject::AUTO_WRITE
|
|
),
|
|
mesh
|
|
);
|
|
|
|
mesh.setFluxRequired(p_rgh.name());
|
|
|
|
#include "phrghEqn.H"
|
|
|
|
|
|
multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
|
|
|
|
forAll(Y, i)
|
|
{
|
|
fields.add(Y[i]);
|
|
}
|
|
fields.add(thermo.he());
|
|
|
|
IOdictionary additionalControlsDict
|
|
(
|
|
IOobject
|
|
(
|
|
"additionalControls",
|
|
runTime.constant(),
|
|
mesh,
|
|
IOobject::MUST_READ_IF_MODIFIED,
|
|
IOobject::NO_WRITE
|
|
)
|
|
);
|
|
|
|
Switch solvePrimaryRegion
|
|
(
|
|
additionalControlsDict.lookup("solvePrimaryRegion")
|
|
);
|
|
|
|
Info<< "Creating field dpdt\n" << endl;
|
|
volScalarField dpdt
|
|
(
|
|
IOobject
|
|
(
|
|
"dpdt",
|
|
runTime.timeName(),
|
|
mesh
|
|
),
|
|
mesh,
|
|
dimensionedScalar(p.dimensions()/dimTime, 0)
|
|
);
|
|
|
|
Info<< "Creating field kinetic energy K\n" << endl;
|
|
volScalarField K("K", 0.5*magSqr(U));
|
|
|
|
#include "createClouds.H"
|
|
#include "createSurfaceFilmModel.H"
|
|
#include "createRadiationModel.H"
|
|
#include "createFvOptions.H"
|