commit c6f622a7452165c17fd135b66defb372013af61e
parent c89bd4beab21a32e0429d06394e5df36c0822813
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 25 Jul 2018 08:54:22 +0200
Test the asymmetry_parameter API
Diffstat:
2 files changed, 46 insertions(+), 13 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -103,11 +103,13 @@ if(NOT NO_TEST)
${_output_base}_mscs
${_output_base}_rmod
${_output_base}_smod
+ ${_output_base}_g
COMMAND sh ${_script} lambda ${_netcdf}
COMMAND sh ${_script} macs ${_netcdf}
COMMAND sh ${_script} mscs ${_netcdf}
COMMAND sh ${_script} rmod ${_netcdf}
COMMAND sh ${_script} smod ${_netcdf}
+ COMMAND sh ${_script} g ${_netcdf}
DEPENDS ${_script}
COMMENT "Dump data of the ${_file} NetCDF"
VERBATIM)
@@ -118,7 +120,8 @@ if(NOT NO_TEST)
${_output_base}_macs
${_output_base}_mscs
${_output_base}_rmod
- ${_output_base}_smod)
+ ${_output_base}_smod
+ ${_output_base}_g)
endforeach()
endif()
diff --git a/src/test_htmie_load.c b/src/test_htmie_load.c
@@ -41,10 +41,12 @@ test_fetch(struct htmie* htmie)
const double* wlens;
const double* absor;
const double* scatt;
+ const double* asym;
double wlen;
double xabs;
double xsca;
double u;
+ double g;
CHK(htmie);
@@ -54,18 +56,23 @@ test_fetch(struct htmie* htmie)
wlens = htmie_get_wavelengths(htmie);
scatt = htmie_get_xsections_scattering(htmie);
absor = htmie_get_xsections_absorption(htmie);
+ asym = htmie_get_asymmetry_parameter(htmie);
/* Test clamp to border */
CHK(absor[0] == htmie_fetch_xsection_absorption(htmie, wlens[0]-1, NEAREST));
CHK(scatt[0] == htmie_fetch_xsection_scattering(htmie, wlens[0]-1, NEAREST));
+ CHK(asym[0] == htmie_fetch_asymmetry_parameter(htmie, wlens[0]-1, NEAREST));
CHK(absor[0] == htmie_fetch_xsection_absorption(htmie, wlens[0]-1, LINEAR));
CHK(scatt[0] == htmie_fetch_xsection_scattering(htmie, wlens[0]-1, LINEAR));
+ CHK(asym[0] == htmie_fetch_asymmetry_parameter(htmie, wlens[0]-1, LINEAR));
i = nwlens - 1;
CHK(absor[i] == htmie_fetch_xsection_absorption(htmie, wlens[i]+1, NEAREST));
CHK(scatt[i] == htmie_fetch_xsection_scattering(htmie, wlens[i]+1, NEAREST));
+ CHK(asym[i] == htmie_fetch_asymmetry_parameter(htmie, wlens[i]+1, NEAREST));
CHK(absor[i] == htmie_fetch_xsection_absorption(htmie, wlens[i]+1, LINEAR));
CHK(scatt[i] == htmie_fetch_xsection_scattering(htmie, wlens[i]+1, LINEAR));
+ CHK(asym[i] == htmie_fetch_asymmetry_parameter(htmie, wlens[i]+1, LINEAR));
FOR_EACH(i, 0, nwlens-1) {
@@ -73,24 +80,31 @@ test_fetch(struct htmie* htmie)
CHK(absor[i+1] == htmie_fetch_xsection_absorption(htmie, wlens[i+1], NEAREST));
CHK(scatt[i+0] == htmie_fetch_xsection_scattering(htmie, wlens[i+0], NEAREST));
CHK(scatt[i+1] == htmie_fetch_xsection_scattering(htmie, wlens[i+1], NEAREST));
+ CHK(asym[i+1] == htmie_fetch_asymmetry_parameter(htmie, wlens[i+1], NEAREST));
u = 0.25;
wlen = wlens[i+0] + u * (wlens[i+1] - wlens[i+0]);
xabs = absor[i+0] + u * (absor[i+1] - absor[i+0]);
xsca = scatt[i+0] + u * (scatt[i+1] - scatt[i+0]);
+ g = asym[i+0] + u *(asym[i+1] - asym[i+0]);
CHK(absor[i+0] == htmie_fetch_xsection_absorption(htmie, wlen, NEAREST));
CHK(scatt[i+0] == htmie_fetch_xsection_scattering(htmie, wlen, NEAREST));
+ CHK(asym[i+0] == htmie_fetch_asymmetry_parameter(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));
+ CHK(eq_eps(g, htmie_fetch_asymmetry_parameter(htmie, wlen, LINEAR), 1.e-6));
u = 0.51;
wlen = wlens[i+0] + u * (wlens[i+1] - wlens[i+0]);
xabs = absor[i+0] + u * (absor[i+1] - absor[i+0]);
xsca = scatt[i+0] + u * (scatt[i+1] - scatt[i+0]);
+ g = asym[i+0] + u *(asym[i+1] - asym[i+0]);
CHK(absor[i+1] == htmie_fetch_xsection_absorption(htmie, wlen, NEAREST));
CHK(scatt[i+1] == htmie_fetch_xsection_scattering(htmie, wlen, NEAREST));
+ CHK(asym[i+1] == htmie_fetch_asymmetry_parameter(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));
+ CHK(eq_eps(g, htmie_fetch_asymmetry_parameter(htmie, wlen, LINEAR), 1.e-6));
}
}
@@ -216,33 +230,37 @@ test_avg(struct htmie* htmie)
double sum = 0; \
double data = 0; \
double prev_wlen = band[0]; \
- double prev_data = htmie_fetch_xsection_ ## Name(htmie, band[0], Filter);\
+ double prev_data = htmie_fetch_ ## Name(htmie, band[0], Filter);\
FOR_EACH(i, ilow+1, iupp) { \
- data = htmie_fetch_xsection_ ## Name(htmie, wlens[i], Filter); \
+ data = htmie_fetch_ ## Name(htmie, wlens[i], Filter); \
sum += 0.5*(prev_data + data) * (wlens[i] - prev_wlen); \
prev_wlen = wlens[i]; \
prev_data = data; \
} \
- data = htmie_fetch_xsection_ ## Name(htmie, band[1], Filter); \
+ data = htmie_fetch_ ## Name(htmie, band[1], Filter); \
sum += 0.5*(prev_data + data) * (band[1] - prev_wlen); \
sum /= (band[1] - band[0]); \
- avg = htmie_compute_xsection_## Name ## _average(htmie, band, Filter); \
+ avg = htmie_compute_## Name ## _average(htmie, band, Filter); \
CHK(eq_eps(avg, sum, 1.e-6)); \
} (void)0
- TEST(absorption, NEAREST);
- TEST(scattering, NEAREST);
- TEST(absorption, LINEAR);
- TEST(scattering, LINEAR);
+ TEST(xsection_absorption, NEAREST);
+ TEST(xsection_scattering, NEAREST);
+ TEST(asymmetry_parameter, NEAREST);
+ TEST(xsection_absorption, LINEAR);
+ TEST(xsection_scattering, LINEAR);
+ TEST(asymmetry_parameter, LINEAR);
band[0] = wlens[ilow] + 0.25*(wlens[ilow+1] - wlens[ilow+0]);
band[1] = wlens[iupp] - 0.25*(wlens[iupp+0] - wlens[iupp-1]);
CHK(band[0] < band[1]);
- TEST(absorption, NEAREST);
- TEST(scattering, NEAREST);
- TEST(absorption, LINEAR);
- TEST(scattering, LINEAR);
+ TEST(xsection_absorption, NEAREST);
+ TEST(xsection_scattering, NEAREST);
+ TEST(asymmetry_parameter, NEAREST);
+ TEST(xsection_absorption, LINEAR);
+ TEST(xsection_scattering, LINEAR);
+ TEST(asymmetry_parameter, LINEAR);
#undef TEST
}
@@ -332,6 +350,18 @@ main(int argc, char** argv)
CHK(fscanf(fp, "%*g") == EOF);
CHK(fclose(fp) == 0);
+ /* Check scattering asymmetry parameter */
+ CHK((size_t)snprintf(buf, sizeof(buf), "%s/%s_g", path, base)<sizeof(buf));
+ CHK(fp = fopen(buf, "r"));
+ FOR_EACH(i, 0, htmie_get_wavelengths_count(htmie)) {
+ double g;
+ CHK(fscanf(fp, "%lg", &g) == 1);
+ CHK(eq_eps(g, htmie_get_asymmetry_parameter(htmie)[i], 1.e-6));
+ }
+ CHK(fscanf(fp, "%*g") == EOF);
+ CHK(fclose(fp) == 0);
+
+
test_fetch(htmie);
test_bounds(htmie);
test_avg(htmie);