mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
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:
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user