From cdc2a2e13a56c209a68e468e4b5f4920c0804d3f Mon Sep 17 00:00:00 2001 From: Sergio Ferraris <sergio@alex.opencfd.co.uk> Date: Fri, 16 Aug 2013 10:18:08 +0100 Subject: [PATCH] Optimization of greyDiffusiveRadiationMixed and wideBandDiffusiveRadiationMixed to avoid lagging the calculation of Qin. --- ...iffusiveRadiationMixedFvPatchScalarField.C | 9 ++++- ...iffusiveRadiationMixedFvPatchScalarField.C | 39 +++++++++++-------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C index 7237f30307f..e15fea1f66b 100644 --- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C +++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C @@ -197,7 +197,14 @@ updateCoeffs() const vector& myRayId = dom.IRay(rayId).d(); - const scalarField& Ir = dom.Qin().boundaryField()[patchI]; + // Use updated Ir while iterating over rays + // avoids to used lagged Qin + scalarField Ir = dom.IRay(0).Qin().boundaryField()[patchI]; + + for (label rayI=1; rayI < dom.nRay(); rayI++) + { + Ir += dom.IRay(rayI).Qin().boundaryField()[patchI]; + } forAll(Iw, faceI) { diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C index e6e7b4b2259..0bce57efeb2 100644 --- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C +++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -187,7 +187,9 @@ updateCoeffs() radiativeIntensityRay& ray = const_cast<radiativeIntensityRay&>(dom.IRay(rayId)); - ray.Qr().boundaryField()[patchI] += Iw*(n & ray.dAve()); + const scalarField nAve(n & ray.dAve()); + + ray.Qr().boundaryField()[patchI] += Iw*nAve; const scalarField Eb ( @@ -196,23 +198,20 @@ updateCoeffs() scalarField temissivity = emissivity(); - forAll(Iw, faceI) - { - scalar Ir = 0.0; - for (label rayI=0; rayI < dom.nRay(); rayI++) - { - const vector& d = dom.IRay(rayI).d(); + scalarField& Qem = ray.Qem().boundaryField()[patchI]; + scalarField& Qin = ray.Qin().boundaryField()[patchI]; - const scalarField& IFace = - dom.IRay(rayI).ILambda(lambdaId).boundaryField()[patchI]; + // Use updated Ir while iterating over rays + // avoids to used lagged Qin + scalarField Ir = dom.IRay(0).Qin().boundaryField()[patchI]; - if ((-n[faceI] & d) < 0.0) // qin into the wall - { - const vector& dAve = dom.IRay(rayI).dAve(); - Ir = Ir + IFace[faceI]*mag(n[faceI] & dAve); - } - } + for (label rayI=1; rayI < dom.nRay(); rayI++) + { + Ir += dom.IRay(rayI).Qin().boundaryField()[patchI]; + } + forAll(Iw, faceI) + { const vector& d = dom.IRay(rayId).d(); if ((-n[faceI] & d) > 0.0) @@ -222,9 +221,12 @@ updateCoeffs() valueFraction()[faceI] = 1.0; refValue()[faceI] = ( - Ir*(1.0 - temissivity[faceI]) + Ir[faceI]*(1.0 - temissivity[faceI]) + temissivity[faceI]*Eb[faceI] )/pi; + + // Emmited heat flux from this ray direction + Qem[faceI] = refValue()[faceI]*nAve[faceI]; } else { @@ -232,6 +234,9 @@ updateCoeffs() valueFraction()[faceI] = 0.0; refGrad()[faceI] = 0.0; refValue()[faceI] = 0.0; //not used + + // Incident heat flux on this ray direction + Qin[faceI] = Iw[faceI]*nAve[faceI]; } } -- GitLab