commit ab1ff4822efbe0a0b26d56d44ea5c537148a6392
parent be71c93d5ee213a7f15beb949311beb7a6cc76c4
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Mon, 13 Mar 2017 10:06:55 +0100
Back to a global cos per primary entity.
Diffstat:
4 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/src/ssol.h b/src/ssol.h
@@ -300,7 +300,7 @@ struct ssol_mc_result {
};
struct ssol_mc_global {
- struct ssol_mc_result cos_factor;
+ struct ssol_mc_result cos_factor; /* [0 1] */
struct ssol_mc_result shadowed; /* In W */
struct ssol_mc_result missing; /* In W */
};
diff --git a/src/ssol_solver.c b/src/ssol_solver.c
@@ -226,6 +226,7 @@ point_init
cos_sun = fabs(d3_dot(pt->N, pt->dir));
pt->weight = scn->sun->dni * sampled_area_proxy * cos_sun;
pt->absorptivity_loss = pt->reflectivity_loss = 0;
+ pt->cos_factor = cos_sun;
/* Retrieve the sampled instance and shaded shape */
pt->inst = *htable_instance_find(&scn->instances_samp, &pt->prim.inst_id);
@@ -244,10 +245,6 @@ point_init
if(pt->sshape->shape->type == SHAPE_PUNCHED) {
punched_shape_project_point
(pt->sshape->shape, pt->inst->transform, pt->pos, pt->pos, pt->N);
- /* Local cos */
- pt->cos_factor = fabs(d3_dot(pt->N, pt->dir));
- } else {
- pt->cos_factor = cos_sun;
}
/* Define the primitive side on which the point lies */
diff --git a/src/test_ssol_solver4.c b/src/test_ssol_solver4.c
@@ -167,7 +167,7 @@ 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);
- /* Cannot assert anything about mean local cos */
+ 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,7 @@ 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);
- /* Cannot assert anything about mean local cos */
+ 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",