stardis-solver

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

commit 0dd0b5d1f6fb3f551b6cfe578f10b22ec4edce9e
parent 7ca17757155e84efe86d77ccd7deef5fc7fc3c48
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue,  5 Mar 2019 17:15:08 +0100

Push further the medium solver tests

Diffstat:
Msrc/sdis_solve_medium_Xd.h | 2+-
Msrc/test_sdis_solve_medium.c | 48+++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/src/sdis_solve_medium_Xd.h b/src/sdis_solve_medium_Xd.h @@ -76,7 +76,7 @@ compute_medium_enclosure_cumulative if(sdis_medium_get_id(mdm) != enc->medium_id) continue; - accum += enc->V + accum; + accum += enc->V; enc_cumul.enc = enc; enc_cumul.cumul = accum; res = darray_enclosure_cumul_push_back(cumul, &enc_cumul); diff --git a/src/test_sdis_solve_medium.c b/src/test_sdis_solve_medium.c @@ -194,6 +194,7 @@ main(int argc, char** argv) struct sdis_medium* fluid0 = NULL; struct sdis_medium* fluid1 = NULL; struct sdis_interface* solid0_fluid0 = NULL; + struct sdis_interface* solid0_fluid1 = NULL; struct sdis_interface* solid1_fluid1 = NULL; struct sdis_scene* scn = NULL; struct sdis_data* data = NULL; @@ -206,6 +207,8 @@ main(int argc, char** argv) struct sdis_interface_shader interface_shader = SDIS_INTERFACE_SHADER_NULL; struct context ctx; const double trange[2] = {0, INF}; + double ref; + double v, v0, v1; const size_t N = 1000; size_t nreals; size_t nfails; @@ -258,7 +261,7 @@ main(int argc, char** argv) (dev, sizeof(struct solid), ALIGNOF(struct solid), NULL, &data)); solid_param = sdis_data_get(data); solid_param->cp = 1.0; - solid_param->lambda = 10.0; + solid_param->lambda = 1.0; solid_param->rho = 1.0; solid_param->delta = 1.0/20.0; solid_param->temperature = -1; /* Unknown temperature */ @@ -280,6 +283,8 @@ main(int argc, char** argv) OK(sdis_interface_create (dev, solid0, fluid0, &interface_shader, data, &solid0_fluid0)); OK(sdis_interface_create + (dev, solid0, fluid1, &interface_shader, data, &solid0_fluid1)); + OK(sdis_interface_create (dev, solid1, fluid1, &interface_shader, data, &solid1_fluid1)); OK(sdis_data_ref_put(data)); @@ -318,6 +323,18 @@ main(int argc, char** argv) OK(sdis_scene_create(dev, ntris, get_indices, get_interface, nverts, get_position, &ctx, &scn)); + BA(sdis_scene_get_medium_spread(NULL, solid0, &v0)); + BA(sdis_scene_get_medium_spread(scn, NULL, &v0)); + BA(sdis_scene_get_medium_spread(scn, solid0, NULL)); + OK(sdis_scene_get_medium_spread(scn, solid0, &v0)); + CHK(v0 > 0); + OK(sdis_scene_get_medium_spread(scn, solid1, &v1)); + CHK(v1 > 0); + OK(sdis_scene_get_medium_spread(scn, fluid0, &v)); + CHK(v == 0); + OK(sdis_scene_get_medium_spread(scn, fluid1, &v)); + CHK(v == 0); + BA(sdis_solve_medium(NULL, N, solid0, trange, 1.f, -1, 0, 0, &estimator)); BA(sdis_solve_medium(scn, 0, solid0, trange, 1.f, -1, 0, 0, &estimator)); BA(sdis_solve_medium(scn, N, NULL, trange, 1.f, -1, 0, 0, &estimator)); @@ -345,6 +362,34 @@ main(int argc, char** argv) CHK(nreals + nfails == N); OK(sdis_estimator_ref_put(estimator)); +#if 0 + OK(sdis_solve_medium(scn, 1, solid1, trange, 1.f, -1, 0, + SDIS_HEAT_PATH_ALL, &estimator)); + dump_heat_paths(stderr, estimator); + OK(sdis_estimator_ref_put(estimator)); +#endif + + /* Create a new scene with the same medium in the 2 super shapes */ + OK(sdis_scene_ref_put(scn)); + ctx.interf0 = solid0_fluid0; + ctx.interf1 = solid0_fluid1; + OK(sdis_scene_create(dev, ntris, get_indices, get_interface, nverts, + get_position, &ctx, &scn)); + + OK(sdis_scene_get_medium_spread(scn, solid0, &v)); + CHK(eq_eps(v, v0+v1, 1.e-6)); + + BA(sdis_solve_medium(scn, N, solid1, trange, 1.f, -1, 0, 0, &estimator)); + OK(sdis_solve_medium(scn, 10000, solid0, trange, 1.f, -1, 0, 0, &estimator)); + OK(sdis_estimator_get_temperature(estimator, &T)); + OK(sdis_estimator_get_realisation_count(estimator, &nreals)); + OK(sdis_estimator_get_failure_count(estimator, &nfails)); + ref = Tf0 * v0/v + Tf1 * v1/v; + printf("Solid0 + Solid1 = %g ~ %g +/- %g\n", ref, T.E, T.SE); + printf("#failures = %lu/10000\n", nfails); + CHK(eq_eps(T.E, ref, T.SE*3)); + OK(sdis_estimator_ref_put(estimator)); + /* Release */ OK(s3dut_mesh_ref_put(msh0)); OK(s3dut_mesh_ref_put(msh1)); @@ -354,6 +399,7 @@ main(int argc, char** argv) OK(sdis_medium_ref_put(solid0)); OK(sdis_medium_ref_put(solid1)); OK(sdis_interface_ref_put(solid0_fluid0)); + OK(sdis_interface_ref_put(solid0_fluid1)); OK(sdis_interface_ref_put(solid1_fluid1)); OK(sdis_scene_ref_put(scn));