stardis-solver

Solve coupled heat transfers
git clone git://git.meso-star.fr/stardis-solver.git
Log | Files | Refs | README | LICENSE

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:
Msrc/sdis.h | 5+++++
Msrc/sdis_scene.c | 9+++++++++
Msrc/test_sdis_external_flux.c | 42++++++++++++++++++++++++++++--------------
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; }