stardis-solver

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

commit caf09eacf828b7737354d072c266ce914d04b9ba
parent c5cbf1eb480e6361f2c21d5c4f3959acffbcc493
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 21 Feb 2019 14:11:40 +0100

Add shader/data accessors to the interface and medium API

Diffstat:
Msrc/sdis.h | 21++++++++++++++++++++-
Msrc/sdis_interface.c | 17+++++++++++++++++
Msrc/sdis_medium.c | 18++++++++++++++++++
Msrc/test_sdis_interface.c | 25+++++++++++++++++++++++++
Msrc/test_sdis_medium.c | 37++++++++++++++++++++++++++++++++++---
5 files changed, 114 insertions(+), 4 deletions(-)

diff --git a/src/sdis.h b/src/sdis.h @@ -430,6 +430,11 @@ sdis_fluid_create struct sdis_medium** fluid); SDIS_API res_T +sdis_fluid_get_shader + (const struct sdis_medium* fluid, + struct sdis_fluid_shader* shader); + +SDIS_API res_T sdis_solid_create (struct sdis_device* dev, const struct sdis_solid_shader* shader, @@ -437,6 +442,11 @@ sdis_solid_create struct sdis_medium** solid); SDIS_API res_T +sdis_solid_get_shader + (const struct sdis_medium* solid, + struct sdis_solid_shader* shader); + +SDIS_API res_T sdis_medium_ref_get (struct sdis_medium* medium); @@ -472,6 +482,15 @@ SDIS_API res_T sdis_interface_ref_put (struct sdis_interface* interf); +SDIS_API res_T +sdis_interface_get_shader + (const struct sdis_interface* interface, + struct sdis_interface_shader* shader); + +SDIS_API struct sdis_data* +sdis_interface_get_data + (struct sdis_interface* interface); + /******************************************************************************* * A scene is a collection of primitives. Each primitive is the geometric * support of the interface between 2 media. @@ -610,7 +629,7 @@ sdis_estimator_get_type SDIS_API res_T sdis_estimator_get_realisation_count (const struct sdis_estimator* estimator, - size_t* nrealisations); /* Succesfull ones */ + size_t* nrealisations); /* Successful ones */ SDIS_API res_T sdis_estimator_get_failure_count diff --git a/src/sdis_interface.c b/src/sdis_interface.c @@ -184,6 +184,23 @@ sdis_interface_ref_put(struct sdis_interface* interf) return RES_OK; } +SDIS_API res_T +sdis_interface_get_shader + (const struct sdis_interface* interf, + struct sdis_interface_shader* shader) +{ + if(!interf || !shader) return RES_BAD_ARG; + *shader = interf->shader; + return RES_OK; +} + +struct sdis_data* +sdis_interface_get_data(struct sdis_interface* interf) +{ + ASSERT(interf); + return interf->data; +} + /******************************************************************************* * Local function ******************************************************************************/ diff --git a/src/sdis_medium.c b/src/sdis_medium.c @@ -142,6 +142,15 @@ error: } res_T +sdis_fluid_get_shader + (const struct sdis_medium* mdm, struct sdis_fluid_shader* shader) +{ + if(!mdm || mdm->type != SDIS_FLUID || !shader) return RES_BAD_ARG; + *shader = mdm->shader.fluid; + return RES_OK; +} + +res_T sdis_solid_create (struct sdis_device* dev, const struct sdis_solid_shader* shader, @@ -187,6 +196,15 @@ error: } res_T +sdis_solid_get_shader + (const struct sdis_medium* mdm, struct sdis_solid_shader* shader) +{ + if(!mdm || mdm->type != SDIS_SOLID || !shader) return RES_BAD_ARG; + *shader = mdm->shader.solid; + return RES_OK; +} + +res_T sdis_medium_ref_get(struct sdis_medium* medium) { if(!medium) return RES_BAD_ARG; diff --git a/src/test_sdis_interface.c b/src/test_sdis_interface.c @@ -20,6 +20,7 @@ int main(int argc, char** argv) { struct mem_allocator allocator; + struct sdis_data* data = NULL; struct sdis_device* dev = NULL; struct sdis_medium* fluid = NULL; struct sdis_medium* solid = NULL; @@ -27,6 +28,7 @@ main(int argc, char** argv) struct sdis_fluid_shader fluid_shader = DUMMY_FLUID_SHADER; struct sdis_solid_shader solid_shader = DUMMY_SOLID_SHADER; struct sdis_interface_shader shader = DUMMY_INTERFACE_SHADER; + struct sdis_interface_shader shader2 = SDIS_INTERFACE_SHADER_NULL; (void)argc, (void)argv; OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator)); @@ -107,6 +109,29 @@ main(int argc, char** argv) OK(sdis_interface_ref_put(interf)); BA(CREATE(dev, solid, fluid, &shader, NULL, &interf)); shader.convection_coef_upper_bound = 0; + + OK(sdis_data_create(dev, 4, 16, NULL, &data)); + OK(CREATE(dev, solid, fluid, &shader, data, &interf)); + CHK(sdis_interface_get_data(interf) == data); + + BA(sdis_interface_get_shader(NULL, &shader2)); + BA(sdis_interface_get_shader(interf, NULL)); + OK(sdis_interface_get_shader(interf, &shader2)); + + CHK(shader.convection_coef == shader2.convection_coef); + CHK(shader.convection_coef_upper_bound == shader2.convection_coef_upper_bound); + CHK(shader.front.temperature == shader2.front.temperature); + CHK(shader.front.flux == shader2.front.flux); + CHK(shader.front.emissivity == shader2.front.emissivity); + CHK(shader.front.specular_fraction == shader2.front.specular_fraction); + CHK(shader.back.temperature == shader2.back.temperature); + CHK(shader.back.flux == shader2.back.flux); + CHK(shader.back.emissivity == shader2.back.emissivity); + CHK(shader.back.specular_fraction == shader2.back.specular_fraction); + + OK(sdis_interface_ref_put(interf)); + OK(sdis_data_ref_put(data)); + #undef CREATE OK(sdis_device_ref_put(dev)); diff --git a/src/test_sdis_medium.c b/src/test_sdis_medium.c @@ -28,6 +28,8 @@ main(int argc, char** argv) struct sdis_medium* solid = NULL; struct sdis_fluid_shader fluid_shader = DUMMY_FLUID_SHADER; struct sdis_solid_shader solid_shader = DUMMY_SOLID_SHADER; + struct sdis_fluid_shader fluid_shader2 = SDIS_FLUID_SHADER_NULL; + struct sdis_solid_shader solid_shader2 = SDIS_SOLID_SHADER_NULL; (void)argc, (void)argv; OK(mem_init_proxy_allocator(&allocator, &mem_default_allocator)); @@ -64,9 +66,9 @@ main(int argc, char** argv) fluid_shader.temperature = DUMMY_FLUID_SHADER.temperature; fluid_shader.t0 = -1; - BA(sdis_fluid_create(dev, &fluid_shader, NULL, &solid)); + BA(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid)); fluid_shader.t0 = INF; - BA(sdis_fluid_create(dev, &fluid_shader, NULL, &solid)); + BA(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid)); fluid_shader.t0 = DUMMY_FLUID_SHADER.t0; BA(sdis_fluid_create(dev, &SDIS_FLUID_SHADER_NULL, NULL, &fluid)); @@ -82,7 +84,8 @@ main(int argc, char** argv) OK(sdis_solid_create(dev, &solid_shader, data, &solid)); CHK(sdis_medium_get_type(solid) == SDIS_SOLID); CHK(sdis_medium_get_data(solid) == data); - OK(sdis_medium_ref_put(solid)); + + OK(sdis_medium_ref_put(solid)); OK(sdis_data_ref_put(data)); solid_shader.calorific_capacity = NULL; @@ -111,6 +114,34 @@ main(int argc, char** argv) BA(sdis_solid_create(dev, &solid_shader, NULL, &solid)); solid_shader.t0 = DUMMY_SOLID_SHADER.t0; + OK(sdis_fluid_create(dev, &fluid_shader, NULL, &fluid)); + OK(sdis_solid_create(dev, &solid_shader, NULL, &solid)); + + BA(sdis_fluid_get_shader(NULL, &fluid_shader2)); + BA(sdis_fluid_get_shader(fluid, NULL)); + BA(sdis_fluid_get_shader(solid, &fluid_shader2)); + OK(sdis_fluid_get_shader(fluid, &fluid_shader2)); + + CHK(fluid_shader.calorific_capacity == fluid_shader2.calorific_capacity); + CHK(fluid_shader.volumic_mass == fluid_shader2.volumic_mass); + CHK(fluid_shader.temperature == fluid_shader2.temperature); + CHK(fluid_shader.t0 == fluid_shader2.t0); + + BA(sdis_solid_get_shader(NULL, &solid_shader2)); + BA(sdis_solid_get_shader(solid, NULL)); + BA(sdis_solid_get_shader(fluid, &solid_shader2)); + OK(sdis_solid_get_shader(solid, &solid_shader2)); + + CHK(solid_shader.calorific_capacity == solid_shader2.calorific_capacity); + CHK(solid_shader.thermal_conductivity == solid_shader2.thermal_conductivity); + CHK(solid_shader.volumic_mass == solid_shader2.volumic_mass); + CHK(solid_shader.delta_solid == solid_shader2.delta_solid); + CHK(solid_shader.volumic_power == solid_shader2.volumic_power); + CHK(solid_shader.temperature == solid_shader2.temperature); + CHK(solid_shader.t0 == solid_shader2.t0); + + OK(sdis_medium_ref_put(solid)); + OK(sdis_medium_ref_put(fluid)); OK(sdis_device_ref_put(dev)); check_memory_allocator(&allocator);