htmie

Optical properties of water droplets
git clone git://git.meso-star.fr/htmie.git
Log | Files | Refs | README | LICENSE

commit 81c3c332e7ce4ebeebfce033a80f37ff207309d0
parent 90b34bf25de0d45aaef60834617919a95aa40f2e
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed,  4 Jul 2018 15:48:38 +0200

Test the "fetch cross sections" functions

Diffstat:
Msrc/htmie.c | 2+-
Msrc/test_htmie_load.c | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/src/htmie.c b/src/htmie.c @@ -478,7 +478,7 @@ fetch_data const double b = data[i-0]; const double u = (wavelength - wlens[i-1]) / (wlens[i] - wlens[i-1]); ASSERT(i < nwlens && (wlens[i] >= wavelength || wlens[i-1] <= wavelength)); - ASSERT(eq_eps(u, 1, 1.e-6)); + ASSERT(eq_eps(u, 1, 1.e-6) || u < 1); switch(type) { case HTMIE_FILTER_NEAREST: diff --git a/src/test_htmie_load.c b/src/test_htmie_load.c @@ -21,6 +21,55 @@ #include <rsys/math.h> #include <string.h> +static void +test_fetch(struct htmie* htmie) +{ + size_t nwlens; + const double* wlens; + const double* absor; + const double* scatt; + double wlen; + double xabs; + double xsca; + double u; + +#define NEAREST HTMIE_FILTER_NEAREST +#define LINEAR HTMIE_FILTER_LINEAR + + nwlens = htmie_get_wavelengths_count(htmie); + CHK(nwlens > 1); + + wlens = htmie_get_wavelengths(htmie); + scatt = htmie_get_xsections_scattering(htmie); + absor = htmie_get_xsections_absorption(htmie); + + CHK(absor[0] == htmie_fetch_xsection_absorption(htmie, wlens[0], NEAREST)); + CHK(absor[1] == htmie_fetch_xsection_absorption(htmie, wlens[1], NEAREST)); + CHK(scatt[0] == htmie_fetch_xsection_scattering(htmie, wlens[0], NEAREST)); + CHK(scatt[1] == htmie_fetch_xsection_scattering(htmie, wlens[1], NEAREST)); + + u = 0.25; + wlen = wlens[0] + u * (wlens[1] - wlens[0]); + xabs = absor[0] + u * (absor[1] - absor[0]); + xsca = scatt[0] + u * (scatt[1] - scatt[0]); + CHK(absor[0] == htmie_fetch_xsection_absorption(htmie, wlen, NEAREST)); + CHK(scatt[0] == htmie_fetch_xsection_scattering(htmie, wlen, NEAREST)); + CHK(eq_eps(xabs, htmie_fetch_xsection_absorption(htmie, wlen, LINEAR), 1.e-6)); + CHK(eq_eps(xsca, htmie_fetch_xsection_scattering(htmie, wlen, LINEAR), 1.e-6)); + + u = 0.51; + wlen = wlens[0] + u * (wlens[1] - wlens[0]); + xabs = absor[0] + u * (absor[1] - absor[0]); + xsca = scatt[0] + u * (scatt[1] - scatt[0]); + CHK(absor[1] == htmie_fetch_xsection_absorption(htmie, wlen, NEAREST)); + CHK(scatt[1] == htmie_fetch_xsection_scattering(htmie, wlen, NEAREST)); + CHK(eq_eps(xabs, htmie_fetch_xsection_absorption(htmie, wlen, LINEAR), 1.e-6)); + CHK(eq_eps(xsca, htmie_fetch_xsection_scattering(htmie, wlen, LINEAR), 1.e-6)); + +#undef NEAREST +#undef LINEAR +} + int main(int argc, char** argv) { @@ -109,6 +158,8 @@ main(int argc, char** argv) CHK(fscanf(fp, "%*g") == EOF); CHK(fclose(fp) == 0); + test_fetch(htmie); + CHK(htmie_ref_put(htmie) == RES_OK); check_memory_allocator(&allocator);