solstice-solver

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

commit c2f74c92aeb3ad288b4535192807799a4d385c3b
parent 4439ddfbcf697412d44b2c8575f5eff959be5b3e
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri, 21 Apr 2017 11:42:52 +0200

Forbid sun with no spectrum

Diffstat:
Msrc/ssol_ranst_sun_wl.c | 3++-
Msrc/ssol_solver.c | 5+++++
Msrc/ssol_sun.c | 13+++++--------
Msrc/test_ssol_solver1.c | 4+---
4 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/ssol_ranst_sun_wl.c b/src/ssol_ranst_sun_wl.c @@ -158,8 +158,9 @@ ranst_sun_wl_setup const size_t sz) { res_T res = RES_OK; - if (sz && (!ran || !wavelengths || !intensities)) + if(!ran || !wavelengths || !intensities || !sz) return RES_BAD_ARG; + if(sz <= 1) { ran->type = WL_DIRAC; ran->get = &ran_dirac_get; diff --git a/src/ssol_solver.c b/src/ssol_solver.c @@ -495,6 +495,11 @@ check_scene(const struct ssol_scene* scene, const char* caller) return RES_BAD_ARG; } + if(!scene->sun->spectrum) { + log_error(scene->dev, "%s: sun's spectrum undefined.\n", caller); + return RES_BAD_ARG; + } + if(scene->sun->dni <= 0) { log_error(scene->dev, "%s: sun's DNI undefined.\n", caller); return RES_BAD_ARG; diff --git a/src/ssol_sun.c b/src/ssol_sun.c @@ -212,14 +212,11 @@ sun_create_distributions /* Create and setup the spectrum distribution */ res = ranst_sun_wl_create(sun->dev->allocator, &ran_wl); if(res != RES_OK) goto error; - if(!sun->spectrum) { - res = ranst_sun_wl_setup(ran_wl, NULL, NULL, 0); - } else { - res = ranst_sun_wl_setup(ran_wl, - darray_double_cdata_get(&sun->spectrum->wavelengths), - darray_double_cdata_get(&sun->spectrum->intensities), - darray_double_size_get(&sun->spectrum->wavelengths)); - } + + res = ranst_sun_wl_setup(ran_wl, + darray_double_cdata_get(&sun->spectrum->wavelengths), + darray_double_cdata_get(&sun->spectrum->intensities), + darray_double_size_get(&sun->spectrum->wavelengths)); if(res != RES_OK) goto error; /* Create and setup the the direction distribution */ diff --git a/src/test_ssol_solver1.c b/src/test_ssol_solver1.c @@ -91,7 +91,6 @@ main(int argc, char** argv) double a_m, a_std; uint32_t r_id; unsigned ntris; - (void) argc, (void) argv; d33_splat(transform1, 0); @@ -260,10 +259,9 @@ main(int argc, char** argv) CHECK(ssol_sun_set_direction(sun, d3(dir, 1, 0, -1)), RES_OK); CHECK(ssol_sun_set_dni(sun, 1000), RES_OK); CHECK(ssol_scene_attach_sun(scene, sun), RES_OK); - CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_OK); + CHECK(ssol_solve(scene, rng, 10, 0, NULL, &estimator), RES_BAD_ARG); CHECK(ssol_scene_detach_sun(scene, sun), RES_OK); CHECK(ssol_sun_ref_put(sun), RES_OK); - CHECK(ssol_estimator_ref_put(estimator), RES_OK); /* Sun with undefined DNI */ CHECK(ssol_sun_create_directional(dev, &sun), RES_OK);