star-gf

Compute Gebhart factors
git clone git://git.meso-star.fr/star-gf.git
Log | Files | Refs | README | LICENSE

commit 30986fe80dc77b1cd2f83dffcc7a1fff18cfc90e
parent 1005d01b8e1702c73029060ca9599b724c03daa4
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 22 Jul 2015 15:38:01 +0200

Fix a bug in the gebhart radiative path realisation

The radiative path transmissivity was compared to the emissivity of the
hit material to define if the russian roulette was tested. This
transmissivity is now compared to an empirical threshold (1.e-6).

Diffstat:
Msrc/sgf.c | 12+++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/sgf.c b/src/sgf.c @@ -60,6 +60,7 @@ gebhart_radiative_path double emissivity; double reflectivity; double specularity; + const double trans_min = 1.e-6; size_t iprim, iprim_from; float vec0[3], vec1[3]; float triangle[3][3]; @@ -121,12 +122,12 @@ gebhart_radiative_path reflectivity = ctx->get_material_property (ctx->material, SGF_MATERIAL_REFLECTIVITY, iprim, ctx->spectral_band_id); - if(transmissivity > emissivity) { + if(transmissivity > trans_min) { const double weight = transmissivity * emissivity; result[iprim].radiative_flux += weight; result[iprim].sqr_radiative_flux += weight * weight; } else { - /* Russiang roulette */ + /* Russian roulette */ if(ssp_rng_canonical(rng) < emissivity) { result[iprim].radiative_flux += transmissivity; result[iprim].sqr_radiative_flux += transmissivity * transmissivity; @@ -149,12 +150,13 @@ gebhart_radiative_path * triangle plane */ ctx->get_triangle(ctx->geometry, iprim, triangle); } -#if 0 && !defined(NDEBUG) /* FIXME */ +#ifndef NDEBUG { /* Ensure the energy conservation property */ double sum_radiative_flux = 0.0; - FOR_EACH(iprim, 0, ctx->primitives_count) + FOR_EACH(iprim, 0, ctx->primitives_count) { sum_radiative_flux += result[iprim].radiative_flux; - ASSERT(eq_eps(sum_radiative_flux, 1.0, 1.e-3)); + } + ASSERT(eq_eps(sum_radiative_flux, 1.0, 1.e-6)); } #endif return RES_OK;