htrdr

Solving radiative transfer in heterogeneous media
git clone git://git.meso-star.fr/htrdr.git
Log | Files | Refs | README | LICENSE

commit 7864bf3699604e7197adbcb052111545bfc3fa3b
parent cc7a13d89dad76af6a20a9f7e0778222635c5a5c
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 12 Dec 2022 14:40:34 +0100

planeto: test loading rnrl files

Diffstat:
Msrc/planeto/test_htrdr_planeto_source.c | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 62 insertions(+), 2 deletions(-)

diff --git a/src/planeto/test_htrdr_planeto_source.c b/src/planeto/test_htrdr_planeto_source.c @@ -19,6 +19,10 @@ #include "planeto/htrdr_planeto_source.h" #include "core/htrdr.h" +#include "core/htrdr_ran_wlen_discrete.h" + +#include <rsys/math.h> +#include <rsys/mem_allocator.h> #include <stdio.h> @@ -217,18 +221,74 @@ test_spectrum_fail(struct htrdr* htrdr) CHK(htrdr_planeto_source_create(htrdr, &source_args, &source) == RES_BAD_ARG); } +static void +test_spectrum_from_files(struct htrdr* htrdr, int argc, char** argv) +{ + struct htrdr_ran_wlen_discrete_create_args distrib_args = + HTRDR_RAN_WLEN_DISCRETE_CREATE_ARGS_NULL; + struct htrdr_ran_wlen_discrete* distrib = NULL; + + struct htrdr_planeto_source_args source_args = HTRDR_PLANETO_SOURCE_ARGS_NULL; + struct htrdr_planeto_source_spectrum spectrum = HTRDR_PLANETO_SOURCE_SPECTRUM_NULL; + struct htrdr_planeto_source* source = NULL; + size_t i; + + source_args.longitude = 0; + source_args.latitude = 0; + source_args.distance = 0; + source_args.radius = 1e8; + source_args.temperature = -1; + + FOR_EACH(i, 1, argc) { + double range[2]; + double lambda, pdf; + source_args.rnrl_filename = argv[i]; + + CHK(htrdr_planeto_source_create(htrdr, &source_args, &source) == RES_OK); + CHK(htrdr_planeto_source_does_radiance_vary_spectrally(source)); + CHK(htrdr_planeto_source_get_spectral_range(source, range) == RES_OK); + + range[0] = 250; + range[1] = 850; + CHK(htrdr_planeto_source_get_spectrum(source, range, &spectrum) == RES_OK); + + printf("`%s' stores %lu entries between [%g, %g] nm\n", + argv[i], spectrum.size, SPLIT2(range)); + + distrib_args.get = htrdr_planeto_source_spectrum_at; + distrib_args.nwavelengths = spectrum.size; + distrib_args.context = &spectrum; + CHK(htrdr_ran_wlen_discrete_create(htrdr, &distrib_args, &distrib) == RES_OK); + + lambda = htrdr_ran_wlen_discrete_sample(distrib, 0.3, 0.5, &pdf); + printf("lambda = %g nm; pdf = %f nm⁻¹\n", lambda, pdf); + + htrdr_planeto_source_ref_put(source); + htrdr_ran_wlen_discrete_ref_put(distrib); + } +} + int main(int argc, char** argv) { struct htrdr_args args = HTRDR_ARGS_DEFAULT; struct htrdr* htrdr = NULL; + size_t memsz = 0; args.verbose = 1; htrdr_mpi_init(argc, argv); CHK(htrdr_create(NULL, &args, &htrdr) == RES_OK); - test_spectrum(htrdr); - test_spectrum_fail(htrdr); + memsz = MEM_ALLOCATED_SIZE(htrdr_get_allocator(htrdr)); + + if(argc > 1) { + test_spectrum_from_files(htrdr, argc, argv); + } else { + test_spectrum(htrdr); + test_spectrum_fail(htrdr); + } + + CHK(MEM_ALLOCATED_SIZE(htrdr_get_allocator(htrdr)) == memsz); htrdr_ref_put(htrdr); htrdr_mpi_finalize();