solstice-solver

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

commit 91d57b90201c11857ecf4bcae3d0abb8ed2f7bf9
parent 4b1776d27045791c8ebb50170c6f5a7ba02ad4cb
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue,  4 Jun 2019 09:19:54 +0200

Clean up the tests

Replace the macros PRINT_GLOBAL and PRINT_RCV by functions

Diffstat:
Msrc/test_ssol_solver1.c | 14+++++++-------
Msrc/test_ssol_solver10.c | 8++++----
Msrc/test_ssol_solver11.c | 8++++----
Msrc/test_ssol_solver12.c | 8++++----
Msrc/test_ssol_solver4.c | 2+-
Msrc/test_ssol_solver6.c | 2+-
Msrc/test_ssol_solver7.c | 2+-
Msrc/test_ssol_solver9.c | 2+-
Msrc/test_ssol_utils.h | 88++++++++++++++++++++++++++++++++++++++++++-------------------------------------
9 files changed, 70 insertions(+), 64 deletions(-)

diff --git a/src/test_ssol_solver1.c b/src/test_ssol_solver1.c @@ -325,7 +325,7 @@ main(int argc, char** argv) std = dbl; /* Target was sampled but shadowed by secondary */ CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(eq_eps(mc_global.shadowed.E, m, 2 * dbl) == 1); CHK(eq_eps(mc_global.missing.E, 2*m, 2*mc_global.missing.SE) == 1); CHK(GET_MC_RCV(NULL, NULL, SSOL_BACK, NULL) == RES_BAD_ARG); @@ -360,7 +360,7 @@ main(int argc, char** argv) m = 4 * DNI_cos; std = 0; CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); CHK(eq_eps(mc_global.missing.E, m, 1e-4) == 1); CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); @@ -386,7 +386,7 @@ main(int argc, char** argv) CHK(ssol_scene_detach_atmosphere(scene, atm) == RES_OK); CHK(ssol_atmosphere_ref_put(atm) == RES_OK); CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); CHK(eq_eps(mc_global.missing.E, m, 1e-4) == 1); CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); @@ -429,7 +429,7 @@ main(int argc, char** argv) a_m = REFLECTIVITY * 4 * K * DNI_cos; a_std = 0; CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); CHK(eq_eps( mc_global.missing.E + mc_global.shadowed.E + mc_global.absorbed_by_receivers.E @@ -437,7 +437,7 @@ main(int argc, char** argv) m, 1e-4)); CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); - PRINT_RCV(mc_rcv); + print_rcv(&mc_rcv); CHK(ssol_estimator_get_sampled_count(estimator, &scount) == RES_OK); CHK(ssol_estimator_get_mc_sampled(estimator, heliostat, &sampled) == RES_BAD_ARG); CHK(ssol_estimator_get_mc_sampled(estimator, heliostat2, &sampled) == RES_OK); @@ -515,14 +515,14 @@ main(int argc, char** argv) m = 4 * K2 * DNI_cos; std = 0; CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); CHK(eq_eps(mc_global.missing.E, m, 1e-4) == 1); CHK(eq_eps(mc_global.cos_factor.E, COS, 1e-4) == 1); CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Ir(target) = %g +/- %g\n", mc_rcv.incoming_flux.E, mc_rcv.incoming_flux.SE); - PRINT_RCV(mc_rcv); + print_rcv(&mc_rcv); CHK(eq_eps(mc_rcv.incoming_flux.E, m, 1e-4) == 1); CHK(eq_eps(mc_rcv.incoming_flux.SE, std, 1e-4) == 1); diff --git a/src/test_ssol_solver10.c b/src/test_ssol_solver10.c @@ -135,8 +135,8 @@ main(int argc, char** argv) CHK(ssol_estimator_get_mc_global(estimator, &mc_global1) == RES_OK); CHK(GET_MC_RCV(estimator, geom1, SSOL_FRONT, &mc_rcv1) == RES_OK); - PRINT_GLOBAL(mc_global1); - PRINT_RCV(mc_rcv1); + print_global(&mc_global1); + print_rcv(&mc_rcv1); CHK(mc_global1.cos_factor.E == 1); CHK(mc_global1.cos_factor.SE == 0); CHK(mc_global1.absorbed_by_receivers.E == DNI_S); @@ -175,8 +175,8 @@ main(int argc, char** argv) CHK(ssol_estimator_get_mc_global(estimator, &mc_global2) == RES_OK); CHK(GET_MC_RCV(estimator, geom2, SSOL_FRONT, &mc_rcv2) == RES_OK); - PRINT_GLOBAL(mc_global2); - PRINT_RCV(mc_rcv2); + print_global(&mc_global2); + print_rcv(&mc_rcv2); CHK(eq_eps(mc_global2.absorbed_by_receivers.E, DNI_S, 3 * mc_global2.absorbed_by_receivers.SE) == 1); /* Free data */ diff --git a/src/test_ssol_solver11.c b/src/test_ssol_solver11.c @@ -135,8 +135,8 @@ main(int argc, char** argv) CHK(ssol_estimator_get_mc_global(estimator, &mc_global1) == RES_OK); CHK(GET_MC_RCV(estimator, geom1, SSOL_FRONT, &mc_rcv1) == RES_OK); - PRINT_GLOBAL(mc_global1); - PRINT_RCV(mc_rcv1); + print_global(&mc_global1); + print_rcv(&mc_rcv1); CHK(mc_global1.cos_factor.E == 1); CHK(mc_global1.cos_factor.SE == 0); CHK(mc_global1.absorbed_by_receivers.E == DNI_S); @@ -175,8 +175,8 @@ main(int argc, char** argv) CHK(ssol_estimator_get_mc_global(estimator, &mc_global2) == RES_OK); CHK(GET_MC_RCV(estimator, geom2, SSOL_FRONT, &mc_rcv2) == RES_OK); - PRINT_GLOBAL(mc_global2); - PRINT_RCV(mc_rcv2); + print_global(&mc_global2); + print_rcv(&mc_rcv2); CHK(eq_eps(mc_global2.absorbed_by_receivers.E, DNI_S, 3 * mc_global2.absorbed_by_receivers.SE) == 1); /* Free data */ diff --git a/src/test_ssol_solver12.c b/src/test_ssol_solver12.c @@ -135,8 +135,8 @@ main(int argc, char** argv) CHK(ssol_estimator_get_mc_global(estimator, &mc_global1) == RES_OK); CHK(GET_MC_RCV(estimator, geom1, SSOL_FRONT, &mc_rcv1) == RES_OK); - PRINT_GLOBAL(mc_global1); - PRINT_RCV(mc_rcv1); + print_global(&mc_global1); + print_rcv(&mc_rcv1); CHK(mc_global1.cos_factor.E == 1); CHK(mc_global1.cos_factor.SE == 0); CHK(mc_global1.absorbed_by_receivers.E == DNI_S); @@ -175,8 +175,8 @@ main(int argc, char** argv) CHK(ssol_estimator_get_mc_global(estimator, &mc_global2) == RES_OK); CHK(GET_MC_RCV(estimator, geom2, SSOL_FRONT, &mc_rcv2) == RES_OK); - PRINT_GLOBAL(mc_global2); - PRINT_RCV(mc_rcv2); + print_global(&mc_global2); + print_rcv(&mc_rcv2); CHK(eq_eps(mc_global2.absorbed_by_receivers.E, DNI_S, 3 * mc_global2.absorbed_by_receivers.SE) == 1); /* Free data */ diff --git a/src/test_ssol_solver4.c b/src/test_ssol_solver4.c @@ -154,7 +154,7 @@ main(int argc, char** argv) m2 = m1; std2 = std1; CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(eq_eps(mc_global.shadowed.E, 0, 1e-4) == 1); CHK(eq_eps(mc_global.missing.E, 400 * DNI_cos, 1e-2) == 1); /* virtual => 100 % missing */ CHK(GET_MC_RCV(estimator, target1, SSOL_FRONT, &mc_rcv) == RES_OK); diff --git a/src/test_ssol_solver6.c b/src/test_ssol_solver6.c @@ -184,7 +184,7 @@ main(int argc, char** argv) CHK(ssol_estimator_get_realisation_count(estimator, &count) == RES_OK); CHK(count == N__); CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(eq_eps(mc_global.shadowed.E, 100000, 2 * 100000/sqrt(N__)) == 1); CHK(eq_eps(mc_global.missing.E, 0, 0) == 1); diff --git a/src/test_ssol_solver7.c b/src/test_ssol_solver7.c @@ -196,7 +196,7 @@ main(int argc, char** argv) CHK(ssol_estimator_get_sampled_area(estimator, &area) == RES_OK); printf("Total = %g\n", area * DNI_cos); CHK(eq_eps(area * DNI_cos, TOTAL, TOTAL * 1e-4) == 1); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(GET_MC_RCV(estimator, target, SSOL_FRONT, &mc_rcv) == RES_OK); printf("Abs(target1) = %g +/- %g\n", diff --git a/src/test_ssol_solver9.c b/src/test_ssol_solver9.c @@ -141,7 +141,7 @@ main(int argc, char** argv) #define DNI_TGT_S (DNI * TGT_X * TGT_Y) #define DNI_S (DNI * SZ * SZ) CHK(ssol_estimator_get_mc_global(estimator, &mc_global) == RES_OK); - PRINT_GLOBAL(mc_global); + print_global(&mc_global); CHK(eq_eps(mc_global.cos_factor.E, 1./3., 3 * mc_global.cos_factor.SE)); CHK(eq_eps(mc_global.shadowed.E, DNI_S, 3 * mc_global.shadowed.SE)); CHK(eq_eps(mc_global.missing.E, MMAX(DNI_S, DNI_TGT_S), diff --git a/src/test_ssol_utils.h b/src/test_ssol_utils.h @@ -30,47 +30,53 @@ check_memory_allocator(struct mem_allocator* allocator) } } -#define PRINT_GLOBAL(Mc) { \ - printf("Shadows = %g +/- %g; ", (Mc).shadowed.E, (Mc).shadowed.SE); \ - printf("Missing = %g +/- %g; ", (Mc).missing.E, (Mc).missing.SE); \ - printf("Receivers = %g +/- %g; ", \ - (Mc).absorbed_by_receivers.E, (Mc).absorbed_by_receivers.SE); \ - printf("Atmosphere = %g +/- %g; ", \ - (Mc).extinguished_by_atmosphere.E, (Mc).extinguished_by_atmosphere.SE); \ - printf("Other absorbed = %g +/- %g; ", \ - (Mc).other_absorbed.E, (Mc).other_absorbed.SE); \ - printf("Cos = %g +/- %g\n", (Mc).cos_factor.E, (Mc).cos_factor.SE); \ -} (void)0 +static INLINE void +print_global(const struct ssol_mc_global* mc) +{ + ASSERT(mc); + printf("Shadows = %g +/- %g; ", mc->shadowed.E, mc->shadowed.SE); + printf("Missing = %g +/- %g; ", mc->missing.E, mc->missing.SE); + printf("Receivers = %g +/- %g; ", + mc->absorbed_by_receivers.E, mc->absorbed_by_receivers.SE); + printf("Atmosphere = %g +/- %g; ", + mc->extinguished_by_atmosphere.E, mc->extinguished_by_atmosphere.SE); + printf("Other absorbed = %g +/- %g; ", + mc->other_absorbed.E, mc->other_absorbed.SE); + printf("Cos = %g +/- %g\n", mc->cos_factor.E, mc->cos_factor.SE); +} -#define PRINT_RCV(Rcv) { \ - printf("\tIncoming flux(target) = %g +/- %g \n", \ - (Rcv).incoming_flux.E, (Rcv).incoming_flux.SE); \ - printf("\tIncoming flux wo Atmosphere(target) = %g +/- %g (%.2g %%)\n", \ - (Rcv).incoming_if_no_atm_loss.E, (Rcv).incoming_if_no_atm_loss.SE, \ - 100 * (Rcv).incoming_if_no_atm_loss.E / (Rcv).incoming_flux.E); \ - printf("\tIncoming flux wo Field Loss(target) = %g +/- %g (%.2g %%)\n", \ - (Rcv).incoming_if_no_field_loss.E, (Rcv).incoming_if_no_field_loss.SE, \ - 100 * (Rcv).incoming_if_no_field_loss.E / (Rcv).incoming_flux.E); \ - printf("\tAtmospheric Loss on Incoming(target) = %g +/- %g (%.2g %%)\n", \ - (Rcv).incoming_lost_in_atmosphere.E, (Rcv).incoming_lost_in_atmosphere.SE, \ - 100 * (Rcv).incoming_lost_in_atmosphere.E / (Rcv).incoming_flux.E); \ - printf("\tOptical Field Loss(target) on Incoming = %g +/- %g (%.2g %%)\n", \ - (Rcv).incoming_lost_in_field.E, (Rcv).incoming_lost_in_field.SE, \ - 100 * (Rcv).incoming_lost_in_field.E / (Rcv).incoming_flux.E); \ - printf("\tAbsorbed flux(target) = %g +/- %g \n", \ - (Rcv).absorbed_flux.E, (Rcv).absorbed_flux.SE); \ - printf("\tAbsorbed flux wo Atmosphere(target) = %g +/- %g (%.2g %%)\n", \ - (Rcv).absorbed_if_no_atm_loss.E, (Rcv).absorbed_if_no_atm_loss.SE, \ - 100 * (Rcv).absorbed_if_no_atm_loss.E / (Rcv).absorbed_flux.E); \ - printf("\tAbsorbed flux wo Field Loss(target) = %g +/- %g (%.2g %%)\n", \ - (Rcv).absorbed_if_no_field_loss.E, (Rcv).absorbed_if_no_field_loss.SE, \ - 100 * (Rcv).absorbed_if_no_field_loss.E / (Rcv).absorbed_flux.E); \ - printf("\tAtmospheric Loss(target) on Absorbed = %g +/- %g (%.2g %%)\n", \ - (Rcv).absorbed_lost_in_atmosphere.E, (Rcv).absorbed_lost_in_atmosphere.SE, \ - 100 * (Rcv).absorbed_lost_in_atmosphere.E / (Rcv).absorbed_flux.E); \ - printf("\tOptical Field Loss(target) on Absorbed = %g +/- %g (%.2g %%)\n", \ - (Rcv).absorbed_lost_in_field.E, (Rcv).absorbed_lost_in_field.SE, \ - 100 * (Rcv).absorbed_lost_in_field.E / (Rcv).absorbed_flux.E); \ -} (void)0 +static INLINE void +print_rcv(const struct ssol_mc_receiver* rcv) +{ + ASSERT(rcv); + printf("\tIncoming flux(target) = %g +/- %g \n", + rcv->incoming_flux.E, rcv->incoming_flux.SE); + printf("\tIncoming flux wo Atmosphere(target) = %g +/- %g (%.2g %%)\n", + rcv->incoming_if_no_atm_loss.E, rcv->incoming_if_no_atm_loss.SE, + 100 * rcv->incoming_if_no_atm_loss.E / rcv->incoming_flux.E); + printf("\tIncoming flux wo Field Loss(target) = %g +/- %g (%.2g %%)\n", + rcv->incoming_if_no_field_loss.E, rcv->incoming_if_no_field_loss.SE, + 100 * rcv->incoming_if_no_field_loss.E / rcv->incoming_flux.E); + printf("\tAtmospheric Loss on Incoming(target) = %g +/- %g (%.2g %%)\n", + rcv->incoming_lost_in_atmosphere.E, rcv->incoming_lost_in_atmosphere.SE, + 100 * rcv->incoming_lost_in_atmosphere.E / rcv->incoming_flux.E); + printf("\tOptical Field Loss(target) on Incoming = %g +/- %g (%.2g %%)\n", + rcv->incoming_lost_in_field.E, rcv->incoming_lost_in_field.SE, + 100 * rcv->incoming_lost_in_field.E / rcv->incoming_flux.E); + printf("\tAbsorbed flux(target) = %g +/- %g \n", + rcv->absorbed_flux.E, rcv->absorbed_flux.SE); + printf("\tAbsorbed flux wo Atmosphere(target) = %g +/- %g (%.2g %%)\n", + rcv->absorbed_if_no_atm_loss.E, rcv->absorbed_if_no_atm_loss.SE, + 100 * rcv->absorbed_if_no_atm_loss.E / rcv->absorbed_flux.E); + printf("\tAbsorbed flux wo Field Loss(target) = %g +/- %g (%.2g %%)\n", + rcv->absorbed_if_no_field_loss.E, rcv->absorbed_if_no_field_loss.SE, + 100 * rcv->absorbed_if_no_field_loss.E / rcv->absorbed_flux.E); + printf("\tAtmospheric Loss(target) on Absorbed = %g +/- %g (%.2g %%)\n", + rcv->absorbed_lost_in_atmosphere.E, rcv->absorbed_lost_in_atmosphere.SE, + 100 * rcv->absorbed_lost_in_atmosphere.E / rcv->absorbed_flux.E); + printf("\tOptical Field Loss(target) on Absorbed = %g +/- %g (%.2g %%)\n", + rcv->absorbed_lost_in_field.E, rcv->absorbed_lost_in_field.SE, + 100 * rcv->absorbed_lost_in_field.E / rcv->absorbed_flux.E); +} #endif /* TEST_SSOL_UTILS_H */