htmie

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

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:
Mcmake/CMakeLists.txt | 5++++-
Msrc/test_htmie_load.c | 54++++++++++++++++++++++++++++++++++++++++++------------
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);