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:
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);