Lagrangian radiation models and fvDOM: Apply updates

Applying patches provided by Timo Niemi
Resolves bug-report http://www.openfoam.org/mantisbt/view.php?id=1636
This commit is contained in:
Henry Weller
2015-06-12 15:35:43 +01:00
parent eb53f9bdf0
commit e9f35a9d19
3 changed files with 36 additions and 15 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-2013 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -210,6 +210,9 @@ void Foam::ThermoParcel<ParcelType>::calc
// Sum Ni*Cpi*Wi of emission species // Sum Ni*Cpi*Wi of emission species
scalar NCpW = 0.0; scalar NCpW = 0.0;
// Store T for consistent radiation source
const scalar T0 = this->T_;
// Calculate new particle temperature // Calculate new particle temperature
this->T_ = this->T_ =
this->calcHeatTransfer this->calcHeatTransfer
@ -255,7 +258,7 @@ void Foam::ThermoParcel<ParcelType>::calc
if (td.cloud().radiation()) if (td.cloud().radiation())
{ {
const scalar ap = this->areaP(); const scalar ap = this->areaP();
const scalar T4 = pow4(this->T_); const scalar T4 = pow4(T0);
td.cloud().radAreaP()[cellI] += dt*np0*ap; td.cloud().radAreaP()[cellI] += dt*np0*ap;
td.cloud().radT4()[cellI] += dt*np0*T4; td.cloud().radT4()[cellI] += dt*np0*T4;
td.cloud().radAreaPT4()[cellI] += dt*np0*ap*T4; td.cloud().radAreaPT4()[cellI] += dt*np0*ap*T4;
@ -304,7 +307,7 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
htc = max(htc, ROOTVSMALL); htc = max(htc, ROOTVSMALL);
const scalar As = this->areaS(d); const scalar As = this->areaS(d);
scalar ap = Tc_ + Sh/As/htc; scalar ap = Tc_ + Sh/(As*htc);
scalar bp = 6.0*(Sh/As + htc*(Tc_ - T_)); scalar bp = 6.0*(Sh/As + htc*(Tc_ - T_));
if (td.cloud().radiation()) if (td.cloud().radiation())
{ {
@ -313,8 +316,11 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
const scalar sigma = physicoChemical::sigma.value(); const scalar sigma = physicoChemical::sigma.value();
const scalar epsilon = td.cloud().constProps().epsilon0(); const scalar epsilon = td.cloud().constProps().epsilon0();
ap = (ap + epsilon*Gc/(4.0*htc))/(1.0 + epsilon*sigma*pow3(T_)/htc); // Assume constant source
bp += 6.0*(epsilon*(Gc/4.0 - sigma*pow4(T_))); scalar s = epsilon*(Gc/4.0 - sigma*pow4(T_));
ap += s/htc;
bp += 6.0*s;
} }
bp /= rho*d*Cp_*(ap - T_) + ROOTVSMALL; bp /= rho*d*Cp_*(ap - T_) + ROOTVSMALL;

View File

@ -482,7 +482,8 @@ Foam::tmp<Foam::volScalarField> Foam::radiation::fvDOM::Rp() const
IOobject::NO_WRITE, IOobject::NO_WRITE,
false false
), ),
4.0*a_*physicoChemical::sigma //absorptionEmission_->a() // Only include continuous phase emission
4*absorptionEmission_->aCont()*physicoChemical::sigma
) )
); );
} }
@ -494,12 +495,15 @@ Foam::radiation::fvDOM::Ru() const
const DimensionedField<scalar, volMesh>& G = const DimensionedField<scalar, volMesh>& G =
G_.dimensionedInternalField(); G_.dimensionedInternalField();
const DimensionedField<scalar, volMesh> E = const DimensionedField<scalar, volMesh> E =
absorptionEmission_->ECont()().dimensionedInternalField(); absorptionEmission_->ECont()().dimensionedInternalField();
const DimensionedField<scalar, volMesh> a =
a_.dimensionedInternalField();
return a*G - E; // Only include continuous phase absorption
const DimensionedField<scalar, volMesh> a =
absorptionEmission_->aCont()().dimensionedInternalField();
return a*G - E;
} }

View File

@ -30,7 +30,6 @@ License
using namespace Foam::constant; using namespace Foam::constant;
const Foam::word const Foam::word
Foam::radiation::radiativeIntensityRay::intensityPrefix("ILambda"); Foam::radiation::radiativeIntensityRay::intensityPrefix("ILambda");
@ -225,9 +224,15 @@ Foam::scalar Foam::radiation::radiativeIntensityRay::correct()
+ 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) // Remove aDisp from k
+ absorptionEmission_.ECont(lambdaI)/4 (k - absorptionEmission_.aDisp(lambdaI))
*blackBody_.bLambda(lambdaI)
+ absorptionEmission_.ECont(lambdaI)
// Add EDisp term from parcels
+ absorptionEmission_.EDisp(lambdaI)
) )
); );
} }
@ -240,8 +245,14 @@ Foam::scalar Foam::radiation::radiativeIntensityRay::correct()
== ==
1.0/constant::mathematical::pi*omega_ 1.0/constant::mathematical::pi*omega_
* ( * (
k*blackBody_.bLambda(lambdaI) // Remove aDisp from k
+ absorptionEmission_.ECont(lambdaI)/4 (k - absorptionEmission_.aDisp(lambdaI))
*blackBody_.bLambda(lambdaI)
+ absorptionEmission_.ECont(lambdaI)
// Add EDisp term from parcels
+ absorptionEmission_.EDisp(lambdaI)
) )
); );
} }