stardis-solver

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

commit 8fa232aee7cc1141261c86d159b3832bdf66f4ae
parent a5a2a005071b8a2cf884e025dfaff4c518fa2c14
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 11 Apr 2024 13:47:33 +0200

Make interface properties dependent on radiation source

Now, the emissivity and specular fraction of the interface depend on the
radiation source, whose identifier is an argument to their associated
functor. At present, nothing has changed in the solver, which still
queries these properties for the internal source. This commit is
therefore an intermediary to correct the compilation of tests in
relation to this API break.

Diffstat:
Msrc/sdis.h | 12++++++++++--
Msrc/sdis_interface_c.h | 7+++++--
Msrc/test_sdis_conducto_radiative.c | 10++++++++--
Msrc/test_sdis_conducto_radiative_2d.c | 10++++++++--
Msrc/test_sdis_convection.c | 10++++++++--
Msrc/test_sdis_convection_non_uniform.c | 10++++++++--
Msrc/test_sdis_draw_external_flux.c | 4+++-
Msrc/test_sdis_external_flux.c | 15+++++++++++++--
Msrc/test_sdis_flux2.c | 10++++++++--
Msrc/test_sdis_interface.c | 8++++----
Msrc/test_sdis_picard.c | 10++++++++--
Msrc/test_sdis_solve_boundary_flux.c | 5++++-
Msrc/test_sdis_solve_camera.c | 10++++++++--
Msrc/test_sdis_solve_medium.c | 10++++++++--
Msrc/test_sdis_solve_medium_2d.c | 10++++++++--
Msrc/test_sdis_solve_probe.c | 10++++++++--
Msrc/test_sdis_unsteady_atm.c | 8++++++--
Msrc/test_sdis_utils.h | 15+++++++++++++--
18 files changed, 138 insertions(+), 36 deletions(-)

diff --git a/src/sdis.h b/src/sdis.h @@ -249,6 +249,14 @@ typedef double (const struct sdis_interface_fragment* frag, /* Interface position */ struct sdis_data* data); /* User data */ +/* Type of functor for obtaining the spatio temporal physical properties of an + * interface, as a function of the radiation source */ +typedef double +(*sdis_radiative_interface_getter_T) + (const struct sdis_interface_fragment* frag, /* Interface position */ + const unsigned source_id, /* Identifier of the radiation source */ + struct sdis_data* data); /* User data */ + /* Type of functor for obtaining radiative environment properties */ typedef double (*sdis_radiative_ray_getter_T) @@ -311,8 +319,8 @@ struct sdis_interface_side_shader { /* Control the emissivity of the interface. May be NULL for solid/solid * interface or if the emissivity is 0 onto the whole interface. */ - sdis_interface_getter_T emissivity; /* Overall emissivity. */ - sdis_interface_getter_T specular_fraction; /* Specular part in [0,1] */ + sdis_radiative_interface_getter_T emissivity; /* Overall emissivity */ + sdis_radiative_interface_getter_T specular_fraction; /* Specular part in [0,1] */ /* Reference temperature used in Picard 1 */ sdis_interface_getter_T reference_temperature; diff --git a/src/sdis_interface_c.h b/src/sdis_interface_c.h @@ -152,7 +152,9 @@ interface_side_get_emissivity case SDIS_BACK: shader = &interf->shader.back; break; default: FATAL("Unreachable code\n"); break; } - return shader->emissivity ? shader->emissivity(frag, interf->data) : 0; + return shader->emissivity + ? shader->emissivity(frag, SDIS_INTERN_SOURCE_ID, interf->data) + : 0; } static INLINE double @@ -168,7 +170,8 @@ interface_side_get_specular_fraction default: FATAL("Unreachable code\n"); break; } return shader->specular_fraction - ? shader->specular_fraction(frag, interf->data) : 0; + ? shader->specular_fraction(frag, SDIS_INTERN_SOURCE_ID, interf->data) + : 0; } static INLINE double diff --git a/src/test_sdis_conducto_radiative.c b/src/test_sdis_conducto_radiative.c @@ -212,16 +212,22 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interfac*)sdis_data_cget(data))->emissivity; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interfac*)sdis_data_cget(data))->specular_fraction; } diff --git a/src/test_sdis_conducto_radiative_2d.c b/src/test_sdis_conducto_radiative_2d.c @@ -192,10 +192,13 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { const struct interfac* interf; double e = -1; + (void)source_id; CHK(data != NULL && frag != NULL); interf = sdis_data_cget(data); switch(frag->side) { @@ -208,10 +211,13 @@ interface_get_emissivity static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { const struct interfac* interf; double f = -1; + (void)source_id; CHK(data != NULL && frag != NULL); interf = sdis_data_cget(data); switch(frag->side) { diff --git a/src/test_sdis_convection.c b/src/test_sdis_convection.c @@ -122,16 +122,22 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(frag && data); return 0; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(frag && data); return 0; } diff --git a/src/test_sdis_convection_non_uniform.c b/src/test_sdis_convection_non_uniform.c @@ -131,16 +131,22 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(frag && data); return 0; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(frag && data); return 0; } diff --git a/src/test_sdis_draw_external_flux.c b/src/test_sdis_draw_external_flux.c @@ -144,9 +144,11 @@ interface_get_temperature static double interface_get_emissivity (const struct sdis_interface_fragment* frag, + const unsigned source_id, struct sdis_data* data) { - (void)frag, (void)data;/* Avoid the "unused variable" warning */ + /* Avoid the "unused variable" warning */ + (void)frag, (void)source_id, (void)data; return EMISSIVITY; } diff --git a/src/test_sdis_external_flux.c b/src/test_sdis_external_flux.c @@ -196,18 +196,29 @@ INTERF_PROP(reference_temperature, T_REF) /* [K] */ static double \ interface_get_##Prop \ (const struct sdis_interface_fragment* frag, \ + const unsigned source_id, \ struct sdis_data* data) \ { \ struct interface* interf_data = NULL; \ - (void)frag; /* Avoid the "unused variable" warning */ \ + (void)frag, (void)source_id; /* Avoid the "unused variable" warning */ \ interf_data = sdis_data_get(data); \ return interf_data->Prop; \ } INTERF_PROP(emissivity) INTERF_PROP(specular_fraction) -INTERF_PROP(convection_coef) /* [W/m^2/K] */ #undef INTERF_PROP +static double /* [W/m^2/K] */ +interface_get_convection_coef + (const struct sdis_interface_fragment* frag, + struct sdis_data* data) +{ + struct interface* interf_data = NULL; + (void)frag; /* Avoid the "unused variable" warning */ + interf_data = sdis_data_get(data); + return interf_data->convection_coef; +} + static struct sdis_interface* create_interface (struct sdis_device* sdis, diff --git a/src/test_sdis_flux2.c b/src/test_sdis_flux2.c @@ -281,17 +281,23 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { const struct interf* interf = sdis_data_cget(data); + (void)source_id; CHK(frag && interf); return interf->emissivity; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(frag && data); return 0; /* Unused */ } diff --git a/src/test_sdis_interface.c b/src/test_sdis_interface.c @@ -88,18 +88,18 @@ main(int argc, char** argv) OK(CREATE(dev, solid, solid, &shader, NULL, &interf)); OK(sdis_interface_ref_put(interf)); - shader.back.emissivity = dummy_interface_getter; + shader.back.emissivity = dummy_radiative_interface_getter; OK(CREATE(dev, solid, fluid, &shader, NULL, &interf)); OK(sdis_interface_ref_put(interf)); - shader.back.specular_fraction = dummy_interface_getter; + shader.back.specular_fraction = dummy_radiative_interface_getter; OK(CREATE(dev, solid, fluid, &shader, NULL, &interf)); OK(sdis_interface_ref_put(interf)); shader.back = SDIS_INTERFACE_SIDE_SHADER_NULL; - shader.front.emissivity = dummy_interface_getter; + shader.front.emissivity = dummy_radiative_interface_getter; OK(CREATE(dev, solid, fluid, &shader, NULL, &interf)); /* Warning */ OK(sdis_interface_ref_put(interf)); shader.front.emissivity = NULL; - shader.front.specular_fraction = dummy_interface_getter; + shader.front.specular_fraction = dummy_radiative_interface_getter; OK(CREATE(dev, solid, fluid, &shader, NULL, &interf)); /* Warning */ OK(sdis_interface_ref_put(interf)); shader.front.specular_fraction = NULL; diff --git a/src/test_sdis_picard.c b/src/test_sdis_picard.c @@ -306,18 +306,24 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { const struct interf* interf = sdis_data_cget(data); + (void)source_id; CHK(frag && interf); return interf->emissivity; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { const struct interf* interf = sdis_data_cget(data); + (void)source_id; CHK(frag && interf); return interf->specular_fraction; } diff --git a/src/test_sdis_solve_boundary_flux.c b/src/test_sdis_solve_boundary_flux.c @@ -156,9 +156,12 @@ interface_get_temperature static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { const struct interf* interf = sdis_data_cget(data); + (void)source_id; CHK(frag && data); return interf->emissivity; } diff --git a/src/test_sdis_solve_camera.c b/src/test_sdis_solve_camera.c @@ -253,16 +253,22 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interf*)sdis_data_cget(data))->epsilon; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interf*)sdis_data_cget(data))->specular_fraction; } diff --git a/src/test_sdis_solve_medium.c b/src/test_sdis_solve_medium.c @@ -178,16 +178,22 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interf*)sdis_data_cget(data))->epsilon; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interf*)sdis_data_cget(data))->specular_fraction; } diff --git a/src/test_sdis_solve_medium_2d.c b/src/test_sdis_solve_medium_2d.c @@ -166,16 +166,22 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interf*)sdis_data_cget(data))->epsilon; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interf*)sdis_data_cget(data))->specular_fraction; } diff --git a/src/test_sdis_solve_probe.c b/src/test_sdis_solve_probe.c @@ -156,16 +156,22 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interf*)sdis_data_cget(data))->epsilon; } static double interface_get_specular_fraction - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { + (void)source_id; CHK(data != NULL && frag != NULL); return ((const struct interf*)sdis_data_cget(data))->specular_fraction; } diff --git a/src/test_sdis_unsteady_atm.c b/src/test_sdis_unsteady_atm.c @@ -347,9 +347,12 @@ interface_get_convection_coef static double interface_get_emissivity - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) { const struct interf* interf; + (void)source_id; CHK(frag && data); interf = sdis_data_cget(data); return interf->emissivity; @@ -357,7 +360,8 @@ interface_get_emissivity static double interface_get_Tref - (const struct sdis_interface_fragment* frag, struct sdis_data* data) + (const struct sdis_interface_fragment* frag, + struct sdis_data* data) { const struct interf* interf; CHK(frag && data); diff --git a/src/test_sdis_utils.h b/src/test_sdis_utils.h @@ -170,6 +170,17 @@ dummy_interface_getter } static INLINE double +dummy_radiative_interface_getter + (const struct sdis_interface_fragment* frag, + const unsigned source_id, + struct sdis_data* data) +{ + (void)data, (void)source_id; + CHK(frag != NULL); + return 0; +} + +static INLINE double dummy_ray_getter(const struct sdis_radiative_ray* ray, struct sdis_data* data) { (void)data; @@ -197,8 +208,8 @@ static const struct sdis_fluid_shader DUMMY_FLUID_SHADER = { #define DUMMY_INTERFACE_SIDE_SHADER__ { \ dummy_interface_getter, /* Temperature */ \ dummy_interface_getter, /* Flux */ \ - dummy_interface_getter, /* Emissivity */ \ - dummy_interface_getter, /* Specular fraction */ \ + dummy_radiative_interface_getter, /* Emissivity */ \ + dummy_radiative_interface_getter, /* Specular fraction */ \ dummy_interface_getter, /* Reference temperature */ \ 1 /* Handle external flux */ \ }