stardis-solver

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

commit 507e409671de06a36a5b2f2322cef51790012bcf
parent c36e88eecef2099aebc21223803eccc3dc770361
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu,  3 Mar 2022 16:38:24 +0100

Test the rng_<type|state> variables of sdis_solve_camera

Diffstat:
Msrc/test_sdis_solve_camera.c | 39+++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+), 0 deletions(-)

diff --git a/src/test_sdis_solve_camera.c b/src/test_sdis_solve_camera.c @@ -16,6 +16,7 @@ #include "sdis.h" #include "test_sdis_utils.h" +#include <star/ssp.h> #include <star/s3dut.h> #include <rsys/algorithm.h> @@ -544,10 +545,12 @@ main(int argc, char** argv) struct s3dut_mesh* msh = NULL; struct s3dut_mesh_data msh_data; struct sdis_mc T = SDIS_MC_NULL; + struct sdis_mc T2 = SDIS_MC_NULL; struct sdis_mc time = SDIS_MC_NULL; struct sdis_camera* cam = NULL; struct sdis_device* dev = NULL; struct sdis_estimator_buffer* buf = NULL; + struct sdis_estimator_buffer* buf2 = NULL; struct sdis_medium* solid = NULL; struct sdis_medium* fluid0 = NULL; struct sdis_medium* fluid1 = NULL; @@ -558,6 +561,7 @@ main(int argc, char** argv) struct sdis_solve_camera_args solve_args = SDIS_SOLVE_CAMERA_ARGS_DEFAULT; struct sdis_ambient_radiative_temperature trad = SDIS_AMBIENT_RADIATIVE_TEMPERATURE_NULL; + struct ssp_rng* rng = NULL; struct ssp_rng* rng_state = NULL; struct fluid fluid_param = FLUID_NULL; struct solid solid_param = SOLID_NULL; @@ -727,6 +731,41 @@ main(int argc, char** argv) OK(sdis_estimator_buffer_ref_put(buf)); } + /* Check RNG type */ + solve_args.rng_state = NULL; + solve_args.rng_type = SSP_RNG_TYPE_NULL; + BA(sdis_solve_camera(scn, &solve_args, &buf2)); + solve_args.rng_type = + SDIS_SOLVE_CAMERA_ARGS_DEFAULT.rng_type == SSP_RNG_THREEFRY + ? SSP_RNG_MT19937_64 : SSP_RNG_THREEFRY; + OK(sdis_solve_camera(scn, &solve_args, &buf2)); + if(is_master_process) { + OK(sdis_estimator_buffer_get_temperature(buf2, &T2)); + CHK(T.E != T2.E); + CHK(T2.E + 3*T2.SE >= T.E - 3*T.SE + && T2.E - 3*T2.SE <= T.E + 3*T.SE); + OK(sdis_estimator_buffer_ref_put(buf2)); + } + + /* Check the RNG state */ + OK(ssp_rng_create(NULL, SSP_RNG_THREEFRY, &rng)); + OK(ssp_rng_discard(rng, 31415926535)); /* Move the RNG state */ + solve_args.rng_state = rng; + solve_args.rng_type = SSP_RNG_TYPE_NULL; + OK(sdis_solve_camera(scn, &solve_args, &buf2)); + OK(ssp_rng_ref_put(rng)); + if(is_master_process) { + OK(sdis_estimator_buffer_get_temperature(buf2, &T2)); + CHK(T.E != T2.E); + CHK(T2.E + 3*T2.SE >= T.E - 3*T.SE + && T2.E - 3*T2.SE <= T.E + 3*T.SE); + OK(sdis_estimator_buffer_ref_put(buf2)); + } + + /* Restore args */ + solve_args.rng_state = SDIS_SOLVE_CAMERA_ARGS_DEFAULT.rng_state; + solve_args.rng_type = SDIS_SOLVE_CAMERA_ARGS_DEFAULT.rng_type; + pfluid_param = sdis_data_get(sdis_medium_get_data(fluid1)); pfluid_param->temperature = UNKOWN_TEMPERATURE;