htrdr

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

commit 6325d4c369e5535ded7ba03319d2519e6c55699d
parent b9a4cd492c6d2e9a99c692c4063630559e3bf386
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 26 Oct 2022 12:45:34 +0200

htrdr-planeto: start implementing the run function

Diffstat:
Msrc/planeto/htrdr_planeto.c | 47+++++++++++++++++++++++++++++++++++++++++++++++
Msrc/planeto/htrdr_planeto_c.h | 1+
Msrc/planeto/htrdr_planeto_main.c | 3+++
3 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/src/planeto/htrdr_planeto.c b/src/planeto/htrdr_planeto.c @@ -199,6 +199,8 @@ setup_output goto error; } + cmd->output_type = args->output_type; + exit: return res; error: @@ -210,6 +212,28 @@ error: goto exit; } +static INLINE res_T +write_vtk_octrees(const struct htrdr_planeto* cmd) +{ + size_t octrees_range[2]; + res_T res = RES_OK; + ASSERT(cmd); + + /* Nothing to do on non master process */ + if(htrdr_get_mpi_rank(cmd->htrdr) != 0) goto exit; + + octrees_range[0] = 0; + octrees_range[1] = rnatm_get_spectral_items_count(cmd->atmosphere) - 1; + + res = rnatm_write_vtk_octrees(cmd->atmosphere, octrees_range, cmd->output); + if(res != RES_OK) goto error; + +exit: + return res; +error: + goto exit; +} + static void planeto_release(ref_T* ref) { @@ -293,3 +317,26 @@ htrdr_planeto_ref_put(struct htrdr_planeto* cmd) ASSERT(cmd); ref_put(&cmd->ref, planeto_release); } + +res_T +htrdr_planeto_run(struct htrdr_planeto* cmd) +{ + res_T res = RES_OK; + ASSERT(cmd); + + switch(cmd->output_type) { + case HTRDR_PLANETO_ARGS_OUTPUT_IMAGE: + htrdr_log_warn(cmd->htrdr, "image rendering is not yet implemented\n"); + break; + case HTRDR_PLANETO_ARGS_OUTPUT_OCTREES: + res = write_vtk_octrees(cmd); + break; + default: FATAL("Unreachable code.\n"); break; + } + if(res != RES_OK) goto error; + +exit: + return res; +error: + goto exit; +} diff --git a/src/planeto/htrdr_planeto_c.h b/src/planeto/htrdr_planeto_c.h @@ -38,6 +38,7 @@ struct htrdr_planeto { FILE* output; struct str output_name; + enum htrdr_planeto_args_output_type output_type; ref_T ref; struct htrdr* htrdr; diff --git a/src/planeto/htrdr_planeto_main.c b/src/planeto/htrdr_planeto_main.c @@ -60,6 +60,9 @@ htrdr_planeto_main(int argc, char** argv) res = htrdr_planeto_create(htrdr, &cmd_args, &cmd); if(res != RES_OK) goto error; + res = htrdr_planeto_run(cmd); + if(res != RES_OK) goto error; + exit: htrdr_planeto_args_release(&cmd_args); if(is_mpi_init) htrdr_mpi_finalize();