stardis-solver

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

commit 71720d93e0bf2c0307f6278c9e5bb10a0f8ba56c
parent 884ce54a86686e9d52fce3bb005690a0d48d5093
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 28 Feb 2022 16:14:55 +0100

Test the rng_<type|state> of sdis_solve_medium

Diffstat:
Mcmake/CMakeLists.txt | 1+
Msrc/test_sdis_solve_medium.c | 38++++++++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt @@ -256,6 +256,7 @@ if(NOT NO_TEST) target_link_libraries(test_sdis_solve_boundary StarSP) target_link_libraries(test_sdis_solve_probe2 StarSP) + target_link_libraries(test_sdis_solve_medium StarSP) set(_mpi_tests test_sdis diff --git a/src/test_sdis_solve_medium.c b/src/test_sdis_solve_medium.c @@ -18,6 +18,7 @@ #include <rsys/math.h> #include <rsys/stretchy_array.h> +#include <star/ssp.h> #include <star/s3dut.h> #include <string.h> @@ -202,6 +203,7 @@ main(int argc, char** argv) struct s3dut_mesh* msh0 = NULL; struct s3dut_mesh* msh1 = NULL; struct sdis_mc T = SDIS_MC_NULL; + struct sdis_mc T2 = SDIS_MC_NULL; struct sdis_mc time = SDIS_MC_NULL; struct sdis_device* dev = NULL; struct sdis_medium* solid0 = NULL; @@ -224,6 +226,7 @@ main(int argc, char** argv) struct sdis_solid_shader solid_shader = DUMMY_SOLID_SHADER; struct sdis_interface_shader interface_shader = SDIS_INTERFACE_SHADER_NULL; struct sdis_solve_medium_args solve_args = SDIS_SOLVE_MEDIUM_ARGS_DEFAULT; + struct ssp_rng* rng = NULL; struct context ctx; double ref; double v, v0, v1; @@ -450,6 +453,41 @@ main(int argc, char** argv) CHK(eq_eps(T.E, ref, T.SE*3)); } + /* Check RNG type */ + solve_args.rng_state = NULL; + solve_args.rng_type = SSP_RNG_TYPE_NULL; + BA(sdis_solve_medium(scn, &solve_args, &estimator2)); + solve_args.rng_type = + SDIS_SOLVE_MEDIUM_ARGS_DEFAULT.rng_type == SSP_RNG_THREEFRY + ? SSP_RNG_MT19937_64 : SSP_RNG_THREEFRY; + OK(sdis_solve_medium(scn, &solve_args, &estimator2)); + if(is_master_process) { + OK(sdis_estimator_get_temperature(estimator2, &T2)); + CHK(eq_eps(T2.E, ref, 3*T2.SE)); + CHK(T2.E != T.E); + OK(sdis_estimator_ref_put(estimator2)); + } + + /* Check 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_medium(scn, &solve_args, &estimator2)); + OK(ssp_rng_ref_put(rng)); + if(is_master_process) { + OK(sdis_estimator_get_temperature(estimator2, &T2)); + CHK(eq_eps(T2.E, ref, 3*T2.SE)); + CHK(T2.E != T.E); + OK(sdis_estimator_ref_put(estimator2)); + } + + /* Restore args */ + solve_args.rng_state = SDIS_SOLVE_PROBE_ARGS_DEFAULT.rng_state; + solve_args.rng_type = SDIS_SOLVE_PROBE_ARGS_DEFAULT.rng_type; + + + /* Solve green */ BA(sdis_solve_medium_green_function(NULL, &solve_args, &green)); BA(sdis_solve_medium_green_function(scn, NULL, &green));