rnatm

Load and structure data describing an atmosphere
git clone git://git.meso-star.fr/rnatm.git
Log | Files | Refs | README | LICENSE

commit e0b60364cae4e842e611f47288944e74c8cdcd23
parent 18e67850a59852942ec3a9834a15d8612bb3bb32
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 27 Jul 2022 11:37:40 +0200

Add rnatm_get_k_svx_voxel function

Diffstat:
Msrc/rnatm.c | 30++++++++++++++++++++++++++++++
Msrc/rnatm.h | 7+++++++
Msrc/rnatm_write_vtk_octree.c | 6++----
3 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/src/rnatm.c b/src/rnatm.c @@ -21,6 +21,7 @@ #include "rnatm.h" #include "rnatm_c.h" #include "rnatm_log.h" +#include "rnatm_voxel.h" #include <rad-net/rnsf.h> @@ -244,6 +245,35 @@ rnatm_ref_put(struct rnatm* atm) return RES_OK; } +double +rnatm_get_k_svx_voxel + (const struct rnatm* atm, + const struct svx_voxel* voxel, + const enum rnatm_radcoef radcoef, + const enum rnatm_svx_op op) +{ + const float* vx; + float k_min; + float k_max; + ASSERT(atm && voxel && radcoef); + ASSERT((unsigned)radcoef < RNATM_RADCOEFS_COUNT__); + ASSERT((unsigned)op < RNATM_SVX_OPS_COUNT__); + (void)atm; + + vx = voxel->data; + k_min = vx[voxel_idata(radcoef, RNATM_SVX_OP_MIN)]; + k_max = vx[voxel_idata(radcoef, RNATM_SVX_OP_MAX)]; + + /* Return a zero radiative coefficient for empty voxels */ + if(k_min > k_max) return 0; + + switch(op) { + case RNATM_SVX_OP_MIN: return k_min; + case RNATM_SVX_OP_MAX: return k_max; + default: FATAL("Unreachable code\n"); break; + } +} + /******************************************************************************* * Local functions ******************************************************************************/ diff --git a/src/rnatm.h b/src/rnatm.h @@ -144,6 +144,13 @@ RNATM_API res_T rnatm_validate (const struct rnatm* atm); +RNATM_API double +rnatm_get_k_svx_voxel + (const struct rnatm* atm, + const struct svx_voxel* voxel, + const enum rnatm_radcoef radcoef, + const enum rnatm_svx_op op); + RNATM_API res_T rnatm_write_vtk_octree (const struct rnatm* atm, diff --git a/src/rnatm_write_vtk_octree.c b/src/rnatm_write_vtk_octree.c @@ -93,7 +93,6 @@ register_leaf void* context) { struct octree_data* ctx = context; - const float* vx = NULL; struct vertex v[8]; double kext_min; double kext_max; @@ -128,9 +127,8 @@ register_leaf } /* Register leaf data */ - vx = leaf->data; - kext_min = vx[voxel_idata(RNATM_RADCOEF_Kext, RNATM_SVX_OP_MIN)]; - kext_max = vx[voxel_idata(RNATM_RADCOEF_Kext, RNATM_SVX_OP_MAX)]; + kext_min = rnatm_get_k_svx_voxel(ctx->atm, leaf, RNATM_RADCOEF_Kext, RNATM_SVX_OP_MIN); + kext_max = rnatm_get_k_svx_voxel(ctx->atm, leaf, RNATM_RADCOEF_Kext, RNATM_SVX_OP_MAX); CHK(RES_OK == darray_double_push_back(&ctx->data, &kext_min)); CHK(RES_OK == darray_double_push_back(&ctx->data, &kext_max)); }