commit 37585c58e000230eef6c2462884240e100332286
parent f5aa4e47225bbb7af28ab44dfc4a30bc7984b1eb
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Tue, 16 Jan 2024 15:24:56 +0100
Add and test the API function sdis_scene_get_source
It will be used to manually resolve the green function on scenes with an
external source.
Diffstat:
3 files changed, 42 insertions(+), 14 deletions(-)
diff --git a/src/sdis.h b/src/sdis.h
@@ -1170,6 +1170,11 @@ sdis_scene_get_device
(struct sdis_scene* scn,
struct sdis_device** device);
+SDIS_API res_T
+sdis_scene_get_source
+ (struct sdis_scene* scn,
+ struct sdis_source** src); /* May be NULL <=> no source */
+
/*******************************************************************************
* An estimator stores the state of a simulation
******************************************************************************/
diff --git a/src/sdis_scene.c b/src/sdis_scene.c
@@ -24,6 +24,7 @@
#include "sdis.h"
#include "sdis_interface_c.h"
#include "sdis_scene_c.h"
+#include "sdis_source_c.h"
#include <float.h>
#include <limits.h>
@@ -419,6 +420,14 @@ sdis_scene_get_device(struct sdis_scene* scn, struct sdis_device** device)
return RES_OK;
}
+res_T
+sdis_scene_get_source(struct sdis_scene* scn, struct sdis_source** source)
+{
+ if(!scn || !source) return RES_BAD_ARG;
+ *source = scn->source;
+ return RES_OK;
+}
+
/*******************************************************************************
* Local miscellaneous function
******************************************************************************/
diff --git a/src/test_sdis_external_flux.c b/src/test_sdis_external_flux.c
@@ -339,60 +339,74 @@ scene_get_position_3d(const size_t ivert, double pos[3], void* ctx)
}
static struct sdis_scene*
-create_scene_3d
+create_scene_2d
(struct sdis_device* sdis,
struct sdis_interface* interf_ground,
struct sdis_interface* interf_wall,
struct sdis_source* source)
{
struct sdis_scene* scn = NULL;
+ struct sdis_source* src = NULL;
struct sdis_scene_create_args scn_args = SDIS_SCENE_CREATE_ARGS_DEFAULT;
struct scene_context context = SCENE_CONTEXT_NULL;
context.interf_ground = interf_ground;
context.interf_wall = interf_wall;
- scn_args.get_indices = scene_get_indices_3d;
- scn_args.get_interface = scene_get_interface_3d;
- scn_args.get_position = scene_get_position_3d;
- scn_args.nprimitives = ntriangles;
- scn_args.nvertices = nvertices_3d;
+ scn_args.get_indices = scene_get_indices_2d;
+ scn_args.get_interface = scene_get_interface_2d;
+ scn_args.get_position = scene_get_position_2d;
+ scn_args.nprimitives = nsegments;
+ scn_args.nvertices = nvertices_2d;
scn_args.trad.temperature = 0; /* [K] */
scn_args.trad.reference = T_REF; /* [K] */
scn_args.t_range[0] = 0; /* [K] */
scn_args.t_range[1] = 0; /* [K] */
scn_args.source = source;
scn_args.context = &context;
- OK(sdis_scene_create(sdis, &scn_args, &scn));
+ OK(sdis_scene_2d_create(sdis, &scn_args, &scn));
+
+ BA(sdis_scene_get_source(NULL, &src));
+ BA(sdis_scene_get_source(scn, NULL));
+ OK(sdis_scene_get_source(scn, &src));
+ CHK(src == source);
+
return scn;
}
static struct sdis_scene*
-create_scene_2d
+create_scene_3d
(struct sdis_device* sdis,
struct sdis_interface* interf_ground,
struct sdis_interface* interf_wall,
struct sdis_source* source)
{
struct sdis_scene* scn = NULL;
+ struct sdis_source* src = NULL;
struct sdis_scene_create_args scn_args = SDIS_SCENE_CREATE_ARGS_DEFAULT;
struct scene_context context = SCENE_CONTEXT_NULL;
context.interf_ground = interf_ground;
context.interf_wall = interf_wall;
- scn_args.get_indices = scene_get_indices_2d;
- scn_args.get_interface = scene_get_interface_2d;
- scn_args.get_position = scene_get_position_2d;
- scn_args.nprimitives = nsegments;
- scn_args.nvertices = nvertices_2d;
+ scn_args.get_indices = scene_get_indices_3d;
+ scn_args.get_interface = scene_get_interface_3d;
+ scn_args.get_position = scene_get_position_3d;
+ scn_args.nprimitives = ntriangles;
+ scn_args.nvertices = nvertices_3d;
scn_args.trad.temperature = 0; /* [K] */
scn_args.trad.reference = T_REF; /* [K] */
scn_args.t_range[0] = 0; /* [K] */
scn_args.t_range[1] = 0; /* [K] */
scn_args.source = source;
scn_args.context = &context;
- OK(sdis_scene_2d_create(sdis, &scn_args, &scn));
+ OK(sdis_scene_create(sdis, &scn_args, &scn));
+
+ BA(sdis_scene_get_source(NULL, &src));
+ BA(sdis_scene_get_source(scn, NULL));
+ OK(sdis_scene_get_source(scn, &src));
+ CHK(src == source);
+
return scn;
}