star-aerosol

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

commit c53431b18cec61a7d61f1858763f0c9ff0aebff4
parent 959d5622709f0433338e5eb46af9fc4d03ae4796
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri, 26 Aug 2022 09:15:53 +0200

Rename sars_find_overlaped_bands in sars_find_bands

Diffstat:
Msrc/sars.c | 16++++++++++++----
Msrc/sars.h | 6++++--
Msrc/test_sars_load.c | 31++++++++++++++++++-------------
3 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/src/sars.c b/src/sars.c @@ -390,7 +390,7 @@ error: } res_T -sars_find_overlaped_bands +sars_find_bands (const struct sars* sars, const double range[2], size_t ibands[2]) @@ -419,12 +419,20 @@ sars_find_overlaped_bands goto exit; } + if(range[0] == range[1]) goto exit; /* No more to do */ + upp = search_lower_bound(range+1, bands, nbands, sizeof(*bands), cmp_band); - if(!upp) { /* The submitted range overlaps the remaining bands */ + + /* The submitted range overlaps the remaining bands */ + if(!upp) { ibands[1] = nbands - 1; - } else if(upp->low <= range[1]) { /* The upper band includes range[1] */ + + /* The upper band includes range[1] */ + } else if(upp->low <= range[1]) { ibands[1] = (size_t)(upp - bands); - } else if(upp->low > range[1]) { /* The upper band is greater than range[1] */ + + /* The upper band is greater than range[1] and therefre must be rejected */ + } else if(upp->low > range[1]) { if(upp != bands) { ibands[1] = (size_t)(upp - bands - 1); } else { diff --git a/src/sars.h b/src/sars.h @@ -104,9 +104,11 @@ sars_get_band const size_t iband, struct sars_band* band); -/* Returns a degenerated if no band is found */ +/* Returns the range of band indices covered by a given spectral range. The + * returned index range is degenerated (i.e. ibands[0] > ibands[1]) if no band + * is found */ SARS_API res_T -sars_find_overlaped_bands +sars_find_bands (const struct sars* sars, const double range[2], /* In cm^-1. Limits are inclusive */ size_t ibands[2]); /* Range of overlaped bands. Limits are inclusive */ diff --git a/src/test_sars_load.c b/src/test_sars_load.c @@ -271,54 +271,59 @@ test_find(struct sars* sars) range[0] = 0; range[1] = 10; - CHK(sars_find_overlaped_bands(NULL, range, ibands) == RES_BAD_ARG); - CHK(sars_find_overlaped_bands(sars, NULL, ibands) == RES_BAD_ARG); - CHK(sars_find_overlaped_bands(sars, range, NULL) == RES_BAD_ARG); - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(NULL, range, ibands) == RES_BAD_ARG); + CHK(sars_find_bands(sars, NULL, ibands) == RES_BAD_ARG); + CHK(sars_find_bands(sars, range, NULL) == RES_BAD_ARG); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] == 0 && ibands[1] == 9); range[0] = 10; range[1] = 0; - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_BAD_ARG); + CHK(sars_find_bands(sars, range, ibands) == RES_BAD_ARG); range[0] = 11; range[1] = 12; - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] > ibands[1]); range[0] = 0; range[1] = nextafter(1, 0); - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] > ibands[1]); + range[0] = 1; + range[1] = 1; + CHK(sars_find_bands(sars, range, ibands) == RES_OK); + CHK(ibands[0] == 0 && ibands[1] == 0); + range[0] = 0; range[1] = 1; - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] == 0 && ibands[1] == 0); range[0] = 1; range[1] = nextafterf(2, 1); - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] == 0 && ibands[1] == 0); range[0] = 2; range[1] = 20; - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] == 1 && ibands[1] == 9); range[0] = 1.5; range[1] = 2; - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] == 0 && ibands[1] == 1); range[0] = 3.1; range[1] = nextafter(6, 0); - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] == 2 && ibands[1] == 4); range[0] = 3.1; range[1] = 7; - CHK(sars_find_overlaped_bands(sars, range, ibands) == RES_OK); + CHK(sars_find_bands(sars, range, ibands) == RES_OK); CHK(ibands[0] == 2 && ibands[1] == 6); CHK(fclose(fp) == 0);