radiationModels: Correct handling of ECont and make P1 and fvDOM consistent

Patch provided by Timo Niemi
Resolved bug-report http://www.openfoam.org/mantisbt/view.php?id=1636

This correction corresponds to option 3 of the options proposed by Timo:

Define both ECont and EDisp to be the total emission per surface area,
apply multiplication by 4 in cloudAbsorptionEmission model (the only
place that uses EDisp?). Do not multiply E in P1 at all, divide both
ECont and EDisp in fvDOM.
This commit is contained in:
Henry Weller
2015-12-01 16:20:37 +00:00
parent ba2f46f12a
commit 6ed6b93c34
3 changed files with 14 additions and 18 deletions

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-2015 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -24,9 +24,8 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "cloudAbsorptionEmission.H" #include "cloudAbsorptionEmission.H"
#include "addToRunTimeSelectionTable.H"
#include "thermoCloud.H" #include "thermoCloud.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -159,7 +158,8 @@ Foam::radiation::cloudAbsorptionEmission::EDisp(const label bandI) const
tE() += tc.Ep(); tE() += tc.Ep();
} }
return tE; // Total emission is 4 times the projected emission
return 4*tE;
} }

View File

@ -239,7 +239,7 @@ void Foam::radiation::P1::calculate()
fvm::laplacian(gamma, G_) fvm::laplacian(gamma, G_)
- fvm::Sp(a_, G_) - fvm::Sp(a_, G_)
== ==
- 4.0*(e_*physicoChemical::sigma*pow4(T_) + E_) - 4.0*(e_*physicoChemical::sigma*pow4(T_) ) - E_
); );
// Calculate radiative heat flux on boundaries. // Calculate radiative heat flux on boundaries.
@ -286,7 +286,7 @@ Foam::radiation::P1::Ru() const
const DimensionedField<scalar, volMesh> a = const DimensionedField<scalar, volMesh> a =
absorptionEmission_->aCont()().dimensionedInternalField(); absorptionEmission_->aCont()().dimensionedInternalField();
return a*G - 4.0*E; return a*G - E;
} }

View File

@ -30,8 +30,10 @@ License
using namespace Foam::constant; using namespace Foam::constant;
const Foam::word const Foam::word Foam::radiation::radiativeIntensityRay::intensityPrefix
Foam::radiation::radiativeIntensityRay::intensityPrefix("ILambda"); (
"ILambda"
);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
@ -148,7 +150,7 @@ Foam::radiation::radiativeIntensityRay::radiativeIntensityRay
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
); );
// check if field exists and can be read // Check if field exists and can be read
if (IHeader.headerOk()) if (IHeader.headerOk())
{ {
ILambda_.set ILambda_.set
@ -203,7 +205,7 @@ Foam::radiation::radiativeIntensityRay::~radiativeIntensityRay()
Foam::scalar Foam::radiation::radiativeIntensityRay::correct() Foam::scalar Foam::radiation::radiativeIntensityRay::correct()
{ {
// reset boundary heat flux to zero // Reset boundary heat flux to zero
Qr_.boundaryField() = 0.0; Qr_.boundaryField() = 0.0;
scalar maxResidual = -GREAT; scalar maxResidual = -GREAT;
@ -229,10 +231,7 @@ Foam::scalar Foam::radiation::radiativeIntensityRay::correct()
(k - absorptionEmission_.aDisp(lambdaI)) (k - absorptionEmission_.aDisp(lambdaI))
*blackBody_.bLambda(lambdaI) *blackBody_.bLambda(lambdaI)
+ absorptionEmission_.ECont(lambdaI) + absorptionEmission_.E(lambdaI)/4
// Add EDisp term from parcels
+ absorptionEmission_.EDisp(lambdaI)
) )
); );
} }
@ -249,10 +248,7 @@ Foam::scalar Foam::radiation::radiativeIntensityRay::correct()
(k - absorptionEmission_.aDisp(lambdaI)) (k - absorptionEmission_.aDisp(lambdaI))
*blackBody_.bLambda(lambdaI) *blackBody_.bLambda(lambdaI)
+ absorptionEmission_.ECont(lambdaI) + absorptionEmission_.E(lambdaI)/4
// Add EDisp term from parcels
+ absorptionEmission_.EDisp(lambdaI)
) )
); );
} }