ENH: Optimization of

1) fvDOM BC. greyDiffusiveRadiationMixedFvPatchScalarField.C
	2) radiationProperties and fvSolution for rays in fvDOM model
	3) radiativeIntensityRay.C using weighted residuals.
This commit is contained in:
Sergio Ferraris
2013-05-28 11:32:54 +01:00
parent 6f03f36cf1
commit 672194747e
20 changed files with 323 additions and 156 deletions

View File

@ -44,9 +44,7 @@ bool Foam::pairPatchAgglomeration::continueAgglomerating
{ {
// Check the need for further agglomeration on all processors // Check the need for further agglomeration on all processors
label localnCoarseFaces = nCoarseFaces; label localnCoarseFaces = nCoarseFaces;
// reduce(localnCoarseFaces, sumOp<label>());
bool contAgg = localnCoarseFaces >= nFacesInCoarsestLevel_; bool contAgg = localnCoarseFaces >= nFacesInCoarsestLevel_;
//reduce(contAgg, andOp<bool>());
return contAgg; return contAgg;
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -189,51 +189,40 @@ updateCoeffs()
} }
scalarField& Iw = *this; scalarField& Iw = *this;
const vectorField n(patch().Sf()/patch().magSf()); const vectorField n(patch().nf());
radiativeIntensityRay& ray = radiativeIntensityRay& ray =
const_cast<radiativeIntensityRay&>(dom.IRay(rayId)); const_cast<radiativeIntensityRay&>(dom.IRay(rayId));
ray.Qr().boundaryField()[patchI] += Iw*(n & ray.dAve()); const scalarField nAve(n & ray.dAve());
scalarField temissivity = emissivity(); ray.Qr().boundaryField()[patchI] += Iw*nAve;
const scalarField temissivity = emissivity();
scalarField& Qem = ray.Qem().boundaryField()[patchI];
scalarField& Qin = ray.Qin().boundaryField()[patchI];
const vector& myRayId = dom.IRay(rayId).d();
const scalarField& Ir = dom.Qin();
forAll(Iw, faceI) forAll(Iw, faceI)
{ {
scalar Ir = 0.0; if ((-n[faceI] & myRayId) > 0.0)
for (label rayI=0; rayI < dom.nRay(); rayI++)
{
const vector& d = dom.IRay(rayI).d();
const scalarField& IFace =
dom.IRay(rayI).ILambda(lambdaId).boundaryField()[patchI];
if ((-n[faceI] & d) < 0.0)
{
// q into the wall
const vector& dAve = dom.IRay(rayI).dAve();
Ir += IFace[faceI]*mag(n[faceI] & dAve);
}
}
const vector& d = dom.IRay(rayId).d();
if ((-n[faceI] & d) > 0.0)
{ {
// direction out of the wall // direction out of the wall
refGrad()[faceI] = 0.0; refGrad()[faceI] = 0.0;
valueFraction()[faceI] = 1.0; valueFraction()[faceI] = 1.0;
refValue()[faceI] = refValue()[faceI] =
( (
Ir*(scalar(1.0) - temissivity[faceI]) Ir[faceI]*(scalar(1.0) - temissivity[faceI])
+ temissivity[faceI]*physicoChemical::sigma.value() + temissivity[faceI]*physicoChemical::sigma.value()
* pow4(Tp[faceI]) * pow4(Tp[faceI])
)/pi; )/pi;
// Emmited heat flux from this ray direction // Emmited heat flux from this ray direction
ray.Qem().boundaryField()[patchI][faceI] = Qem[faceI] = refValue()[faceI]*nAve[faceI];
refValue()[faceI]*(n[faceI] & ray.dAve());
} }
else else
{ {
@ -243,8 +232,7 @@ updateCoeffs()
refValue()[faceI] = 0.0; //not used refValue()[faceI] = 0.0; //not used
// Incident heat flux on this ray direction // Incident heat flux on this ray direction
ray.Qin().boundaryField()[patchI][faceI] = Qin[faceI] = Iw[faceI]*nAve[faceI];
Iw[faceI]*(n[faceI] & ray.dAve());
} }
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -27,6 +27,7 @@ License
#include "absorptionEmissionModel.H" #include "absorptionEmissionModel.H"
#include "scatterModel.H" #include "scatterModel.H"
#include "constants.H" #include "constants.H"
#include "fvm.H"
using namespace Foam::constant; using namespace Foam::constant;
using namespace Foam::constant::mathematical; using namespace Foam::constant::mathematical;
@ -172,10 +173,39 @@ void Foam::radiation::fvDOM::initialise()
Info<< "fvDOM : Allocated " << IRay_.size() Info<< "fvDOM : Allocated " << IRay_.size()
<< " rays with average orientation:" << nl; << " rays with average orientation:" << nl;
forAll(IRay_, i) if (cacheDiv_)
{ {
Info<< '\t' << IRay_[i].I().name() Info<< "Caching div fvMatrix..."<< endl;
<< '\t' << IRay_[i].dAve() << nl; for (label lambdaI = 0; lambdaI < nLambda_; lambdaI++)
{
fvRayDiv_[lambdaI].setSize(nRay_);
forAll(IRay_, rayId)
{
const surfaceScalarField Ji = IRay_[rayId].dAve() & mesh_.Sf();
const volScalarField& iRayLambdaI =
IRay_[rayId].ILambda(lambdaI);
fvRayDiv_[lambdaI].set
(
rayId,
new fvScalarMatrix
(
fvm::div(Ji, iRayLambdaI, "div(Ji,Ii_h)")
)
);
}
}
}
forAll(IRay_, rayId)
{
if (omegaMax_ < IRay_[rayId].omega())
{
omegaMax_ = IRay_[rayId].omega();
}
Info<< '\t' << IRay_[rayId].I().name() << " : " << "omega : "
<< '\t' << IRay_[rayId].omega() << nl;
} }
Info<< endl; Info<< endl;
@ -194,7 +224,7 @@ Foam::radiation::fvDOM::fvDOM(const volScalarField& T)
"G", "G",
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_, mesh_,
IOobject::READ_IF_PRESENT, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
mesh_, mesh_,
@ -247,7 +277,7 @@ Foam::radiation::fvDOM::fvDOM(const volScalarField& T)
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE IOobject::AUTO_WRITE
), ),
mesh_, mesh_,
dimensionedScalar("a", dimless/dimLength, 0.0) dimensionedScalar("a", dimless/dimLength, 0.0)
@ -260,7 +290,10 @@ Foam::radiation::fvDOM::fvDOM(const volScalarField& T)
blackBody_(nLambda_, T), blackBody_(nLambda_, T),
IRay_(0), IRay_(0),
convergence_(coeffs_.lookupOrDefault<scalar>("convergence", 0.0)), convergence_(coeffs_.lookupOrDefault<scalar>("convergence", 0.0)),
maxIter_(coeffs_.lookupOrDefault<label>("maxIter", 50)) maxIter_(coeffs_.lookupOrDefault<label>("maxIter", 50)),
fvRayDiv_(nLambda_),
cacheDiv_(coeffs_.lookupOrDefault<bool>("cacheDiv", false)),
omegaMax_(0)
{ {
initialise(); initialise();
} }
@ -346,7 +379,10 @@ Foam::radiation::fvDOM::fvDOM
blackBody_(nLambda_, T), blackBody_(nLambda_, T),
IRay_(0), IRay_(0),
convergence_(coeffs_.lookupOrDefault<scalar>("convergence", 0.0)), convergence_(coeffs_.lookupOrDefault<scalar>("convergence", 0.0)),
maxIter_(coeffs_.lookupOrDefault<label>("maxIter", 50)) maxIter_(coeffs_.lookupOrDefault<label>("maxIter", 50)),
fvRayDiv_(nLambda_),
cacheDiv_(coeffs_.lookupOrDefault<bool>("cacheDiv", false)),
omegaMax_(0)
{ {
initialise(); initialise();
} }
@ -364,7 +400,6 @@ bool Foam::radiation::fvDOM::read()
if (radiationModel::read()) if (radiationModel::read())
{ {
// Only reading solution parameters - not changing ray geometry // Only reading solution parameters - not changing ray geometry
coeffs_.readIfPresent("convergence", convergence_); coeffs_.readIfPresent("convergence", convergence_);
coeffs_.readIfPresent("maxIter", maxIter_); coeffs_.readIfPresent("maxIter", maxIter_);
@ -383,19 +418,30 @@ void Foam::radiation::fvDOM::calculate()
updateBlackBodyEmission(); updateBlackBodyEmission();
// Set rays convergence false
List<bool> rayIdConv(nRay_, false);
scalar maxResidual = 0.0; scalar maxResidual = 0.0;
label radIter = 0; label radIter = 0;
do do
{ {
Info<< "Radiation solver iter: " << radIter << endl;
radIter++; radIter++;
maxResidual = 0.0;
forAll(IRay_, rayI) forAll(IRay_, rayI)
{ {
maxResidual = 0.0; if (!rayIdConv[rayI])
{
scalar maxBandResidual = IRay_[rayI].correct(); scalar maxBandResidual = IRay_[rayI].correct();
maxResidual = max(maxBandResidual, maxResidual); maxResidual = max(maxBandResidual, maxResidual);
}
Info<< "Radiation solver iter: " << radIter << endl; if (maxBandResidual < convergence_)
{
rayIdConv[rayI] = true;
}
}
}
} while (maxResidual > convergence_ && radIter < maxIter_); } while (maxResidual > convergence_ && radIter < maxIter_);
@ -433,7 +479,7 @@ Foam::radiation::fvDOM::Ru() const
const DimensionedField<scalar, volMesh> E = const DimensionedField<scalar, volMesh> E =
absorptionEmission_->ECont()().dimensionedInternalField(); absorptionEmission_->ECont()().dimensionedInternalField();
const DimensionedField<scalar, volMesh> a = const DimensionedField<scalar, volMesh> a =
a_.dimensionedInternalField(); //absorptionEmission_->aCont()() a_.dimensionedInternalField();
return a*G - E; return a*G - E;
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -30,6 +30,7 @@ Description
directions in a participating media, not including scatter. directions in a participating media, not including scatter.
Available absorption models: Available absorption models:
constantAbsorptionEmission
greyMeanAbsoprtionEmission greyMeanAbsoprtionEmission
wideBandAbsorptionEmission wideBandAbsorptionEmission
@ -37,9 +38,15 @@ Description
\verbatim \verbatim
fvDOMCoeffs fvDOMCoeffs
{ {
nPhi 1; // azimuthal angles in PI/2 on X-Y.(from Y to X) nPhi 4; // azimuthal angles in PI/2 on X-Y.
nTheta 2; // polar angles in PI (from Z to X-Y plane) //(from Y to X)
convergence 1e-4; // convergence criteria for radiation iteration nTheta 0; // polar angles in PI (from Z to X-Y plane)
convergence 1e-3; // convergence criteria for radiation
//iteration
maxIter 4; // maximum number of iterations
cacheDiv true; // cache the div of the RTE equation.
//NOTE: Caching div is "only" accurate if the upwind scheme is used
//in div(Ji,Ii_h)
} }
solverFreq 1; // Number of flow iterations per radiation iteration solverFreq 1; // Number of flow iterations per radiation iteration
@ -61,6 +68,7 @@ SourceFiles
#include "radiativeIntensityRay.H" #include "radiativeIntensityRay.H"
#include "radiationModel.H" #include "radiationModel.H"
#include "fvMatrices.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -79,6 +87,7 @@ class fvDOM
{ {
// Private data // Private data
//- Incident radiation [W/m2] //- Incident radiation [W/m2]
volScalarField G_; volScalarField G_;
@ -121,6 +130,15 @@ class fvDOM
//- Maximum number of iterations //- Maximum number of iterations
scalar maxIter_; scalar maxIter_;
//- List of cached fvMatrices for rays
List<PtrList<fvScalarMatrix> >fvRayDiv_;
//- Cache convection div matrix
bool cacheDiv_;
//- Maximum omega weight
scalar omegaMax_;
// Private Member Functions // Private Member Functions
@ -229,6 +247,19 @@ public:
//- Const access to black body //- Const access to black body
inline const blackBodyEmission& blackBody() const; inline const blackBodyEmission& blackBody() const;
//- Const access to cached fvMatrix
inline const fvScalarMatrix& fvRayDiv
(
const label lambdaI,
const label rayId
) const;
//- Caching div(Ji, Ilamda)
inline bool cacheDiv() const;
//- Return omegaMax
inline scalar omegaMax() const;
}; };

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -102,6 +102,7 @@ inline const Foam::volScalarField& Foam::radiation::fvDOM::Qem() const
return Qem_; return Qem_;
} }
inline const Foam::radiation::blackBodyEmission& inline const Foam::radiation::blackBodyEmission&
Foam::radiation::fvDOM::blackBody() const Foam::radiation::fvDOM::blackBody() const
{ {
@ -109,4 +110,26 @@ Foam::radiation::fvDOM::blackBody() const
} }
inline const Foam::fvScalarMatrix& Foam::radiation::fvDOM::fvRayDiv
(
const label rayId,
const label lambdaI
) const
{
return fvRayDiv_[lambdaI][rayId];
}
inline bool Foam::radiation::fvDOM::cacheDiv() const
{
return cacheDiv_;
}
inline Foam::scalar Foam::radiation::fvDOM::omegaMax() const
{
return omegaMax_;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -113,7 +113,8 @@ Foam::radiation::radiativeIntensityRay::radiativeIntensityRay
phi_(phi), phi_(phi),
omega_(0.0), omega_(0.0),
nLambda_(nLambda), nLambda_(nLambda),
ILambda_(nLambda) ILambda_(nLambda),
myRayId_(rayId)
{ {
scalar sinTheta = Foam::sin(theta); scalar sinTheta = Foam::sin(theta);
scalar cosTheta = Foam::cos(theta); scalar cosTheta = Foam::cos(theta);
@ -135,7 +136,6 @@ Foam::radiation::radiativeIntensityRay::radiativeIntensityRay
0.5*deltaPhi*Foam::sin(2.0*theta)*Foam::sin(deltaTheta) 0.5*deltaPhi*Foam::sin(2.0*theta)*Foam::sin(deltaTheta)
); );
autoPtr<volScalarField> IDefaultPtr; autoPtr<volScalarField> IDefaultPtr;
forAll(ILambda_, lambdaI) forAll(ILambda_, lambdaI)
@ -213,29 +213,51 @@ Foam::scalar Foam::radiation::radiativeIntensityRay::correct()
{ {
const volScalarField& k = dom_.aLambda(lambdaI); const volScalarField& k = dom_.aLambda(lambdaI);
tmp<fvScalarMatrix> IiEq;
if (!dom_.cacheDiv())
{
const surfaceScalarField Ji(dAve_ & mesh_.Sf()); const surfaceScalarField Ji(dAve_ & mesh_.Sf());
fvScalarMatrix IiEq IiEq =
( (
fvm::div(Ji, ILambda_[lambdaI], "div(Ji,Ii_h)") fvm::div(Ji, ILambda_[lambdaI], "div(Ji,Ii_h)")
+ fvm::Sp(k*omega_, ILambda_[lambdaI]) + fvm::Sp(k*omega_, ILambda_[lambdaI])
== ==
1.0/constant::mathematical::pi*omega_ 1.0/constant::mathematical::pi*omega_
*( * (
k*blackBody_.bLambda(lambdaI) k*blackBody_.bLambda(lambdaI)
+ absorptionEmission_.ECont(lambdaI)/4 + absorptionEmission_.ECont(lambdaI)/4
) )
); );
}
IiEq.relax(); else
{
scalar eqnResidual = solve IiEq =
( (
IiEq, dom_.fvRayDiv(myRayId_, lambdaI)
mesh_.solver("Ii") + fvm::Sp(k*omega_, ILambda_[lambdaI])
).initialResidual(); ==
1.0/constant::mathematical::pi*omega_
* (
k*blackBody_.bLambda(lambdaI)
+ absorptionEmission_.ECont(lambdaI)/4
)
);
}
maxResidual = max(eqnResidual, maxResidual); IiEq().relax();
const solverPerformance ILambdaSol = solve
(
IiEq(),
mesh_.solver("Ii")
);
const scalar initialRes =
ILambdaSol.initialResidual()*omega_/dom_.omegaMax();
maxResidual = max(initialRes, maxResidual);
} }
return maxResidual; return maxResidual;

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -38,6 +38,7 @@ SourceFiles
#include "absorptionEmissionModel.H" #include "absorptionEmissionModel.H"
#include "blackBodyEmission.H" #include "blackBodyEmission.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
@ -111,6 +112,9 @@ private:
//- Global ray id - incremented in constructor //- Global ray id - incremented in constructor
static label rayId; static label rayId;
//- My ray Id
label myRayId_;
// Private Member Functions // Private Member Functions
@ -209,6 +213,7 @@ public:
//- Return the radiative intensity for a given wavelength //- Return the radiative intensity for a given wavelength
inline const volScalarField& ILambda(const label lambdaI) const; inline const volScalarField& ILambda(const label lambdaI) const;
}; };

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -252,8 +252,8 @@ void Foam::radiation::absorptionEmissionModel::correct
PtrList<volScalarField>& aj PtrList<volScalarField>& aj
) const ) const
{ {
a.internalField() = this->a(); a = this->a();
aj[0].internalField() = a.internalField(); aj[0] = a;
} }

View File

@ -0,0 +1,41 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object G;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 0 -3 0 0 0 0];
internalField uniform 0;
boundaryField
{
".*"
{
type MarshakRadiation;
T T;
emissivityMode lookup;
emissivity uniform 1.0;
value uniform 0;
}
"(region0_to.*)"
{
type MarshakRadiation;
T T;
emissivityMode solidRadiation;
value uniform 0;
}
}
// ************************************************************************* //

View File

@ -24,22 +24,24 @@ fvDOMCoeffs
{ {
nPhi 3; // azimuthal angles in PI/2 on X-Y.(from Y to X) nPhi 3; // azimuthal angles in PI/2 on X-Y.(from Y to X)
nTheta 6; // polar angles in PI (from Z to X-Y plane) nTheta 6; // polar angles in PI (from Z to X-Y plane)
convergence 1e-4; // convergence criteria for radiation iteration convergence 0.05; // convergence criteria for radiation iteration
maxIter 2; // maximum number of iterations maxIter 3; // maximum number of iterations
cacheDiv true; // cache the div of the RTE equation.
// NOTE: Caching div is "only" accurate if the upwind scheme is used in
// div(Ji,Ii_h)
} }
// Number of flow iterations per radiation iteration // Number of flow iterations per radiation iteration
solverFreq 10; solverFreq 10;
absorptionEmissionModel constantAbsorptionEmission; absorptionEmissionModel constantAbsorptionEmission;
//absorptionEmissionModel greyMeanAbsorptionEmission;
constantAbsorptionEmissionCoeffs constantAbsorptionEmissionCoeffs
{ {
absorptivity absorptivity [ 0 -1 0 0 0 0 0 ] 0.01; absorptivity absorptivity [ m^-1 ] 0.01;
emissivity emissivity [ 0 -1 0 0 0 0 0 ] 0.01; emissivity emissivity [ m^-1 ] 0.01;
E E [ 1 -1 -3 0 0 0 0 ] 0; E E [ kg m^-1 s^-3 ] 0;
}
greyMeanAbsorptionEmissionCoeffs greyMeanAbsorptionEmissionCoeffs
{ {
@ -49,7 +51,7 @@ greyMeanAbsorptionEmissionCoeffs
CO2 CO2
{ {
Tcommon 300; //Common Temp Tcommon 200; //Common Temp
invTemp true; //Is the polynomio using inverse temperature. invTemp true; //Is the polynomio using inverse temperature.
Tlow 200; //Low Temp Tlow 200; //Low Temp
Thigh 2500; //High Temp Thigh 2500; //High Temp
@ -77,7 +79,7 @@ greyMeanAbsorptionEmissionCoeffs
H2O H2O
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;
@ -104,7 +106,7 @@ greyMeanAbsorptionEmissionCoeffs
C3H8//CH4 C3H8//CH4
{ {
Tcommon 300; Tcommon 200;
Tlow 200; Tlow 200;
Thigh 2000; Thigh 2000;
invTemp false; invTemp false;
@ -131,7 +133,7 @@ greyMeanAbsorptionEmissionCoeffs
O2 O2
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;
@ -159,7 +161,7 @@ greyMeanAbsorptionEmissionCoeffs
N2 N2
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;

View File

@ -16,7 +16,7 @@ FoamFile
application fireFoam; application fireFoam;
startFrom startTime; startFrom latestTime;
startTime 0; startTime 0;
@ -28,11 +28,11 @@ deltaT 0.03;
writeControl adjustableRunTime; writeControl adjustableRunTime;
writeInterval 1; writeInterval 0.5;
purgeWrite 0; purgeWrite 0;
writeFormat ascii; writeFormat binary;
writePrecision 12; writePrecision 12;

View File

@ -34,7 +34,7 @@ solvers
p_rgh p_rgh
{ {
solver GAMG; solver GAMG;
tolerance 1e-5; tolerance 1e-7;
relTol 0.01; relTol 0.01;
smoother GaussSeidel; smoother GaussSeidel;
cacheAgglomeration true; cacheAgglomeration true;
@ -45,28 +45,25 @@ solvers
p_rghFinal p_rghFinal
{ {
solver GAMG; $p_rgh;
tolerance 1e-6; tolerance 1e-7;
relTol 0; relTol 0;
smoother GaussSeidel;
cacheAgglomeration true;
nCellsInCoarsestLevel 10;
agglomerator faceAreaPair;
mergeLevels 1;
}; };
"(U|k)" "(U|Yi|k|h|omega)"
{ {
solver PBiCG; solver PBiCG;
preconditioner DILU; preconditioner DILU;
tolerance 1e-6; tolerance 1e-7;
relTol 0.01; relTol 0.1;
nSweeps 1;
}; };
"(U|k)Final" "(U|Yi|k|h|omega)Final"
{ {
$U; $U;
tolerance 1e-7;
relTol 0; relTol 0;
}; };
@ -84,18 +81,21 @@ solvers
solver GAMG; solver GAMG;
tolerance 1e-4; tolerance 1e-4;
relTol 0; relTol 0;
smoother DILU; smoother symGaussSeidel;
cacheAgglomeration true; cacheAgglomeration true;
nCellsInCoarsestLevel 10; nCellsInCoarsestLevel 10;
agglomerator faceAreaPair; agglomerator faceAreaPair;
mergeLevels 1; mergeLevels 1;
maxIter 1;
nPreSweeps 0;
nPostSweeps 1;
} }
G "(G)Final"
{ {
solver PCG; solver PCG;
preconditioner DIC; preconditioner DIC;
tolerance 1e-06; tolerance 1e-04;
relTol 0; relTol 0;
} }
@ -104,8 +104,8 @@ solvers
PIMPLE PIMPLE
{ {
momentumPredictor yes; momentumPredictor yes;
nOuterCorrectors 2; nOuterCorrectors 1;
nCorrectors 1; nCorrectors 3;
nNonOrthogonalCorrectors 0; nNonOrthogonalCorrectors 0;
} }

View File

@ -21,8 +21,12 @@ fvDOMCoeffs
{ {
nPhi 4; // azimuthal angles in PI/2 on X-Y.(from Y to X) nPhi 4; // azimuthal angles in PI/2 on X-Y.(from Y to X)
nTheta 0; // polar angles in PI (from Z to X-Y plane) nTheta 0; // polar angles in PI (from Z to X-Y plane)
convergence 1e-3; // convergence criteria for radiation iteration convergence 1e-2; // convergence criteria for radiation iteration
maxIter 1; // maximum number of iterations maxIter 4; // maximum number of iterations
cacheDiv true; // cache the div of the RTE equation.
// NOTE: Caching div is "only" accurate if the upwind scheme is used in
// div(Ji,Ii_h)
} }
// Number of flow iterations per radiation iteration // Number of flow iterations per radiation iteration
@ -32,9 +36,9 @@ absorptionEmissionModel greyMeanAbsorptionEmission;
constantAbsorptionEmissionCoeffs constantAbsorptionEmissionCoeffs
{ {
absorptivity absorptivity [ 0 -1 0 0 0 0 0 ] 0.1; absorptivity absorptivity [ m^-1 ] 0.01;
emissivity emissivity [ 0 -1 0 0 0 0 0 ] 0.1; emissivity emissivity [ m^-1 ] 0.01;
E E [ 1 -1 -3 0 0 0 0 ] 0; E E [ kg m^-1 s^-3 ] 0;
} }
greyMeanAbsorptionEmissionCoeffs greyMeanAbsorptionEmissionCoeffs
@ -45,7 +49,7 @@ greyMeanAbsorptionEmissionCoeffs
CO2 CO2
{ {
Tcommon 300; //Common Temp Tcommon 200; //Common Temp
invTemp true; //Is the polynomio using inverse temperature. invTemp true; //Is the polynomio using inverse temperature.
Tlow 200; //Low Temp Tlow 200; //Low Temp
Thigh 2500; //High Temp Thigh 2500; //High Temp
@ -73,7 +77,7 @@ greyMeanAbsorptionEmissionCoeffs
H2O H2O
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;
@ -100,7 +104,7 @@ greyMeanAbsorptionEmissionCoeffs
CH4 CH4
{ {
Tcommon 300; Tcommon 200;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;
invTemp false; invTemp false;
@ -127,7 +131,7 @@ greyMeanAbsorptionEmissionCoeffs
O2 O2
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;
@ -155,7 +159,7 @@ greyMeanAbsorptionEmissionCoeffs
N2 N2
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;

View File

@ -48,8 +48,6 @@ runTimeModifiable yes;
adjustTimeStep yes; adjustTimeStep yes;
maxCo 0.25; maxCo 0.5;
maxDeltaT 0.1;
// ************************************************************************* // // ************************************************************************* //

View File

@ -74,19 +74,22 @@ solvers
{ {
solver GAMG; solver GAMG;
tolerance 1e-4; tolerance 1e-4;
relTol 0; relTol 0.1;
smoother DILU; smoother symGaussSeidel;
cacheAgglomeration true; cacheAgglomeration true;
nCellsInCoarsestLevel 10; nCellsInCoarsestLevel 10;
agglomerator faceAreaPair; agglomerator faceAreaPair;
mergeLevels 1; mergeLevels 1;
maxIter 3;
nPreSweeps 0;
nPostSweeps 1;
} }
G G
{ {
solver PCG; solver PCG;
preconditioner DIC; preconditioner DIC;
tolerance 1e-06; tolerance 1e-04;
relTol 0; relTol 0;
} }
@ -108,7 +111,7 @@ relaxationFactors
equations equations
{ {
"(U|k).*" 1; "(U|k).*" 1;
"(C3H8|O2|H2O|CO2|h).*" 0.9; "(C3H8|O2|H2O|CO2|h).*" 1;
} }
} }

View File

@ -25,7 +25,7 @@ boundaryField
type greyDiffusiveRadiation; type greyDiffusiveRadiation;
T T; T T;
emissivityMode lookup; emissivityMode lookup;
emissivity uniform 1.0; emissivity uniform 1;
value uniform 0; value uniform 0;
} }
} }

View File

@ -22,8 +22,12 @@ fvDOMCoeffs
{ {
nPhi 2; // azimuthal angles in PI/2 on X-Y.(from Y to X) nPhi 2; // azimuthal angles in PI/2 on X-Y.(from Y to X)
nTheta 2; // polar angles in PI (from Z to X-Y plane) nTheta 2; // polar angles in PI (from Z to X-Y plane)
convergence 1e-3; // convergence criteria for radiation iteration convergence 1e-1; // convergence criteria for radiation iteration
maxIter 10; // maximum number of iterations maxIter 1; // maximum number of iterations
cacheDiv true; // cache the div of the RTE equation.
// NOTE: Caching div is "only" accurate if the upwind scheme is used in
// div(Ji,Ii_h)
} }
// Number of flow iterations per radiation iteration // Number of flow iterations per radiation iteration
@ -33,9 +37,9 @@ absorptionEmissionModel greyMeanAbsorptionEmission;
constantAbsorptionEmissionCoeffs constantAbsorptionEmissionCoeffs
{ {
absorptivity absorptivity [ 0 -1 0 0 0 0 0 ] 0.01; absorptivity absorptivity [ m^-1 ] 0.01;
emissivity emissivity [ 0 -1 0 0 0 0 0 ] 0.01; emissivity emissivity [ m^-1 ] 0.01;
E E [ 1 -1 -3 0 0 0 0 ] 0; E E [ kg m^-1 s^-3 ] 0;
} }
greyMeanAbsorptionEmissionCoeffs greyMeanAbsorptionEmissionCoeffs
@ -46,7 +50,7 @@ greyMeanAbsorptionEmissionCoeffs
CO2 CO2
{ {
Tcommon 300; //Common Temp Tcommon 200; //Common Temp
invTemp true; //Is the polynomio using inverse temperature. invTemp true; //Is the polynomio using inverse temperature.
Tlow 200; //Low Temp Tlow 200; //Low Temp
Thigh 2500; //High Temp Thigh 2500; //High Temp
@ -74,7 +78,7 @@ greyMeanAbsorptionEmissionCoeffs
H2O H2O
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;
@ -101,7 +105,7 @@ greyMeanAbsorptionEmissionCoeffs
CH4 CH4
{ {
Tcommon 300; Tcommon 200;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;
invTemp false; invTemp false;
@ -128,7 +132,7 @@ greyMeanAbsorptionEmissionCoeffs
O2 O2
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;
@ -156,7 +160,7 @@ greyMeanAbsorptionEmissionCoeffs
N2 N2
{ {
Tcommon 300; Tcommon 200;
invTemp true; invTemp true;
Tlow 200; Tlow 200;
Thigh 2500; Thigh 2500;

View File

@ -22,13 +22,13 @@ startTime 0.0;
stopAt endTime; stopAt endTime;
endTime 2.75; endTime 0.75;
deltaT 0.001; deltaT 0.001;
writeControl adjustableRunTime; writeControl adjustableRunTime;
writeInterval 0.05; writeInterval 0.5;
purgeWrite 0; purgeWrite 0;
@ -48,7 +48,7 @@ runTimeModifiable yes;
adjustTimeStep yes; adjustTimeStep yes;
maxCo 0.2; maxCo 0.5;
maxDeltaT 0.1; maxDeltaT 0.1;

View File

@ -66,12 +66,14 @@ solvers
solver GAMG; solver GAMG;
tolerance 1e-4; tolerance 1e-4;
relTol 0; relTol 0;
smoother DILU; smoother symGaussSeidel;
cacheAgglomeration true; cacheAgglomeration true;
nCellsInCoarsestLevel 10; nCellsInCoarsestLevel 10;
agglomerator faceAreaPair; agglomerator faceAreaPair;
mergeLevels 1; mergeLevels 1;
maxIter 20; maxIter 1;
nPreSweeps 0;
nPostSweeps 1;
} }
G G
@ -88,7 +90,7 @@ PIMPLE
{ {
momentumPredictor yes; momentumPredictor yes;
nOuterCorrectors 1; nOuterCorrectors 1;
nCorrectors 2; nCorrectors 3;
nNonOrthogonalCorrectors 0; nNonOrthogonalCorrectors 0;
} }