stardis-solver

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

commit dfe2ae42870c4b1023a78f8ff0814e7f128826e4
parent 67b1bd0dbe0ae288b355ae37c127fc3ee890f572
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 21 Dec 2017 11:41:23 +0100

Upd the profile of the medium/interface shader funcs

Diffstat:
Msrc/sdis.h | 17+++++++----------
Msrc/sdis_interface_c.h | 8++------
Msrc/sdis_medium_c.h | 36+++++++++---------------------------
Msrc/sdis_solve_probe.c | 8++++----
Msrc/test_sdis_utils.h | 26++++++++++----------------
5 files changed, 32 insertions(+), 63 deletions(-)

diff --git a/src/sdis.h b/src/sdis.h @@ -98,20 +98,17 @@ struct sdis_mc { }; /* Functor type to retrieve the medium properties. */ -typedef void +typedef double (*sdis_medium_getter_T) - (struct sdis_device* dev, - struct sdis_data* data, - const struct sdis_rwalk_vertex* vert, - double* val); + (const struct sdis_rwalk_vertex* vert, + struct sdis_data* data); + /* Functor type to retrieve the interface properties. */ -typedef void +typedef double (*sdis_interface_getter_T) - (struct sdis_device* dev, - struct sdis_data* data, - const struct sdis_interface_fragment* frag, - double* val); + (const struct sdis_interface_fragment* frag, + struct sdis_data* data); struct sdis_solid_shader { /* Properties */ diff --git a/src/sdis_interface_c.h b/src/sdis_interface_c.h @@ -55,11 +55,9 @@ interface_get_temperature (const struct sdis_interface* interface, const struct sdis_interface_fragment* frag) { - double T = -1; ASSERT(interface && frag); if(!interface->shader.temperature) return -DBL_MAX; - interface->shader.temperature(interface->dev, interface->data, frag, &T); - return T; + return interface->shader.temperature(frag, interface->data); } static INLINE double @@ -67,10 +65,8 @@ interface_get_convection_coef (const struct sdis_interface* interface, const struct sdis_interface_fragment* frag) { - double hc = -1; ASSERT(interface && frag); - interface->shader.convection_coef(interface->dev, interface->data, frag, &hc); - return hc; + return interface->shader.convection_coef(frag, interface->data); } #endif /* SDIS_INTERFACE_C_H */ diff --git a/src/sdis_medium_c.h b/src/sdis_medium_c.h @@ -38,30 +38,24 @@ static INLINE double fluid_get_calorific_capacity (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double cp = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_FLUID); - mdm->shader.fluid.calorific_capacity(mdm->dev, mdm->data, vtx, &cp); - return cp; + return mdm->shader.fluid.calorific_capacity(vtx, mdm->data); } static INLINE double fluid_get_volumic_mass (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double rho = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_FLUID); - mdm->shader.fluid.volumic_mass(mdm->dev, mdm->data, vtx, &rho); - return rho; + return mdm->shader.fluid.volumic_mass(vtx, mdm->data); } static INLINE double fluid_get_temperature (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double T = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_FLUID); - mdm->shader.fluid.temperature(mdm->dev, mdm->data, vtx, &T); - return T; + return mdm->shader.fluid.temperature(vtx, mdm->data); } /******************************************************************************* @@ -71,60 +65,48 @@ static INLINE double solid_get_calorific_capacity (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double cp = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_SOLID); - mdm->shader.solid.calorific_capacity(mdm->dev, mdm->data, vtx, &cp); - return cp; + return mdm->shader.solid.calorific_capacity(vtx, mdm->data); } static INLINE double solid_get_thermal_conductivity (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double lambda = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_SOLID); - mdm->shader.solid.thermal_conductivity(mdm->dev, mdm->data, vtx, &lambda); - return lambda; + return mdm->shader.solid.thermal_conductivity(vtx, mdm->data); } static INLINE double solid_get_volumic_mass (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double rho = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_SOLID); - mdm->shader.solid.volumic_mass(mdm->dev, mdm->data, vtx, &rho); - return rho; + return mdm->shader.solid.volumic_mass(vtx, mdm->data); } static INLINE double solid_get_delta (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double delta = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_SOLID); - mdm->shader.solid.delta_solid(mdm->dev, mdm->data, vtx, &delta); - return delta; + return mdm->shader.solid.delta_solid(vtx, mdm->data); } static INLINE double solid_get_delta_boundary (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double delta_bound = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_SOLID); - mdm->shader.solid.delta_boundary(mdm->dev, mdm->data, vtx, &delta_bound); - return delta_bound; + return mdm->shader.solid.delta_boundary(vtx, mdm->data); } static INLINE double solid_get_temperature (const struct sdis_medium* mdm, const struct sdis_rwalk_vertex* vtx) { - double T = -1; ASSERT(mdm && mdm->type == SDIS_MEDIUM_SOLID); - mdm->shader.solid.temperature(mdm->dev, mdm->data, vtx, &T); - return T; + return mdm->shader.solid.temperature(vtx, mdm->data); } #endif /* SDIS_MEDIUM_C_H */ diff --git a/src/sdis_solve_probe.c b/src/sdis_solve_probe.c @@ -400,7 +400,7 @@ solid_temperature const struct sdis_interface* interface; interface = scene_get_interface(scn, rwalk->hit.prim.prim_id); mdm = interface_get_medium - (interface, + (interface, f3_dot(rwalk->hit.normal, dir0) < 0 ? SDIS_FRONT : SDIS_BACK); } @@ -473,7 +473,7 @@ sdis_solve_probe_temperature goto error; } - res = scene_get_medium(scn, position, &medium); + res = scene_get_medium(scn, position, &medium); if(res != RES_OK) goto error; res = ssp_rng_create(scn->dev->allocator, &ssp_rng_mt19937_64, &rng); @@ -513,10 +513,10 @@ sdis_solve_probe_temperature } estimator->temperature.E = weight / (double)estimator->nrealisations; - estimator->temperature.V = + estimator->temperature.V = sqr_weight / (double)estimator->nrealisations - estimator->temperature.E * estimator->temperature.E; - estimator->temperature.SE = + estimator->temperature.SE = sqrt(estimator->temperature.V / (double)estimator->nrealisations); exit: diff --git a/src/test_sdis_utils.h b/src/test_sdis_utils.h @@ -57,28 +57,22 @@ static const size_t box_ntriangles = sizeof(box_indices) / sizeof(size_t[3]); /******************************************************************************* * Medium & interface ******************************************************************************/ -static INLINE void +static INLINE double dummy_medium_getter - (struct sdis_device* dev, - struct sdis_data* data, - const struct sdis_rwalk_vertex* vert, - double* val) + (const struct sdis_rwalk_vertex* vert, struct sdis_data* data) { - (void)dev, (void)data; - CHK(val != NULL && vert != NULL); - *val = 1; + (void)data; + CHK(vert != NULL); + return 1; } -static INLINE void +static INLINE double dummy_interface_getter - (struct sdis_device* dev, - struct sdis_data* data, - const struct sdis_interface_fragment* frag, - double* val) + (const struct sdis_interface_fragment* frag, struct sdis_data* data) { - (void)dev, (void)data; - CHK(val != NULL && frag != NULL); - *val = 1; + (void)data; + CHK(frag != NULL); + return 1; } static const struct sdis_solid_shader DUMMY_SOLID_SHADER = {