solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

commit 3177f7db1a97690b506d07d781e6aabd0dcdffea
parent 5d3819e5511d23327c30ef11eda00736899e3443
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Fri, 24 Mar 2017 14:10:20 +0100

Fix some issues related to cos factor.

Diffstat:
Msrc/ssol_solver.c | 11+++++------
Msrc/test_ssol_solver4.c | 1-
Msrc/test_ssol_solver5.c | 1-
Msrc/test_ssol_solver8.c | 5++---
Msrc/test_ssol_solver9.c | 5++---
5 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/src/ssol_solver.c b/src/ssol_solver.c @@ -224,7 +224,6 @@ point_init f3_normalize(attr.value, attr.value); d3_set_f3(pt->N, attr.value); - pt->cos_factor = cos_sun; /* Retrieve the sampled instance and shaded shape */ pt->inst = *htable_instance_find(&scn->instances_samp, &pt->prim.inst_id); id = *htable_shaded_shape_find @@ -243,16 +242,16 @@ point_init * quadric surface */ punched_shape_project_point (pt->sshape->shape, pt->inst->transform, pt->pos, pt->pos, tmp_n); - surface_proxy_cos = d3_dot(pt->N, tmp_n); - surface_sun_cos = d3_dot(tmp_n, pt->dir); - cos_ratio = fabs(surface_sun_cos / surface_proxy_cos); + surface_proxy_cos = fabs(d3_dot(pt->N, tmp_n)); + surface_sun_cos = fabs(d3_dot(tmp_n, pt->dir)); + cos_ratio = surface_sun_cos / surface_proxy_cos; d3_set(pt->N, tmp_n); pt->weight = scn->sun->dni * sampled_area_proxy * cos_ratio; - pt->cos_loss = scn->sun->dni * sampled_area_proxy * (1 - proxy_sun_cos); + pt->cos_factor = surface_sun_cos; } else { double surface_sun_cos = fabs(d3_dot(pt->N, pt->dir)); pt->weight = scn->sun->dni * sampled_area_proxy * surface_sun_cos; - pt->cos_loss = scn->sun->dni * sampled_area_proxy * (1 - surface_sun_cos); + pt->cos_factor = surface_sun_cos; } pt->absorptivity_loss = pt->reflectivity_loss = 0; diff --git a/src/test_ssol_solver4.c b/src/test_ssol_solver4.c @@ -167,7 +167,6 @@ main(int argc, char** argv) printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); CHECK(eq_eps(mc_global.missing.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); CHECK(GET_MC_RCV(estimator, target1, SSOL_FRONT, &mc_rcv), RES_OK); printf("Ir(target1) = %g +/- %g\n", mc_rcv.integrated_irradiance.E, mc_rcv.integrated_irradiance.SE); diff --git a/src/test_ssol_solver5.c b/src/test_ssol_solver5.c @@ -155,7 +155,6 @@ main(int argc, char** argv) printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); CHECK(eq_eps(mc_global.missing.E, 0, 1e-4), 1); - CHECK(eq_eps(mc_global.cos_factor.E, COS, 1e-4), 1); CHECK(ssol_estimator_get_mc_receiver (estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); printf("Ir(target) = %g +/- %g\n", diff --git a/src/test_ssol_solver8.c b/src/test_ssol_solver8.c @@ -144,17 +144,16 @@ main(int argc, char** argv) #define GET_MC_RCV ssol_estimator_get_mc_receiver CHECK(ssol_solve(scene, rng, N__, 0, tmp, &estimator), RES_OK); CHECK(ssol_instance_get_id(target, &r_id), RES_OK); - CHECK(ssol_estimator_get_count(estimator, &count), RES_OK); + CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); CHECK(count, N__); CHECK(fclose(tmp), 0); CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); CHECK(count, 0); #define S (sqrt(2) * X_SZ * Y_SZ) CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); - printf("Cos = %g +/- %g\n", mc_global.cos_loss.E, mc_global.cos_loss.SE); + printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); printf("Shadows = %g +/- %g\n", mc_global.shadowed.E, mc_global.shadowed.SE); printf("Missing = %g +/- %g\n", mc_global.missing.E, mc_global.missing.SE); - CHECK(eq_eps(mc_global.cos_loss.E, 0, 1e-4), 1); CHECK(eq_eps(mc_global.shadowed.E, 0, 1e-4), 1); CHECK(eq_eps(mc_global.missing.E, 0, 1e-4), 1); CHECK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv), RES_OK); diff --git a/src/test_ssol_solver9.c b/src/test_ssol_solver9.c @@ -138,7 +138,7 @@ main(int argc, char** argv) #define GET_MC_RCV ssol_estimator_get_mc_receiver CHECK(ssol_solve(scene, rng, N__, 0, tmp, &estimator), RES_OK); CHECK(ssol_instance_get_id(target, &r_id), RES_OK); - CHECK(ssol_estimator_get_count(estimator, &count), RES_OK); + CHECK(ssol_estimator_get_realisation_count(estimator, &count), RES_OK); CHECK(count, N__); CHECK(fclose(tmp), 0); CHECK(ssol_estimator_get_failed_count(estimator, &count), RES_OK); @@ -146,10 +146,9 @@ main(int argc, char** argv) #define DNI_TGT_S (DNI * TGT_X * TGT_Y) #define DNI_S (DNI * SZ * SZ) CHECK(ssol_estimator_get_mc_global(estimator, &mc_global), RES_OK); - printf("Cos = %g +/- %g\n", mc_global.cos_loss.E, mc_global.cos_loss.SE); + printf("Cos = %g +/- %g\n", mc_global.cos_factor.E, mc_global.cos_factor.SE); printf("Shadows = %g +/- %g\n", mc_global.shadowed.E, mc_global.shadowed.SE); printf("Missing = %g +/- %g\n", mc_global.missing.E, mc_global.missing.SE); - /* CHECK(eq_eps(mc_global.cos_loss.E, 4 * DNI_S, DNI_S * 1e-4), 1); */ CHECK(eq_eps(mc_global.shadowed.E, DNI_S, 3 * mc_global.shadowed.SE), 1); CHECK(eq_eps(mc_global.missing.E, MMAX(DNI_S, DNI_TGT_S) - MMIN(DNI_S, DNI_TGT_S),