solstice-solver

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

commit e9927078ff834d704b11919de1b0949a14919328
parent e08fda6030de1bc1e65d0fcff3dbad679afda121
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Mon,  3 Oct 2016 14:22:01 +0200

Add a check in test solver #4

Receiver's new filtering allows 2 superposed receivers: we test this feature
there.

Diffstat:
Msrc/test_ssol_solver4.c | 37++++++++++++++++++++++++-------------
1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/test_ssol_solver4.c b/src/test_ssol_solver4.c @@ -59,7 +59,8 @@ main(int argc, char** argv) struct ssol_object* m_object; struct ssol_object* t_object; struct ssol_instance* heliostat; - struct ssol_instance* target; + struct ssol_instance* target1; + struct ssol_instance* target2; struct ssol_sun* sun; struct ssol_spectrum* spectrum; double dir[3]; @@ -67,7 +68,7 @@ main(int argc, char** argv) double intensities[3] = { 1, 0.8, 1 }; double transform[12]; /* 3x4 column major matrix */ FILE* tmp; - double m, std; + double m1, std1, m2, std2; (void) argc, (void) argv; #define FOCAL 10 @@ -128,28 +129,38 @@ main(int argc, char** argv) CHECK(ssol_scene_attach_instance(scene, heliostat), RES_OK); CHECK(ssol_object_create(dev, square, v_mtl, v_mtl, &t_object), RES_OK); - CHECK(ssol_object_instantiate(t_object, &target), RES_OK); - CHECK(ssol_instance_set_transform(target, transform), RES_OK); - CHECK(ssol_instance_set_receiver(target, "cible", NULL), RES_OK); - CHECK(ssol_instance_set_target_mask(target, 0x1, 0), RES_OK); - CHECK(ssol_instance_dont_sample(target, 1), RES_OK); - CHECK(ssol_scene_attach_instance(scene, target), RES_OK); + CHECK(ssol_object_instantiate(t_object, &target1), RES_OK); + CHECK(ssol_instance_set_transform(target1, transform), RES_OK); + CHECK(ssol_instance_set_receiver(target1, "cible1", NULL), RES_OK); + CHECK(ssol_instance_set_target_mask(target1, 0x1, 0), RES_OK); + CHECK(ssol_instance_dont_sample(target1, 1), RES_OK); + CHECK(ssol_scene_attach_instance(scene, target1), RES_OK); + CHECK(ssol_object_instantiate(t_object, &target2), RES_OK); + CHECK(ssol_instance_set_transform(target2, transform), RES_OK); + CHECK(ssol_instance_set_receiver(target2, "cible2", NULL), RES_OK); + CHECK(ssol_instance_set_target_mask(target2, 0x1, 0), RES_OK); + CHECK(ssol_instance_dont_sample(target2, 1), RES_OK); + CHECK(ssol_scene_attach_instance(scene, target2), RES_OK); CHECK(ssol_solve(scene, rng, 20, stdout), RES_OK); tmp = tmpfile(); #define N 10000 CHECK(ssol_solve(scene, rng, N, tmp), RES_OK); - CHECK(pp_sum(tmp, "cible", N, &m, &std), RES_OK); - logger_print(&logger, LOG_OUTPUT, "\nP = %g +/- %g\n", m, std); + CHECK(pp_sum(tmp, "cible1", N, &m1, &std1), RES_OK); + CHECK(pp_sum(tmp, "cible2", N, &m2, &std2), RES_OK); + logger_print(&logger, LOG_OUTPUT, "\nP = %g +/- %g\n", m1, std1); #define DNI_cos (1000 * cos(0)) - CHECK(eq_eps(m, 400 * DNI_cos, 400 * DNI_cos * 1e-4), 1); - CHECK(eq_eps(std, 0, 0.1), 1); + CHECK(eq_eps(m1, 400 * DNI_cos, 400 * DNI_cos * 1e-4), 1); + CHECK(eq_eps(std1, 0, 0.1), 1); + CHECK(m1, m2); + CHECK(std1, std2); /* free data */ CHECK(ssol_instance_ref_put(heliostat), RES_OK); - CHECK(ssol_instance_ref_put(target), RES_OK); + CHECK(ssol_instance_ref_put(target1), RES_OK); + CHECK(ssol_instance_ref_put(target2), RES_OK); CHECK(ssol_object_ref_put(m_object), RES_OK); CHECK(ssol_object_ref_put(t_object), RES_OK); CHECK(ssol_shape_ref_put(square), RES_OK);