stardis-solver

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

commit 110112776ed3607d6025c863dc53b4e15a7b2607
parent dd0b8a5f28901a711bc02284d5afc439f91e68f2
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue, 16 Jan 2024 16:26:02 +0100

MPI can be used for external flux calculation test

Diffstat:
MMakefile | 8++++----
Msrc/test_sdis_external_flux.c | 28+++++++++++++++++++---------
2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/Makefile b/Makefile @@ -179,7 +179,6 @@ TEST_SRC =\ src/test_sdis_data.c\ src/test_sdis_draw_external_flux.c\ src/test_sdis_enclosure_limit_conditions.c\ - src/test_sdis_external_flux.c\ src/test_sdis_flux.c\ src/test_sdis_flux2.c\ src/test_sdis_flux_with_h.c\ @@ -206,6 +205,7 @@ TEST_SRC_MPI =\ src/test_sdis.c\ src/test_sdis_compute_power.c\ src/test_sdis_device.c\ + src/test_sdis_external_flux.c\ src/test_sdis_solve_camera.c\ src/test_sdis_solve_medium.c\ src/test_sdis_solve_medium_2d.c\ @@ -281,7 +281,6 @@ src/test_sdis_convection.d \ src/test_sdis_convection_non_uniform.d \ src/test_sdis_data.d \ src/test_sdis_enclosure_limit_conditions.d \ -src/test_sdis_external_flux.d \ src/test_sdis_flux.d \ src/test_sdis_flux2.d \ src/test_sdis_flux_with_h.d \ @@ -313,7 +312,6 @@ src/test_sdis_convection.o \ src/test_sdis_convection_non_uniform.o \ src/test_sdis_data.o \ src/test_sdis_enclosure_limit_conditions.o \ -src/test_sdis_external_flux.o \ src/test_sdis_flux.o \ src/test_sdis_flux2.o \ src/test_sdis_flux_with_h.o \ @@ -345,7 +343,6 @@ test_sdis_convection \ test_sdis_convection_non_uniform \ test_sdis_data \ test_sdis_enclosure_limit_conditions \ -test_sdis_external_flux \ test_sdis_flux \ test_sdis_flux2 \ test_sdis_flux_with_h \ @@ -408,18 +405,21 @@ test_sdis_scene \ ################################################################################ src/test_sdis.d \ src/test_sdis_device.d \ +src/test_sdis_external_flux.d \ src/test_sdis_solve_medium_2d.d \ : config.mk sdis-local.pc @$(CC) $(TEST_CFLAGS_MPI) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ src/test_sdis.o \ src/test_sdis_device.o \ +src/test_sdis_external_flux.o \ src/test_sdis_solve_medium_2d.o \ : config.mk sdis-local.pc $(CC) $(TEST_CFLAGS_MPI) -c $(@:.o=.c) -o $@ test_sdis \ test_sdis_device \ +test_sdis_external_flux \ test_sdis_solve_medium_2d \ : config.mk sdis-local.pc $(LIBNAME) src/test_sdis_utils.o $(CC) $(TEST_CFLAGS_MPI) -o $@ src/$@.o $(TEST_LIBS_MPI) diff --git a/src/test_sdis_external_flux.c b/src/test_sdis_external_flux.c @@ -417,7 +417,8 @@ static void check (struct sdis_scene* scn, const size_t nrealisations, - const double analytical_ref) + const double analytical_ref, + const int is_master_process) { struct sdis_solve_probe_args probe_args = SDIS_SOLVE_PROBE_ARGS_DEFAULT; struct sdis_mc T = SDIS_MC_NULL; @@ -428,8 +429,10 @@ check probe_args.position[2] = 0; probe_args.nrealisations = nrealisations; OK(sdis_solve_probe(scn, &probe_args, &estimator)); - OK(sdis_estimator_get_temperature(estimator, &T)); + if(!is_master_process) return; + + OK(sdis_estimator_get_temperature(estimator, &T)); printf("T(%g, %g, %g) = %g ~ %g +/- %g\n", SPLIT3(probe_args.position), analytical_ref, T.E, T.SE); OK(sdis_estimator_ref_put(estimator)); @@ -441,7 +444,8 @@ static void check_green (struct sdis_scene* scn, const size_t nrealisations, - const double analytical_ref) + const double analytical_ref, + const int is_master_process) { struct sdis_solve_probe_args probe_args = SDIS_SOLVE_PROBE_ARGS_DEFAULT; struct sdis_mc T = SDIS_MC_NULL; @@ -453,6 +457,9 @@ check_green probe_args.position[2] = 0; probe_args.nrealisations = nrealisations; OK(sdis_solve_probe_green_function(scn, &probe_args, &green)); + + if(!is_master_process) return; + OK(sdis_green_function_solve(green, &estimator)); check_green_function(green); @@ -482,9 +489,10 @@ main(int argc, char** argv) struct sdis_scene* scn_3d = NULL; struct interface* ground_interf_data = NULL; + int is_master_process = 0; (void) argc, (void)argv; - OK(sdis_device_create(&SDIS_DEVICE_CREATE_ARGS_DEFAULT, &dev)); + create_default_device(&argc, &argv, &is_master_process, &dev); fluid = create_fluid(dev); solid = create_solid(dev); @@ -497,14 +505,13 @@ main(int argc, char** argv) scn_3d = create_scene_3d(dev, interf_ground, interf_wall, src); ground_interf_data->specular_fraction = 0; /* Lambertian */ - check(scn_2d, 10000/* #réalisations */, 375.88/* Reference [K] */); - check_green(scn_3d, 10000/* #réalisations */, 375.88/* Reference [K] */); + check(scn_2d, 10000, 375.88, is_master_process); + check_green(scn_3d, 10000, 375.88, is_master_process); ground_interf_data->specular_fraction = 1; /* Specular */ - check(scn_2d, 100000/* #réalisations */, 417.77/* Reference [K] */); - check_green(scn_3d, 100000/* #réalisations */, 417.77/* Reference [K] */); + check(scn_2d, 100000, 417.77, is_master_process); + check_green(scn_3d, 100000, 417.77, is_master_process); - OK(sdis_device_ref_put(dev)); OK(sdis_medium_ref_put(fluid)); OK(sdis_medium_ref_put(solid)); OK(sdis_interface_ref_put(interf_ground)); @@ -512,6 +519,9 @@ main(int argc, char** argv) OK(sdis_source_ref_put(src)); OK(sdis_scene_ref_put(scn_2d)); OK(sdis_scene_ref_put(scn_3d)); + + free_default_device(dev); + CHK(mem_allocated_size() == 0); return 0; }