star-ck

Describe the radiative properties of gas mixtures
git clone git://git.meso-star.fr/star-ck.git
Log | Files | Refs | README | LICENSE

commit 0ee25b24ca9120dd75b25c6f5bf077f1665e80d6
parent 28aac8885d79f8e00f68896e10d8f3d43b568d01
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Sat,  1 Oct 2022 13:47:42 +0200

Fix sck_find_band

When the subject range is a single wavelength and that wavelength is
below the first band, the function considers this band as valid whereas
it should be excluded. This commit fixes this issue by notifying that in
this case no band was found.

Diffstat:
Msrc/sck.c | 13++++++++++---
Msrc/test_sck_load.c | 15+++++++++++++++
2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/src/sck.c b/src/sck.c @@ -573,9 +573,16 @@ sck_find_bands goto exit; } - if(range[0] == range[1]) { - ibands[1] = ibands[0]; - goto exit; /* No more to search */ + if(range[0] == range[1]) { /* No more to search */ + if(range[0] < low->low) { + /* The wavelength is not included in any band */ + ibands[0] = SIZE_MAX; + ibands[1] = 0; + } else { + ASSERT(range[0] < low->upp); + ibands[1] = ibands[0]; + } + goto exit; } upp = search_lower_bound(range+1, bands, nbands, sizeof(*bands), cmp_band); diff --git a/src/test_sck_load.c b/src/test_sck_load.c @@ -444,11 +444,26 @@ test_find(struct sck* sck) CHK(sck_find_bands(sck, range, ibands) == RES_OK); CHK(ibands[0] > ibands[1]); + range[0] = 11; + range[1] = 11; + CHK(sck_find_bands(sck, range, ibands) == RES_OK); + CHK(ibands[0] > ibands[1]); + range[0] = 0; range[1] = nextafter(1, 0); CHK(sck_find_bands(sck, range, ibands) == RES_OK); CHK(ibands[0] > ibands[1]); + range[0] = 0; + range[1] = 0; + CHK(sck_find_bands(sck, range, ibands) == RES_OK); + CHK(ibands[0] > ibands[1]); + + range[0] = nextafter(1, 0); + range[1] = nextafter(1, 0); + CHK(sck_find_bands(sck, range, ibands) == RES_OK); + CHK(ibands[0] > ibands[1]); + range[0] = 2; range[1] = 2; CHK(sck_find_bands(sck, range, ibands) == RES_OK);