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:
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));
}