commit 7ca17757155e84efe86d77ccd7deef5fc7fc3c48
parent 241a8beb0e9453fcb2e1f95e6a13bea99cbd609e
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Tue, 5 Mar 2019 17:14:49 +0100
Add the sdis_scene_get_medium_spread function
Diffstat:
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/src/sdis.h b/src/sdis.h
@@ -681,6 +681,13 @@ sdis_scene_get_dimension
(const struct sdis_scene* scn,
enum sdis_scene_dimension* dim);
+/* Return the volume/area of a medium */
+SDIS_API res_T
+sdis_scene_get_medium_spread
+ (struct sdis_scene* scn,
+ const struct sdis_medium* mdm,
+ double* spread);
+
/*******************************************************************************
* An estimator stores the state of a simulation
******************************************************************************/
diff --git a/src/sdis_scene.c b/src/sdis_scene.c
@@ -312,13 +312,45 @@ sdis_scene_release_analysis(struct sdis_scene* scn)
res_T
sdis_scene_get_dimension
- (const struct sdis_scene* scn, enum sdis_scene_dimension* dim)
+ (const struct sdis_scene* scn, enum sdis_scene_dimension* dim)
{
if(!scn || !dim) return RES_BAD_ARG;
*dim = scene_is_2d(scn) ? SDIS_SCENE_2D : SDIS_SCENE_3D;
return RES_OK;
}
+res_T
+sdis_scene_get_medium_spread
+ (struct sdis_scene* scn,
+ const struct sdis_medium* mdm,
+ double* out_spread)
+{
+ struct htable_enclosure_iterator it, end;
+ double spread = 0;
+ res_T res = RES_OK;
+
+ if(!scn || !mdm || !out_spread) {
+ res = RES_BAD_ARG;
+ goto error;
+ }
+
+ htable_enclosure_begin(&scn->enclosures, &it);
+ htable_enclosure_end(&scn->enclosures, &end);
+ while(!htable_enclosure_iterator_eq(&it, &end)) {
+ const struct enclosure* enc = htable_enclosure_iterator_data_get(&it);
+ htable_enclosure_iterator_next(&it);
+ if(sdis_medium_get_id(mdm) == enc->medium_id) {
+ spread += enc->V;
+ }
+ }
+ *out_spread = spread;
+
+exit:
+ return res;
+error:
+ goto exit;
+}
+
/*******************************************************************************
* Local miscellaneous function
******************************************************************************/