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