From dbdfb2de9c9ff1288378fa21308fcbfbef0d3c59 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 18 Sep 2025 17:25:48 +0100 Subject: [PATCH 01/48] Implement domain decomposition with static map --- .gitignore | 1 + CMakeLists.txt | 4 +- examples/2D_c5g7_python_mesh/._reference.txt | Bin 0 -> 224 bytes examples/2D_c5g7_python_mesh/build-xml-2d.py | 707 ++++++++++++++++++ .../2D_c5g7_python_mesh/pin_power_error.py | 60 ++ examples/2D_c5g7_python_mesh/reference.txt | 34 + include/openmc/random_ray/decomposition_map.h | 54 ++ .../openmc/random_ray/flat_source_domain.h | 19 +- include/openmc/random_ray/random_ray.h | 38 + .../openmc/random_ray/random_ray_simulation.h | 8 +- include/openmc/random_ray/ray_bank.h | 68 ++ src/random_ray/decomposition_map.cpp | 79 ++ src/random_ray/flat_source_domain.cpp | 28 +- src/random_ray/random_ray.cpp | 159 +++- src/random_ray/random_ray_simulation.cpp | 122 ++- src/random_ray/ray_bank.cpp | 227 ++++++ src/tallies/tally.cpp | 2 +- 17 files changed, 1584 insertions(+), 26 deletions(-) create mode 100644 examples/2D_c5g7_python_mesh/._reference.txt create mode 100755 examples/2D_c5g7_python_mesh/build-xml-2d.py create mode 100644 examples/2D_c5g7_python_mesh/pin_power_error.py create mode 100644 examples/2D_c5g7_python_mesh/reference.txt create mode 100644 include/openmc/random_ray/decomposition_map.h create mode 100644 include/openmc/random_ray/ray_bank.h create mode 100644 src/random_ray/decomposition_map.cpp create mode 100644 src/random_ray/ray_bank.cpp diff --git a/.gitignore b/.gitignore index 3b2a24a4dbc..077d4d4706e 100644 --- a/.gitignore +++ b/.gitignore @@ -69,6 +69,7 @@ scripts/G4EMLOW*/ *.ppm *.voxel *.vti +*.vtk # PyCharm project configuration files .idea diff --git a/CMakeLists.txt b/CMakeLists.txt index 474451c8aeb..9fe428f967b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ option(OPENMC_ENABLE_PROFILE "Compile with profiling flags" option(OPENMC_ENABLE_COVERAGE "Compile with coverage analysis flags" OFF) option(OPENMC_USE_DAGMC "Enable support for DAGMC (CAD) geometry" OFF) option(OPENMC_USE_LIBMESH "Enable support for libMesh unstructured mesh tallies" OFF) -option(OPENMC_USE_MPI "Enable MPI" OFF) +option(OPENMC_USE_MPI "Enable MPI" ON) option(OPENMC_USE_UWUW "Enable UWUW" OFF) option(OPENMC_FORCE_VENDORED_LIBS "Explicitly use submodules defined in 'vendor'" OFF) @@ -380,6 +380,8 @@ list(APPEND libopenmc_SOURCES src/progress_bar.cpp src/random_dist.cpp src/random_lcg.cpp + src/random_ray/decomposition_map.cpp + src/random_ray/ray_bank.cpp src/random_ray/random_ray_simulation.cpp src/random_ray/random_ray.cpp src/random_ray/flat_source_domain.cpp diff --git a/examples/2D_c5g7_python_mesh/._reference.txt b/examples/2D_c5g7_python_mesh/._reference.txt new file mode 100644 index 0000000000000000000000000000000000000000..b831a88196d39026198a83bcc95f318b585b634a GIT binary patch literal 224 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@j4&|@gD#&5x_AdBnYbP0g&DT#5zzu zjABHH>m}#s>LnHwmJwu literal 0 HcmV?d00001 diff --git a/examples/2D_c5g7_python_mesh/build-xml-2d.py b/examples/2D_c5g7_python_mesh/build-xml-2d.py new file mode 100755 index 00000000000..dfb0cecf7a0 --- /dev/null +++ b/examples/2D_c5g7_python_mesh/build-xml-2d.py @@ -0,0 +1,707 @@ +import openmc +import openmc.mgxs +import numpy as np + +z_min = -32.13 +z_max = 32.13 + +############################################################################### +# General Settings +############################################################################### + +# Instantiate a Settings, set all runtime parameters, and export to XML +settings_file = openmc.Settings() +settings_file.energy_mode = "multi-group" +settings_file.batches = 1000 +settings_file.inactive = 600 +settings_file.particles = 1750 +settings_file.run_mode = 'eigenvalue' +settings_file.output = {'tallies': False, 'summary': False} + +# Create an initial uniform spatial source distribution for sampling rays. +# Note that this must be uniform in space and angle. +lower_left = (-64.26/2, -64.26/2, -1e-5) +upper_right = (64.26/2, 64.26/2, 1e-5) +uniform_dist = openmc.stats.Box(lower_left, upper_right) +settings_file.random_ray['ray_source'] = openmc.IndependentSource(space=uniform_dist) +settings_file.random_ray['distance_inactive'] = 60.0 +settings_file.random_ray['distance_active'] = 250.0 +settings_file.random_ray['source_shape'] = 'flat' +settings_file.random_ray['sample_method'] = 'prng' + +# A mesh with pincell level resolution will be overlaid by default. +# Increasing this parameter above 1 will subdivide the mesh further. +mesh_resolution_multiplier = 7 + + +############################################################################### +# Plots +############################################################################### + +plot_1 = openmc.Plot(plot_id=1) +plot_1.filename = 'plot_1' +plot_1.origin = [0.0, 0.0, 0.0] +plot_1.width = [64.26, 64.26, 1.0] +plot_1.pixels = [1000, 1000, 1] +plot_1.type = 'voxel' + +# Instantiate a Plots collection and export to XML +plot_file = openmc.Plots([plot_1]) + +############################################################################### +# Pinmaker Utility +############################################################################### + +def pinmaker(inner_fill, outer_fill, fuel_radius): + + pincell_base = openmc.Universe() + + cylinder = openmc.ZCylinder(r=fuel_radius) + inside_cell = openmc.Cell(fill=inner_fill, region=-cylinder) + outside_cell = openmc.Cell(fill=outer_fill, region=+cylinder) + pincell_base.add_cells([inside_cell, outside_cell]) + + return pincell_base + +############################################################################### +# MGXS +############################################################################### + +# Instantiate the energy group data +groups = openmc.mgxs.EnergyGroups(np.logspace(-5, 7, 8)) + +# Instantiate the 7-group C5G7 cross section data +uo2_xsdata = openmc.XSdata('uo2', groups) +uo2_xsdata.order = 0 +uo2_xsdata.set_total( + np.array([1.779490E-01, 3.298050E-01, 4.803880E-01, 5.543670E-01, + 3.118010E-01, 3.951680E-01, 5.644060E-01])) +uo2_xsdata.set_absorption( + np.array([8.02480E-03, 3.71740E-03, 2.67690E-02, 9.62360E-02, 3.00200E-02, + 1.11260E-01, 2.82780E-01])) +scatter_matrix = \ + [[[1.275370E-01, 4.237800E-02, 9.437400E-06, 5.516300E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 3.244560E-01, 1.631400E-03, 3.142700E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 4.509400E-01, 2.679200E-03, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 4.525650E-01, 5.566400E-03, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 1.252500E-04, 2.714010E-01, 1.025500E-02, 1.002100E-08], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 1.296800E-03, 2.658020E-01, 1.680900E-02], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 8.545800E-03, 2.730800E-01]]] +scatter_matrix = np.array(scatter_matrix) +scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) +uo2_xsdata.set_scatter_matrix(scatter_matrix) +uo2_xsdata.set_fission( + np.array([7.212060E-03, 8.193010E-04, 6.453200E-03, 1.856480E-02, 1.780840E-02, 8.303480E-02, 2.160040E-01])) +uo2_xsdata.set_nu_fission( + np.array([2.005998E-02, 2.027303E-03, 1.570599E-02, 4.518301E-02, 4.334208E-02, 2.020901E-01, 5.257105E-01])) +uo2_xsdata.set_chi( + np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) + +mox43_xsdata = openmc.XSdata('mox43', groups) +mox43_xsdata.order = 0 +mox43_xsdata.set_total( + np.array([1.787310E-01, 3.308490E-01, 4.837720E-01, 5.669220E-01, 4.262270E-01, 6.789970E-01, 6.828520E-01])) +mox43_xsdata.set_absorption( + np.array([8.43390E-03, 3.75770E-03, 2.79700E-02, 1.04210E-01, 1.39940E-01, 4.09180E-01, 4.09350E-01])) +scatter_matrix = \ + [[[1.288760E-01, 4.141300E-02, 8.229000E-06, 5.040500E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 3.254520E-01, 1.639500E-03, 1.598200E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 4.531880E-01, 2.614200E-03, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 4.571730E-01, 5.539400E-03, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 1.604600E-04, 2.768140E-01, 9.312700E-03, 9.165600E-09], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 2.005100E-03, 2.529620E-01, 1.485000E-02], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 8.494800E-03, 2.650070E-01]]] +scatter_matrix = np.array(scatter_matrix) +scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) +mox43_xsdata.set_scatter_matrix(scatter_matrix) +mox43_xsdata.set_fission( + np.array([7.62704E-03, 8.76898E-04, 5.69835E-03, 2.28872E-02, 1.07635E-02, 2.32757E-01, 2.48968E-01])) +mox43_xsdata.set_nu_fission( + np.array([2.175300E-02, 2.535103E-03, 1.626799E-02, 6.547410E-02, 3.072409E-02, 6.666510E-01, 7.139904E-01])) +mox43_xsdata.set_chi( + np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) + +mox7_xsdata = openmc.XSdata('mox7', groups) +mox7_xsdata.order = 0 +mox7_xsdata.set_total( + np.array([1.813230E-01, 3.343680E-01, 4.937850E-01, 5.912160E-01, 4.741980E-01, 8.336010E-01, 8.536030E-01])) +mox7_xsdata.set_absorption( + np.array([9.06570E-03, 4.29670E-03, 3.28810E-02, 1.22030E-01, 1.82980E-01, 5.68460E-01, 5.85210E-01])) +scatter_matrix = \ + [[[1.304570E-01, 4.179200E-02, 8.510500E-06, 5.132900E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 3.284280E-01, 1.643600E-03, 2.201700E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 4.583710E-01, 2.533100E-03, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 4.637090E-01, 5.476600E-03, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 1.761900E-04, 2.823130E-01, 8.728900E-03, 9.001600E-09], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 2.276000E-03, 2.497510E-01, 1.311400E-02], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 8.864500E-03, 2.595290E-01]]] +scatter_matrix = np.array(scatter_matrix) +scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) +mox7_xsdata.set_scatter_matrix(scatter_matrix) +mox7_xsdata.set_fission( + np.array([8.25446E-03, 1.32565E-03, 8.42156E-03, 3.28730E-02, 1.59636E-02, 3.23794E-01, 3.62803E-01])) +mox7_xsdata.set_nu_fission( + np.array([2.381395E-02, 3.858689E-03, 2.413400E-02, 9.436622E-02, 4.576988E-02, 9.281814E-01, 1.043200E+00])) +mox7_xsdata.set_chi( + np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) + +mox87_xsdata = openmc.XSdata('mox87', groups) +mox87_xsdata.order = 0 +mox87_xsdata.set_total( + np.array([1.830450E-01, 3.367050E-01, 5.005070E-01, 6.061740E-01, 5.027540E-01, 9.210280E-01, 9.552310E-01])) +mox87_xsdata.set_absorption( + np.array([9.48620E-03, 4.65560E-03, 3.62400E-02, 1.32720E-01, 2.08400E-01, 6.58700E-01, 6.90170E-01])) +scatter_matrix = \ + [[[1.315040E-01, 4.204600E-02, 8.697200E-06, 5.193800E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 3.304030E-01, 1.646300E-03, 2.600600E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 4.617920E-01, 2.474900E-03, 0.000000E-00, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 4.680210E-01, 5.433000E-03, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 1.859700E-04, 2.857710E-01, 8.397300E-03, 8.928000E-09], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 2.391600E-03, 2.476140E-01, 1.232200E-02], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 8.968100E-03, 2.560930E-01]]] +scatter_matrix = np.array(scatter_matrix) +scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) +mox87_xsdata.set_scatter_matrix(scatter_matrix) +mox87_xsdata.set_fission( + np.array([8.67209E-03, 1.62426E-03, 1.02716E-02, 3.90447E-02, 1.92576E-02, 3.74888E-01, 4.30599E-01])) +mox87_xsdata.set_nu_fission( + np.array([2.518600E-02, 4.739509E-03, 2.947805E-02, 1.122500E-01, 5.530301E-02, 1.074999E+00, 1.239298E+00])) +mox87_xsdata.set_chi( + np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) + +fiss_chamber_xsdata = openmc.XSdata('fiss_chamber', groups) +fiss_chamber_xsdata.order = 0 +fiss_chamber_xsdata.set_total( + np.array([1.260320E-01, 2.931600E-01, 2.842500E-01, 2.810200E-01, 3.344600E-01, 5.656400E-01, 1.172140E+00])) +fiss_chamber_xsdata.set_absorption( + np.array([5.11320E-04, 7.58130E-05, 3.16430E-04, 1.16750E-03, 3.39770E-03, 9.18860E-03, 2.32440E-02])) +scatter_matrix = \ + [[[6.616590E-02, 5.907000E-02, 2.833400E-04, 1.462200E-06, 2.064200E-08, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 2.403770E-01, 5.243500E-02, 2.499000E-04, 1.923900E-05, 2.987500E-06, 4.214000E-07], + [0.000000E-00, 0.000000E-00, 1.834250E-01, 9.228800E-02, 6.936500E-03, 1.079000E-03, 2.054300E-04], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 7.907690E-02, 1.699900E-01, 2.586000E-02, 4.925600E-03], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 3.734000E-05, 9.975700E-02, 2.067900E-01, 2.447800E-02], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 9.174200E-04, 3.167740E-01, 2.387600E-01], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 4.979300E-02, 1.09910E+00]]] +scatter_matrix = np.array(scatter_matrix) +scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) +fiss_chamber_xsdata.set_scatter_matrix(scatter_matrix) +fiss_chamber_xsdata.set_fission( + np.array([4.79002E-09, 5.82564E-09, 4.63719E-07, 5.24406E-06, 1.45390E-07, 7.14972E-07, 2.08041E-06])) +fiss_chamber_xsdata.set_nu_fission( + np.array([1.323401E-08, 1.434500E-08, 1.128599E-06, 1.276299E-05, 3.538502E-07, 1.740099E-06, 5.063302E-06])) +fiss_chamber_xsdata.set_chi( + np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) + +guide_tube_xsdata = openmc.XSdata('guide_tube', groups) +guide_tube_xsdata.order = 0 +guide_tube_xsdata.set_total( + np.array([1.260320E-01, 2.931600E-01, 2.842400E-01, 2.809600E-01, 3.344400E-01, 5.656400E-01, 1.172150E+00])) +guide_tube_xsdata.set_absorption( + np.array([5.11320E-04, 7.58010E-05, 3.15720E-04, 1.15820E-03, 3.39750E-03, 9.18780E-03, 2.32420E-02])) +scatter_matrix = \ + [[[6.616590E-02, 5.907000E-02, 2.833400E-04, 1.462200E-06, 2.064200E-08, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 2.403770E-01, 5.243500E-02, 2.499000E-04, 1.923900E-05, 2.987500E-06, 4.214000E-07], + [0.000000E-00, 0.000000E-00, 1.832970E-01, 9.239700E-02, 6.944600E-03, 1.080300E-03, 2.056700E-04], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 7.885110E-02, 1.701400E-01, 2.588100E-02, 4.929700E-03], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 3.733300E-05, 9.973720E-02, 2.067900E-01, 2.447800E-02], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 9.172600E-04, 3.167650E-01, 2.387700E-01], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 4.979200E-02, 1.099120E+00]]] +scatter_matrix = np.array(scatter_matrix) +scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) +guide_tube_xsdata.set_scatter_matrix(scatter_matrix) + +water_xsdata = openmc.XSdata('water', groups) +water_xsdata.order = 0 +water_xsdata.set_total( + np.array([1.592060E-01, 4.129700E-01, 5.903100E-01, 5.843500E-01, 7.180000E-01, 1.254450E+00, 2.650380E+00])) +water_xsdata.set_absorption( + np.array([6.01050E-04, 1.57930E-05, 3.37160E-04, 1.94060E-03, 5.74160E-03, 1.50010E-02, 3.72390E-02])) +scatter_matrix = \ + [[[4.447770E-02, 1.134000E-01, 7.234700E-04, 3.749900E-06, 5.318400E-08, 0.000000E-00, 0.000000E-00], + [0.000000E-00, 2.823340E-01, 1.299400E-01, 6.234000E-04, 4.800200E-05, 7.448600E-06, 1.045500E-06], + [0.000000E-00, 0.000000E-00, 3.452560E-01, 2.245700E-01, 1.699900E-02, 2.644300E-03, 5.034400E-04], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 9.102840E-02, 4.155100E-01, 6.373200E-02, 1.213900E-02], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 7.143700E-05, 1.391380E-01, 5.118200E-01, 6.122900E-02], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 2.215700E-03, 6.999130E-01, 5.373200E-01], + [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 1.324400E-01, 2.480700E+00]]] +scatter_matrix = np.array(scatter_matrix) +scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) +water_xsdata.set_scatter_matrix(scatter_matrix) + +control_rod_xsdata = openmc.XSdata('control_rod', groups) +control_rod_xsdata.order = 0 +control_rod_xsdata.set_total( + np.array([2.16768E-01, 4.80098E-01, 8.86369E-01, 9.70009E-01, 9.10482E-01, 1.13775E+00, 1.84048E+00])) +control_rod_xsdata.set_absorption( + np.array([1.70490E-03, 8.36224E-03, 8.37901E-02, 3.97797E-01, 6.98763E-01, 9.29508E-01, 1.17836E+00])) +scatter_matrix = \ + [[[1.70563E-01, 4.44012E-02, 9.83670E-05, 1.27786E-07, 0.00000E-00, 0.00000E-00, 0.00000E-00], + [0.00000E-00, 4.71050E-01, 6.85480E-04, 3.91395E-10, 0.00000E-00, 0.00000E-00, 0.00000E-00], + [0.00000E-00, 0.00000E-00, 8.01859E-01, 7.20132E-04, 0.00000E-00, 0.00000E-00, 0.00000E-00], + [0.00000E-00, 0.00000E-00, 0.00000E-00, 5.70752E-01, 1.46015E-03, 0.00000E-00, 0.00000E-00], + [0.00000E-00, 0.00000E-00, 0.00000E-00, 6.55562E-05, 2.07838E-01, 3.81486E-03, 3.69760E-09], + [0.00000E-00, 0.00000E-00, 0.00000E-00, 0.00000E-00, 1.02427E-03, 2.02465E-01, 4.75290E-03], + [0.00000E-00, 0.00000E-00, 0.00000E-00, 0.00000E-00, 0.00000E-00, 3.53043E-03, 6.58597E-01]]] +scatter_matrix = np.array(scatter_matrix) +scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) +control_rod_xsdata.set_scatter_matrix(scatter_matrix) + +mg_cross_sections_file = openmc.MGXSLibrary(groups) +mg_cross_sections_file.add_xsdatas([uo2_xsdata, mox43_xsdata, mox7_xsdata, mox87_xsdata, + fiss_chamber_xsdata, guide_tube_xsdata, water_xsdata, + control_rod_xsdata]) +mg_cross_sections_file.export_to_hdf5() + +############################################################################### +# Materials +############################################################################### + +# Instantiate some Macroscopic Data +uo2_data = openmc.Macroscopic('uo2') +mox43_data = openmc.Macroscopic('mox43') +mox7_data = openmc.Macroscopic('mox7') +mox87_data = openmc.Macroscopic('mox87') +fiss_chamber_data = openmc.Macroscopic('fiss_chamber') +guide_tube_data = openmc.Macroscopic('guide_tube') +water_data = openmc.Macroscopic('water') +control_rod_data = openmc.Macroscopic('control_rod') + +# Instantiate Materials dictionary +materials = {} + +# Instantiate some Materials and register the appropriate Nuclides +materials['UO2'] = openmc.Material(name='UO2') +materials['UO2'].set_density('macro', 1.0) +materials['UO2'].add_macroscopic(uo2_data) + +materials['MOX 4.3%'] = openmc.Material(name='MOX 4.3%') +materials['MOX 4.3%'].set_density('macro', 1.0) +materials['MOX 4.3%'].add_macroscopic(mox43_data) + +materials['MOX 7.0%'] = openmc.Material(name='MOX 7.0%') +materials['MOX 7.0%'].set_density('macro', 1.0) +materials['MOX 7.0%'].add_macroscopic(mox7_data) + +materials['MOX 8.7%'] = openmc.Material(name='MOX 8.7%') +materials['MOX 8.7%'].set_density('macro', 1.0) +materials['MOX 8.7%'].add_macroscopic(mox87_data) + +materials['Fission Chamber'] = openmc.Material(name='Fission Chamber') +materials['Fission Chamber'].set_density('macro', 1.0) +materials['Fission Chamber'].add_macroscopic(fiss_chamber_data) + +materials['Guide Tube'] = openmc.Material(name='Guide Tube') +materials['Guide Tube'].set_density('macro', 1.0) +materials['Guide Tube'].add_macroscopic(guide_tube_data) + +materials['Water'] = openmc.Material(name='Water') +materials['Water'].set_density('macro', 1.0) +materials['Water'].add_macroscopic(water_data) + +materials['Control Rod'] = openmc.Material(name='Control Rod') +materials['Control Rod'].set_density('macro', 1.0) +materials['Control Rod'].add_macroscopic(control_rod_data) + +# Instantiate a Materials collection, register all Materials, and export to XML +materials_file = openmc.Materials(materials.values()) +materials_file.cross_sections = './mgxs.h5' + +############################################################################### +# Surfaces +############################################################################### + +# Create a dictionary to store the surfaces +surfaces = {} + +# Instantiate Pin Cell ZCylinder surface +surfaces['Pin Cell ZCylinder'] = openmc.ZCylinder(x0=0, y0=0, r=0.54, name='Pin Cell ZCylinder') +surfaces['Core x-min'] = openmc.XPlane(x0=-32.13, name='Core x-min') +surfaces['Core x-max'] = openmc.XPlane(x0= 32.13, name='Core x-max') +surfaces['Core y-min'] = openmc.YPlane(y0=-32.13, name='Core y-min') +surfaces['Core y-max'] = openmc.YPlane(y0= 32.13, name='Core y-max') +surfaces['Small Core z-min'] = openmc.ZPlane(z0=z_min, name='Small Core z-min') +surfaces['Small Core z-max'] = openmc.ZPlane(z0=z_max, name='Small Core z-max') +surfaces['Big Core z-min'] = openmc.ZPlane(z0=-107.1, name='Big Core z-min') +surfaces['Big Core z-max'] = openmc.ZPlane(z0= 107.1, name='Big Core z-max') +surfaces['Pin x-min'] = openmc.XPlane(x0=-0.63, name='Pin x-min') +surfaces['Pin x-max'] = openmc.XPlane(x0=+0.63, name='Pin x-max') +surfaces['Pin y-min'] = openmc.YPlane(y0=-0.63, name='Pin y-min') +surfaces['Pin y-max'] = openmc.YPlane(y0=+0.63, name='Pin y-max') + +surfaces['Core x-max'].boundary_type = 'vacuum' +surfaces['Core y-min'].boundary_type = 'vacuum' +surfaces['Core y-max'].boundary_type = 'reflective' +surfaces['Small Core z-min'].boundary_type = 'reflective' +surfaces['Small Core z-max'].boundary_type = 'reflective' +surfaces['Big Core z-min'].boundary_type = 'reflective' +surfaces['Big Core z-max'].boundary_type = 'vacuum' +surfaces['Pin x-min'].boundary_type = 'reflective' +surfaces['Pin x-max'].boundary_type = 'reflective' +surfaces['Pin y-min'].boundary_type = 'reflective' +surfaces['Pin y-max'].boundary_type = 'reflective' +surfaces['Core x-min'].boundary_type = 'reflective' + +############################################################################### +# Cells +############################################################################### + +# Instantiate Cells +cells = {} +cells['UO2'] = openmc.Cell(name='UO2') +cells['MOX 4.3%'] = openmc.Cell(name='MOX 4.3%') +cells['MOX 7.0%'] = openmc.Cell(name='MOX 7.0%') +cells['MOX 8.7%'] = openmc.Cell(name='MOX 8.7%') +cells['Fission Chamber'] = openmc.Cell(name='Fission Chamber') +cells['Guide Tube'] = openmc.Cell(name='Guide Tube') +cells['Reflector'] = openmc.Cell(name='Reflector') +cells['Control Rod'] = openmc.Cell(name='Control Rod') +cells['UO2 Moderator'] = openmc.Cell(name='UO2 Moderator') +cells['MOX 4.3% Moderator'] = openmc.Cell(name='MOX 4.3% Moderator') +cells['MOX 7.0% Moderator'] = openmc.Cell(name='MOX 7.0% Moderator') +cells['MOX 8.7% Moderator'] = openmc.Cell(name='MOX 8.7% Moderator') +cells['Fission Chamber Moderator'] = openmc.Cell(name='Fission Chamber Moderator') +cells['Guide Tube Moderator'] = openmc.Cell(name='Guide Tube Moderator') +cells['Control Rod Moderator'] = openmc.Cell(name='Control Rod Moderator') +cells['UO2 Unrodded Assembly'] = openmc.Cell(name='UO2 Unrodded Assembly') +cells['UO2 Rodded Assembly'] = openmc.Cell(name='UO2 Rodded Assembly') +cells['MOX Unrodded Assembly'] = openmc.Cell(name='MOX Unrodded Assembly') +cells['MOX Rodded Assembly'] = openmc.Cell(name='MOX Rodded Assembly') +cells['Reflector Unrodded Assembly'] = openmc.Cell(name='Water Unrodded Assembly') +cells['Reflector Rodded Assembly'] = openmc.Cell(name='Water Rodded Assembly') +cells['Core'] = openmc.Cell(name='Core') +cells['UO2 Pin'] = openmc.Cell(name='UO2 Pin') + +cells['Reflector'] = openmc.Cell(name='Reflector') + +# Use surface half-spaces to define regions +cells['UO2'].region = -surfaces['Pin Cell ZCylinder'] +cells['MOX 4.3%'].region = -surfaces['Pin Cell ZCylinder'] +cells['MOX 7.0%'].region = -surfaces['Pin Cell ZCylinder'] +cells['MOX 8.7%'].region = -surfaces['Pin Cell ZCylinder'] +cells['Fission Chamber'].region = -surfaces['Pin Cell ZCylinder'] +cells['Guide Tube'].region = -surfaces['Pin Cell ZCylinder'] +cells['Control Rod'].region = -surfaces['Pin Cell ZCylinder'] +cells['UO2 Moderator'].region = +surfaces['Pin Cell ZCylinder'] +cells['MOX 4.3% Moderator'].region = +surfaces['Pin Cell ZCylinder'] +cells['MOX 7.0% Moderator'].region = +surfaces['Pin Cell ZCylinder'] +cells['MOX 8.7% Moderator'].region = +surfaces['Pin Cell ZCylinder'] +cells['Fission Chamber Moderator'].region = +surfaces['Pin Cell ZCylinder'] +cells['Guide Tube Moderator'].region = +surfaces['Pin Cell ZCylinder'] +cells['Control Rod Moderator'].region = +surfaces['Pin Cell ZCylinder'] +cells['UO2 Pin'].region = +surfaces['Pin Cell ZCylinder'] & \ + +surfaces['Pin x-min'] & \ + -surfaces['Pin x-max'] & \ + +surfaces['Pin y-min'] & \ + -surfaces['Pin y-max'] + +# Register Materials with Cells +cells['UO2'].fill = materials['UO2'] +cells['MOX 4.3%'].fill = materials['MOX 4.3%'] +cells['MOX 7.0%'].fill = materials['MOX 7.0%'] +cells['MOX 8.7%'].fill = materials['MOX 8.7%'] +cells['Fission Chamber'].fill = materials['Fission Chamber'] +cells['Guide Tube'].fill = materials['Guide Tube'] +cells['Control Rod'].fill = materials['Control Rod'] +cells['UO2 Moderator'].fill = materials['Water'] +cells['MOX 4.3% Moderator'].fill = materials['Water'] +cells['MOX 7.0% Moderator'].fill = materials['Water'] +cells['MOX 8.7% Moderator'].fill = materials['Water'] +cells['Fission Chamber Moderator'].fill = materials['Water'] +cells['Guide Tube Moderator'].fill = materials['Water'] +cells['Control Rod Moderator'].fill = materials['Water'] +cells['Reflector'].fill = materials['Water'] +cells['UO2 Pin'].fill = materials['Water'] + +############################################################################### +# Universes +############################################################################### + +# Instantiate Universes +universes = {} +universes['Root'] = openmc.Universe(universe_id=0, name='Root') +universes['UO2'] = openmc.Universe(universe_id=1, name='UO2') +universes['MOX 4.3%'] = openmc.Universe(universe_id=2, name='MOX 4.3%') +universes['MOX 7.0%'] = openmc.Universe(universe_id=3, name='MOX 7.0%') +universes['MOX 8.7%'] = openmc.Universe(universe_id=4, name='MOX 8.7%') +universes['Fission Chamber'] = openmc.Universe(universe_id=5, name='Fission Chamber') +universes['Guide Tube'] = openmc.Universe(universe_id=6, name='Guide Tube') +universes['Control Rod'] = openmc.Universe(universe_id=7, name='Control Rod') +universes['Reflector'] = openmc.Universe(universe_id=8, name='Reflector') +universes['UO2 Unrodded Assembly'] = openmc.Universe(universe_id=9, name='UO2 Unrodded Assembly') +universes['UO2 Rodded Assembly'] = openmc.Universe(universe_id=10, name='UO2 Rodded Assembly') +universes['MOX Unrodded Assembly'] = openmc.Universe(universe_id=11, name='MOX Unrodded Assembly') +universes['MOX Rodded Assembly'] = openmc.Universe(universe_id=12, name='MOX Rodded Assembly') +universes['Reflector Unrodded Assembly'] = openmc.Universe(universe_id=13, name='Reflector Unrodded Assembly') +universes['Reflector Rodded Assembly'] = openmc.Universe(universe_id=14, name='Reflector Rodded Assembly') + +universes['Reflector'] = openmc.Universe(name='Reflector') + + +# Register Cells with Universes +universes['Root'] .add_cell(cells['Core']) +universes['UO2'] .add_cells([cells['UO2'], cells['UO2 Moderator']]) +universes['MOX 4.3%'] .add_cells([cells['MOX 4.3%'], cells['MOX 4.3% Moderator']]) +universes['MOX 7.0%'] .add_cells([cells['MOX 7.0%'], cells['MOX 7.0% Moderator']]) +universes['MOX 8.7%'] .add_cells([cells['MOX 8.7%'], cells['MOX 8.7% Moderator']]) +universes['Fission Chamber'] .add_cells([cells['Fission Chamber'], cells['Fission Chamber Moderator']]) +universes['Guide Tube'] .add_cells([cells['Guide Tube'], cells['Guide Tube Moderator']]) +universes['Control Rod'] .add_cells([cells['Control Rod'], cells['Control Rod Moderator']]) +universes['Reflector'] .add_cell(cells['Reflector']) +universes['UO2 Unrodded Assembly'] .add_cell(cells['UO2 Unrodded Assembly']) +universes['UO2 Rodded Assembly'] .add_cell(cells['UO2 Rodded Assembly']) +universes['MOX Unrodded Assembly'] .add_cell(cells['MOX Unrodded Assembly']) +universes['MOX Rodded Assembly'] .add_cell(cells['MOX Rodded Assembly']) +universes['Reflector Unrodded Assembly'].add_cell(cells['Reflector Unrodded Assembly']) +universes['Reflector Rodded Assembly'] .add_cell(cells['Reflector Rodded Assembly']) + +universes['Reflector'] .add_cell(cells['Reflector']) + +############################################################################### +# Subdivided Pincells +############################################################################### + + +pins_to_make = ['UO2', 'MOX 4.3%', 'MOX 7.0%', 'MOX 8.7%', 'Fission Chamber', 'Guide Tube', 'Control Rod'] +for pin in pins_to_make: + universes[pin] = pinmaker(materials[pin], materials['Water'], 0.54) + +############################################################################### +# Create a dictionary of the assembly lattices +############################################################################### + +# Instantiate the Lattices +lattices = {} +lattices['UO2 Unrodded Assembly'] = \ + openmc.RectLattice(lattice_id=101, name='UO2 Unrodded Assembly') +lattices['UO2 Unrodded Assembly'].dimension = [17, 17] +lattices['UO2 Unrodded Assembly'].lower_left = [-10.71, -10.71] +lattices['UO2 Unrodded Assembly'].pitch = [1.26, 1.26] +u = universes['UO2'] +g = universes['Guide Tube'] +f = universes['Fission Chamber'] +lattices['UO2 Unrodded Assembly'].universes = \ + [[u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, g, u, u, g, u, u, g, u, u, u, u, u], + [u, u, u, g, u, u, u, u, u, u, u, u, u, g, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, g, u, u, g, u, u, g, u, u, g, u, u, g, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, g, u, u, g, u, u, f, u, u, g, u, u, g, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, g, u, u, g, u, u, g, u, u, g, u, u, g, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, g, u, u, u, u, u, u, u, u, u, g, u, u, u], + [u, u, u, u, u, g, u, u, g, u, u, g, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u]] + +lattices['UO2 Rodded Assembly'] = \ + openmc.RectLattice(lattice_id=102, name='UO2 Rodded Assembly') +lattices['UO2 Rodded Assembly'].dimension = [17, 17] +lattices['UO2 Rodded Assembly'].lower_left = [-10.71, -10.71] +lattices['UO2 Rodded Assembly'].pitch = [1.26, 1.26] +u = universes['UO2'] +r = universes['Control Rod'] +f = universes['Fission Chamber'] +lattices['UO2 Rodded Assembly'].universes = \ + [[u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, r, u, u, r, u, u, r, u, u, u, u, u], + [u, u, u, r, u, u, u, u, u, u, u, u, u, r, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, r, u, u, r, u, u, r, u, u, r, u, u, r, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, r, u, u, r, u, u, f, u, u, r, u, u, r, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, r, u, u, r, u, u, r, u, u, r, u, u, r, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, r, u, u, u, u, u, u, u, u, u, r, u, u, u], + [u, u, u, u, u, r, u, u, r, u, u, r, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u]] + +lattices['MOX Unrodded Assembly'] = \ + openmc.RectLattice(lattice_id=103, name='MOX Unrodded Assembly') +lattices['MOX Unrodded Assembly'].dimension = [17, 17] +lattices['MOX Unrodded Assembly'].lower_left = [-10.71, -10.71] +lattices['MOX Unrodded Assembly'].pitch = [1.26, 1.26] +m = universes['MOX 4.3%'] +n = universes['MOX 7.0%'] +o = universes['MOX 8.7%'] +g = universes['Guide Tube'] +f = universes['Fission Chamber'] +lattices['MOX Unrodded Assembly'].universes = \ + [[m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m], + [m, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, m], + [m, n, n, n, n, g, n, n, g, n, n, g, n, n, n, n, m], + [m, n, n, g, n, o, o, o, o, o, o, o, n, g, n, n, m], + [m, n, n, n, o, o, o, o, o, o, o, o, o, n, n, n, m], + [m, n, g, o, o, g, o, o, g, o, o, g, o, o, g, n, m], + [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], + [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], + [m, n, g, o, o, g, o, o, f, o, o, g, o, o, g, n, m], + [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], + [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], + [m, n, g, o, o, g, o, o, g, o, o, g, o, o, g, n, m], + [m, n, n, n, o, o, o, o, o, o, o, o, o, n, n, n, m], + [m, n, n, g, n, o, o, o, o, o, o, o, n, g, n, n, m], + [m, n, n, n, n, g, n, n, g, n, n, g, n, n, n, n, m], + [m, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, m], + [m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m]] + +lattices['MOX Rodded Assembly'] = \ + openmc.RectLattice(lattice_id=104, name='MOX Rodded Assembly') +lattices['MOX Rodded Assembly'].dimension = [17, 17] +lattices['MOX Rodded Assembly'].lower_left = [-10.71, -10.71] +lattices['MOX Rodded Assembly'].pitch = [1.26, 1.26] +m = universes['MOX 4.3%'] +n = universes['MOX 7.0%'] +o = universes['MOX 8.7%'] +r = universes['Control Rod'] +f = universes['Fission Chamber'] +lattices['MOX Rodded Assembly'].universes = \ + [[m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m], + [m, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, m], + [m, n, n, n, n, r, n, n, r, n, n, r, n, n, n, n, m], + [m, n, n, r, n, o, o, o, o, o, o, o, n, r, n, n, m], + [m, n, n, n, o, o, o, o, o, o, o, o, o, n, n, n, m], + [m, n, r, o, o, r, o, o, r, o, o, r, o, o, r, n, m], + [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], + [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], + [m, n, r, o, o, r, o, o, f, o, o, r, o, o, r, n, m], + [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], + [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], + [m, n, r, o, o, r, o, o, r, o, o, r, o, o, r, n, m], + [m, n, n, n, o, o, o, o, o, o, o, o, o, n, n, n, m], + [m, n, n, r, n, o, o, o, o, o, o, o, n, r, n, n, m], + [m, n, n, n, n, r, n, n, r, n, n, r, n, n, n, n, m], + [m, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, m], + [m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m]] + +lattices['Reflector Unrodded Assembly'] = \ + openmc.RectLattice(lattice_id=105, name='Reflector Unrodded Assembly') +lattices['Reflector Unrodded Assembly'].dimension = [1, 1] +lattices['Reflector Unrodded Assembly'].lower_left = [-10.71, -10.71] +lattices['Reflector Unrodded Assembly'].pitch = [21.42, 21.42] +w = universes['Reflector'] +lattices['Reflector Unrodded Assembly'].universes = [[w]] + + + +lattices['Reflector Rodded Assembly'] = \ + openmc.RectLattice(lattice_id=106, name='Reflector Rodded Assembly') +lattices['Reflector Rodded Assembly'].dimension = [17, 17] +lattices['Reflector Rodded Assembly'].lower_left = [-10.71, -10.71] +lattices['Reflector Rodded Assembly'].pitch = [1.26, 1.26] +u = universes['Reflector'] +r = universes['Control Rod'] +lattices['Reflector Rodded Assembly'].universes = \ + [[u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, r, u, u, r, u, u, r, u, u, u, u, u], + [u, u, u, r, u, u, u, u, u, u, u, u, u, r, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, r, u, u, r, u, u, r, u, u, r, u, u, r, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, r, u, u, r, u, u, u, u, u, r, u, u, r, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, r, u, u, r, u, u, r, u, u, r, u, u, r, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, r, u, u, u, u, u, u, u, u, u, r, u, u, u], + [u, u, u, u, u, r, u, u, r, u, u, r, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], + [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u]] + +# Add lattice to cells +cells['UO2 Unrodded Assembly'].fill = lattices['UO2 Unrodded Assembly'] +cells['UO2 Rodded Assembly'].fill = lattices['UO2 Rodded Assembly'] +cells['MOX Unrodded Assembly'].fill = lattices['MOX Unrodded Assembly'] +cells['MOX Rodded Assembly'].fill = lattices['MOX Rodded Assembly'] +cells['Reflector Unrodded Assembly'].fill = lattices['Reflector Unrodded Assembly'] +cells['Reflector Rodded Assembly'].fill = lattices['Reflector Rodded Assembly'] + +############################################################################### +# Base Universe +############################################################################### + +# Instantiate Core boundaries +#cells['Core'].region = +surfaces['Core x-min'] & +surfaces['Core y-min'] & \ +# -surfaces['Core x-max'] & -surfaces['Core y-max'] + +cells['Core'].region = +surfaces['Core x-min'] & +surfaces['Core y-min'] & \ + -surfaces['Core x-max'] & -surfaces['Core y-max'] & +surfaces['Small Core z-min'] & -surfaces['Small Core z-max'] + +lattices['Core'] = openmc.RectLattice(lattice_id=201, name='3x3 core lattice') +lattices['Core'].dimension = [3, 3] +lattices['Core'].lower_left = [-32.13, -32.13] +lattices['Core'].pitch = [21.42, 21.42] +w = universes['Reflector Unrodded Assembly'] +u = universes['UO2 Unrodded Assembly'] +m = universes['MOX Unrodded Assembly'] +r = universes['Reflector'] +lattices['Core'].universes = [[u, m, r], [m, u, r], [r, r, r]] +cells['Core'].fill = lattices['Core'] + +# Instantiate a Geometry, register the root Universe, and export to XML +geometry = openmc.Geometry() +geometry.root_universe = universes['Root'] +geometry.remove_redundant_surfaces() + + + +############################################################################### +# Tallies +############################################################################### + +tallies = {} + +# Instantiate a tally mesh +mesh = openmc.RegularMesh(mesh_id=1) +mesh.dimension = [51, 51] +mesh.lower_left = [-32.13, -32.13] +mesh.upper_right = [32.13, 32.13] + +# Instantiate some tally Filters +mesh_filter = openmc.MeshFilter(mesh) + +# Instantiate the Tally +tallies['Mesh Rates'] = openmc.Tally(name='power') +tallies['Mesh Rates'].filters = [mesh_filter] +tallies['Mesh Rates'].scores = ['fission',] + +# Instantiate a Tallies, register Tally/Mesh, and export to XML +tallies_file = openmc.Tallies(tallies.values()) + +############################################################################### +# Random Ray Mesh Overlay for SR Subdivision +############################################################################### + +subdivision_mesh = openmc.RegularMesh() +subdivision_mesh.dimension = [d * mesh_resolution_multiplier for d in mesh.dimension] +subdivision_mesh.lower_left = mesh.lower_left +subdivision_mesh.upper_right = mesh.upper_right + +domain = geometry.root_universe +settings_file.random_ray['source_region_meshes'] = [(subdivision_mesh, [domain])] + +############################################################################### +# Model +############################################################################### + +model = openmc.model.Model() +model.geometry = geometry +model.materials = materials_file +model.settings = settings_file +model.xs_data = mg_cross_sections_file +model.tallies = tallies_file +model.plots = plot_file + +model.export_to_model_xml() diff --git a/examples/2D_c5g7_python_mesh/pin_power_error.py b/examples/2D_c5g7_python_mesh/pin_power_error.py new file mode 100644 index 00000000000..f2bbec94642 --- /dev/null +++ b/examples/2D_c5g7_python_mesh/pin_power_error.py @@ -0,0 +1,60 @@ +import numpy as np +import matplotlib.pyplot as plt +import math +import sys +import openmc + +def reformat(arr, dev): + arr = np.rot90(arr, 3) + dev = np.rot90(dev, 3) + val = arr.sum() + factor = ((17 * 17 * 4) - (25 * 4)) / val + arr = arr * factor + dev = dev * factor + return arr[0:34,0:34], dev[0:34,0:34] + +def get_err(fname): + # Load the statepoint file + sp = openmc.StatePoint(fname) + tally = sp.get_tally(scores=['fission']) + fission = tally.get_slice(scores=['fission']) + + dim = 51 + + fission.std_dev.shape = (dim, dim) + fission.mean.shape = (dim, dim) + + trrm_power, trrm_std_dev = reformat(fission.mean, fission.std_dev) + + ref = np.loadtxt("reference.txt") + ref = ref.reshape((34, 34)) + val = ref.sum() + factor = ((17 * 17 * 4) - (25 * 4)) / val + ref = ref * factor + + trrm_power[trrm_power == 0] = np.nan + ref[ref == 0] = np.nan + + rel_diff = (trrm_power - ref) / ref + + rel_diff_squared = np.power(rel_diff, 2) + + RMS = math.sqrt(np.nanmean(rel_diff_squared)) + + abs_percent_diff = np.absolute(rel_diff) + + print("C5G7 Pin Power Errors:") + print("RMS = ", 100.0 * RMS) + print("AAPE = ", 100.0 * np.nanmean(abs_percent_diff)) + print("MAX = ", 100.0 *np.nanmax(abs_percent_diff)) + + +n = len(sys.argv) +if (n != 2): + print("Must provide statepoint name to read as argument.") + exit(1) + +fname = sys.argv[1] +print("Opening statepoint file: ", fname) + +get_err(fname) diff --git a/examples/2D_c5g7_python_mesh/reference.txt b/examples/2D_c5g7_python_mesh/reference.txt new file mode 100644 index 00000000000..71e05ad26c7 --- /dev/null +++ b/examples/2D_c5g7_python_mesh/reference.txt @@ -0,0 +1,34 @@ +2.197612652000000E+00 2.203064459000000E+00 2.213433582000000E+00 2.224465473000000E+00 2.231713169000000E+00 2.227586900000000E+00 2.183993825000000E+00 2.147990520000000E+00 2.120156373000000E+00 2.054662000000000E+00 1.997559134000000E+00 1.945536069000000E+00 1.852992182000000E+00 1.750771873000000E+00 1.630889847000000E+00 1.480633774000000E+00 1.281694135000000E+00 1.311371206000000E+00 1.060656506000000E+00 9.374435330000000E-01 8.642268360000000E-01 8.147009120000000E-01 7.690233230000000E-01 7.131519230000000E-01 6.652080920000000E-01 6.219635050000000E-01 5.705476220000000E-01 5.266338520000000E-01 4.851637750000000E-01 4.382162350000000E-01 3.985185290000000E-01 3.778700780000000E-01 4.121052870000000E-01 6.014796770000000E-01 +2.202551348000000E+00 2.212279081000000E+00 2.239666393000000E+00 2.273724152000000E+00 2.302437001000000E+00 2.370424239000000E+00 2.254632138000000E+00 2.213754276000000E+00 2.247812034000000E+00 2.118471658000000E+00 2.062717847000000E+00 2.072231784000000E+00 1.916921566000000E+00 1.795566483000000E+00 1.655076628000000E+00 1.492031257000000E+00 1.280736328000000E+00 1.295428413000000E+00 1.343395761000000E+00 1.170746659000000E+00 1.093852665000000E+00 1.049271850000000E+00 1.046340702000000E+00 9.199614060000000E-01 8.516620250000000E-01 8.392725260000000E-01 7.331525710000000E-01 6.724408230000000E-01 6.580288110000000E-01 5.677704070000000E-01 5.044375150000000E-01 4.706234850000000E-01 5.174940580000000E-01 5.921624320000000E-01 +2.209307312000000E+00 2.239345699000000E+00 2.312335772000000E+00 2.443649488000000E+00 2.472148541000000E+00 0.000000000000000E+00 2.383594094000000E+00 2.334955425000000E+00 0.000000000000000E+00 2.239987088000000E+00 2.177366138000000E+00 0.000000000000000E+00 2.058339298000000E+00 1.929229822000000E+00 1.711076305000000E+00 1.510308707000000E+00 1.284030929000000E+00 1.288332512000000E+00 1.318898976000000E+00 1.175274865000000E+00 1.175944048000000E+00 1.121246391000000E+00 0.000000000000000E+00 9.487255660000000E-01 8.719277800000000E-01 0.000000000000000E+00 7.556225680000000E-01 6.882681660000000E-01 0.000000000000000E+00 6.070362440000000E-01 5.427049230000000E-01 4.764708150000000E-01 5.082281250000000E-01 5.872857380000000E-01 +2.222519926000000E+00 2.275755217000000E+00 2.444504674000000E+00 0.000000000000000E+00 2.497697205000000E+00 2.453612398000000E+00 2.295616898000000E+00 2.243258172000000E+00 2.294547916000000E+00 2.150962289000000E+00 2.098804532000000E+00 2.144484260000000E+00 2.078652089000000E+00 0.000000000000000E+00 1.813241027000000E+00 1.541208693000000E+00 1.292383953000000E+00 1.291086209000000E+00 1.334424866000000E+00 1.262642743000000E+00 0.000000000000000E+00 1.114077799000000E+00 1.128739953000000E+00 9.589257900000000E-01 8.815464780000000E-01 8.792225120000000E-01 7.592228980000000E-01 6.976431360000000E-01 7.026203150000000E-01 5.902126100000000E-01 0.000000000000000E+00 5.150653320000000E-01 5.135174460000000E-01 5.880960260000000E-01 +2.230002799000000E+00 2.303249427000000E+00 2.472426477000000E+00 2.497633066000000E+00 2.399671580000000E+00 2.426951994000000E+00 2.278192495000000E+00 2.229553826000000E+00 2.276439365000000E+00 2.137309254000000E+00 2.085138670000000E+00 2.121997160000000E+00 1.999092054000000E+00 1.972955450000000E+00 1.831717308000000E+00 1.561333343000000E+00 1.296142492000000E+00 1.293611144000000E+00 1.357367352000000E+00 1.288097336000000E+00 1.179300651000000E+00 1.141161520000000E+00 1.083607544000000E+00 9.265292290000000E-01 8.556920860000000E-01 8.548796600000000E-01 7.377598830000000E-01 6.767338530000000E-01 6.759898420000000E-01 6.106151950000000E-01 5.391687320000000E-01 5.217272260000000E-01 5.217999170000000E-01 5.863364820000000E-01 +2.229553826000000E+00 2.372220129000000E+00 0.000000000000000E+00 2.455151732000000E+00 2.426866475000000E+00 0.000000000000000E+00 2.343699696000000E+00 2.298332111000000E+00 0.000000000000000E+00 2.205287941000000E+00 2.150064344000000E+00 0.000000000000000E+00 2.027824145000000E+00 1.940030813000000E+00 0.000000000000000E+00 1.614151731000000E+00 1.297887071000000E+00 1.293251966000000E+00 1.423064832000000E+00 0.000000000000000E+00 1.281910070000000E+00 1.142395125000000E+00 0.000000000000000E+00 9.828538770000000E-01 9.021115490000000E-01 0.000000000000000E+00 7.854685380000000E-01 7.126495020000000E-01 0.000000000000000E+00 6.197357470000000E-01 5.784730520000000E-01 0.000000000000000E+00 5.480049350000000E-01 5.887224490000000E-01 +2.181043435000000E+00 2.254054888000000E+00 2.381905103000000E+00 2.295958972000000E+00 2.276674541000000E+00 2.347163197000000E+00 2.215272230000000E+00 2.172598479000000E+00 2.224080640000000E+00 2.084174448000000E+00 2.027321724000000E+00 2.055241389000000E+00 1.901000152000000E+00 1.814008556000000E+00 1.766667631000000E+00 1.529832590000000E+00 1.276370606000000E+00 1.272601377000000E+00 1.332366007000000E+00 1.224896998000000E+00 1.146335392000000E+00 1.038133061000000E+00 1.037316359000000E+00 8.993664040000000E-01 8.322151090000000E-01 8.339425830000000E-01 7.227727590000000E-01 6.605580220000000E-01 6.544691020000000E-01 5.620299750000000E-01 5.221954400000000E-01 4.886956900000000E-01 5.135751710000000E-01 5.793645830000000E-01 +2.145467723000000E+00 2.212065285000000E+00 2.334720249000000E+00 2.245909247000000E+00 2.231114540000000E+00 2.301004565000000E+00 2.178135805000000E+00 2.138369684000000E+00 2.184656593000000E+00 2.047206922000000E+00 1.993494866000000E+00 2.015723272000000E+00 1.864665463000000E+00 1.776305570000000E+00 1.733294021000000E+00 1.505647947000000E+00 1.255238975000000E+00 1.253800126000000E+00 1.311358378000000E+00 1.198341353000000E+00 1.123014486000000E+00 1.018128136000000E+00 1.017972065000000E+00 8.885055490000000E-01 8.216300520000000E-01 8.223270280000000E-01 7.115676920000000E-01 6.527202480000000E-01 6.448974390000000E-01 5.514149870000000E-01 5.139984880000000E-01 4.805564630000000E-01 5.099534610000000E-01 5.753430740000000E-01 +2.118614902000000E+00 2.250527248000000E+00 0.000000000000000E+00 2.291276832000000E+00 2.276182810000000E+00 0.000000000000000E+00 2.225128242000000E+00 2.186773177000000E+00 0.000000000000000E+00 2.096593878000000E+00 2.036683866000000E+00 0.000000000000000E+00 1.904929729000000E+00 1.813636551000000E+00 0.000000000000000E+00 1.538420789000000E+00 1.244720195000000E+00 1.242887960000000E+00 1.358261021000000E+00 0.000000000000000E+00 1.187508292000000E+00 1.072699654000000E+00 0.000000000000000E+00 9.436564550000000E-01 8.714788080000000E-01 0.000000000000000E+00 7.575274930000000E-01 6.902799900000000E-01 0.000000000000000E+00 5.896973610000000E-01 5.413280750000000E-01 0.000000000000000E+00 5.309675040000000E-01 5.720997830000000E-01 +2.052568934000000E+00 2.119991750000000E+00 2.235882198000000E+00 2.148118798000000E+00 2.134142930000000E+00 2.206998312000000E+00 2.087321530000000E+00 2.050837184000000E+00 2.098118246000000E+00 1.965945068000000E+00 1.915824791000000E+00 1.939346665000000E+00 1.792870511000000E+00 1.707206591000000E+00 1.672118334000000E+00 1.451181189000000E+00 1.212101286000000E+00 1.209619111000000E+00 1.267196605000000E+00 1.162451361000000E+00 1.088757898000000E+00 9.874034630000000E-01 9.896868080000000E-01 8.628521250000000E-01 8.012381560000000E-01 8.036070200000000E-01 6.962791160000000E-01 6.374722920000000E-01 6.300236280000000E-01 5.407615150000000E-01 5.015405750000000E-01 4.708672130000000E-01 4.967750540000000E-01 5.633020640000000E-01 +2.000770355000000E+00 2.061928938000000E+00 2.180936537000000E+00 2.097551686000000E+00 2.084437418000000E+00 2.146044973000000E+00 2.027854076000000E+00 1.996550015000000E+00 2.039882259000000E+00 1.915258230000000E+00 1.865920447000000E+00 1.892016429000000E+00 1.751806647000000E+00 1.672336407000000E+00 1.632858911000000E+00 1.418572971000000E+00 1.185357501000000E+00 1.184784527000000E+00 1.242595059000000E+00 1.143126309000000E+00 1.071660604000000E+00 9.744987160000000E-01 9.726279980000000E-01 8.479868650000000E-01 7.881196120000000E-01 7.897102570000000E-01 6.819975200000000E-01 6.286061580000000E-01 6.224124780000000E-01 5.352455690000000E-01 4.990541230000000E-01 4.681284820000000E-01 4.924285740000000E-01 5.578502570000000E-01 +1.949544750000000E+00 2.070532103000000E+00 0.000000000000000E+00 2.141533870000000E+00 2.121402806000000E+00 0.000000000000000E+00 2.054242960000000E+00 2.016527146000000E+00 0.000000000000000E+00 1.938985349000000E+00 1.889613358000000E+00 0.000000000000000E+00 1.790747514000000E+00 1.717477368000000E+00 0.000000000000000E+00 1.438458169000000E+00 1.165705341000000E+00 1.166289005000000E+00 1.287248564000000E+00 0.000000000000000E+00 1.160398916000000E+00 1.043601971000000E+00 0.000000000000000E+00 9.053078040000000E-01 8.314176490000000E-01 0.000000000000000E+00 7.270273060000000E-01 6.659585180000000E-01 0.000000000000000E+00 5.804613580000000E-01 5.402569550000000E-01 0.000000000000000E+00 5.169916370000000E-01 5.540746130000000E-01 +1.857313006000000E+00 1.920432102000000E+00 2.060250637000000E+00 2.079545757000000E+00 2.002478588000000E+00 2.025318452000000E+00 1.902943561000000E+00 1.866852599000000E+00 1.907854463000000E+00 1.792030292000000E+00 1.752659694000000E+00 1.791848565000000E+00 1.690143505000000E+00 1.671506877000000E+00 1.563965176000000E+00 1.338472031000000E+00 1.117060258000000E+00 1.120562242000000E+00 1.185635436000000E+00 1.134424797000000E+00 1.042537265000000E+00 1.015177747000000E+00 9.691816010000000E-01 8.328287040000000E-01 7.695834690000000E-01 7.718518480000000E-01 6.714338420000000E-01 6.178778570000000E-01 6.218844010000000E-01 5.599304950000000E-01 4.954324130000000E-01 4.774606920000000E-01 4.817793780000000E-01 5.412126250000000E-01 +1.753859092000000E+00 1.796180079000000E+00 1.932483802000000E+00 0.000000000000000E+00 1.975146863000000E+00 1.938996039000000E+00 1.816185003000000E+00 1.779572379000000E+00 1.816843496000000E+00 1.706543822000000E+00 1.674249884000000E+00 1.717126741000000E+00 1.670713692000000E+00 0.000000000000000E+00 1.478459465000000E+00 1.260724989000000E+00 1.066448249000000E+00 1.074884653000000E+00 1.124295127000000E+00 1.076122534000000E+00 0.000000000000000E+00 9.644994610000000E-01 9.849383920000000E-01 8.375600180000000E-01 7.746376150000000E-01 7.740090530000000E-01 6.737193250000000E-01 6.251554850000000E-01 6.335576810000000E-01 5.322053850000000E-01 0.000000000000000E+00 4.667045980000000E-01 4.673951600000000E-01 5.330285010000000E-01 +1.634317002000000E+00 1.653821643000000E+00 1.712979092000000E+00 1.814709808000000E+00 1.831471442000000E+00 0.000000000000000E+00 1.766917773000000E+00 1.736922145000000E+00 0.000000000000000E+00 1.671795502000000E+00 1.636202686000000E+00 0.000000000000000E+00 1.562618259000000E+00 1.477176687000000E+00 1.317847098000000E+00 1.173810360000000E+00 1.013805174000000E+00 1.033284159000000E+00 1.083081605000000E+00 9.830826390000000E-01 9.994637150000000E-01 9.604800890000000E-01 0.000000000000000E+00 8.246060970000000E-01 7.601315330000000E-01 0.000000000000000E+00 6.680815150000000E-01 6.131978550000000E-01 0.000000000000000E+00 5.463223580000000E-01 4.893734250000000E-01 4.305131520000000E-01 4.585867510000000E-01 5.268198550000000E-01 +1.486498208000000E+00 1.494483502000000E+00 1.514118558000000E+00 1.538700862000000E+00 1.561421000000000E+00 1.613533859000000E+00 1.533719407000000E+00 1.506539478000000E+00 1.539098523000000E+00 1.452076996000000E+00 1.419359741000000E+00 1.437812504000000E+00 1.336024063000000E+00 1.261965008000000E+00 1.175601974000000E+00 1.080988538000000E+00 9.547353820000000E-01 1.004842831000000E+00 1.088144302000000E+00 9.846540420000000E-01 9.436521790000000E-01 9.159035510000000E-01 9.235446320000000E-01 8.188100780000000E-01 7.654999590000000E-01 7.599583570000000E-01 6.689794600000000E-01 6.179740650000000E-01 6.070554860000000E-01 5.282031170000000E-01 4.721029560000000E-01 4.404033710000000E-01 4.781533920000000E-01 5.379479550000000E-01 +1.283132985000000E+00 1.281508132000000E+00 1.286352758000000E+00 1.293307553000000E+00 1.297324786000000E+00 1.299950205000000E+00 1.278326843000000E+00 1.259309658000000E+00 1.245936696000000E+00 1.213747518000000E+00 1.183803202000000E+00 1.164967744000000E+00 1.116681839000000E+00 1.067583507000000E+00 1.011848938000000E+00 9.541410280000000E-01 8.786260200000000E-01 1.014797189000000E+00 9.101973270000000E-01 8.536203990000000E-01 8.195476750000000E-01 7.873841530000000E-01 7.559069170000000E-01 7.096242830000000E-01 6.675427480000000E-01 6.308788130000000E-01 5.837196150000000E-01 5.413858000000000E-01 5.055727740000000E-01 4.605408490000000E-01 4.208089360000000E-01 3.971523700000000E-01 4.227630350000000E-01 5.780048380000000E-01 +1.311371206000000E+00 1.295428413000000E+00 1.288332512000000E+00 1.291086209000000E+00 1.293611144000000E+00 1.293251966000000E+00 1.272601377000000E+00 1.253800126000000E+00 1.242887960000000E+00 1.209619111000000E+00 1.184784527000000E+00 1.166289005000000E+00 1.120562242000000E+00 1.074884653000000E+00 1.033284159000000E+00 1.004842831000000E+00 1.014797189000000E+00 7.955062760000000E-01 7.908946890000000E-01 7.730790390000000E-01 7.509019440000000E-01 7.273993120000000E-01 7.012092590000000E-01 6.615927960000000E-01 6.233296640000000E-01 5.880810600000000E-01 5.453880680000000E-01 5.066973430000000E-01 4.723445460000000E-01 4.313469580000000E-01 3.955125520000000E-01 3.762345360000000E-01 3.921110520000000E-01 5.029345270000000E-01 +1.060656506000000E+00 1.343395761000000E+00 1.318898976000000E+00 1.334424866000000E+00 1.357367352000000E+00 1.423064832000000E+00 1.332366007000000E+00 1.311358378000000E+00 1.358261021000000E+00 1.267196605000000E+00 1.242595059000000E+00 1.287248564000000E+00 1.185635436000000E+00 1.124295127000000E+00 1.083081605000000E+00 1.088144302000000E+00 9.101973270000000E-01 7.919871880000000E-01 8.266008170000000E-01 8.311033680000000E-01 8.274944860000000E-01 8.118681110000000E-01 8.072201780000000E-01 7.400710210000000E-01 6.968328480000000E-01 6.799258330000000E-01 6.129434370000000E-01 5.718304000000000E-01 5.476436190000000E-01 4.861664790000000E-01 4.435932130000000E-01 4.144142870000000E-01 4.243836110000000E-01 5.294516880000000E-01 +9.374435330000000E-01 1.170746659000000E+00 1.175274865000000E+00 1.262642743000000E+00 1.288097336000000E+00 0.000000000000000E+00 1.224896998000000E+00 1.198341353000000E+00 0.000000000000000E+00 1.162451361000000E+00 1.143126309000000E+00 0.000000000000000E+00 1.134424797000000E+00 1.076122534000000E+00 9.830826390000000E-01 9.846540420000000E-01 8.536203990000000E-01 7.714263940000000E-01 8.313406820000000E-01 8.656977550000000E-01 9.015578160000000E-01 8.875456040000000E-01 0.000000000000000E+00 7.998677220000000E-01 7.533007390000000E-01 0.000000000000000E+00 6.644747710000000E-01 6.179676520000000E-01 0.000000000000000E+00 5.373300830000000E-01 4.908935170000000E-01 4.406770310000000E-01 4.378976780000000E-01 5.361563410000000E-01 +8.642268360000000E-01 1.093852665000000E+00 1.175944048000000E+00 0.000000000000000E+00 1.179300651000000E+00 1.281910070000000E+00 1.146335392000000E+00 1.123014486000000E+00 1.187508292000000E+00 1.088757898000000E+00 1.071660604000000E+00 1.160398916000000E+00 1.042537265000000E+00 0.000000000000000E+00 9.994637150000000E-01 9.436521790000000E-01 8.195476750000000E-01 7.505235250000000E-01 8.264618490000000E-01 8.982225930000000E-01 0.000000000000000E+00 8.911993830000000E-01 8.514311250000000E-01 7.674668850000000E-01 7.219496430000000E-01 7.081469510000000E-01 6.377502280000000E-01 5.940801860000000E-01 5.816543420000000E-01 5.415354570000000E-01 0.000000000000000E+00 4.656484440000000E-01 4.435419020000000E-01 5.316965500000000E-01 +8.147009120000000E-01 1.049271850000000E+00 1.121246391000000E+00 1.114077799000000E+00 1.141161520000000E+00 1.142395125000000E+00 1.038133061000000E+00 1.018128136000000E+00 1.072699654000000E+00 9.874034630000000E-01 9.744987160000000E-01 1.043601971000000E+00 1.015177747000000E+00 9.644994610000000E-01 9.604800890000000E-01 9.159035510000000E-01 7.873841530000000E-01 7.266018510000000E-01 8.129905410000000E-01 8.889288660000000E-01 8.899037770000000E-01 8.389368660000000E-01 8.231757990000000E-01 7.498393760000000E-01 7.077257720000000E-01 6.916931840000000E-01 6.232035240000000E-01 5.820135200000000E-01 5.681808960000000E-01 5.141652490000000E-01 4.945943310000000E-01 4.633886170000000E-01 4.429133400000000E-01 5.195016060000000E-01 +7.690233230000000E-01 1.046340702000000E+00 0.000000000000000E+00 1.128739953000000E+00 1.083607544000000E+00 0.000000000000000E+00 1.037316359000000E+00 1.017972065000000E+00 0.000000000000000E+00 9.896868080000000E-01 9.726279980000000E-01 0.000000000000000E+00 9.691816010000000E-01 9.849383920000000E-01 0.000000000000000E+00 9.235446320000000E-01 7.559069170000000E-01 7.011387060000000E-01 8.099802890000000E-01 0.000000000000000E+00 8.499516540000000E-01 8.225707560000000E-01 0.000000000000000E+00 7.525909350000000E-01 7.121620460000000E-01 0.000000000000000E+00 6.291299590000000E-01 5.853487430000000E-01 0.000000000000000E+00 5.097631820000000E-01 4.739009830000000E-01 0.000000000000000E+00 4.457824870000000E-01 5.094766950000000E-01 +7.131519230000000E-01 9.199614060000000E-01 9.487255660000000E-01 9.589257900000000E-01 9.265292290000000E-01 9.828538770000000E-01 8.993664040000000E-01 8.885055490000000E-01 9.436564550000000E-01 8.628521250000000E-01 8.479868650000000E-01 9.053078040000000E-01 8.328287040000000E-01 8.375600180000000E-01 8.246060970000000E-01 8.188100780000000E-01 7.096242830000000E-01 6.590806890000000E-01 7.393847350000000E-01 8.018218200000000E-01 7.674305400000000E-01 7.486378410000000E-01 7.523578970000000E-01 6.897241200000000E-01 6.532034270000000E-01 6.432362420000000E-01 5.787360220000000E-01 5.374433950000000E-01 5.238758790000000E-01 4.660760370000000E-01 4.314966160000000E-01 4.258759100000000E-01 4.123725320000000E-01 4.852578450000000E-01 +6.652080920000000E-01 8.516620250000000E-01 8.719277800000000E-01 8.815464780000000E-01 8.556920860000000E-01 9.021115490000000E-01 8.322151090000000E-01 8.216300520000000E-01 8.714788080000000E-01 8.012381560000000E-01 7.881196120000000E-01 8.314176490000000E-01 7.695834690000000E-01 7.746376150000000E-01 7.601315330000000E-01 7.654999590000000E-01 6.675427480000000E-01 6.222157850000000E-01 6.979274850000000E-01 7.555391870000000E-01 7.239400870000000E-01 7.055471870000000E-01 7.103020180000000E-01 6.534728110000000E-01 6.206614850000000E-01 6.093088990000000E-01 5.505448350000000E-01 5.123693600000000E-01 4.972881650000000E-01 4.416262860000000E-01 4.108994750000000E-01 4.046972430000000E-01 3.926989920000000E-01 4.616739700000000E-01 +6.219635050000000E-01 8.392725260000000E-01 0.000000000000000E+00 8.792225120000000E-01 8.548796600000000E-01 0.000000000000000E+00 8.339425830000000E-01 8.223270280000000E-01 0.000000000000000E+00 8.036070200000000E-01 7.897102570000000E-01 0.000000000000000E+00 7.718518480000000E-01 7.740090530000000E-01 0.000000000000000E+00 7.599583570000000E-01 6.308788130000000E-01 5.881473370000000E-01 6.806099810000000E-01 0.000000000000000E+00 7.106996790000000E-01 6.922426400000000E-01 0.000000000000000E+00 6.443522590000000E-01 6.107071280000000E-01 0.000000000000000E+00 5.430598250000000E-01 5.059383660000000E-01 0.000000000000000E+00 4.362920680000000E-01 4.043423410000000E-01 0.000000000000000E+00 3.855475050000000E-01 4.394819090000000E-01 +5.705476220000000E-01 7.331525710000000E-01 7.556225680000000E-01 7.592228980000000E-01 7.377598830000000E-01 7.854685380000000E-01 7.227727590000000E-01 7.115676920000000E-01 7.575274930000000E-01 6.962791160000000E-01 6.819975200000000E-01 7.270273060000000E-01 6.714338420000000E-01 6.737193250000000E-01 6.680815150000000E-01 6.689794600000000E-01 5.837196150000000E-01 5.455911740000000E-01 6.141000760000000E-01 6.641198690000000E-01 6.392403880000000E-01 6.242874720000000E-01 6.306457750000000E-01 5.797558300000000E-01 5.504635930000000E-01 5.430042380000000E-01 4.888859690000000E-01 4.565257540000000E-01 4.440699790000000E-01 3.934430040000000E-01 3.649995380000000E-01 3.612581020000000E-01 3.500722770000000E-01 4.110833400000000E-01 +5.266338520000000E-01 6.724408230000000E-01 6.882681660000000E-01 6.976431360000000E-01 6.767338530000000E-01 7.126495020000000E-01 6.605580220000000E-01 6.527202480000000E-01 6.902799900000000E-01 6.374722920000000E-01 6.286061580000000E-01 6.659585180000000E-01 6.178778570000000E-01 6.251554850000000E-01 6.131978550000000E-01 6.179740650000000E-01 5.413858000000000E-01 5.054359440000000E-01 5.689569770000000E-01 6.178650290000000E-01 5.949460610000000E-01 5.820904870000000E-01 5.850750840000000E-01 5.401864020000000E-01 5.128867470000000E-01 5.046641390000000E-01 4.548324870000000E-01 4.262436390000000E-01 4.137322770000000E-01 3.688500100000000E-01 3.421981570000000E-01 3.361605480000000E-01 3.271939300000000E-01 3.842882440000000E-01 +4.851637750000000E-01 6.580288110000000E-01 0.000000000000000E+00 7.026203150000000E-01 6.759898420000000E-01 0.000000000000000E+00 6.544691020000000E-01 6.448974390000000E-01 0.000000000000000E+00 6.300236280000000E-01 6.224124780000000E-01 0.000000000000000E+00 6.218844010000000E-01 6.335576810000000E-01 0.000000000000000E+00 6.070554860000000E-01 5.055727740000000E-01 4.719041250000000E-01 5.468033990000000E-01 0.000000000000000E+00 5.825522870000000E-01 5.679093750000000E-01 0.000000000000000E+00 5.251586570000000E-01 4.976794130000000E-01 0.000000000000000E+00 4.429646520000000E-01 4.130224730000000E-01 0.000000000000000E+00 3.594707640000000E-01 3.344181080000000E-01 0.000000000000000E+00 3.151849890000000E-01 3.589063420000000E-01 +4.382162350000000E-01 5.677704070000000E-01 6.070362440000000E-01 5.902126100000000E-01 6.106151950000000E-01 6.197357470000000E-01 5.620299750000000E-01 5.514149870000000E-01 5.896973610000000E-01 5.407615150000000E-01 5.352455690000000E-01 5.804613580000000E-01 5.599304950000000E-01 5.322053850000000E-01 5.463223580000000E-01 5.282031170000000E-01 4.605408490000000E-01 4.310583330000000E-01 4.869938710000000E-01 5.375887770000000E-01 5.411228300000000E-01 5.143298720000000E-01 5.089015830000000E-01 4.664394910000000E-01 4.411986940000000E-01 4.362407560000000E-01 3.932890700000000E-01 3.679648930000000E-01 3.594515220000000E-01 3.252654870000000E-01 3.118925250000000E-01 2.944830890000000E-01 2.815526850000000E-01 3.283591200000000E-01 +3.985185290000000E-01 5.044375150000000E-01 5.427049230000000E-01 0.000000000000000E+00 5.391687320000000E-01 5.784730520000000E-01 5.221954400000000E-01 5.139984880000000E-01 5.413280750000000E-01 5.015405750000000E-01 4.990541230000000E-01 5.402569550000000E-01 4.954324130000000E-01 0.000000000000000E+00 4.893734250000000E-01 4.721029560000000E-01 4.208089360000000E-01 3.953928260000000E-01 4.435055560000000E-01 4.914964220000000E-01 0.000000000000000E+00 4.934783150000000E-01 4.737149800000000E-01 4.321294530000000E-01 4.104227100000000E-01 4.033396370000000E-01 3.657798940000000E-01 3.411569690000000E-01 3.344352120000000E-01 3.136285510000000E-01 0.000000000000000E+00 2.701723060000000E-01 2.567801030000000E-01 3.008200120000000E-01 +3.778700780000000E-01 4.706234850000000E-01 4.764708150000000E-01 5.150653320000000E-01 5.217272260000000E-01 0.000000000000000E+00 4.886956900000000E-01 4.805564630000000E-01 0.000000000000000E+00 4.708672130000000E-01 4.681284820000000E-01 0.000000000000000E+00 4.774606920000000E-01 4.667045980000000E-01 4.305131520000000E-01 4.404033710000000E-01 3.971523700000000E-01 3.746503050000000E-01 4.153314740000000E-01 4.414124900000000E-01 4.657040310000000E-01 4.630743360000000E-01 0.000000000000000E+00 4.259293590000000E-01 4.048297970000000E-01 0.000000000000000E+00 3.607749220000000E-01 3.368126270000000E-01 0.000000000000000E+00 2.965547750000000E-01 2.699820270000000E-01 2.428833400000000E-01 2.373524290000000E-01 2.771420670000000E-01 +4.121052870000000E-01 5.174940580000000E-01 5.082281250000000E-01 5.135174460000000E-01 5.217999170000000E-01 5.480049350000000E-01 5.135751710000000E-01 5.099534610000000E-01 5.309675040000000E-01 4.967750540000000E-01 4.924285740000000E-01 5.169916370000000E-01 4.817793780000000E-01 4.673951600000000E-01 4.585867510000000E-01 4.781533920000000E-01 4.227630350000000E-01 3.903964060000000E-01 4.256535610000000E-01 4.399757790000000E-01 4.458380740000000E-01 4.412842120000000E-01 4.447348850000000E-01 4.127851590000000E-01 3.936781800000000E-01 3.857677150000000E-01 3.498606180000000E-01 3.273970360000000E-01 3.165939070000000E-01 2.826216670000000E-01 2.560574710000000E-01 2.363796550000000E-01 2.315029610000000E-01 2.654944420000000E-01 +6.014796770000000E-01 5.921624320000000E-01 5.872857380000000E-01 5.880960260000000E-01 5.863364820000000E-01 5.887224490000000E-01 5.793645830000000E-01 5.753430740000000E-01 5.720997830000000E-01 5.633020640000000E-01 5.578502570000000E-01 5.540746130000000E-01 5.412126250000000E-01 5.330285010000000E-01 5.268198550000000E-01 5.379479550000000E-01 5.780048380000000E-01 5.015106430000000E-01 5.273329660000000E-01 5.350937730000000E-01 5.318355170000000E-01 5.195016060000000E-01 5.076872200000000E-01 4.835154050000000E-01 4.602736040000000E-01 4.398624670000000E-01 4.112372740000000E-01 3.843288650000000E-01 3.578608780000000E-01 3.286220890000000E-01 3.000503450000000E-01 2.765840580000000E-01 2.652378860000000E-01 2.862925500000000E-01 diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h new file mode 100644 index 00000000000..318a1b362d9 --- /dev/null +++ b/include/openmc/random_ray/decomposition_map.h @@ -0,0 +1,54 @@ +#ifndef OPENMC_DECOMPOSITION_MAP_H +#define OPENMC_DECOMPOSITION_MAP_H + +#include "openmc/vector.h" +#include "openmc/random_ray/flat_source_domain.h" +#include "openmc/random_ray/source_region.h" + +namespace openmc { + +class DecompositionMap; + +namespace mpi { + extern DecompositionMap decomp_map; +} // namespace mpi + +class DecompositionMap { +public: + //---------------------------------------------------------------------------- + // Constructors + DecompositionMap(); + + //---------------------------------------------------------------------------- + // Methods + // void initialize(FlatSourceDomain* domain); + void update(); + void create(FlatSourceDomain* domain); + bool is_SRK_in_domain(int sr_key); + // bool is_SRK_in_domain(SourceRegionKey sr_key); + int n_source_regions(); + + //---------------------------------------------------------------------------- + // Static data members + + + //---------------------------------------------------------------------------- + // Public data members + + // Map that relates a SourceRegionKey to the index of the MPI rank that + // contains that source region in its subdomain. + // std::unordered_map + // subdomain_map_; + + std::unordered_map subdomain_map_; + +private: + //---------------------------------------------------------------------------- + // Private data members + // vector my_subdomain_list_; + +}; // class DecompositionMap + +} // namespace openmc + +#endif // OPENMC_DECOMPOSITION_MAP_H diff --git a/include/openmc/random_ray/flat_source_domain.h b/include/openmc/random_ray/flat_source_domain.h index 78351fcc5f5..1f7ba93ed08 100644 --- a/include/openmc/random_ray/flat_source_domain.h +++ b/include/openmc/random_ray/flat_source_domain.h @@ -9,6 +9,7 @@ #include "openmc/source.h" #include #include +// #include "openmc/random_ray/ray_bank.h" namespace openmc { @@ -56,17 +57,31 @@ class FlatSourceDomain { int32_t target_material_id, bool is_target_void); void prepare_base_source_regions(); SourceRegionHandle get_subdivided_source_region_handle( - int64_t sr, int mesh_bin, Position r, double dist, Direction u); + int64_t sr, int mesh_bin, Position r, Direction u); void finalize_discovered_source_regions(); void apply_transport_stabilization(); int64_t n_source_regions() const { + // int64_t n_source_regions = source_regions_.n_source_regions(); //TODO: is this base source regions or does this include msh_bins? + // if (mpi::n_procs > 1){ + // n_source_regions = mpi::decomp_map.n_source_regions(); + // } + + // return n_source_regions; return source_regions_.n_source_regions(); } int64_t n_source_elements() const { return source_regions_.n_source_regions() * negroups_; + + // int64_t n_source_regions = source_regions_.n_source_regions(); //TODO: is this base source regions or does this include msh_bins? + // if (mpi::n_procs > 1){ + // n_source_regions = mpi::decomp_map.n_source_regions(); + // } + + // return n_source_regions * negroups_; } + // void initialize_ray_bank(); //---------------------------------------------------------------------------- // Static Data members @@ -143,6 +158,8 @@ class FlatSourceDomain { // technique. bool is_transport_stabilization_needed_ {false}; + // RayBank RB_; // Ray bank to store rays for each MPI rank + protected: //---------------------------------------------------------------------------- // Methods diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index abf2a26881f..0c7f68f978d 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -6,9 +6,34 @@ #include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/moment_matrix.h" #include "openmc/source.h" +// #include "openmc/random_ray/ray_bank.h" namespace openmc { +// Container for MPI exchange +struct RayBufferContainer { + Position position; + Direction direction; + double distance_travelled; + vector angular_flux; + SourceRegionKey sr_key; + int sr; + bool is_active; + uint64_t ray_id; +}; + +// Container for MPI exchange +struct RayExchangeData { + Position position; + Direction direction; + double distance_travelled; + bool is_active; + uint64_t ray_id; +}; + +// Forward declare +class FlatSourceDomain; + /* * The RandomRay class encompasses data and methods for transporting random rays * through the model. It is a small extension of the Particle class. @@ -21,6 +46,8 @@ class RandomRay : public Particle { // Constructors RandomRay(); RandomRay(uint64_t ray_id, FlatSourceDomain* domain); + RandomRay(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux); + // RandomRay(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); //---------------------------------------------------------------------------- // Methods @@ -38,10 +65,17 @@ class RandomRay : public Particle { SourceRegionHandle& srh, double distance, bool is_active, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); + void restart_ray(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux); + // void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); uint64_t transport_history_based_single_ray(); SourceSite sample_prng(); SourceSite sample_halton(); + bool has_left_subdomain(); + // RayBufferContainer pack_ray(); + void pack_ray_for_buffer(double distance_buffer, Position position_buffer, SourceRegionKey sr_key, int sr); + int get_energy_groups(); + //---------------------------------------------------------------------------- // Static data members static double distance_inactive_; // Inactive (dead zone) ray length @@ -54,6 +88,7 @@ class RandomRay : public Particle { //---------------------------------------------------------------------------- // Public data members vector angular_flux_; + RayBufferContainer exchange_data_; bool ray_trace_only_ {false}; // If true, only perform geometry operations @@ -64,6 +99,7 @@ class RandomRay : public Particle { vector delta_moments_; vector mesh_bins_; vector mesh_fractional_lengths_; + // RayBank RB_; int negroups_; FlatSourceDomain* domain_ {nullptr}; // pointer to domain that has flat source @@ -71,6 +107,8 @@ class RandomRay : public Particle { double distance_travelled_ {0}; bool is_active_ {false}; bool is_alive_ {true}; + bool is_local_ {true}; + bool is_buffered_ {false}; }; // class RandomRay } // namespace openmc diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index b94e7401b3e..8871400ce75 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -3,6 +3,8 @@ #include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/linear_source_domain.h" +#include "openmc/random_ray/ray_bank.h" + namespace openmc { @@ -29,10 +31,12 @@ class RandomRaySimulation { void simulate(); void output_simulation_results() const; void instability_check( - int64_t n_hits, double k_eff, double& avg_miss_rate) const; + int64_t n_hits, double k_eff, double& avg_miss_rate, int n_source_regions) const; void print_results_random_ray(uint64_t total_geometric_intersections, double avg_miss_rate, int negroups, int64_t n_source_regions, int64_t n_external_source_regions) const; + void transport_sweep(); + void transport_sweep_decomp(RayBank& RB); //---------------------------------------------------------------------------- // Accessors @@ -54,6 +58,8 @@ class RandomRaySimulation { // Tracks the total number of geometric intersections by all rays for // reporting uint64_t total_geometric_intersections_ {0}; + // batch-wise intersection counter + // uint64_t batch_geometric_intersections_ {0}; // Number of energy groups int negroups_; diff --git a/include/openmc/random_ray/ray_bank.h b/include/openmc/random_ray/ray_bank.h new file mode 100644 index 00000000000..a1e1e4ce824 --- /dev/null +++ b/include/openmc/random_ray/ray_bank.h @@ -0,0 +1,68 @@ +#ifndef OPENMC_RAY_BANK_H +#define OPENMC_RAY_BANK_H + +#include "openmc/vector.h" +#include "openmc/random_ray/random_ray.h" +#include "openmc/random_ray/source_region.h" +#include "openmc/random_ray/flat_source_domain.h" +#ifdef OPENMC_MPI +#include +#endif + +namespace openmc { + +// // Forward declaration +// class FlatSourceDomain; +// class RandomRay; +// struct RayBufferContainer; + +class RayBank { +public: + //---------------------------------------------------------------------------- + // Constructors + RayBank(); + + //---------------------------------------------------------------------------- + // Methods + void add_ray_to_bank(RandomRay& ray); + void buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain); + void update(FlatSourceDomain* domain); + int ray_bank_size(); + void reset_my_ray_list(); + void communicate_rays(); + void communicate_message_metadata(); + void update_my_ray_list(FlatSourceDomain* domain); + bool is_any_ray_alive(); + + //---------------------------------------------------------------------------- + // Static data members + + + //---------------------------------------------------------------------------- + // Public data members + vector my_ray_list_; + +private: + //---------------------------------------------------------------------------- + // Private data members + int total_sending_rays_; + int total_receiving_rays_; + int negroups_; + // FlatSourceDomain* domain_ {nullptr}; // pointer to domain that has flat source //TODO: maybe include domain in constructor + // // data needed for ray transport + + // Map that contains the rank to which rays are buffered to be sent + std::unordered_map> ray_send_buffer_; + + // Map that contains the number of rays to be received from each rank + vector num_messages_receiving_; + + // vectors that received ray data + vector received_ray_data_; + vector received_angular_flux_data_; + +}; // class DecompositionMap + +} // namespace openmc + +#endif // OPENMC_RAY_BANK_H diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp new file mode 100644 index 00000000000..93182f6cb31 --- /dev/null +++ b/src/random_ray/decomposition_map.cpp @@ -0,0 +1,79 @@ +#include "openmc/random_ray/decomposition_map.h" + +#include "openmc/message_passing.h" +#include "openmc/vector.h" +#include "openmc/random_ray/flat_source_domain.h" +#include "openmc/random_ray/random_ray.h" + +namespace openmc { + +namespace mpi { + DecompositionMap decomp_map; +} + +// Constructor +DecompositionMap::DecompositionMap() {} + +// Method to initialize subdomain list +void DecompositionMap::create(FlatSourceDomain* domain){ + vector start(mpi::n_procs); + vector end(mpi::n_procs); + + int sr_per_rank = ((domain->n_source_regions() + mpi::n_procs - 1) / mpi::n_procs); + + int sr_cnt = 0; + int rank = 0; + for (int i = 0; i < domain->n_source_regions(); i++) { + if (sr_cnt >= sr_per_rank){ + sr_cnt = 0; + rank++; + } + subdomain_map_[i] = rank; + sr_cnt++; + } + + + // int start = mpi::rank * sr_per_rank; // + 1; //TODO: does cell ID numbering starts at 1 + // int end = (mpi::rank + 1) * sr_per_rank; // + 1; + + // printf("Rank %d: Handling source regions %d to %d\n", mpi::rank, start, end-1); + + // for (int i = start; i < end; i++) { + // // subdomain_map_[SourceRegionKey(i, 0)] = mpi::rank; + // subdomain_map_[i] = mpi::rank; + // } +} + +// Update subdomain list for each decomposition map. +void DecompositionMap::update(){ + + // Volume data needs to be moved around as well + +} + +// bool DecompositionMap::is_SRK_in_domain(SourceRegionKey sr_key){ +bool DecompositionMap::is_SRK_in_domain(int sr_key){ + if (subdomain_map_.find(sr_key) != subdomain_map_.end()){ + if (subdomain_map_[sr_key] == mpi::rank){ + return true; + } else { + return false; + } + } else { + return false; + } +} + +int DecompositionMap::n_source_regions(){ + int count = 0; + + for (const auto& [key, val] : subdomain_map_) { + if (val == mpi::rank) { + count++; + } + } + + return count; +} + +}// namespace openmc diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 40923883088..15eb52eab39 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -16,6 +16,7 @@ #include "openmc/tallies/tally_scoring.h" #include "openmc/timer.h" #include "openmc/weight_windows.h" +#include "openmc/message_passing.h" #include @@ -365,11 +366,26 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const p[sr] = sr_fission_source_new; } - double k_eff_new = k_eff_old * (fission_rate_new / fission_rate_old); + double fission_rate_old_total = 0; + double fission_rate_new_total = 0; + + // Sum up fission rates across all ranks + if (mpi::n_procs > 1) { + MPI_Allreduce(&fission_rate_old, &fission_rate_old_total, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(&fission_rate_new, &fission_rate_new_total, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + } else{ + fission_rate_old_total = fission_rate_old; + fission_rate_new_total = fission_rate_new; + } + + double k_eff_new = k_eff_old * (fission_rate_new_total / fission_rate_old_total); + + // double k_eff_new = k_eff_old * (fission_rate_new / fission_rate_old); double H = 0.0; // defining an inverse sum for better performance - double inverse_sum = 1 / fission_rate_new; + double inverse_sum = 1 / fission_rate_new_total; + // double inverse_sum = 1 / fission_rate_new; #pragma omp parallel for reduction(+ : H) for (int64_t sr = 0; sr < n_source_regions(); sr++) { @@ -1410,7 +1426,7 @@ void FlatSourceDomain::prepare_base_source_regions() } SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( - int64_t sr, int mesh_bin, Position r, double dist, Direction u) + int64_t sr, int mesh_bin, Position r, Direction u) { SourceRegionKey sr_key {sr, mesh_bin}; @@ -1620,4 +1636,10 @@ void FlatSourceDomain::apply_transport_stabilization() } } +// void FlatSourceDomain::initialize_ray_bank(){ +// // RB_.clear(); +// // RB_.shrink_to_fit(); +// } + + } // namespace openmc diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 27f674c4278..de31fe36785 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -14,6 +14,9 @@ #include "openmc/random_dist.h" #include "openmc/source.h" +// #include "openmc/random_ray/ray_bank.h" +#include "openmc/random_ray/decomposition_map.h" + namespace openmc { //============================================================================== @@ -256,11 +259,18 @@ RandomRay::RandomRay(uint64_t ray_id, FlatSourceDomain* domain) : RandomRay() initialize_ray(ray_id, domain); } +RandomRay::RandomRay(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux) : RandomRay() +{ + restart_ray(domain, data, angular_flux); +} + // Transports ray until termination criteria are met uint64_t RandomRay::transport_history_based_single_ray() { using namespace openmc; while (alive()) { + // if (simulation::current_batch == 30){ + // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travlled: %f\n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_);} event_advance_ray(); if (!alive()) break; @@ -299,8 +309,8 @@ void RandomRay::event_advance_ray() wgt() = 0.0; } - distance_travelled_ += distance; attenuate_flux(distance, true); + distance_travelled_ += distance; } else { // If the ray is still in the dead zone, need to check if it // has entered the active phase. If so, split into two segments (one @@ -308,9 +318,10 @@ void RandomRay::event_advance_ray() // first part of the active length) and attenuate each. Otherwise, if the // full length of the segment is within the dead zone, attenuate as normal. if (distance_travelled_ + distance >= distance_inactive_) { - is_active_ = true; + // is_active_ = true; double distance_dead = distance_inactive_ - distance_travelled_; attenuate_flux(distance_dead, false); + is_active_ = true; double distance_alive = distance - distance_dead; @@ -320,11 +331,16 @@ void RandomRay::event_advance_ray() wgt() = 0.0; } + //TODO: Add check here to avoid useless onwards travel? + // if (has_left_subdomain()) { + // return; + // } + attenuate_flux(distance_alive, true, distance_dead); distance_travelled_ = distance_alive; } else { - distance_travelled_ += distance; attenuate_flux(distance, false); + distance_travelled_ += distance; } } @@ -342,6 +358,11 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) // The base source region is the spatial region index int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); + // Initialise values for ray buffering + double mesh_partial_length = 0.0; + int mesh_bin = 0; + double tiny_multiplier = 0.0; + // Perform ray tracing across mesh if (mesh_subdivision_enabled_) { // Determine the mesh index for the base source region, if any @@ -377,20 +398,60 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) attenuate_flux_inner( physical_length, is_active, sr, mesh_bins_[b], start); start += physical_length * u(); + + // if (simulation::current_batch == 30) { + // printf("RANK %d: Source region %ld, mesh bin %d\n", mpi::rank, sr, mesh_bins_[b]);} + + // If ray has left my subdomain, stop transport + // and correct position + if(has_left_subdomain()){ + // for (int i = 0; i <= b; i++) { + for (int i = 0; i <= b - 1; i++) { + mesh_partial_length += mesh_fractional_lengths_[i]; + // tiny_multiplier = 1.0; + } + + if (b > 0) { + tiny_multiplier = 1.0; + } + + // Add TINY_BIT to account for deleted length in first mesh_bin in each base source region + mesh_partial_length = tiny_multiplier * TINY_BIT + reduced_distance * mesh_partial_length; + mesh_bin = mesh_bins_[b]; + break; + } } } } else { attenuate_flux_inner(distance, is_active, sr, C_NONE, r()); } + // If ray has left my subdomain, buffer ray state + if(has_left_subdomain() && !is_buffered_) { + // if (simulation::current_batch == 30) { + // printf("RANK %d: buffering \n", mpi::rank);} + Position position_buffer = r() + (offset + mesh_partial_length) * u(); + double distance_buffer = distance_travelled_ + offset + mesh_partial_length; + pack_ray_for_buffer(distance_buffer, position_buffer, SourceRegionKey(sr, mesh_bin), sr); + wgt() = 0.0; + } } void RandomRay::attenuate_flux_inner( double distance, bool is_active, int64_t sr, int mesh_bin, Position r) { + // Check if SR belongs to my subdomain. + // If not, buffer ray, set wgt to zero and leave function. + bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(sr); + // bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin)); + if (!is_in_my_subdomain) { + is_local_ = false; + return; + } + SourceRegionHandle srh; if (mesh_subdivision_enabled_) { srh = domain_->get_subdivided_source_region_handle( - sr, mesh_bin, r, distance, u()); + sr, mesh_bin, r, u()); if (srh.is_numerical_fp_artifact_) { return; } @@ -768,6 +829,72 @@ void RandomRay::attenuate_flux_linear_source_void( } } +void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux) +{ + + domain_ = domain; + distance_travelled_ = data.distance_travelled; + + // Reset particle event counter. I read out intersections after each ray transport, + // so the reset to zero after transmission between ranks should be OK here. + n_event() = 0; + + is_active_ = data.is_active; + + wgt() = 1.0; + + // is_local_ = true; + + // set identifier for particle + id() = data.ray_id; + + // generate source site using sample method + SourceSite site; + + // Set location and direction as in previous subdomain + site.r = data.position; + + // angle + site.u = data.direction; + + site.E = 0.0; + this->from_source(&site); + + // Locate ray + if (lowest_coord().cell() == C_NONE) { + if (!exhaustive_find_cell(*this)) { + this->mark_as_lost( + "Could not find the cell containing particle " + std::to_string(id())); + } + + // Set birth cell attribute + if (cell_born() == C_NONE) + cell_born() = lowest_coord().cell(); + } + + // Initialize ray's starting angular flux to starting location's isotropic + // source + int i_cell = lowest_coord().cell(); + int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); + + if (sr == C_NONE || sr < 0){ + std::string err_msg = "ERROR: Cell " + std::to_string(sr) + + " not found when restarting ray " + std::to_string(id()) + + "at position: (" + std::to_string(site.r.x) + ", " + + std::to_string(site.r.y) + ", " + + std::to_string(site.r.z) + ")"; + fatal_error(err_msg); +} + + // Set ray's angular flux to value before subdomain change + for (int g = 0; g < negroups_; g++) { + angular_flux_[g] = angular_flux[g]; + } + + // printf(" Restart: ray %ld, position: %f, %f, %f, angular flux: %f, distance travlled: %f, rank %d\n", id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, mpi::rank); + +} + void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) { domain_ = domain; @@ -826,7 +953,7 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) mesh_bin = mesh->get_bin(r()); } srh = - domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), 0.0, u()); + domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); } else { srh = domain_->source_regions_.get_source_region_handle(sr); } @@ -888,4 +1015,26 @@ SourceSite RandomRay::sample_halton() return site; } +bool RandomRay::has_left_subdomain() { + return !is_local_; +} + +void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_buffer, SourceRegionKey sr_key, int sr) { + exchange_data_.position = position_buffer; + exchange_data_.direction = u(); + exchange_data_.angular_flux = angular_flux_; + exchange_data_.distance_travelled = distance_buffer; + exchange_data_.sr_key = sr_key; + exchange_data_.sr = sr; + exchange_data_.is_active = is_active_; + exchange_data_.ray_id = id(); + + is_buffered_ = true; +} + +int RandomRay::get_energy_groups() { + return negroups_; +} + + } // namespace openmc diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 388a778b840..210e2ad51b3 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -15,6 +15,8 @@ #include "openmc/tallies/tally_scoring.h" #include "openmc/timer.h" #include "openmc/weight_windows.h" +#include "openmc/random_ray/decomposition_map.h" +#include "openmc/random_ray/ray_bank.h" namespace openmc { @@ -61,6 +63,9 @@ void openmc_run_random_ray() // Initialize fixed sources, if present sim.apply_fixed_sources_and_mesh_domains(); + // Initialize subdomains for MPI ranks + mpi::decomp_map.create(sim.domain()); + // Begin main simulation timer simulation::time_total.start(); @@ -431,6 +436,9 @@ void RandomRaySimulation::prepare_fixed_sources_adjoint( void RandomRaySimulation::simulate() { + // Create ray bank + RayBank RB; + // Random ray power iteration loop while (simulation::current_batch < settings::n_batches) { // Initialize the current batch @@ -439,7 +447,7 @@ void RandomRaySimulation::simulate() // MPI not supported in random ray solver, so all work is done by rank 0 // TODO: Implement domain decomposition for MPI parallelism - if (mpi::master) { + // if (mpi::master) { // Reset total starting particle weight used for normalizing tallies simulation::total_weight = 1.0; @@ -465,17 +473,18 @@ void RandomRaySimulation::simulate() // Start timer for transport simulation::time_transport.start(); -// Transport sweep over all random rays for the iteration -#pragma omp parallel for schedule(dynamic) \ - reduction(+ : total_geometric_intersections_) - for (int i = 0; i < settings::n_particles; i++) { - RandomRay ray(i, domain_.get()); - total_geometric_intersections_ += - ray.transport_history_based_single_ray(); + if (mpi::n_procs > 1){ + transport_sweep_decomp(RB); + } else { + transport_sweep(); } + // printf("Transport sweep complete \n"); simulation::time_transport.stop(); + // Update decomposition map with newly discovered source regions + mpi::decomp_map.update(); + // If using mesh subdivision, add any newly discovered source regions // to the main source region container. if (RandomRay::mesh_subdivision_enabled_) { @@ -500,6 +509,8 @@ void RandomRaySimulation::simulate() global_tally_tracklength = k_eff_; } + // printf("Keff calculated \n"); + // Execute all tallying tasks, if this is an active batch if (simulation::current_batch > settings::n_inactive) { @@ -521,15 +532,39 @@ void RandomRaySimulation::simulate() // Set phi_old = phi_new domain_->flux_swap(); + int n_source_regions = domain_->n_source_regions(); //TODO: is that base source regions or does that include mesh_bins? + + if (mpi::n_procs > 1){ + n_source_regions = mpi::decomp_map.n_source_regions(); + } + // Check for any obvious insabilities/nans/infs - instability_check(n_hits, k_eff_, avg_miss_rate_); - } // End MPI master work + instability_check(n_hits, k_eff_, avg_miss_rate_, n_source_regions); + + // Include weighting factor when decomposed into more than one subdomain + if (mpi::n_procs > 1){ + avg_miss_rate_ = avg_miss_rate_*(n_source_regions/domain_->n_source_regions()); + } + // } // End MPI master work // Finalize the current batch finalize_generation(); finalize_batch(); } // End random ray power iteration loop + if (mpi::n_procs > 1){ + // double avg_miss_rate_temp = 0.0; + // MPI_Allreduce(&avg_miss_rate_, &avg_miss_rate_temp, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + // avg_miss_rate_ = avg_miss_rate_temp; + + // uint64_t total_geometric_intersections_temp = 0; + // MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_temp, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, MPI_COMM_WORLD); + // total_geometric_intersections_ = total_geometric_intersections_temp; + + MPI_Allreduce(MPI_IN_PLACE, &avg_miss_rate_, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &total_geometric_intersections_, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, MPI_COMM_WORLD); + } + domain_->count_external_source_regions(); } @@ -549,11 +584,14 @@ void RandomRaySimulation::output_simulation_results() const // Apply a few sanity checks to catch obvious cases of numerical instability. // Instability typically only occurs if ray density is extremely low. void RandomRaySimulation::instability_check( - int64_t n_hits, double k_eff, double& avg_miss_rate) const + int64_t n_hits, double k_eff, double& avg_miss_rate, int n_source_regions) const { - double percent_missed = ((domain_->n_source_regions() - n_hits) / - static_cast(domain_->n_source_regions())) * - 100.0; + // double percent_missed = ((domain_->n_source_regions() - n_hits) / + // static_cast(domain_->n_source_regions())) * + // 100.0; + double percent_missed = ((n_source_regions - n_hits) / + static_cast(n_source_regions)) * + 100.0; avg_miss_rate += percent_missed; if (mpi::master) { @@ -688,4 +726,60 @@ void RandomRaySimulation::print_results_random_ray( } } +void RandomRaySimulation::transport_sweep() { + + // Transport sweep over all random rays for the iteration + #pragma omp parallel for schedule(dynamic) \ + reduction(+ : total_geometric_intersections_) + for (int i = 0; i < settings::n_particles; i++) { + RandomRay ray(i, domain_.get()); + + total_geometric_intersections_ += ray.transport_history_based_single_ray(); + } +} + +void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { + + // Transport sweep over all random rays for the iteration + #pragma omp parallel for schedule(static) + for (int i = 0; i < simulation::work_per_rank; i++) { + uint64_t id = simulation::work_index[mpi::rank] + i; + RandomRay ray(id, domain_.get()); + + // Add ray to ray bank + #pragma omp critical (raybank) + { + RB.add_ray_to_bank(ray); + } + } + + // batch_geometric_intersections_ = 0; + + while (RB.is_any_ray_alive()) { + #pragma omp parallel for schedule(dynamic) \ + reduction(+ : total_geometric_intersections_) + for (int i = 0; i < RB.ray_bank_size(); i++) { + RandomRay& ray = RB.my_ray_list_[i]; + total_geometric_intersections_ += ray.transport_history_based_single_ray(); + + // If ray has left my subdomain, buffer ray state + if(ray.has_left_subdomain()){ + #pragma omp critical (raybuffer) + { + RB.buffer_ray_data_to_send(ray, domain_.get()); + } + } + } + + // printf("Transport and buffering complete, RB size %d \n", RB.ray_bank_size()); + // Remove dead rays and move rays across subdomains between ranks + RB.update(domain_.get()); + + // printf("Ray Bank Update complete, RB size %d \n", RB.ray_bank_size()); + } + + // Reset ray bank list for next batch + RB.reset_my_ray_list(); +} + } // namespace openmc diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp new file mode 100644 index 00000000000..046f669ca2c --- /dev/null +++ b/src/random_ray/ray_bank.cpp @@ -0,0 +1,227 @@ +#include "openmc/random_ray/ray_bank.h" + +#include "openmc/random_ray/random_ray.h" +#include "openmc/random_ray/source_region.h" +#include "openmc/message_passing.h" +#include "openmc/random_ray/decomposition_map.h" +#include "openmc/mgxs_interface.h" + +namespace openmc { + +// Constructor +RayBank::RayBank() { + negroups_ = data::mg.num_energy_groups_; + num_messages_receiving_.resize(mpi::n_procs, 0); +} + +// Initialize list of ray bank that each MPI rank will handle +void RayBank::add_ray_to_bank(RandomRay& ray){ + my_ray_list_.push_back(ray); +} + +// Buffer ray that has left my subdomain +void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ + + // Read source region key from ray + // SourceRegionKey sr_key = ray.exchange_data_.sr_key; + int sr_key = ray.exchange_data_.sr; + + // Get rank to send ray to + int rank; + + if (mpi::decomp_map.subdomain_map_.find(sr_key) != mpi::decomp_map.subdomain_map_.end()){ + rank = mpi::decomp_map.subdomain_map_[sr_key]; + } else { + std::string err_msg = "ERROR: Source region key " + std::to_string(sr_key) + + " not found in decomposition map for ray " + + std::to_string(ray.exchange_data_.ray_id) + " at position: (" + + std::to_string(ray.exchange_data_.position.x) + ", " + + std::to_string(ray.exchange_data_.position.y) + ", " + + std::to_string(ray.exchange_data_.position.z) + ")."; + fatal_error(err_msg); + } + + // Add ray data to buffer + ray_send_buffer_[rank].push_back(ray.exchange_data_); +} + +// Update ray bank +void RayBank::update(FlatSourceDomain* domain){ + + // Empty ray list because rays have either died or are in buffer to be sent to other ranks + reset_my_ray_list(); + + // Communicate how many rays will be sent to each rank + communicate_message_metadata(); + + // Send and receive rays between MPI ranks + communicate_rays(); + + // Add received rays to ray list of that rank + update_my_ray_list(domain); + +} + +// Clears my_ray_list, but keeps memory allocation in place +void RayBank::reset_my_ray_list(){ + my_ray_list_.resize(0); +} + +int RayBank::ray_bank_size(){ + int ray_bank_size = my_ray_list_.size(); + return ray_bank_size; +} + +// Tells each rank how many rays to receive from whom +void RayBank::communicate_message_metadata() { + vector num_messages_sending(mpi::n_procs, 0); + // vector num_messages_receiving(mpi::n_procs, 0); + + // Ensure all values are zero + fill(num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); + + total_sending_rays_ = 0; + // total_receiving_rays_= 0; + + // Fill the sending counts //TODO: OMP? + for (auto& [rank, rays] : ray_send_buffer_) { + num_messages_sending[rank] = rays.size(); + total_sending_rays_ += num_messages_sending[rank]; + } + + // Exchange message counts with all ranks + MPI_Alltoall(num_messages_sending.data(), 1, MPI_INT, + num_messages_receiving_.data(), 1, MPI_INT, + MPI_COMM_WORLD); + + total_receiving_rays_ = accumulate(num_messages_receiving_.begin(), + num_messages_receiving_.end(), 0); + + // // Store results + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // // Skip over non-sending ranks + // if (num_messages_receiving[rank] == 0) continue; + // // Save number of incoming rays from each rank sending to me in incoming_ray_data map + // incoming_ray_data_[rank] = num_messages_receiving[rank]; //TODO: Could also just be vector + // total_receiving_rays_ += num_messages_receiving[rank]; + // } + +} + +void RayBank::communicate_rays(){ + + // Each ray requires 2 sends (data + angular flux) + int num_requests = ray_send_buffer_.size() * 2; + // vector requests(num_requests); // heap + MPI_Request requests[num_requests]; // stack + int req_idx = 0; + + // Define one-dimensional arrays to be sent and received and allocate size + vector ray_data; + vector angular_flux_data; + ray_data.resize(total_sending_rays_); + angular_flux_data.resize(total_sending_rays_ * negroups_); + + received_ray_data_.resize(total_receiving_rays_); + received_angular_flux_data_.resize(total_receiving_rays_ * negroups_); + + int vector_send_idx = 0; + int vector_receive_idx = 0; + + // printf("Rank %d: Sending %d rays to other ranks and receiving %d rays from other ranks.\n", mpi::rank, total_sending_rays_, total_receiving_rays_); + // printf("Number of requests: %d \n", num_requests); + + // Send ray data to neighbouring ranks + for (auto [receiving_rank, rays] : ray_send_buffer_) { + + int num_rays_sending = rays.size(); + + // printf("Rank %d: Sending %d rays to rank %d \n", mpi::rank, num_rays_sending, receiving_rank); + + for (int i = 0; i < num_rays_sending; i++) { + // Pack slimmed down data container for MPI send + RayExchangeData exchange_data; + exchange_data.position = rays[i].position; + exchange_data.direction = rays[i].direction; + exchange_data.distance_travelled = rays[i].distance_travelled; + exchange_data.is_active = rays[i].is_active; + exchange_data.ray_id = rays[i].ray_id; + ray_data[vector_send_idx + i] = exchange_data; + // Angular flux array + for (int g = 0; g < negroups_; g++){ + angular_flux_data[(vector_send_idx + i) * negroups_ + g] = rays[i].angular_flux[g]; + } + } + + // printf("Prepared data for sending to rank %d, req_idx %d, vector_send_idx %d \n", receiving_rank, req_idx, vector_send_idx); + + MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, MPI_COMM_WORLD, &requests[req_idx]); + MPI_Isend(&angular_flux_data[vector_send_idx * negroups_], num_rays_sending * negroups_, MPI_FLOAT, receiving_rank, 2, MPI_COMM_WORLD, &requests[req_idx+1]); + + // printf("Initiated send to rank %d, req_idx %d, vector_send_idx %d \n", receiving_rank, req_idx, vector_send_idx); + vector_send_idx += num_rays_sending; + req_idx += 2; + } + + // printf("Sending complete, req_idx %d, vector_send_idx %d \n", req_idx, vector_send_idx); + + // Receive ray data to neighbouring ranks //TODO: OMP? + for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { + int num_rays_receiving = num_messages_receiving_[sending_rank]; + if (num_rays_receiving == 0) continue; + MPI_Recv(&received_ray_data_[vector_receive_idx], num_rays_receiving * sizeof(RayExchangeData), MPI_BYTE, sending_rank, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + MPI_Recv(&received_angular_flux_data_[vector_receive_idx * negroups_], num_rays_receiving * negroups_, MPI_FLOAT, sending_rank, 2, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + + vector_receive_idx += num_rays_receiving; + } + + // printf("Receiving complete, req_idx %d, vector_send_idx %d, vector_receive_idx %d \n", req_idx, vector_send_idx, vector_receive_idx); + + // Wait for all communication to complete + MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); + // MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); + + // Empty buffered_ray_data + ray_send_buffer_.clear(); + + // printf("Communication complete, req_idx %d, vector_send_idx %d, vector_receive_idx %d \n", req_idx, vector_send_idx, vector_receive_idx); + +} + +void RayBank::update_my_ray_list(FlatSourceDomain* domain){ + + //TODO: OMP? + + vector angular_flux_vec; + angular_flux_vec.resize(negroups_); + for (int i = 0; i < received_ray_data_.size(); i++) { + + for (int g = 0; g < negroups_; g++) { + angular_flux_vec[g] = received_angular_flux_data_[i * negroups_ + g]; + } + + // Re-initialize rays with received data + RandomRay ray_received(domain, received_ray_data_[i], angular_flux_vec); + my_ray_list_.push_back(ray_received); + } + + received_ray_data_.clear(); + received_angular_flux_data_.clear(); + +} + +bool RayBank::is_any_ray_alive() { + + int global_rays_alive = 0; + int local_rays_alive = ray_bank_size(); + MPI_Allreduce(&local_rays_alive, &global_rays_alive, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + + if (global_rays_alive > 0){ + return true; + } else { + return false; + } + +} + +}// namespace openmc diff --git a/src/tallies/tally.cpp b/src/tallies/tally.cpp index ba183860269..b29d2b67605 100644 --- a/src/tallies/tally.cpp +++ b/src/tallies/tally.cpp @@ -1021,7 +1021,7 @@ void accumulate_tallies() { #ifdef OPENMC_MPI // Combine tally results onto master process - if (mpi::n_procs > 1 && settings::solver_type == SolverType::MONTE_CARLO) { + if (mpi::n_procs > 1) { reduce_tally_results(); } #endif From 82365f94660d9117d006434ac07734c88c0b97fb Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 22 Sep 2025 15:35:49 +0100 Subject: [PATCH 02/48] Implement MPI plotting and add timers --- examples/2D_c5g7_python_mesh/build-xml-2d.py | 4 +- .../openmc/random_ray/flat_source_domain.h | 5 + include/openmc/random_ray/random_ray.h | 14 +- .../openmc/random_ray/random_ray_simulation.h | 9 +- include/openmc/random_ray/ray_bank.h | 4 + include/openmc/timer.h | 2 + src/random_ray/flat_source_domain.cpp | 763 +++++++++++++++++- src/random_ray/random_ray.cpp | 56 +- src/random_ray/random_ray_simulation.cpp | 153 ++-- src/random_ray/ray_bank.cpp | 24 +- src/timer.cpp | 2 + 11 files changed, 925 insertions(+), 111 deletions(-) diff --git a/examples/2D_c5g7_python_mesh/build-xml-2d.py b/examples/2D_c5g7_python_mesh/build-xml-2d.py index dfb0cecf7a0..8a0accf883b 100755 --- a/examples/2D_c5g7_python_mesh/build-xml-2d.py +++ b/examples/2D_c5g7_python_mesh/build-xml-2d.py @@ -12,8 +12,8 @@ # Instantiate a Settings, set all runtime parameters, and export to XML settings_file = openmc.Settings() settings_file.energy_mode = "multi-group" -settings_file.batches = 1000 -settings_file.inactive = 600 +settings_file.batches = 20 #1000 +settings_file.inactive = 10 #600 settings_file.particles = 1750 settings_file.run_mode = 'eigenvalue' settings_file.output = {'tallies': False, 'summary': False} diff --git a/include/openmc/random_ray/flat_source_domain.h b/include/openmc/random_ray/flat_source_domain.h index 1f7ba93ed08..e3df1f2f525 100644 --- a/include/openmc/random_ray/flat_source_domain.h +++ b/include/openmc/random_ray/flat_source_domain.h @@ -40,6 +40,8 @@ class FlatSourceDomain { void random_ray_tally(); virtual void accumulate_iteration_flux(); void output_to_vtk() const; + void output_to_vtk_decomp() const; + // void communicate_plotting_data(); void convert_external_sources(); void count_external_source_regions(); void set_adjoint_sources(const vector& forward_flux); @@ -190,6 +192,9 @@ class FlatSourceDomain { // SUM and SUM_SQ do not need to be tracked. vector> tally_volumes_; + // Vector that contains the results to be plotted for MPI ranks + // vector vector_out_; + }; // class FlatSourceDomain //============================================================================ diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index 0c7f68f978d..82e7820203b 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -52,17 +52,17 @@ class RandomRay : public Particle { //---------------------------------------------------------------------------- // Methods void event_advance_ray(); - void attenuate_flux(double distance, bool is_active, double offset = 0.0); + void attenuate_flux(double distance, double offset = 0.0); void attenuate_flux_inner( - double distance, bool is_active, int64_t sr, int mesh_bin, Position r); + double distance, int64_t sr, int mesh_bin, Position r); void attenuate_flux_flat_source( - SourceRegionHandle& srh, double distance, bool is_active, Position r); + SourceRegionHandle& srh, double distance, Position r); void attenuate_flux_flat_source_void( - SourceRegionHandle& srh, double distance, bool is_active, Position r); + SourceRegionHandle& srh, double distance, Position r); void attenuate_flux_linear_source( - SourceRegionHandle& srh, double distance, bool is_active, Position r); + SourceRegionHandle& srh, double distance, Position r); void attenuate_flux_linear_source_void( - SourceRegionHandle& srh, double distance, bool is_active, Position r); + SourceRegionHandle& srh, double distance, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); void restart_ray(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux); @@ -108,7 +108,7 @@ class RandomRay : public Particle { bool is_active_ {false}; bool is_alive_ {true}; bool is_local_ {true}; - bool is_buffered_ {false}; + // bool is_buffered_ {false}; }; // class RandomRay } // namespace openmc diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 8871400ce75..1622edee69f 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -31,10 +31,10 @@ class RandomRaySimulation { void simulate(); void output_simulation_results() const; void instability_check( - int64_t n_hits, double k_eff, double& avg_miss_rate, int n_source_regions) const; + int64_t n_hits, double k_eff, double& avg_miss_rate) const; void print_results_random_ray(uint64_t total_geometric_intersections, double avg_miss_rate, int negroups, int64_t n_source_regions, - int64_t n_external_source_regions) const; + int64_t n_external_source_regions, uint64_t avg_num_comms) const; void transport_sweep(); void transport_sweep_decomp(RayBank& RB); @@ -64,6 +64,11 @@ class RandomRaySimulation { // Number of energy groups int negroups_; + // Average number of ray communications between rank per batch + uint64_t avg_num_comms_ {0}; + uint64_t num_comms_batch_ {0}; + vector rank_load_; + }; // class RandomRaySimulation //============================================================================ diff --git a/include/openmc/random_ray/ray_bank.h b/include/openmc/random_ray/ray_bank.h index a1e1e4ce824..eb8c84f11df 100644 --- a/include/openmc/random_ray/ray_bank.h +++ b/include/openmc/random_ray/ray_bank.h @@ -42,6 +42,10 @@ class RayBank { // Public data members vector my_ray_list_; + // // Number of ray communications between ranks + // uint64_t num_comms_total_ {0}; + // uint64_t num_comms_batch_ {0}; + private: //---------------------------------------------------------------------------- // Private data members diff --git a/include/openmc/timer.h b/include/openmc/timer.h index d928aad4560..575437263e4 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -32,6 +32,8 @@ extern Timer time_event_surface_crossing; extern Timer time_event_collision; extern Timer time_event_death; extern Timer time_update_src; +extern Timer time_ray_comms; +extern Timer time_decomposition_handling; } // namespace simulation diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 15eb52eab39..e6de60e3da8 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -17,6 +17,7 @@ #include "openmc/timer.h" #include "openmc/weight_windows.h" #include "openmc/message_passing.h" +#include "openmc/random_ray/decomposition_map.h" #include @@ -366,26 +367,19 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const p[sr] = sr_fission_source_new; } - double fission_rate_old_total = 0; - double fission_rate_new_total = 0; - // Sum up fission rates across all ranks if (mpi::n_procs > 1) { - MPI_Allreduce(&fission_rate_old, &fission_rate_old_total, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - MPI_Allreduce(&fission_rate_new, &fission_rate_new_total, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - } else{ - fission_rate_old_total = fission_rate_old; - fission_rate_new_total = fission_rate_new; + simulation::time_decomposition_handling.start(); + MPI_Allreduce(MPI_IN_PLACE, &fission_rate_old, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + MPI_Allreduce(MPI_IN_PLACE, &fission_rate_new, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + simulation::time_decomposition_handling.stop(); } - double k_eff_new = k_eff_old * (fission_rate_new_total / fission_rate_old_total); - - // double k_eff_new = k_eff_old * (fission_rate_new / fission_rate_old); + double k_eff_new = k_eff_old * (fission_rate_new / fission_rate_old); double H = 0.0; // defining an inverse sum for better performance - double inverse_sum = 1 / fission_rate_new_total; - // double inverse_sum = 1 / fission_rate_new; + double inverse_sum = 1 / fission_rate_new; #pragma omp parallel for reduction(+ : H) for (int64_t sr = 0; sr < n_source_regions(); sr++) { @@ -398,6 +392,12 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const } } + if (mpi::n_procs > 1) { + simulation::time_decomposition_handling.start(); + MPI_Allreduce(MPI_IN_PLACE, &H, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + simulation::time_decomposition_handling.stop(); + } + // Adds entropy value to shared entropy vector in openmc namespace. simulation::entropy.push_back(H); @@ -784,6 +784,7 @@ void FlatSourceDomain::output_to_vtk() const // Relate voxel spatial locations to random ray source regions vector voxel_indices(Nx * Ny * Nz); + vector voxel_indices_key(Nx * Ny * Nz); vector voxel_positions(Nx * Ny * Nz); vector weight_windows(Nx * Ny * Nz); float min_weight = 1e20; @@ -804,6 +805,7 @@ void FlatSourceDomain::output_to_vtk() const bool found = exhaustive_find_cell(p); if (!found) { + voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1,-1}; voxel_indices[z * Ny * Nx + y * Nx + x] = -1; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; weight_windows[z * Ny * Nx + y * Nx + x] = 0.0; @@ -812,6 +814,7 @@ void FlatSourceDomain::output_to_vtk() const int i_cell = p.lowest_coord().cell(); int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); + SourceRegionKey sr_key {sr, 0}; if (RandomRay::mesh_subdivision_enabled_) { int mesh_idx = base_source_regions_.mesh(sr); int mesh_bin; @@ -820,7 +823,7 @@ void FlatSourceDomain::output_to_vtk() const } else { mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); } - SourceRegionKey sr_key {sr, mesh_bin}; + sr_key = {sr, mesh_bin}; auto it = source_region_map_.find(sr_key); if (it != source_region_map_.end()) { sr = it->second; @@ -829,6 +832,7 @@ void FlatSourceDomain::output_to_vtk() const } } + voxel_indices_key[z * Ny * Nx + y * Nx + x] = sr_key; voxel_indices[z * Ny * Nx + y * Nx + x] = sr; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; @@ -870,7 +874,7 @@ void FlatSourceDomain::output_to_vtk() const std::fprintf(plot, "LOOKUP_TABLE default\n"); for (int i = 0; i < Nx * Ny * Nz; i++) { int64_t fsr = voxel_indices[i]; - int64_t source_element = fsr * negroups_ + g; + // int64_t source_element = fsr * negroups_ + g; float flux = 0; if (fsr >= 0) { flux = evaluate_flux_at_point(voxel_positions[i], fsr, g); @@ -921,6 +925,19 @@ void FlatSourceDomain::output_to_vtk() const std::fwrite(&mat, sizeof(int), 1, plot); } + // Plot rank subdomains + std::fprintf(plot, "SCALARS rank_subdomains int\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + for (auto sr_key : voxel_indices_key) { + int rank = -1; + if (mpi::decomp_map.subdomain_map_.find(sr_key.base_source_region_id) != mpi::decomp_map.subdomain_map_.end()){ + rank = mpi::decomp_map.subdomain_map_[sr_key.base_source_region_id]; + } + float value = future_prn(10, rank); + value = convert_to_big_endian(value); + std::fwrite(&value, sizeof(float), 1, plot); + } + // Plot fission source if (settings::run_mode == RunMode::EIGENVALUE) { std::fprintf(plot, "SCALARS total_fission_source float\n"); @@ -932,7 +949,7 @@ void FlatSourceDomain::output_to_vtk() const int mat = source_regions_.material(fsr); if (mat != MATERIAL_VOID) { for (int g = 0; g < negroups_; g++) { - int64_t source_element = fsr * negroups_ + g; + // int64_t source_element = fsr * negroups_ + g; float flux = evaluate_flux_at_point(voxel_positions[i], fsr, g); double sigma_f = sigma_f_[mat * negroups_ + g]; total_fission += sigma_f * flux; @@ -982,6 +999,720 @@ void FlatSourceDomain::output_to_vtk() const } } + +// Outputs all basic material, FSR ID, multigroup flux, and +// fission source data to .vtk file that can be directly +// loaded and displayed by Paraview. Note that .vtk binary +// files require big endian byte ordering, so endianness +// is checked and flipped if necessary. +void FlatSourceDomain::output_to_vtk_decomp() const +{ + int master_rank = 0; // Master rank is rank 0 + + if (mpi::master){ + // if (mpi::rank == master){ + // Rename .h5 plot filename(s) to .vtk filenames + for (int p = 0; p < model::plots.size(); p++) { + PlottableInterface* plot = model::plots[p].get(); + plot->path_plot() = + plot->path_plot().substr(0, plot->path_plot().find_last_of('.')) + ".vtk"; + } + + // Print header information + print_plot(); + } + + // Outer loop over plots + for (int p = 0; p < model::plots.size(); p++) { + + // Get handle to OpenMC plot object and extract params + Plot* openmc_plot = dynamic_cast(model::plots[p].get()); + + // Random ray plots only support voxel plots + if (!openmc_plot) { + warning(fmt::format("Plot {} is invalid plot type -- only voxel plotting " + "is allowed in random ray mode.", + p)); + continue; + } else if (openmc_plot->type_ != Plot::PlotType::voxel) { + warning(fmt::format("Plot {} is invalid plot type -- only voxel plotting " + "is allowed in random ray mode.", + p)); + continue; + } + + int Nx = openmc_plot->pixels_[0]; + int Ny = openmc_plot->pixels_[1]; + int Nz = openmc_plot->pixels_[2]; + Position origin = openmc_plot->origin_; + Position width = openmc_plot->width_; + Position ll = origin - width / 2.0; + double x_delta = width.x / Nx; + double y_delta = width.y / Ny; + double z_delta = width.z / Nz; + std::string filename = openmc_plot->path_plot(); + + // Perform sanity checks on file size + uint64_t bytes = Nx * Ny * Nz * (negroups_ + 1 + 1 + 1) * sizeof(float); + write_message(5, "Processing plot {}: {}... (Estimated size is {} MB)", + openmc_plot->id(), filename, bytes / 1.0e6); + if (bytes / 1.0e9 > 1.0) { + warning("Voxel plot specification is very large (>1 GB). Plotting may be " + "slow."); + } else if (bytes / 1.0e9 > 100.0) { + fatal_error("Voxel plot specification is too large (>100 GB). Exiting."); + } + + // Relate voxel spatial locations to random ray source regions + vector voxel_indices(Nx * Ny * Nz); + vector voxel_indices_key(Nx * Ny * Nz); + vector voxel_positions(Nx * Ny * Nz); + vector weight_windows(Nx * Ny * Nz); + vector my_voxel_ids; + float min_weight = 1e20; +#pragma omp parallel for collapse(3) reduction(min : min_weight) + for (int z = 0; z < Nz; z++) { + for (int y = 0; y < Ny; y++) { + for (int x = 0; x < Nx; x++) { + Position sample; + sample.z = ll.z + z_delta / 2.0 + z * z_delta; + sample.y = ll.y + y_delta / 2.0 + y * y_delta; + sample.x = ll.x + x_delta / 2.0 + x * x_delta; + Particle p; + p.r() = sample; + p.r_last() = sample; + p.E() = 1.0; + p.E_last() = 1.0; + p.u() = {1.0, 0.0, 0.0}; + + bool found = exhaustive_find_cell(p); + if (!found) { + voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1,-1}; + voxel_indices[z * Ny * Nx + y * Nx + x] = -1; + voxel_positions[z * Ny * Nx + y * Nx + x] = sample; + weight_windows[z * Ny * Nx + y * Nx + x] = 0.0; + continue; + } + + int i_cell = p.lowest_coord().cell(); + int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); + SourceRegionKey sr_key {sr, 0}; + if (RandomRay::mesh_subdivision_enabled_) { + int mesh_idx = base_source_regions_.mesh(sr); + int mesh_bin; + if (mesh_idx == C_NONE) { + mesh_bin = 0; + } else { + mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); + } + sr_key = {sr, mesh_bin}; + auto it = source_region_map_.find(sr_key); + if (it != source_region_map_.end()) { + sr = it->second; + } else { + sr = -1; + } + } + + voxel_indices_key[z * Ny * Nx + y * Nx + x] = sr_key; + voxel_indices[z * Ny * Nx + y * Nx + x] = sr; + voxel_positions[z * Ny * Nx + y * Nx + x] = sample; + + int assigned_rank = master_rank; + // Which rank is responsible + auto it = mpi::decomp_map.subdomain_map_.find(sr_key.base_source_region_id); + if (it != mpi::decomp_map.subdomain_map_.end()){ + assigned_rank = it->second; + } + if (assigned_rank == mpi::rank) { + #pragma omp critical + { + my_voxel_ids.push_back(z * Ny * Nx + y * Nx + x); + } + } + + if (variance_reduction::weight_windows.size() == 1) { + WeightWindow ww = + variance_reduction::weight_windows[0]->get_weight_window(p); + float weight = ww.lower_weight; + weight_windows[z * Ny * Nx + y * Nx + x] = weight; + if (weight < min_weight) + min_weight = weight; + } + } + } + } + + double source_normalization_factor = + compute_fixed_source_normalization_factor(); + + // Open file for writing + + std::FILE* plot = nullptr; + if (mpi::master) { + // if (mpi::rank == master) { + plot = std::fopen(filename.c_str(), "wb"); + + // Write vtk metadata + std::fprintf(plot, "# vtk DataFile Version 2.0\n"); + std::fprintf(plot, "Dataset File\n"); + std::fprintf(plot, "BINARY\n"); + std::fprintf(plot, "DATASET STRUCTURED_POINTS\n"); + std::fprintf(plot, "DIMENSIONS %d %d %d\n", Nx, Ny, Nz); + std::fprintf(plot, "ORIGIN %lf %lf %lf\n", ll.x, ll.y, ll.z); + std::fprintf(plot, "SPACING %lf %lf %lf\n", x_delta, y_delta, z_delta); + std::fprintf(plot, "POINT_DATA %d\n", Nx * Ny * Nz); + } + + int vector_size = Nx * Ny * Nz; + vector vector_out(vector_size, 0.0); + // vector_out.resize(vector_size); + // fill(vector_out.begin(), vector_out.end(), 0.0); + + int64_t num_neg = 0; + int64_t num_samples = 0; + float min_flux = 0.0; + float max_flux = -1.0e20; + + // Plot multigroup flux data + for (int g = 0; g < negroups_; g++) { + + for (int voxel_id : my_voxel_ids) { + int64_t fsr = voxel_indices[voxel_id]; + float flux = 0; + if (fsr >= 0) { + flux = evaluate_flux_at_point(voxel_positions[voxel_id], fsr, g); + if (flux < 0.0) + flux = FlatSourceDomain::evaluate_flux_at_point( + voxel_positions[voxel_id], fsr, g); + } + if (flux < 0.0) { + num_neg++; + if (flux < min_flux) { + min_flux = flux; + } + } + if (flux > max_flux) + max_flux = flux; + num_samples++; + vector_out[voxel_id] = flux; + } + + // communicate_plotting_data(); + + if (mpi::master){ + // if (mpi::rank == master) { + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } else { + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } + + // if(mpi::rank == master){ + if (mpi::master){ + std::fprintf(plot, "SCALARS flux_group_%d float\n", g); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + for (float value : vector_out) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + + fill(vector_out.begin(), vector_out.end(), 0.0); + } + + // Slightly negative fluxes can be normal when sampling corners of linear + // source regions. However, very common and high magnitude negative fluxes + // may indicate numerical instability. //TODO: needs changing for MPI ranks + if (num_neg > 0) { + warning(fmt::format("{} plot samples ({:.4f}%) contained negative fluxes " + "(minumum found = {:.2e} maximum_found = {:.2e})", + num_neg, (100.0 * num_neg) / num_samples, min_flux, max_flux)); + } + + // Plot FSRs + for (int voxel_id : my_voxel_ids) { + int fsr = voxel_indices[voxel_id]; + float value = future_prn(10, fsr); + vector_out[voxel_id] = value; + } + + // // if (mpi::rank == master) { + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } else { + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } + + // communicate_plotting_data(); + + // if(mpi::rank == master){ + if (mpi::master){ + std::fprintf(plot, "SCALARS FSRs float\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + for (float value : vector_out) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + + fill(vector_out.begin(), vector_out.end(), 0.0); + + // Plot Materials + for (int voxel_id : my_voxel_ids) { + int mat = -1; + int fsr = voxel_indices[voxel_id]; + if (fsr >= 0) { + mat = source_regions_.material(fsr); + } + vector_out[voxel_id] = mat; + } + + // // if (mpi::rank == master) { + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } else { + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } + + // communicate_plotting_data(); + + // if(mpi::rank == master){ + if (mpi::master){ + std::fprintf(plot, "SCALARS Materials int\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + + for (float value : vector_out) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(int), 1, plot); + } + } + + fill(vector_out.begin(), vector_out.end(), 0.0); + + // Plot rank subdomains + for (int voxel_id : my_voxel_ids) { + int rank_id = mpi::rank; + float value = future_prn(10, rank_id); + vector_out[voxel_id] = value; + } + + // // if (mpi::rank == master) { + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } else { + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } + + // communicate_plotting_data(); + + // if(mpi::rank == master){ + if (mpi::master){ + std::fprintf(plot, "SCALARS rank_subdomains int\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + + for (float value : vector_out) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + + fill(vector_out.begin(), vector_out.end(), 0.0); + + // Plot fission source + if (settings::run_mode == RunMode::EIGENVALUE) { + // std::fprintf(plot, "SCALARS total_fission_source float\n"); + // std::fprintf(plot, "LOOKUP_TABLE default\n"); + for (int voxel_id : my_voxel_ids) { + int64_t fsr = voxel_indices[voxel_id]; + float total_fission = 0.0; + if (fsr >= 0) { + int mat = source_regions_.material(fsr); + if (mat != MATERIAL_VOID) { + for (int g = 0; g < negroups_; g++) { + // int64_t source_element = fsr * negroups_ + g; + float flux = evaluate_flux_at_point(voxel_positions[voxel_id], fsr, g); + double sigma_f = sigma_f_[mat * negroups_ + g]; + total_fission += sigma_f * flux; + } + } + } + vector_out[voxel_id] = total_fission; + } + } else { + for (int voxel_id : my_voxel_ids) { + int64_t fsr = voxel_indices[voxel_id]; + int mat = source_regions_.material(fsr); + float total_external = 0.0f; + if (fsr >= 0) { + for (int g = 0; g < negroups_; g++) { + // External sources are already divided by sigma_t, so we need to + // multiply it back to get the true external source. + double sigma_t = 1.0; + if (mat != MATERIAL_VOID) { + sigma_t = sigma_t_[mat * negroups_ + g]; + } + total_external += source_regions_.external_source(fsr, g) * sigma_t; + } + } + vector_out[voxel_id] = total_external; + } + } + + // if (mpi::rank == master) { + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } else { + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } + + // communicate_plotting_data(); + + // if(mpi::rank == master){ + if (mpi::master){ + if (settings::run_mode == RunMode::EIGENVALUE) { + std::fprintf(plot, "SCALARS total_fission_source float\n"); + } else { + std::fprintf(plot, "SCALARS external_source float\n"); + } + std::fprintf(plot, "LOOKUP_TABLE default\n"); + for (float value : vector_out) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + + fill(vector_out.begin(), vector_out.end(), 0.0); + + // Plot weight window data + if (variance_reduction::weight_windows.size() == 1) { + for (int voxel_id : my_voxel_ids) { + float weight = weight_windows[voxel_id]; + if (weight == 0.0) + weight = min_weight; + vector_out[voxel_id] = weight; + } + + // if (mpi::rank == master) { + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } else { + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + } + + // communicate_plotting_data(); + + // if(mpi::rank == master){ + if (mpi::master){ + std::fprintf(plot, "SCALARS weight_window_lower float\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + + for (float value : vector_out) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + } + + if (mpi::master){ + // if(mpi::rank == master){ + std::fclose(plot); + } + } +} + +// void communicate_plotting_data(){ +// if (mpi::master){ +// MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); +// } else { +// MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); +// } +// } + +// // Outputs all basic material, FSR ID, multigroup flux, and +// // fission source data to .vtk file that can be directly +// // loaded and displayed by Paraview. Note that .vtk binary +// // files require big endian byte ordering, so endianness +// // is checked and flipped if necessary. +// void FlatSourceDomain::output_to_vtk_decomp() const +// { +// // Rename .h5 plot filename(s) to .vtk filenames +// for (int p = 0; p < model::plots.size(); p++) { +// PlottableInterface* plot = model::plots[p].get(); +// plot->path_plot() = +// plot->path_plot().substr(0, plot->path_plot().find_last_of('.')) + ".vtk"; +// } + +// // Print header information +// print_plot(); + +// // Outer loop over plots +// for (int p = 0; p < model::plots.size(); p++) { + +// // Get handle to OpenMC plot object and extract params +// Plot* openmc_plot = dynamic_cast(model::plots[p].get()); + +// // Random ray plots only support voxel plots +// if (!openmc_plot) { +// warning(fmt::format("Plot {} is invalid plot type -- only voxel plotting " +// "is allowed in random ray mode.", +// p)); +// continue; +// } else if (openmc_plot->type_ != Plot::PlotType::voxel) { +// warning(fmt::format("Plot {} is invalid plot type -- only voxel plotting " +// "is allowed in random ray mode.", +// p)); +// continue; +// } + +// int Nx = openmc_plot->pixels_[0]; +// int Ny = openmc_plot->pixels_[1]; +// int Nz = openmc_plot->pixels_[2]; +// Position origin = openmc_plot->origin_; +// Position width = openmc_plot->width_; +// Position ll = origin - width / 2.0; +// double x_delta = width.x / Nx; +// double y_delta = width.y / Ny; +// double z_delta = width.z / Nz; +// std::string filename = openmc_plot->path_plot(); + +// // Perform sanity checks on file size +// uint64_t bytes = Nx * Ny * Nz * (negroups_ + 1 + 1 + 1) * sizeof(float); +// write_message(5, "Processing plot {}: {}... (Estimated size is {} MB)", +// openmc_plot->id(), filename, bytes / 1.0e6); +// if (bytes / 1.0e9 > 1.0) { +// warning("Voxel plot specification is very large (>1 GB). Plotting may be " +// "slow."); +// } else if (bytes / 1.0e9 > 100.0) { +// fatal_error("Voxel plot specification is too large (>100 GB). Exiting."); +// } + +// // Relate voxel spatial locations to random ray source regions +// vector voxel_indices(Nx * Ny * Nz); +// // vector voxel_indices_key(Nx * Ny * Nz); +// vector voxel_positions(Nx * Ny * Nz); +// vector weight_windows(Nx * Ny * Nz); +// vector my_voxel_ids; +// float min_weight = 1e20; +// #pragma omp parallel for collapse(3) reduction(min : min_weight) +// for (int z = 0; z < Nz; z++) { +// for (int y = 0; y < Ny; y++) { +// for (int x = 0; x < Nx; x++) { +// Position sample; +// sample.z = ll.z + z_delta / 2.0 + z * z_delta; +// sample.y = ll.y + y_delta / 2.0 + y * y_delta; +// sample.x = ll.x + x_delta / 2.0 + x * x_delta; +// Particle p; +// p.r() = sample; +// p.r_last() = sample; +// p.E() = 1.0; +// p.E_last() = 1.0; +// p.u() = {1.0, 0.0, 0.0}; + +// bool found = exhaustive_find_cell(p); +// if (!found) { +// // voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1,-1}; +// voxel_indices[z * Ny * Nx + y * Nx + x] = -1; +// voxel_positions[z * Ny * Nx + y * Nx + x] = sample; +// weight_windows[z * Ny * Nx + y * Nx + x] = 0.0; +// continue; +// } + +// int i_cell = p.lowest_coord().cell(); +// int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); +// SourceRegionKey sr_key {sr, 0}; +// if (RandomRay::mesh_subdivision_enabled_) { +// int mesh_idx = base_source_regions_.mesh(sr); +// int mesh_bin; +// if (mesh_idx == C_NONE) { +// mesh_bin = 0; +// } else { +// mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); +// } +// sr_key = {sr, mesh_bin}; +// auto it = source_region_map_.find(sr_key); +// if (it != source_region_map_.end()) { +// sr = it->second; +// } else { +// sr = -1; +// } +// } + +// // voxel_indices_key[z * Ny * Nx + y * Nx + x] = sr_key; +// voxel_indices[z * Ny * Nx + y * Nx + x] = sr; +// voxel_positions[z * Ny * Nx + y * Nx + x] = sample; + +// int rank = mpi::master; +// // Which rank is responsible +// auto it = mpi::decomp_map.subdomain_map_.find(sr_key.base_source_region_id); +// if (it != mpi::decomp_map.subdomain_map_.end()){ +// rank = it->second; +// } +// if (rank == mpi::rank) { +// #pragma omp critical +// { +// my_voxel_ids.push_back(z * Ny * Nx + y * Nx + x); +// } +// } + +// if (variance_reduction::weight_windows.size() == 1) { +// WeightWindow ww = +// variance_reduction::weight_windows[0]->get_weight_window(p); +// float weight = ww.lower_weight; +// weight_windows[z * Ny * Nx + y * Nx + x] = weight; +// if (weight < min_weight) +// min_weight = weight; +// } +// } +// } +// } + +// double source_normalization_factor = +// compute_fixed_source_normalization_factor(); + +// // Open file for writing +// MPI_File plot; +// MPI_File_open(mpi::intracomm, +// // "output.vtk", +// filename.c_str(), +// MPI_MODE_CREATE | MPI_MODE_WRONLY, +// MPI_INFO_NULL, +// &plot); + +// // Ensure we start from a clean file +// // if (mpi::master) { +// // MPI_File_set_size(plot, 0); +// // } +// MPI_Barrier(mpi::intracomm); + +// std::string header; +// header += "# vtk DataFile Version 2.0\n"; +// header += "Dataset File\n"; +// header += "BINARY\n"; +// header += "DATASET STRUCTURED_POINTS\n"; +// header += fmt::format("DIMENSIONS {} {} {}\n", Nx, Ny, Nz); +// header += fmt::format("ORIGIN {} {} {}\n", ll.x, ll.y, ll.z); +// header += fmt::format("SPACING {} {} {}\n", x_delta, y_delta, z_delta); +// header += fmt::format("POINT_DATA {}\n", Nx * Ny * Nz); + +// // Write header +// if (mpi::master) { +// MPI_File_write_at(plot, 0, header.c_str(), header.size(), MPI_CHAR, MPI_STATUS_IGNORE); +// } + +// int chunk_size = Nx * Ny * Nz; + +// MPI_Offset base_offset = header.size(); +// // MPI_Offset offset = header.size(); + +// int64_t num_neg = 0; +// int64_t num_samples = 0; +// float min_flux = 0.0; +// float max_flux = -1.0e20; +// // Plot multigroup flux data +// for (int g = 0; g < negroups_; g++) { + +// header.clear(); +// header += fmt::format("SCALARS flux_group_{} float\n", g); +// header += "LOOKUP_TABLE default\n"; + +// if (mpi::master) { +// MPI_File_write_at(plot, base_offset, header.c_str(), header.size(), MPI_CHAR, MPI_STATUS_IGNORE); +// } + +// base_offset += header.size(); + +// for (int voxel_id : my_voxel_ids) { +// int64_t fsr = voxel_indices[voxel_id]; +// int64_t source_element = fsr * negroups_ + g; +// float flux = 0; +// if (fsr >= 0) { +// flux = evaluate_flux_at_point(voxel_positions[voxel_id], fsr, g); +// if (flux < 0.0) +// flux = FlatSourceDomain::evaluate_flux_at_point( +// voxel_positions[voxel_id], fsr, g); +// } +// if (flux < 0.0) { +// num_neg++; +// if (flux < min_flux) { +// min_flux = flux; +// } +// } +// if (flux > max_flux) +// max_flux = flux; +// num_samples++; +// flux = convert_to_big_endian(flux); + +// MPI_Offset offset = base_offset + voxel_id * sizeof(float); +// // MPI_Offset fsr_offset = base_offset + voxel_id * sizeof(float); + +// // Write this piece of data at its specific location +// MPI_File_write_at(plot, offset, +// &flux, +// 1, +// MPI_FLOAT, +// MPI_STATUS_IGNORE); + +// // std::fwrite(&flux, sizeof(float), 1, plot); +// } + +// base_offset += chunk_size * sizeof(float); + +// } + +// // MPI_Barrier(mpi::intracomm); + +// // Plot FSRs +// header.clear(); +// header += "SCALARS FSRs float\n"; +// header += "LOOKUP_TABLE default\n"; + +// // std::string fsr_header; +// // fsr_header += "SCALARS FSRs float\n"; +// // fsr_header += "LOOKUP_TABLE default\n"; + +// // Write FSR Header +// if (mpi::master) { +// MPI_File_write_at(plot, base_offset, header.c_str(), header.size(), MPI_CHAR, MPI_STATUS_IGNORE); +// // MPI_File_write_at(plot, offset, fsr_header.c_str(), fsr_header.size(), MPI_CHAR, MPI_STATUS_IGNORE); +// } + +// base_offset += header.size(); +// // MPI_Offset base_offset = offset + header.size(); + +// // // Pre-size file +// // MPI_Offset data_bytes = +// // static_cast(Nx) * Ny * Nz * static_cast(sizeof(float)); +// // // if (mpi::master) { +// // MPI_File_set_size(plot, base_offset + data_bytes); +// // // } + +// MPI_Barrier(mpi::intracomm); + +// for (int voxel_id : my_voxel_ids) { + +// int fsr = voxel_indices[voxel_id]; +// float value = future_prn(10, fsr); +// value = convert_to_big_endian(value); + +// MPI_Offset offset = base_offset + voxel_id * sizeof(float); +// // MPI_Offset fsr_offset = base_offset + voxel_id * sizeof(float); + +// // Write this piece of data at its specific location +// MPI_File_write_at(plot, offset, +// &value, +// 1, +// MPI_FLOAT, +// MPI_STATUS_IGNORE); +// } + +// MPI_Barrier(mpi::intracomm); + +// base_offset += chunk_size * sizeof(float); + +// MPI_File_close(&plot); +// } +// } + void FlatSourceDomain::apply_external_source_to_source_region( Discrete* discrete, double strength_factor, SourceRegionHandle& srh) { diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index de31fe36785..18cc44bcf1d 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -309,7 +309,7 @@ void RandomRay::event_advance_ray() wgt() = 0.0; } - attenuate_flux(distance, true); + attenuate_flux(distance); distance_travelled_ += distance; } else { // If the ray is still in the dead zone, need to check if it @@ -320,9 +320,13 @@ void RandomRay::event_advance_ray() if (distance_travelled_ + distance >= distance_inactive_) { // is_active_ = true; double distance_dead = distance_inactive_ - distance_travelled_; - attenuate_flux(distance_dead, false); + attenuate_flux(distance_dead); is_active_ = true; + if (has_left_subdomain()) { + return; + } + double distance_alive = distance - distance_dead; // Ensure we haven't travelled past the active phase as well @@ -331,15 +335,10 @@ void RandomRay::event_advance_ray() wgt() = 0.0; } - //TODO: Add check here to avoid useless onwards travel? - // if (has_left_subdomain()) { - // return; - // } - - attenuate_flux(distance_alive, true, distance_dead); + attenuate_flux(distance_alive, distance_dead); distance_travelled_ = distance_alive; } else { - attenuate_flux(distance, false); + attenuate_flux(distance); distance_travelled_ += distance; } } @@ -350,7 +349,7 @@ void RandomRay::event_advance_ray() } } -void RandomRay::attenuate_flux(double distance, bool is_active, double offset) +void RandomRay::attenuate_flux(double distance, double offset) { // Determine source region index etc. int i_cell = lowest_coord().cell(); @@ -372,7 +371,7 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) // If there's no mesh being applied to this cell, then // we just attenuate the flux as normal, and set // the mesh bin to 0 - attenuate_flux_inner(distance, is_active, sr, 0, r()); + attenuate_flux_inner(distance, sr, 0, r()); } else { // If there is a mesh being applied to this cell, then // we loop over all the bin crossings and attenuate @@ -396,7 +395,7 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) for (int b = 0; b < mesh_bins_.size(); b++) { double physical_length = reduced_distance * mesh_fractional_lengths_[b]; attenuate_flux_inner( - physical_length, is_active, sr, mesh_bins_[b], start); + physical_length, sr, mesh_bins_[b], start); start += physical_length * u(); // if (simulation::current_batch == 30) { @@ -423,10 +422,11 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) } } } else { - attenuate_flux_inner(distance, is_active, sr, C_NONE, r()); + attenuate_flux_inner(distance, sr, C_NONE, r()); } // If ray has left my subdomain, buffer ray state - if(has_left_subdomain() && !is_buffered_) { + // if(has_left_subdomain() && !is_buffered_) { + if(has_left_subdomain()) { // if (simulation::current_batch == 30) { // printf("RANK %d: buffering \n", mpi::rank);} Position position_buffer = r() + (offset + mesh_partial_length) * u(); @@ -437,7 +437,7 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) } void RandomRay::attenuate_flux_inner( - double distance, bool is_active, int64_t sr, int mesh_bin, Position r) + double distance, int64_t sr, int mesh_bin, Position r) { // Check if SR belongs to my subdomain. // If not, buffer ray, set wgt to zero and leave function. @@ -462,17 +462,17 @@ void RandomRay::attenuate_flux_inner( switch (source_shape_) { case RandomRaySourceShape::FLAT: if (this->material() == MATERIAL_VOID) { - attenuate_flux_flat_source_void(srh, distance, is_active, r); + attenuate_flux_flat_source_void(srh, distance, r); } else { - attenuate_flux_flat_source(srh, distance, is_active, r); + attenuate_flux_flat_source(srh, distance, r); } break; case RandomRaySourceShape::LINEAR: case RandomRaySourceShape::LINEAR_XY: if (this->material() == MATERIAL_VOID) { - attenuate_flux_linear_source_void(srh, distance, is_active, r); + attenuate_flux_linear_source_void(srh, distance, r); } else { - attenuate_flux_linear_source(srh, distance, is_active, r); + attenuate_flux_linear_source(srh, distance, r); } break; default: @@ -494,7 +494,7 @@ void RandomRay::attenuate_flux_inner( // individually (at least on CPU). Several other bookkeeping tasks are also // performed when inside the lock. void RandomRay::attenuate_flux_flat_source( - SourceRegionHandle& srh, double distance, bool is_active, Position r) + SourceRegionHandle& srh, double distance, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; @@ -518,7 +518,7 @@ void RandomRay::attenuate_flux_flat_source( // Aquire lock for source region srh.lock(); - if (is_active) { + if (is_active_) { // Accumulate delta psi into new estimate of source region flux for // this iteration for (int g = 0; g < negroups_; g++) { @@ -546,7 +546,7 @@ void RandomRay::attenuate_flux_flat_source( // Alternative flux attenuation function for true void regions. void RandomRay::attenuate_flux_flat_source_void( - SourceRegionHandle& srh, double distance, bool is_active, Position r) + SourceRegionHandle& srh, double distance, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; @@ -555,7 +555,7 @@ void RandomRay::attenuate_flux_flat_source_void( // If ray is in the active phase (not in dead zone), make contributions to // source region bookkeeping - if (is_active) { + if (is_active_) { // Aquire lock for source region srh.lock(); @@ -593,7 +593,7 @@ void RandomRay::attenuate_flux_flat_source_void( } void RandomRay::attenuate_flux_linear_source( - SourceRegionHandle& srh, double distance, bool is_active, Position r) + SourceRegionHandle& srh, double distance, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; @@ -686,7 +686,7 @@ void RandomRay::attenuate_flux_linear_source( // If ray is in the active phase (not in dead zone), make contributions to // source region bookkeeping - if (is_active) { + if (is_active_) { // Accumulate deltas into the new estimate of source region flux for this // iteration for (int g = 0; g < negroups_; g++) { @@ -726,7 +726,7 @@ void RandomRay::attenuate_flux_linear_source( // estimating the flux at specific pixel coordinates. Thus, plots will look // nicer/more accurate if we record flux moments, so this function is useful. void RandomRay::attenuate_flux_linear_source_void( - SourceRegionHandle& srh, double distance, bool is_active, Position r) + SourceRegionHandle& srh, double distance, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; @@ -781,7 +781,7 @@ void RandomRay::attenuate_flux_linear_source_void( // If ray is in the active phase (not in dead zone), make contributions to // source region bookkeeping - if (is_active) { + if (is_active_) { // Compute an estimate of the spatial moments matrix for the source // region based on parameters from this ray's crossing MomentMatrix moment_matrix_estimate; @@ -1029,7 +1029,7 @@ void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_bu exchange_data_.is_active = is_active_; exchange_data_.ray_id = id(); - is_buffered_ = true; +// is_buffered_ = true; } int RandomRay::get_energy_groups() { diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 210e2ad51b3..c67e403c38a 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -338,17 +338,6 @@ void validate_random_ray_inputs() } } - // Warn about slow MPI domain replication, if detected - /////////////////////////////////////////////////////////////////// -#ifdef OPENMC_MPI - if (mpi::n_procs > 1) { - warning( - "MPI parallelism is not supported by the random ray solver. All work " - "will be performed by rank 0. Domain decomposition may be implemented in " - "the future to provide efficient MPI scaling."); - } -#endif - // Warn about instability resulting from linear sources in small regions // when generating weight windows with FW-CADIS and an overlaid mesh. /////////////////////////////////////////////////////////////////// @@ -470,18 +459,13 @@ void RandomRaySimulation::simulate() domain_->prepare_base_source_regions(); } - // Start timer for transport - simulation::time_transport.start(); - + // Transport sweep over all random rays for the iteration if (mpi::n_procs > 1){ transport_sweep_decomp(RB); } else { transport_sweep(); } - // printf("Transport sweep complete \n"); - simulation::time_transport.stop(); - // Update decomposition map with newly discovered source regions mpi::decomp_map.update(); @@ -509,8 +493,6 @@ void RandomRaySimulation::simulate() global_tally_tracklength = k_eff_; } - // printf("Keff calculated \n"); - // Execute all tallying tasks, if this is an active batch if (simulation::current_batch > settings::n_inactive) { @@ -532,19 +514,9 @@ void RandomRaySimulation::simulate() // Set phi_old = phi_new domain_->flux_swap(); - int n_source_regions = domain_->n_source_regions(); //TODO: is that base source regions or does that include mesh_bins? - - if (mpi::n_procs > 1){ - n_source_regions = mpi::decomp_map.n_source_regions(); - } - // Check for any obvious insabilities/nans/infs - instability_check(n_hits, k_eff_, avg_miss_rate_, n_source_regions); + instability_check(n_hits, k_eff_, avg_miss_rate_); - // Include weighting factor when decomposed into more than one subdomain - if (mpi::n_procs > 1){ - avg_miss_rate_ = avg_miss_rate_*(n_source_regions/domain_->n_source_regions()); - } // } // End MPI master work // Finalize the current batch @@ -553,16 +525,30 @@ void RandomRaySimulation::simulate() } // End random ray power iteration loop if (mpi::n_procs > 1){ - // double avg_miss_rate_temp = 0.0; - // MPI_Allreduce(&avg_miss_rate_, &avg_miss_rate_temp, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - // avg_miss_rate_ = avg_miss_rate_temp; - // uint64_t total_geometric_intersections_temp = 0; - // MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_temp, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, MPI_COMM_WORLD); - // total_geometric_intersections_ = total_geometric_intersections_temp; + simulation::time_decomposition_handling.start(); + + uint64_t total_geometric_intersections_sum = 0; + MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); + float rank_load_local = (total_geometric_intersections_/static_cast(total_geometric_intersections_sum))*100.0; + + total_geometric_intersections_ = total_geometric_intersections_sum; + rank_load_.resize(mpi::n_procs); + + // send load data to master rank (rank 0) + if (mpi::master) { + rank_load_[0] = rank_load_local; + + for (int i = 1; i < mpi::n_procs; i++) { + MPI_Recv(&rank_load_[i], 1, MPI_FLOAT, i, 1, mpi::intracomm, MPI_STATUS_IGNORE); + } + } else { + MPI_Send(&rank_load_local, 1, MPI_FLOAT, 0, 1, mpi::intracomm); + } - MPI_Allreduce(MPI_IN_PLACE, &avg_miss_rate_, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - MPI_Allreduce(MPI_IN_PLACE, &total_geometric_intersections_, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, MPI_COMM_WORLD); + avg_num_comms_ = avg_num_comms_/settings::n_batches; + + simulation::time_decomposition_handling.stop(); } domain_->count_external_source_regions(); @@ -574,21 +560,34 @@ void RandomRaySimulation::output_simulation_results() const if (mpi::master) { print_results_random_ray(total_geometric_intersections_, avg_miss_rate_ / settings::n_batches, negroups_, - domain_->n_source_regions(), domain_->n_external_source_regions_); - if (model::plots.size() > 0) { - domain_->output_to_vtk(); - } + domain_->n_source_regions(), domain_->n_external_source_regions_, avg_num_comms_); } + + if (model::plots.size() > 0) { + if (mpi::n_procs > 1){ + domain_->output_to_vtk_decomp(); + } else { + domain_->output_to_vtk(); + } + } + } // Apply a few sanity checks to catch obvious cases of numerical instability. // Instability typically only occurs if ray density is extremely low. void RandomRaySimulation::instability_check( - int64_t n_hits, double k_eff, double& avg_miss_rate, int n_source_regions) const + int64_t n_hits, double k_eff, double& avg_miss_rate) const { - // double percent_missed = ((domain_->n_source_regions() - n_hits) / - // static_cast(domain_->n_source_regions())) * - // 100.0; + + uint64_t n_source_regions = domain_->n_source_regions(); + + if (mpi::n_procs > 1){ + simulation::time_decomposition_handling.stop(); + MPI_Allreduce(MPI_IN_PLACE, &n_hits, 1, MPI_LONG_LONG, MPI_SUM, mpi::intracomm); + MPI_Allreduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); + simulation::time_decomposition_handling.stop(); + } + double percent_missed = ((n_source_regions - n_hits) / static_cast(n_source_regions)) * 100.0; @@ -617,7 +616,7 @@ void RandomRaySimulation::instability_check( // Print random ray simulation results void RandomRaySimulation::print_results_random_ray( uint64_t total_geometric_intersections, double avg_miss_rate, int negroups, - int64_t n_source_regions, int64_t n_external_source_regions) const + int64_t n_source_regions, int64_t n_external_source_regions, uint64_t avg_num_comms) const { using namespace simulation; @@ -655,6 +654,15 @@ void RandomRaySimulation::print_results_random_ray( fmt::print(" Avg per Iteration = {:.4e}\n", total_integrations / settings::n_batches); + if (mpi::n_procs > 1){ + fmt::print(" MPI Ranks = {}\n", mpi::n_procs); + fmt::print(" Avg Number of Subdomain Crossings = {}\n", avg_num_comms); + fmt::print(" Load per MPI Rank = Rank {}: {:.2f}%\n", 0, rank_load_[0]); + for (int i = 1; i < mpi::n_procs; i++) { + fmt::print(" Rank {}: {:.2f}%\n", i, rank_load_[i]); + } + } + std::string estimator; switch (domain_->volume_estimator_) { case RandomRayVolumeEstimator::SIMULATION_AVERAGED: @@ -717,6 +725,10 @@ void RandomRaySimulation::print_results_random_ray( show_time("Time writing statepoints", time_statepoint.elapsed()); show_time("Total time for finalization", time_finalize.elapsed()); show_time("Time per integration", time_per_integration); + if (mpi::n_procs > 1){ + show_time("Time in ray communication", time_ray_comms.elapsed()); + show_time("Time in decomposition handling", time_decomposition_handling.elapsed()); + } } if (settings::verbosity >= 4 && settings::run_mode == RunMode::EIGENVALUE) { @@ -728,6 +740,9 @@ void RandomRaySimulation::print_results_random_ray( void RandomRaySimulation::transport_sweep() { + // Start timer for transport + simulation::time_transport.start(); + // Transport sweep over all random rays for the iteration #pragma omp parallel for schedule(dynamic) \ reduction(+ : total_geometric_intersections_) @@ -736,6 +751,9 @@ void RandomRaySimulation::transport_sweep() { total_geometric_intersections_ += ray.transport_history_based_single_ray(); } + + simulation::time_transport.stop(); + } void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { @@ -753,31 +771,66 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } } - // batch_geometric_intersections_ = 0; + int num_comms = 0; while (RB.is_any_ray_alive()) { + + // Start timer for transport + #pragma omp parallel for schedule(dynamic) \ reduction(+ : total_geometric_intersections_) for (int i = 0; i < RB.ray_bank_size(); i++) { RandomRay& ray = RB.my_ray_list_[i]; + simulation::time_transport.start(); total_geometric_intersections_ += ray.transport_history_based_single_ray(); + simulation::time_transport.stop(); // If ray has left my subdomain, buffer ray state if(ray.has_left_subdomain()){ + simulation::time_decomposition_handling.start(); #pragma omp critical (raybuffer) { RB.buffer_ray_data_to_send(ray, domain_.get()); } + simulation::time_decomposition_handling.stop(); } } - // printf("Transport and buffering complete, RB size %d \n", RB.ray_bank_size()); + simulation::time_decomposition_handling.start(); + // Remove dead rays and move rays across subdomains between ranks RB.update(domain_.get()); + num_comms ++; + + simulation::time_decomposition_handling.stop(); + } + + uint64_t total_geometric_intersections_sum = 0; - // printf("Ray Bank Update complete, RB size %d \n", RB.ray_bank_size()); + // Temporary diagnostics data + if (mpi::master) { + printf("Max subdomain crossings: %d\n", num_comms); + printf("Load distribution: "); } + MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); + double load = (total_geometric_intersections_/static_cast(total_geometric_intersections_sum))*100.0; + + // send load data to master rank (rank 0) + if (mpi::master) { + printf("RANK %d: %.2f%%, ", 0, load); + for (int i = 1; i < mpi::n_procs-1; i++) { + MPI_Recv(&load, 1, MPI_DOUBLE, i, 1, mpi::intracomm, MPI_STATUS_IGNORE); + printf("RANK %d: %.2f%%, ", i, load); + } + MPI_Recv(&load, 1, MPI_DOUBLE, mpi::n_procs-1, 1, mpi::intracomm, MPI_STATUS_IGNORE); + printf("RANK %d: %.2f%%\n", mpi::n_procs-1, load); + } else { + MPI_Send(&load, 1, MPI_DOUBLE, 0, 1, mpi::intracomm); + } + + avg_num_comms_ += num_comms; + // Reset ray bank list for next batch RB.reset_my_ray_list(); } diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 046f669ca2c..a9ca6263898 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -5,6 +5,7 @@ #include "openmc/message_passing.h" #include "openmc/random_ray/decomposition_map.h" #include "openmc/mgxs_interface.h" +#include "openmc/timer.h" namespace openmc { @@ -54,9 +55,13 @@ void RayBank::update(FlatSourceDomain* domain){ // Communicate how many rays will be sent to each rank communicate_message_metadata(); + simulation::time_ray_comms.start(); + // Send and receive rays between MPI ranks communicate_rays(); + simulation::time_ray_comms.stop(); + // Add received rays to ray list of that rank update_my_ray_list(domain); @@ -92,7 +97,7 @@ void RayBank::communicate_message_metadata() { // Exchange message counts with all ranks MPI_Alltoall(num_messages_sending.data(), 1, MPI_INT, num_messages_receiving_.data(), 1, MPI_INT, - MPI_COMM_WORLD); + mpi::intracomm); total_receiving_rays_ = accumulate(num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); @@ -115,6 +120,7 @@ void RayBank::communicate_rays(){ // vector requests(num_requests); // heap MPI_Request requests[num_requests]; // stack int req_idx = 0; + // uint64_t num_comms = 0; // Define one-dimensional arrays to be sent and received and allocate size vector ray_data; @@ -155,8 +161,8 @@ void RayBank::communicate_rays(){ // printf("Prepared data for sending to rank %d, req_idx %d, vector_send_idx %d \n", receiving_rank, req_idx, vector_send_idx); - MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, MPI_COMM_WORLD, &requests[req_idx]); - MPI_Isend(&angular_flux_data[vector_send_idx * negroups_], num_rays_sending * negroups_, MPI_FLOAT, receiving_rank, 2, MPI_COMM_WORLD, &requests[req_idx+1]); + MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); + MPI_Isend(&angular_flux_data[vector_send_idx * negroups_], num_rays_sending * negroups_, MPI_FLOAT, receiving_rank, 2, mpi::intracomm, &requests[req_idx+1]); // printf("Initiated send to rank %d, req_idx %d, vector_send_idx %d \n", receiving_rank, req_idx, vector_send_idx); vector_send_idx += num_rays_sending; @@ -169,10 +175,11 @@ void RayBank::communicate_rays(){ for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { int num_rays_receiving = num_messages_receiving_[sending_rank]; if (num_rays_receiving == 0) continue; - MPI_Recv(&received_ray_data_[vector_receive_idx], num_rays_receiving * sizeof(RayExchangeData), MPI_BYTE, sending_rank, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE); - MPI_Recv(&received_angular_flux_data_[vector_receive_idx * negroups_], num_rays_receiving * negroups_, MPI_FLOAT, sending_rank, 2, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + MPI_Recv(&received_ray_data_[vector_receive_idx], num_rays_receiving * sizeof(RayExchangeData), MPI_BYTE, sending_rank, 1, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(&received_angular_flux_data_[vector_receive_idx * negroups_], num_rays_receiving * negroups_, MPI_FLOAT, sending_rank, 2, mpi::intracomm, MPI_STATUS_IGNORE); vector_receive_idx += num_rays_receiving; + // num_comms++; } // printf("Receiving complete, req_idx %d, vector_send_idx %d, vector_receive_idx %d \n", req_idx, vector_send_idx, vector_receive_idx); @@ -180,6 +187,11 @@ void RayBank::communicate_rays(){ // Wait for all communication to complete MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); // MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); + + // // Calculate how many rays were sent in this communication round + // MPI_Allreduce(MPI_IN_PLACE, &num_comms, 1, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + + // num_comms_batch_ += num_comms; // Empty buffered_ray_data ray_send_buffer_.clear(); @@ -214,7 +226,7 @@ bool RayBank::is_any_ray_alive() { int global_rays_alive = 0; int local_rays_alive = ray_bank_size(); - MPI_Allreduce(&local_rays_alive, &global_rays_alive, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(&local_rays_alive, &global_rays_alive, 1, MPI_INT, MPI_SUM, mpi::intracomm); if (global_rays_alive > 0){ return true; diff --git a/src/timer.cpp b/src/timer.cpp index 6d692d4fbf6..eb4f0bad753 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -27,6 +27,8 @@ Timer time_event_surface_crossing; Timer time_event_collision; Timer time_event_death; Timer time_update_src; +Timer time_ray_comms; +Timer time_decomposition_handling; } // namespace simulation From a45a9ab73583953ec8c84441c25390a81bc8f419 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 22 Sep 2025 21:43:24 +0100 Subject: [PATCH 03/48] Clean code, minor corrections --- examples/2D_c5g7_python_mesh/build-xml-2d.py | 4 +- include/openmc/timer.h | 1 + src/random_ray/flat_source_domain.cpp | 376 +------------------ src/random_ray/random_ray_simulation.cpp | 192 +++++----- src/random_ray/ray_bank.cpp | 25 +- src/timer.cpp | 1 + 6 files changed, 127 insertions(+), 472 deletions(-) diff --git a/examples/2D_c5g7_python_mesh/build-xml-2d.py b/examples/2D_c5g7_python_mesh/build-xml-2d.py index 8a0accf883b..0d6d955e8d5 100755 --- a/examples/2D_c5g7_python_mesh/build-xml-2d.py +++ b/examples/2D_c5g7_python_mesh/build-xml-2d.py @@ -12,8 +12,8 @@ # Instantiate a Settings, set all runtime parameters, and export to XML settings_file = openmc.Settings() settings_file.energy_mode = "multi-group" -settings_file.batches = 20 #1000 -settings_file.inactive = 10 #600 +settings_file.batches = 100 #1000 +settings_file.inactive = 50 #600 settings_file.particles = 1750 settings_file.run_mode = 'eigenvalue' settings_file.output = {'tallies': False, 'summary': False} diff --git a/include/openmc/timer.h b/include/openmc/timer.h index 575437263e4..ae48ac93743 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -34,6 +34,7 @@ extern Timer time_event_death; extern Timer time_update_src; extern Timer time_ray_comms; extern Timer time_decomposition_handling; +extern Timer time_ray_buffering; } // namespace simulation diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index e6de60e3da8..75f59282cc9 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -394,7 +394,12 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const if (mpi::n_procs > 1) { simulation::time_decomposition_handling.start(); - MPI_Allreduce(MPI_IN_PLACE, &H, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + // MPI_Allreduce(MPI_IN_PLACE, &H, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, &H, 1, MPI_DOUBLE, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(&H, nullptr, 1, MPI_DOUBLE, MPI_SUM, 0, mpi::intracomm); + } simulation::time_decomposition_handling.stop(); } @@ -874,7 +879,6 @@ void FlatSourceDomain::output_to_vtk() const std::fprintf(plot, "LOOKUP_TABLE default\n"); for (int i = 0; i < Nx * Ny * Nz; i++) { int64_t fsr = voxel_indices[i]; - // int64_t source_element = fsr * negroups_ + g; float flux = 0; if (fsr >= 0) { flux = evaluate_flux_at_point(voxel_positions[i], fsr, g); @@ -925,19 +929,6 @@ void FlatSourceDomain::output_to_vtk() const std::fwrite(&mat, sizeof(int), 1, plot); } - // Plot rank subdomains - std::fprintf(plot, "SCALARS rank_subdomains int\n"); - std::fprintf(plot, "LOOKUP_TABLE default\n"); - for (auto sr_key : voxel_indices_key) { - int rank = -1; - if (mpi::decomp_map.subdomain_map_.find(sr_key.base_source_region_id) != mpi::decomp_map.subdomain_map_.end()){ - rank = mpi::decomp_map.subdomain_map_[sr_key.base_source_region_id]; - } - float value = future_prn(10, rank); - value = convert_to_big_endian(value); - std::fwrite(&value, sizeof(float), 1, plot); - } - // Plot fission source if (settings::run_mode == RunMode::EIGENVALUE) { std::fprintf(plot, "SCALARS total_fission_source float\n"); @@ -949,7 +940,6 @@ void FlatSourceDomain::output_to_vtk() const int mat = source_regions_.material(fsr); if (mat != MATERIAL_VOID) { for (int g = 0; g < negroups_; g++) { - // int64_t source_element = fsr * negroups_ + g; float flux = evaluate_flux_at_point(voxel_positions[i], fsr, g); double sigma_f = sigma_f_[mat * negroups_ + g]; total_fission += sigma_f * flux; @@ -1007,10 +997,8 @@ void FlatSourceDomain::output_to_vtk() const // is checked and flipped if necessary. void FlatSourceDomain::output_to_vtk_decomp() const { - int master_rank = 0; // Master rank is rank 0 if (mpi::master){ - // if (mpi::rank == master){ // Rename .h5 plot filename(s) to .vtk filenames for (int p = 0; p < model::plots.size(); p++) { PlottableInterface* plot = model::plots[p].get(); @@ -1118,7 +1106,8 @@ void FlatSourceDomain::output_to_vtk_decomp() const voxel_indices[z * Ny * Nx + y * Nx + x] = sr; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; - int assigned_rank = master_rank; + // Assumed master rank = 0 + int assigned_rank = 0; // Which rank is responsible auto it = mpi::decomp_map.subdomain_map_.find(sr_key.base_source_region_id); if (it != mpi::decomp_map.subdomain_map_.end()){ @@ -1147,10 +1136,8 @@ void FlatSourceDomain::output_to_vtk_decomp() const compute_fixed_source_normalization_factor(); // Open file for writing - std::FILE* plot = nullptr; if (mpi::master) { - // if (mpi::rank == master) { plot = std::fopen(filename.c_str(), "wb"); // Write vtk metadata @@ -1166,8 +1153,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const int vector_size = Nx * Ny * Nz; vector vector_out(vector_size, 0.0); - // vector_out.resize(vector_size); - // fill(vector_out.begin(), vector_out.end(), 0.0); int64_t num_neg = 0; int64_t num_samples = 0; @@ -1198,16 +1183,12 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out[voxel_id] = flux; } - // communicate_plotting_data(); - if (mpi::master){ - // if (mpi::rank == master) { - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } - // if(mpi::rank == master){ if (mpi::master){ std::fprintf(plot, "SCALARS flux_group_%d float\n", g); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -1236,16 +1217,12 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out[voxel_id] = value; } - // // if (mpi::rank == master) { if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } - // communicate_plotting_data(); - - // if(mpi::rank == master){ if (mpi::master){ std::fprintf(plot, "SCALARS FSRs float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -1267,16 +1244,12 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out[voxel_id] = mat; } - // // if (mpi::rank == master) { if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } - // communicate_plotting_data(); - - // if(mpi::rank == master){ if (mpi::master){ std::fprintf(plot, "SCALARS Materials int\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -1296,16 +1269,12 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out[voxel_id] = value; } - // // if (mpi::rank == master) { if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } - // communicate_plotting_data(); - - // if(mpi::rank == master){ if (mpi::master){ std::fprintf(plot, "SCALARS rank_subdomains int\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -1320,8 +1289,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const // Plot fission source if (settings::run_mode == RunMode::EIGENVALUE) { - // std::fprintf(plot, "SCALARS total_fission_source float\n"); - // std::fprintf(plot, "LOOKUP_TABLE default\n"); for (int voxel_id : my_voxel_ids) { int64_t fsr = voxel_indices[voxel_id]; float total_fission = 0.0; @@ -1329,7 +1296,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const int mat = source_regions_.material(fsr); if (mat != MATERIAL_VOID) { for (int g = 0; g < negroups_; g++) { - // int64_t source_element = fsr * negroups_ + g; float flux = evaluate_flux_at_point(voxel_positions[voxel_id], fsr, g); double sigma_f = sigma_f_[mat * negroups_ + g]; total_fission += sigma_f * flux; @@ -1358,16 +1324,12 @@ void FlatSourceDomain::output_to_vtk_decomp() const } } - // if (mpi::rank == master) { if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } - // communicate_plotting_data(); - - // if(mpi::rank == master){ if (mpi::master){ if (settings::run_mode == RunMode::EIGENVALUE) { std::fprintf(plot, "SCALARS total_fission_source float\n"); @@ -1392,16 +1354,12 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out[voxel_id] = weight; } - // if (mpi::rank == master) { if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); + MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } - // communicate_plotting_data(); - - // if(mpi::rank == master){ if (mpi::master){ std::fprintf(plot, "SCALARS weight_window_lower float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -1414,305 +1372,11 @@ void FlatSourceDomain::output_to_vtk_decomp() const } if (mpi::master){ - // if(mpi::rank == master){ std::fclose(plot); } } } -// void communicate_plotting_data(){ -// if (mpi::master){ -// MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); -// } else { -// MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, master_rank, mpi::intracomm); -// } -// } - -// // Outputs all basic material, FSR ID, multigroup flux, and -// // fission source data to .vtk file that can be directly -// // loaded and displayed by Paraview. Note that .vtk binary -// // files require big endian byte ordering, so endianness -// // is checked and flipped if necessary. -// void FlatSourceDomain::output_to_vtk_decomp() const -// { -// // Rename .h5 plot filename(s) to .vtk filenames -// for (int p = 0; p < model::plots.size(); p++) { -// PlottableInterface* plot = model::plots[p].get(); -// plot->path_plot() = -// plot->path_plot().substr(0, plot->path_plot().find_last_of('.')) + ".vtk"; -// } - -// // Print header information -// print_plot(); - -// // Outer loop over plots -// for (int p = 0; p < model::plots.size(); p++) { - -// // Get handle to OpenMC plot object and extract params -// Plot* openmc_plot = dynamic_cast(model::plots[p].get()); - -// // Random ray plots only support voxel plots -// if (!openmc_plot) { -// warning(fmt::format("Plot {} is invalid plot type -- only voxel plotting " -// "is allowed in random ray mode.", -// p)); -// continue; -// } else if (openmc_plot->type_ != Plot::PlotType::voxel) { -// warning(fmt::format("Plot {} is invalid plot type -- only voxel plotting " -// "is allowed in random ray mode.", -// p)); -// continue; -// } - -// int Nx = openmc_plot->pixels_[0]; -// int Ny = openmc_plot->pixels_[1]; -// int Nz = openmc_plot->pixels_[2]; -// Position origin = openmc_plot->origin_; -// Position width = openmc_plot->width_; -// Position ll = origin - width / 2.0; -// double x_delta = width.x / Nx; -// double y_delta = width.y / Ny; -// double z_delta = width.z / Nz; -// std::string filename = openmc_plot->path_plot(); - -// // Perform sanity checks on file size -// uint64_t bytes = Nx * Ny * Nz * (negroups_ + 1 + 1 + 1) * sizeof(float); -// write_message(5, "Processing plot {}: {}... (Estimated size is {} MB)", -// openmc_plot->id(), filename, bytes / 1.0e6); -// if (bytes / 1.0e9 > 1.0) { -// warning("Voxel plot specification is very large (>1 GB). Plotting may be " -// "slow."); -// } else if (bytes / 1.0e9 > 100.0) { -// fatal_error("Voxel plot specification is too large (>100 GB). Exiting."); -// } - -// // Relate voxel spatial locations to random ray source regions -// vector voxel_indices(Nx * Ny * Nz); -// // vector voxel_indices_key(Nx * Ny * Nz); -// vector voxel_positions(Nx * Ny * Nz); -// vector weight_windows(Nx * Ny * Nz); -// vector my_voxel_ids; -// float min_weight = 1e20; -// #pragma omp parallel for collapse(3) reduction(min : min_weight) -// for (int z = 0; z < Nz; z++) { -// for (int y = 0; y < Ny; y++) { -// for (int x = 0; x < Nx; x++) { -// Position sample; -// sample.z = ll.z + z_delta / 2.0 + z * z_delta; -// sample.y = ll.y + y_delta / 2.0 + y * y_delta; -// sample.x = ll.x + x_delta / 2.0 + x * x_delta; -// Particle p; -// p.r() = sample; -// p.r_last() = sample; -// p.E() = 1.0; -// p.E_last() = 1.0; -// p.u() = {1.0, 0.0, 0.0}; - -// bool found = exhaustive_find_cell(p); -// if (!found) { -// // voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1,-1}; -// voxel_indices[z * Ny * Nx + y * Nx + x] = -1; -// voxel_positions[z * Ny * Nx + y * Nx + x] = sample; -// weight_windows[z * Ny * Nx + y * Nx + x] = 0.0; -// continue; -// } - -// int i_cell = p.lowest_coord().cell(); -// int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); -// SourceRegionKey sr_key {sr, 0}; -// if (RandomRay::mesh_subdivision_enabled_) { -// int mesh_idx = base_source_regions_.mesh(sr); -// int mesh_bin; -// if (mesh_idx == C_NONE) { -// mesh_bin = 0; -// } else { -// mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); -// } -// sr_key = {sr, mesh_bin}; -// auto it = source_region_map_.find(sr_key); -// if (it != source_region_map_.end()) { -// sr = it->second; -// } else { -// sr = -1; -// } -// } - -// // voxel_indices_key[z * Ny * Nx + y * Nx + x] = sr_key; -// voxel_indices[z * Ny * Nx + y * Nx + x] = sr; -// voxel_positions[z * Ny * Nx + y * Nx + x] = sample; - -// int rank = mpi::master; -// // Which rank is responsible -// auto it = mpi::decomp_map.subdomain_map_.find(sr_key.base_source_region_id); -// if (it != mpi::decomp_map.subdomain_map_.end()){ -// rank = it->second; -// } -// if (rank == mpi::rank) { -// #pragma omp critical -// { -// my_voxel_ids.push_back(z * Ny * Nx + y * Nx + x); -// } -// } - -// if (variance_reduction::weight_windows.size() == 1) { -// WeightWindow ww = -// variance_reduction::weight_windows[0]->get_weight_window(p); -// float weight = ww.lower_weight; -// weight_windows[z * Ny * Nx + y * Nx + x] = weight; -// if (weight < min_weight) -// min_weight = weight; -// } -// } -// } -// } - -// double source_normalization_factor = -// compute_fixed_source_normalization_factor(); - -// // Open file for writing -// MPI_File plot; -// MPI_File_open(mpi::intracomm, -// // "output.vtk", -// filename.c_str(), -// MPI_MODE_CREATE | MPI_MODE_WRONLY, -// MPI_INFO_NULL, -// &plot); - -// // Ensure we start from a clean file -// // if (mpi::master) { -// // MPI_File_set_size(plot, 0); -// // } -// MPI_Barrier(mpi::intracomm); - -// std::string header; -// header += "# vtk DataFile Version 2.0\n"; -// header += "Dataset File\n"; -// header += "BINARY\n"; -// header += "DATASET STRUCTURED_POINTS\n"; -// header += fmt::format("DIMENSIONS {} {} {}\n", Nx, Ny, Nz); -// header += fmt::format("ORIGIN {} {} {}\n", ll.x, ll.y, ll.z); -// header += fmt::format("SPACING {} {} {}\n", x_delta, y_delta, z_delta); -// header += fmt::format("POINT_DATA {}\n", Nx * Ny * Nz); - -// // Write header -// if (mpi::master) { -// MPI_File_write_at(plot, 0, header.c_str(), header.size(), MPI_CHAR, MPI_STATUS_IGNORE); -// } - -// int chunk_size = Nx * Ny * Nz; - -// MPI_Offset base_offset = header.size(); -// // MPI_Offset offset = header.size(); - -// int64_t num_neg = 0; -// int64_t num_samples = 0; -// float min_flux = 0.0; -// float max_flux = -1.0e20; -// // Plot multigroup flux data -// for (int g = 0; g < negroups_; g++) { - -// header.clear(); -// header += fmt::format("SCALARS flux_group_{} float\n", g); -// header += "LOOKUP_TABLE default\n"; - -// if (mpi::master) { -// MPI_File_write_at(plot, base_offset, header.c_str(), header.size(), MPI_CHAR, MPI_STATUS_IGNORE); -// } - -// base_offset += header.size(); - -// for (int voxel_id : my_voxel_ids) { -// int64_t fsr = voxel_indices[voxel_id]; -// int64_t source_element = fsr * negroups_ + g; -// float flux = 0; -// if (fsr >= 0) { -// flux = evaluate_flux_at_point(voxel_positions[voxel_id], fsr, g); -// if (flux < 0.0) -// flux = FlatSourceDomain::evaluate_flux_at_point( -// voxel_positions[voxel_id], fsr, g); -// } -// if (flux < 0.0) { -// num_neg++; -// if (flux < min_flux) { -// min_flux = flux; -// } -// } -// if (flux > max_flux) -// max_flux = flux; -// num_samples++; -// flux = convert_to_big_endian(flux); - -// MPI_Offset offset = base_offset + voxel_id * sizeof(float); -// // MPI_Offset fsr_offset = base_offset + voxel_id * sizeof(float); - -// // Write this piece of data at its specific location -// MPI_File_write_at(plot, offset, -// &flux, -// 1, -// MPI_FLOAT, -// MPI_STATUS_IGNORE); - -// // std::fwrite(&flux, sizeof(float), 1, plot); -// } - -// base_offset += chunk_size * sizeof(float); - -// } - -// // MPI_Barrier(mpi::intracomm); - -// // Plot FSRs -// header.clear(); -// header += "SCALARS FSRs float\n"; -// header += "LOOKUP_TABLE default\n"; - -// // std::string fsr_header; -// // fsr_header += "SCALARS FSRs float\n"; -// // fsr_header += "LOOKUP_TABLE default\n"; - -// // Write FSR Header -// if (mpi::master) { -// MPI_File_write_at(plot, base_offset, header.c_str(), header.size(), MPI_CHAR, MPI_STATUS_IGNORE); -// // MPI_File_write_at(plot, offset, fsr_header.c_str(), fsr_header.size(), MPI_CHAR, MPI_STATUS_IGNORE); -// } - -// base_offset += header.size(); -// // MPI_Offset base_offset = offset + header.size(); - -// // // Pre-size file -// // MPI_Offset data_bytes = -// // static_cast(Nx) * Ny * Nz * static_cast(sizeof(float)); -// // // if (mpi::master) { -// // MPI_File_set_size(plot, base_offset + data_bytes); -// // // } - -// MPI_Barrier(mpi::intracomm); - -// for (int voxel_id : my_voxel_ids) { - -// int fsr = voxel_indices[voxel_id]; -// float value = future_prn(10, fsr); -// value = convert_to_big_endian(value); - -// MPI_Offset offset = base_offset + voxel_id * sizeof(float); -// // MPI_Offset fsr_offset = base_offset + voxel_id * sizeof(float); - -// // Write this piece of data at its specific location -// MPI_File_write_at(plot, offset, -// &value, -// 1, -// MPI_FLOAT, -// MPI_STATUS_IGNORE); -// } - -// MPI_Barrier(mpi::intracomm); - -// base_offset += chunk_size * sizeof(float); - -// MPI_File_close(&plot); -// } -// } - void FlatSourceDomain::apply_external_source_to_source_region( Discrete* discrete, double strength_factor, SourceRegionHandle& srh) { diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index c67e403c38a..13a9de656fd 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -434,90 +434,86 @@ void RandomRaySimulation::simulate() initialize_batch(); initialize_generation(); - // MPI not supported in random ray solver, so all work is done by rank 0 - // TODO: Implement domain decomposition for MPI parallelism - // if (mpi::master) { - - // Reset total starting particle weight used for normalizing tallies - simulation::total_weight = 1.0; - - // Update source term (scattering + fission) - domain_->update_neutron_source(k_eff_); - - // Reset scalar fluxes, iteration volume tallies, and region hit flags to - // zero - domain_->batch_reset(); - - // At the beginning of the simulation, if mesh subvivision is in use, we - // need to swap the main source region container into the base container, - // as the main source region container will be used to hold the true - // subdivided source regions. The base container will therefore only - // contain the external source region information, the mesh indices, - // material properties, and initial guess values for the flux/source. - if (RandomRay::mesh_subdivision_enabled_ && - simulation::current_batch == 1 && !FlatSourceDomain::adjoint_) { - domain_->prepare_base_source_regions(); - } - - // Transport sweep over all random rays for the iteration - if (mpi::n_procs > 1){ - transport_sweep_decomp(RB); - } else { - transport_sweep(); - } + // Reset total starting particle weight used for normalizing tallies + simulation::total_weight = 1.0; + + // Update source term (scattering + fission) + domain_->update_neutron_source(k_eff_); + + // Reset scalar fluxes, iteration volume tallies, and region hit flags to + // zero + domain_->batch_reset(); + + // At the beginning of the simulation, if mesh subvivision is in use, we + // need to swap the main source region container into the base container, + // as the main source region container will be used to hold the true + // subdivided source regions. The base container will therefore only + // contain the external source region information, the mesh indices, + // material properties, and initial guess values for the flux/source. + if (RandomRay::mesh_subdivision_enabled_ && + simulation::current_batch == 1 && !FlatSourceDomain::adjoint_) { + domain_->prepare_base_source_regions(); + } - // Update decomposition map with newly discovered source regions - mpi::decomp_map.update(); + // Transport sweep over all random rays for the iteration + if (mpi::n_procs > 1){ + transport_sweep_decomp(RB); + } else { + transport_sweep(); + } - // If using mesh subdivision, add any newly discovered source regions - // to the main source region container. - if (RandomRay::mesh_subdivision_enabled_) { - domain_->finalize_discovered_source_regions(); - } + // Update decomposition map with newly discovered source regions + simulation::time_decomposition_handling.start(); + mpi::decomp_map.update(); + simulation::time_decomposition_handling.stop(); - // Normalize scalar flux and update volumes - domain_->normalize_scalar_flux_and_volumes( - settings::n_particles * RandomRay::distance_active_); + // If using mesh subdivision, add any newly discovered source regions + // to the main source region container. + if (RandomRay::mesh_subdivision_enabled_) { + domain_->finalize_discovered_source_regions(); + } - // Add source to scalar flux, compute number of FSR hits - int64_t n_hits = domain_->add_source_to_scalar_flux(); + // Normalize scalar flux and update volumes + domain_->normalize_scalar_flux_and_volumes( + settings::n_particles * RandomRay::distance_active_); - // Apply transport stabilization factors - domain_->apply_transport_stabilization(); + // Add source to scalar flux, compute number of FSR hits + int64_t n_hits = domain_->add_source_to_scalar_flux(); - if (settings::run_mode == RunMode::EIGENVALUE) { - // Compute random ray k-eff - k_eff_ = domain_->compute_k_eff(k_eff_); + // Apply transport stabilization factors + domain_->apply_transport_stabilization(); - // Store random ray k-eff into OpenMC's native k-eff variable - global_tally_tracklength = k_eff_; - } + if (settings::run_mode == RunMode::EIGENVALUE) { + // Compute random ray k-eff + k_eff_ = domain_->compute_k_eff(k_eff_); - // Execute all tallying tasks, if this is an active batch - if (simulation::current_batch > settings::n_inactive) { + // Store random ray k-eff into OpenMC's native k-eff variable + global_tally_tracklength = k_eff_; + } - // Add this iteration's scalar flux estimate to final accumulated - // estimate - domain_->accumulate_iteration_flux(); + // Execute all tallying tasks, if this is an active batch + if (simulation::current_batch > settings::n_inactive) { - // Generate mapping between source regions and tallies - if (!domain_->mapped_all_tallies_ && - !RandomRay::mesh_subdivision_enabled_) { - domain_->convert_source_regions_to_tallies(0); - } + // Add this iteration's scalar flux estimate to final accumulated + // estimate + domain_->accumulate_iteration_flux(); - // Use above mapping to contribute FSR flux data to appropriate - // tallies - domain_->random_ray_tally(); + // Generate mapping between source regions and tallies + if (!domain_->mapped_all_tallies_ && + !RandomRay::mesh_subdivision_enabled_) { + domain_->convert_source_regions_to_tallies(0); } - // Set phi_old = phi_new - domain_->flux_swap(); + // Use above mapping to contribute FSR flux data to appropriate + // tallies + domain_->random_ray_tally(); + } - // Check for any obvious insabilities/nans/infs - instability_check(n_hits, k_eff_, avg_miss_rate_); + // Set phi_old = phi_new + domain_->flux_swap(); - // } // End MPI master work + // Check for any obvious insabilities/nans/infs + instability_check(n_hits, k_eff_, avg_miss_rate_); // Finalize the current batch finalize_generation(); @@ -526,15 +522,18 @@ void RandomRaySimulation::simulate() if (mpi::n_procs > 1){ + // Compute total intersections and load balancing data simulation::time_decomposition_handling.start(); + // Exchange intersection data uint64_t total_geometric_intersections_sum = 0; MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); + + // Local work load float rank_load_local = (total_geometric_intersections_/static_cast(total_geometric_intersections_sum))*100.0; total_geometric_intersections_ = total_geometric_intersections_sum; rank_load_.resize(mpi::n_procs); - // send load data to master rank (rank 0) if (mpi::master) { rank_load_[0] = rank_load_local; @@ -546,6 +545,7 @@ void RandomRaySimulation::simulate() MPI_Send(&rank_load_local, 1, MPI_FLOAT, 0, 1, mpi::intracomm); } + // Average number of ray communications between ranks per batch avg_num_comms_ = avg_num_comms_/settings::n_batches; simulation::time_decomposition_handling.stop(); @@ -582,18 +582,25 @@ void RandomRaySimulation::instability_check( uint64_t n_source_regions = domain_->n_source_regions(); if (mpi::n_procs > 1){ + // Reduce n_hits and n_source_regions on master rank to compute + // global miss rate simulation::time_decomposition_handling.stop(); - MPI_Allreduce(MPI_IN_PLACE, &n_hits, 1, MPI_LONG_LONG, MPI_SUM, mpi::intracomm); - MPI_Allreduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, &n_hits, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(&n_hits, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&n_source_regions, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + } simulation::time_decomposition_handling.stop(); } - double percent_missed = ((n_source_regions - n_hits) / - static_cast(n_source_regions)) * - 100.0; - avg_miss_rate += percent_missed; - if (mpi::master) { + double percent_missed = ((n_source_regions - n_hits) / + static_cast(n_source_regions)) * + 100.0; + avg_miss_rate += percent_missed; + if (percent_missed > 10.0) { warning(fmt::format( "Very high FSR miss rate detected ({:.3f}%). Instability may occur. " @@ -623,7 +630,8 @@ void RandomRaySimulation::print_results_random_ray( if (settings::verbosity >= 6) { double total_integrations = total_geometric_intersections * negroups; double time_per_integration = - simulation::time_transport.elapsed() / total_integrations; + (time_transport.elapsed() - time_ray_buffering.elapsed()) + / total_integrations; double misc_time = time_total.elapsed() - time_update_src.elapsed() - time_transport.elapsed() - time_tallies.elapsed() - time_bank_sendrecv.elapsed(); @@ -716,7 +724,6 @@ void RandomRaySimulation::print_results_random_ray( show_time("Transport sweep only", time_transport.elapsed(), 1); show_time("Source update only", time_update_src.elapsed(), 1); show_time("Tally conversion only", time_tallies.elapsed(), 1); - show_time("MPI source reductions only", time_bank_sendrecv.elapsed(), 1); show_time("Other iteration routines", misc_time, 1); if (settings::run_mode == RunMode::EIGENVALUE) { show_time("Time in inactive batches", time_inactive.elapsed()); @@ -727,7 +734,8 @@ void RandomRaySimulation::print_results_random_ray( show_time("Time per integration", time_per_integration); if (mpi::n_procs > 1){ show_time("Time in ray communication", time_ray_comms.elapsed()); - show_time("Time in decomposition handling", time_decomposition_handling.elapsed()); + show_time("Time in decomposition handling", time_decomposition_handling.elapsed() + + time_ray_buffering.elapsed()); } } @@ -748,7 +756,6 @@ void RandomRaySimulation::transport_sweep() { reduction(+ : total_geometric_intersections_) for (int i = 0; i < settings::n_particles; i++) { RandomRay ray(i, domain_.get()); - total_geometric_intersections_ += ray.transport_history_based_single_ray(); } @@ -772,42 +779,45 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } int num_comms = 0; + bool keep_running = true; - while (RB.is_any_ray_alive()) { + while (keep_running) { // Start timer for transport + simulation::time_transport.start(); #pragma omp parallel for schedule(dynamic) \ reduction(+ : total_geometric_intersections_) for (int i = 0; i < RB.ray_bank_size(); i++) { RandomRay& ray = RB.my_ray_list_[i]; - simulation::time_transport.start(); total_geometric_intersections_ += ray.transport_history_based_single_ray(); - simulation::time_transport.stop(); // If ray has left my subdomain, buffer ray state if(ray.has_left_subdomain()){ - simulation::time_decomposition_handling.start(); #pragma omp critical (raybuffer) { + simulation::time_ray_buffering.start(); RB.buffer_ray_data_to_send(ray, domain_.get()); + simulation::time_ray_buffering.stop(); } - simulation::time_decomposition_handling.stop(); } } - - simulation::time_decomposition_handling.start(); + simulation::time_transport.stop(); // Remove dead rays and move rays across subdomains between ranks + simulation::time_decomposition_handling.start(); RB.update(domain_.get()); + + keep_running = RB.is_any_ray_alive(); num_comms ++; - simulation::time_decomposition_handling.stop(); } - uint64_t total_geometric_intersections_sum = 0; + simulation::time_decomposition_handling.start(); // Temporary diagnostics data + uint64_t total_geometric_intersections_sum = 0; + if (mpi::master) { printf("Max subdomain crossings: %d\n", num_comms); printf("Load distribution: "); @@ -833,6 +843,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // Reset ray bank list for next batch RB.reset_my_ray_list(); + + simulation::time_decomposition_handling.stop(); } } // namespace openmc diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index a9ca6263898..d6efe65bdaf 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -80,13 +80,11 @@ int RayBank::ray_bank_size(){ // Tells each rank how many rays to receive from whom void RayBank::communicate_message_metadata() { vector num_messages_sending(mpi::n_procs, 0); - // vector num_messages_receiving(mpi::n_procs, 0); // Ensure all values are zero fill(num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); total_sending_rays_ = 0; - // total_receiving_rays_= 0; // Fill the sending counts //TODO: OMP? for (auto& [rank, rays] : ray_send_buffer_) { @@ -120,7 +118,6 @@ void RayBank::communicate_rays(){ // vector requests(num_requests); // heap MPI_Request requests[num_requests]; // stack int req_idx = 0; - // uint64_t num_comms = 0; // Define one-dimensional arrays to be sent and received and allocate size vector ray_data; @@ -134,16 +131,11 @@ void RayBank::communicate_rays(){ int vector_send_idx = 0; int vector_receive_idx = 0; - // printf("Rank %d: Sending %d rays to other ranks and receiving %d rays from other ranks.\n", mpi::rank, total_sending_rays_, total_receiving_rays_); - // printf("Number of requests: %d \n", num_requests); - // Send ray data to neighbouring ranks for (auto [receiving_rank, rays] : ray_send_buffer_) { int num_rays_sending = rays.size(); - // printf("Rank %d: Sending %d rays to rank %d \n", mpi::rank, num_rays_sending, receiving_rank); - for (int i = 0; i < num_rays_sending; i++) { // Pack slimmed down data container for MPI send RayExchangeData exchange_data; @@ -159,18 +151,14 @@ void RayBank::communicate_rays(){ } } - // printf("Prepared data for sending to rank %d, req_idx %d, vector_send_idx %d \n", receiving_rank, req_idx, vector_send_idx); - MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); MPI_Isend(&angular_flux_data[vector_send_idx * negroups_], num_rays_sending * negroups_, MPI_FLOAT, receiving_rank, 2, mpi::intracomm, &requests[req_idx+1]); - // printf("Initiated send to rank %d, req_idx %d, vector_send_idx %d \n", receiving_rank, req_idx, vector_send_idx); vector_send_idx += num_rays_sending; req_idx += 2; } - // printf("Sending complete, req_idx %d, vector_send_idx %d \n", req_idx, vector_send_idx); - + //TODO: Post Irecv before Isend? // Receive ray data to neighbouring ranks //TODO: OMP? for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { int num_rays_receiving = num_messages_receiving_[sending_rank]; @@ -179,25 +167,14 @@ void RayBank::communicate_rays(){ MPI_Recv(&received_angular_flux_data_[vector_receive_idx * negroups_], num_rays_receiving * negroups_, MPI_FLOAT, sending_rank, 2, mpi::intracomm, MPI_STATUS_IGNORE); vector_receive_idx += num_rays_receiving; - // num_comms++; } - // printf("Receiving complete, req_idx %d, vector_send_idx %d, vector_receive_idx %d \n", req_idx, vector_send_idx, vector_receive_idx); - // Wait for all communication to complete MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); // MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); - - // // Calculate how many rays were sent in this communication round - // MPI_Allreduce(MPI_IN_PLACE, &num_comms, 1, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - - // num_comms_batch_ += num_comms; // Empty buffered_ray_data ray_send_buffer_.clear(); - - // printf("Communication complete, req_idx %d, vector_send_idx %d, vector_receive_idx %d \n", req_idx, vector_send_idx, vector_receive_idx); - } void RayBank::update_my_ray_list(FlatSourceDomain* domain){ diff --git a/src/timer.cpp b/src/timer.cpp index eb4f0bad753..58bd09170e7 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -28,6 +28,7 @@ Timer time_event_collision; Timer time_event_death; Timer time_update_src; Timer time_ray_comms; +Timer time_ray_buffering; Timer time_decomposition_handling; } // namespace simulation From 09ef5734d413fa114c73daf052786f8eb96b31f4 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Wed, 24 Sep 2025 15:16:52 +0100 Subject: [PATCH 04/48] Determine rank centers to give equal-volumes --- include/openmc/random_ray/decomposition_map.h | 31 ++- src/random_lcg.cpp | 2 +- src/random_ray/decomposition_map.cpp | 201 +++++++++++++++++- src/random_ray/random_ray_simulation.cpp | 3 +- 4 files changed, 222 insertions(+), 15 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 318a1b362d9..29e30ffcb5f 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -7,6 +7,13 @@ namespace openmc { +// // Container that contains the data to calculate the centroid +// // of the Voronoi cell corresponding to each rank +// struct VoronoiCellData { +// Position position; +// int cell_count; +// }; + class DecompositionMap; namespace mpi { @@ -21,12 +28,23 @@ class DecompositionMap { //---------------------------------------------------------------------------- // Methods - // void initialize(FlatSourceDomain* domain); - void update(); + + // Methods to find rank centres that divide spatial domain up into equal + // Voronoi volumes + void generate_rank_centers(); //TODO: put in constructor + void calculate_grid_points(int grid_points_per_dimension); + void initialize_points(); + void calculate_voronoi(vector& position_sum_per_rank, vector& num_points_per_rank); + Position calculate_centroids(const Position position_sum, const int num_points, int rank); + + // Methods to create and update subdomain list void create(FlatSourceDomain* domain); + void update(); + + // Method to check if source region key is in subdomain of calling rank bool is_SRK_in_domain(int sr_key); // bool is_SRK_in_domain(SourceRegionKey sr_key); - int n_source_regions(); + // int n_source_regions(); //---------------------------------------------------------------------------- // Static data members @@ -41,11 +59,18 @@ class DecompositionMap { // subdomain_map_; std::unordered_map subdomain_map_; + vector rank_centers_; private: //---------------------------------------------------------------------------- // Private data members // vector my_subdomain_list_; + SpatialBox* spatial_box_ = nullptr; // Add this member variable + // std::unordered_map> voronoi_map_; + vector grid_points_; + int grid_points_per_rank_{10}; + // vector position_sum_per_rank(mpi::n_procs, Position(0,0,0)); + // vector num_points_per_rank(mpi::n_procs, 0); }; // class DecompositionMap diff --git a/src/random_lcg.cpp b/src/random_lcg.cpp index 29457569b94..b40ebd21723 100644 --- a/src/random_lcg.cpp +++ b/src/random_lcg.cpp @@ -17,7 +17,7 @@ uint64_t prn_stride {DEFAULT_STRIDE}; // stride between particles //============================================================================== // 64 bit implementation of the PCG-RXS-M-XS 64-bit state / 64-bit output -// geneator Adapted from: https://github.com/imneme/pcg-c, in particular +// generator Adapted from: https://github.com/imneme/pcg-c, in particular // https://github.com/imneme/pcg-c/blob/83252d9c23df9c82ecb42210afed61a7b42402d7/include/pcg_variants.h#L188-L192 // @techreport{oneill:pcg2014, // title = "PCG: A Family of Simple Fast Space-Efficient Statistically Good diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 93182f6cb31..1c1de5b3456 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -4,6 +4,7 @@ #include "openmc/vector.h" #include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/random_ray.h" +#include "openmc/random_lcg.h" namespace openmc { @@ -12,7 +13,187 @@ namespace mpi { } // Constructor -DecompositionMap::DecompositionMap() {} +DecompositionMap::DecompositionMap() { + // generate_rank_centers(); +} + +void DecompositionMap::generate_rank_centers(){ + + spatial_box_ = dynamic_cast( + dynamic_cast(RandomRay::ray_source_.get())->space()); + + // Calculate grid points that are used for Voronoi cells + int grid_points_per_dimension = ceil(grid_points_per_rank_ * cbrt(mpi::n_procs)); // number of grid points in each dimension + calculate_grid_points(grid_points_per_dimension); + + // Initialize points with random positions + initialize_points(); + + double err = 1.0; + double precision = 1e-3; // 0.001 cm + int it = 0; + int max_iterations = 100; + + // Lloyd's algorithm + // https://en.wikipedia.org/wiki/Lloyd%27s_algorithm + while (err > precision && it < max_iterations) + { + if (mpi::master){ + printf("ITERATION %d \n", it); + } + + // Reset error to determine maximum movement below + err = 0.0; + + vector position_sum_per_rank(mpi::n_procs, Position(0,0,0)); + vector num_points_per_rank(mpi::n_procs, 0); + + // Compute Voronoi cells by summing up all position values of mesh grid points + // that are closest to a Voronoi center + calculate_voronoi(position_sum_per_rank, num_points_per_rank); + + for (int rank = 0; rank < mpi::n_procs; rank++) { + + if (mpi::master){ + printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); + } + + // Calculate centroid of the cell + Position centroid = calculate_centroids(position_sum_per_rank[rank], num_points_per_rank[rank], rank); + + // Calculate movement for convergence check + double movement = (centroid - rank_centers_[rank]).norm(); + + // Move rank center to centroid + rank_centers_[rank] = centroid; + + // record maximum movement + if (movement > err) { + err = movement; + } + } + + it++; + } + + if (mpi::master){ + for (int rank = 0; rank < mpi::n_procs; rank++) { + printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); + } + } + + if (mpi::master) { + if (it == max_iterations) { + warning("Lloyd's algorithm did not converge within the maximum number of iterations."); + } else { + printf("Lloyd's algorithm converged in %d iterations.", it); + } + } + +} + +void DecompositionMap::calculate_grid_points(int grid_points_per_dimension){ + + // Calculate grid spacing + double delta_x = (spatial_box_->upper_right().x - spatial_box_->lower_left().x) / (grid_points_per_dimension - 1); + double delta_y = (spatial_box_->upper_right().y - spatial_box_->lower_left().y) / (grid_points_per_dimension - 1); + double delta_z = (spatial_box_->upper_right().z - spatial_box_->lower_left().z) / (grid_points_per_dimension - 1); + + // Generate all grid points + + for (int i = 0; i < grid_points_per_dimension; i++) { + double x = spatial_box_->lower_left().x + i * delta_x; + for (int j = 0; j < grid_points_per_dimension; j++) { + double y = spatial_box_->lower_left().y + j * delta_y; + for (int k = 0; k < grid_points_per_dimension; k++) { + double z = spatial_box_->lower_left().z + k * delta_z; + grid_points_.push_back({x, y, z}); + } + } + } +} + +// Places random points in the spatial domain. +// Each point corresponds to the initial center of a rank. +void DecompositionMap::initialize_points(){ + rank_centers_.resize(mpi::n_procs); + + uint64_t seed = openmc_get_seed(); + + // Sample random positions to start with + for (int rank = 0; rank < mpi::n_procs; rank++){ + + double x = prn(&seed); + double y = prn(&seed); + double z = prn(&seed); + + Position xi {x, y, z}; + + // make a small shift in position to avoid geometry floating point issues //TODO: necessary? + Position shift {FP_COINCIDENT, FP_COINCIDENT, FP_COINCIDENT}; + rank_centers_[rank] = (spatial_box_->lower_left() + shift) + + xi * ((spatial_box_->upper_right() - shift) - (spatial_box_->lower_left() + shift)); + } +} + +// Determine the distance of each mesh grid point to all rank centers. +// Sum up the positions of all mesh grid points that are closest to a given rank center +// for computation of centroid later. Record number of grid points per rank center. +void DecompositionMap::calculate_voronoi(vector& position_sum_per_rank, + vector& num_points_per_rank){ + + // Assign each point to the closest rank center + #pragma omp parallel for schedule(static) + for (int p = 0; p < grid_points_.size(); p++) { + Position point = grid_points_[p]; + int closest_rank = C_NONE; + double min_distance = INFTY; + + // Find closest rank center + for (int rank = 0; rank < mpi::n_procs; rank++) { + double dist = (point - rank_centers_[rank]).norm(); + if (dist < min_distance) { + min_distance = dist; + closest_rank = rank; + } + } + + if (mpi::master && closest_rank == C_NONE) { + fatal_error("Could not find closest rank for Voronoi cell point " + std::to_string(p) + "."); + } + + // Accumulate point coordinates for the closest rank + #pragma omp atomic + position_sum_per_rank[closest_rank].x += point.x; + #pragma omp atomic + position_sum_per_rank[closest_rank].y += point.y; + #pragma omp atomic + position_sum_per_rank[closest_rank].z += point.z; + + // Record number of mesh grid points for closest rank + #pragma omp atomic + num_points_per_rank[closest_rank]++; + } + + } + +Position DecompositionMap::calculate_centroids(const Position position_sum, const int num_points, int rank){ + + // check if any points have been recorded in rank + if (position_sum.norm() == 0.0){ + fatal_error("Rank " + std::to_string(rank) + " has no Voronoi cell points. Mesh is too coarse."); + } + + Position centroid = position_sum; + + // Divide by number of points + double n = static_cast(num_points); + centroid.x /= n; + centroid.y /= n; + centroid.z /= n; + + return centroid; +} // Method to initialize subdomain list void DecompositionMap::create(FlatSourceDomain* domain){ @@ -64,16 +245,16 @@ bool DecompositionMap::is_SRK_in_domain(int sr_key){ } } -int DecompositionMap::n_source_regions(){ - int count = 0; +// int DecompositionMap::n_source_regions(){ +// int count = 0; - for (const auto& [key, val] : subdomain_map_) { - if (val == mpi::rank) { - count++; - } - } +// for (const auto& [key, val] : subdomain_map_) { +// if (val == mpi::rank) { +// count++; +// } +// } - return count; -} +// return count; +// } }// namespace openmc diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 13a9de656fd..fa55288f9f1 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -64,6 +64,7 @@ void openmc_run_random_ray() sim.apply_fixed_sources_and_mesh_domains(); // Initialize subdomains for MPI ranks + mpi::decomp_map.generate_rank_centers(); mpi::decomp_map.create(sim.domain()); // Begin main simulation timer @@ -546,7 +547,7 @@ void RandomRaySimulation::simulate() } // Average number of ray communications between ranks per batch - avg_num_comms_ = avg_num_comms_/settings::n_batches; + avg_num_comms_ = avg_num_comms_/settings::n_batches; //TODO: should this be double? simulation::time_decomposition_handling.stop(); } From b88519a74bd56e180de04c57e383d94f6ebe42fa Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Wed, 1 Oct 2025 21:47:33 +0100 Subject: [PATCH 05/48] Add domain decomposition with Voronoi cells --- examples/2D_c5g7_python_mesh/build-xml-2d.py | 5 +- include/openmc/random_ray/decomposition_map.h | 45 +- include/openmc/random_ray/parallel_map.h | 17 + include/openmc/random_ray/random_ray.h | 5 +- .../openmc/random_ray/random_ray_simulation.h | 1 + include/openmc/random_ray/source_region.h | 39 +- src/main.cpp | 14 + src/random_ray/decomposition_map.cpp | 672 ++++++++++++++++-- src/random_ray/flat_source_domain.cpp | 10 +- src/random_ray/random_ray.cpp | 114 ++- src/random_ray/random_ray_simulation.cpp | 136 +++- src/random_ray/ray_bank.cpp | 102 ++- src/random_ray/source_region.cpp | 109 ++- 13 files changed, 1106 insertions(+), 163 deletions(-) diff --git a/examples/2D_c5g7_python_mesh/build-xml-2d.py b/examples/2D_c5g7_python_mesh/build-xml-2d.py index 0d6d955e8d5..27d78031a8c 100755 --- a/examples/2D_c5g7_python_mesh/build-xml-2d.py +++ b/examples/2D_c5g7_python_mesh/build-xml-2d.py @@ -12,8 +12,8 @@ # Instantiate a Settings, set all runtime parameters, and export to XML settings_file = openmc.Settings() settings_file.energy_mode = "multi-group" -settings_file.batches = 100 #1000 -settings_file.inactive = 50 #600 +settings_file.batches = 20 #1000 +settings_file.inactive = 10 #600 settings_file.particles = 1750 settings_file.run_mode = 'eigenvalue' settings_file.output = {'tallies': False, 'summary': False} @@ -43,6 +43,7 @@ plot_1.origin = [0.0, 0.0, 0.0] plot_1.width = [64.26, 64.26, 1.0] plot_1.pixels = [1000, 1000, 1] +# plot_1.pixels = [3000, 3000, 1] plot_1.type = 'voxel' # Instantiate a Plots collection and export to XML diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 29e30ffcb5f..8787d6a0c89 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -39,13 +39,39 @@ class DecompositionMap { // Methods to create and update subdomain list void create(FlatSourceDomain* domain); - void update(); + void update(ParallelMap& + discovered_source_regions); + void exchange_sr_info(ParallelMap& + discovered_source_regions); + bool any_discovered_source_regions(ParallelMap& + discovered_source_regions); + void transfer_sr_data(int sender, int receiver, SourceRegionKey sr_key, ParallelMap& + discovered_source_regions); // Method to check if source region key is in subdomain of calling rank - bool is_SRK_in_domain(int sr_key); + // bool is_SRK_in_domain(SourceRegionKey sr_key, Position r); + // bool is_SRK_in_domain(SourceRegionKey sr_key, Position r, + // ParallelMap& + // discovered_source_regions); + int find_owner(SourceRegionKey sr_key, Position r, + ParallelMap& + discovered_source_regions, int64_t ID); + // bool record_new_SRK(SourceRegionKey sr_key, Position r); + // bool is_closest_rank(Position r); + int find_closest_rank(Position r); // bool is_SRK_in_domain(SourceRegionKey sr_key); // int n_source_regions(); + // void calculate_rank_load(uint64_t total_geometric_intersections); + + // Calculates the load per rank based on the total number of hits all source regions + // experience + // void calculate_rank_load(FlatSourceDomain* domain); + void calculate_rank_load(uint64_t total_geometric_intersections); + + + + //---------------------------------------------------------------------------- // Static data members @@ -55,12 +81,22 @@ class DecompositionMap { // Map that relates a SourceRegionKey to the index of the MPI rank that // contains that source region in its subdomain. + std::unordered_map + subdomain_map_; + + // Map that contains all newly discovered source region keys in a batch + // that have not yet assigned a rank with certainty. // std::unordered_map - // subdomain_map_; + // discovered_regions_map_; //TODO: could exisiting discovered_source_regions container be re-used? - std::unordered_map subdomain_map_; + // std::unordered_map subdomain_map_; vector rank_centers_; + vector rank_load_; + // std::unordered_set outside_source_regions_; + // std::unordered_map outside_source_regions_; + + private: //---------------------------------------------------------------------------- // Private data members @@ -69,6 +105,7 @@ class DecompositionMap { // std::unordered_map> voronoi_map_; vector grid_points_; int grid_points_per_rank_{10}; + int negroups_; // vector position_sum_per_rank(mpi::n_procs, Position(0,0,0)); // vector num_points_per_rank(mpi::n_procs, 0); diff --git a/include/openmc/random_ray/parallel_map.h b/include/openmc/random_ray/parallel_map.h index 7f4f06d9996..abc81738ef4 100644 --- a/include/openmc/random_ray/parallel_map.h +++ b/include/openmc/random_ray/parallel_map.h @@ -174,6 +174,23 @@ class ParallelMap { HashFunctor>::iterator()); } + // Return summed length of all buckets. + uint64_t size() + { + uint64_t total_size = 0; + for (const auto& bucket : buckets_) { + total_size += bucket.map_.size(); + } + return total_size; + } + + // Erase element by key. + void erase(const KeyType& key) + { + Bucket& bucket = get_bucket(key); + bucket.map_.erase(key); + } + private: //---------------------------------------------------------------------------- // Private Methods diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index 82e7820203b..89897a13eef 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -17,7 +17,8 @@ struct RayBufferContainer { double distance_travelled; vector angular_flux; SourceRegionKey sr_key; - int sr; + int sr; //TODO: remove + // int receiving_rank; bool is_active; uint64_t ray_id; }; @@ -91,6 +92,7 @@ class RandomRay : public Particle { RayBufferContainer exchange_data_; bool ray_trace_only_ {false}; // If true, only perform geometry operations + int owner_rank_ {C_NONE}; // Rank that owns this ray based on its position private: //---------------------------------------------------------------------------- @@ -108,6 +110,7 @@ class RandomRay : public Particle { bool is_active_ {false}; bool is_alive_ {true}; bool is_local_ {true}; + // bool discovered_new_SRK_ {false}; // bool is_buffered_ {false}; }; // class RandomRay diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 1622edee69f..b1aebc43654 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -67,6 +67,7 @@ class RandomRaySimulation { // Average number of ray communications between rank per batch uint64_t avg_num_comms_ {0}; uint64_t num_comms_batch_ {0}; + uint64_t num_ray_crossings_ {0}; //TODO: temporary vector rank_load_; }; // class RandomRaySimulation diff --git a/include/openmc/random_ray/source_region.h b/include/openmc/random_ray/source_region.h index 5c5b31f392e..def1485a1cf 100644 --- a/include/openmc/random_ray/source_region.h +++ b/include/openmc/random_ray/source_region.h @@ -303,22 +303,9 @@ class SourceRegionHandle { }; // class SourceRegionHandle -class SourceRegion { +class ScalarSourceRegionFields { public: - //---------------------------------------------------------------------------- - // Constructors - SourceRegion(int negroups, bool is_linear); - SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr); - SourceRegion() = default; - - //---------------------------------------------------------------------------- - // Public Data members - - //--------------------------------------- - // Scalar fields - int material_ {0}; //!< Index in openmc::model::materials array - OpenMPMutex lock_; double volume_ { 0.0}; //!< Volume (computed from the sum of ray crossing lengths) double volume_t_ {0.0}; //!< Volume totaled over all iterations @@ -345,6 +332,30 @@ class SourceRegion { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; //!< The spatial moment matrix MomentMatrix mom_matrix_t_ {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; //!< The spatial moment matrix accumulated over all iterations +}; + +class SourceRegion { +public: + //---------------------------------------------------------------------------- + // Constructors + SourceRegion(int negroups, bool is_linear); + SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr); + SourceRegion() = default; + + //---------------------------------------------------------------------------- + // Methods + void merge(SourceRegion& sr_add, bool is_linear); + + //---------------------------------------------------------------------------- + // Public Data members + + //--------------------------------------- + // Scalar fields + + OpenMPMutex lock_; + + // Container with all scalar fields of a source region + ScalarSourceRegionFields scalars_; // A set of volume tally tasks. This more complicated data structure is // convenient for ensuring that volumes are only tallied once per source diff --git a/src/main.cpp b/src/main.cpp index 88251ac7232..a93d8b808b4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -38,34 +38,48 @@ int main(int argc, char* argv[]) break; case SolverType::RANDOM_RAY: openmc_run_random_ray(); + printf("Finished random ray simulation\n"); err = 0; break; } break; case RunMode::PLOTTING: err = openmc_plot_geometry(); + printf("Plotting finished\n"); break; case RunMode::PARTICLE: if (mpi::master) run_particle_restart(); err = 0; + printf("Particle finished\n"); break; case RunMode::VOLUME: err = openmc_calculate_volumes(); + printf("Volumes finished\n"); break; default: + printf("Default finished\n"); break; } if (err) fatal_error(openmc_err_msg); + printf("before finalize\n"); + // Finalize and free up memory err = openmc_finalize(); if (err) fatal_error(openmc_err_msg); + MPI_Barrier(mpi::intracomm); + printf("RANK: %d after finalize\n", mpi::rank); + MPI_Barrier(mpi::intracomm); + // If MPI is in use and enabled, terminate it #ifdef OPENMC_MPI + printf("RANK: %d OPENMC_MPI compiled\n", mpi::rank); MPI_Finalize(); #endif + printf("MPI finalize\n"); + } diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 1c1de5b3456..807f7e87aed 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -5,6 +5,9 @@ #include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/random_ray.h" #include "openmc/random_lcg.h" +#include "openmc/mgxs_interface.h" + +#include "openmc/simulation.h" namespace openmc { @@ -14,6 +17,8 @@ namespace mpi { // Constructor DecompositionMap::DecompositionMap() { + negroups_ = data::mg.num_energy_groups_; //TODO: constructor gets called before num_energy_groups is known? + rank_load_.resize(mpi::n_procs, 0.0); // generate_rank_centers(); } @@ -38,9 +43,9 @@ void DecompositionMap::generate_rank_centers(){ // https://en.wikipedia.org/wiki/Lloyd%27s_algorithm while (err > precision && it < max_iterations) { - if (mpi::master){ - printf("ITERATION %d \n", it); - } + // if (mpi::master){ + // printf("ITERATION %d \n", it); + // } // Reset error to determine maximum movement below err = 0.0; @@ -86,7 +91,7 @@ void DecompositionMap::generate_rank_centers(){ if (it == max_iterations) { warning("Lloyd's algorithm did not converge within the maximum number of iterations."); } else { - printf("Lloyd's algorithm converged in %d iterations.", it); + printf("Lloyd's algorithm converged in %d iterations.\n", it); } } @@ -195,66 +200,647 @@ Position DecompositionMap::calculate_centroids(const Position position_sum, cons return centroid; } -// Method to initialize subdomain list -void DecompositionMap::create(FlatSourceDomain* domain){ - vector start(mpi::n_procs); - vector end(mpi::n_procs); +// // Method to initialize subdomain list +// void DecompositionMap::create(FlatSourceDomain* domain){ +// vector start(mpi::n_procs); +// vector end(mpi::n_procs); + +// int sr_per_rank = ((domain->n_source_regions() + mpi::n_procs - 1) / mpi::n_procs); + +// int sr_cnt = 0; +// int rank = 0; +// for (int i = 0; i < domain->n_source_regions(); i++) { +// if (sr_cnt >= sr_per_rank){ +// sr_cnt = 0; +// rank++; +// } +// subdomain_map_[i] = rank; +// sr_cnt++; +// } + +// } + +// Update subdomain list for each decomposition map. +void DecompositionMap::update(ParallelMap& + discovered_source_regions){ + + negroups_ = data::mg.num_energy_groups_; //TODO: This should not be called here again an dagain + + // outside_source_regions_.clear(); + + // bool test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); + // printf("Exchange sr data info"); + + // Check if any new regions discovered + if (any_discovered_source_regions(discovered_source_regions)){ + // Exchange discovered cell data between ranks + exchange_sr_info(discovered_source_regions); + } + + // test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); + // printf("2.9 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + + // vector rank_counts(mpi::n_procs, 0); + + // for (auto [sr_key, rank] : discovered_regions_map_){ + // // subdomain_map_[sr_key] = rank; + // } + +} + +bool DecompositionMap::any_discovered_source_regions(ParallelMap& + discovered_source_regions){ + + // int local_new_srs = discovered_regions_map_.size(); + int flag = 0; + + if(discovered_source_regions.begin() != discovered_source_regions.end()) { + // if (local_new_srs > 0) { + flag = 1; + } + + MPI_Allreduce(MPI_IN_PLACE, &flag, 1, MPI_INT, MPI_MAX, mpi::intracomm); + + return flag > 0; +} + +void DecompositionMap::exchange_sr_info(ParallelMap& + discovered_source_regions){ + + // Communicate maps + for (int rank = 0; rank < mpi::n_procs; rank++) { + + // if (simulation::current_batch == 6) { + // bool test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); + // printf("2.2 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + // } + + // Send size + uint64_t bcast_size = 0; + if (rank == mpi::rank) { + // bcast_size = discovered_source_regions.size(); + // bcast_size = discovered_regions_map_.size(); + for (const auto& pair : discovered_source_regions) { + if (pair.second.scalars_.volume_ > 0.0) { //TODO: can this check be avoided? + bcast_size++; + } + } + } + + MPI_Bcast(&bcast_size, 1, MPI_UINT64_T, rank, mpi::intracomm); //TODO: MPI_UINT64_T moght not be available? + + // printf("Rank %d: bcast_size %ld \n", mpi::rank, bcast_size); + + // if (simulation::current_batch == 6) { + // bool test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); + // printf("2.3 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + // } + + if (bcast_size > 0) { + + // vector local_rank_ids(bcast_size); + vector local_base_ids(bcast_size); + vector local_mesh_bins(bcast_size); + + if(rank == mpi::rank) { + // fill in vectors to be sent + int i = 0; + // for (auto [sr_key, rank] : discovered_regions_map_){ + for (const auto& pair : discovered_source_regions) { + // for (auto [sr_key, rank] : discovered_regions_map_){ + // local_rank_ids[i] = rank; + if (pair.second.scalars_.volume_ > 0.0) { + SourceRegionKey sr_key = pair.first; + local_base_ids[i] = sr_key.base_source_region_id; + local_mesh_bins[i] = sr_key.mesh_bin; + i++; + } + } + } + + // if (simulation::current_batch == 6) { + // bool test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); + // printf("2.4 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + // } + + // printf("Rank %d: Before bcast \n", mpi::rank); + + // Broadcast all data + // MPI_Bcast(local_rank_ids.data(), bcast_size, MPI_INT, rank, mpi::intracomm); + MPI_Bcast(local_base_ids.data(), bcast_size, MPI_INT64_T, rank, mpi::intracomm); + MPI_Bcast(local_mesh_bins.data(), bcast_size, MPI_INT64_T, rank, mpi::intracomm); + + // printf("Rank %d: After bcast \n", mpi::rank); + + // Update subdomain map + for (int j = 0; j < bcast_size; j++) { + + + // printf("Rank %d: Received source region with base id %ld, mesh bin %ld from rank %d \n", mpi::rank, local_base_ids[j], local_mesh_bins[j], rank); + // printf("Source region with base id %ld, mesh bin %ld received from rank %d \n", local_base_ids[j], local_mesh_bins[j], rank); + + // if (local_base_ids[j] == 4 && local_mesh_bins[j] == 104171){ + // printf("Received discovered source region with base id %ld, mesh bin %ld from rank %d \n", local_base_ids[j], local_mesh_bins[j], rank); + // bool test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); + // printf("2.5 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + // } + SourceRegionKey sr_key(local_base_ids[j], local_mesh_bins[j]); + + // check if already in map or not, i.e. has someone else discovered that region already? + if (subdomain_map_.find(sr_key) == subdomain_map_.end()){ + // if (local_base_ids[j] == 4 && local_mesh_bins[j] == 104171){ + // printf("Writing source region with base id %ld, mesh bin %ld to map, assigned to rank %d \n", local_base_ids[j], local_mesh_bins[j], rank); + // bool test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); + // printf("2.6 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + // } + // subdomain_map_[sr_key] = local_rank_ids[j]; + + subdomain_map_[sr_key] = rank; + + } else{ + // printf("Source region with base id %ld, mesh bin %ld already in map, contested between rank %d and rank %d \n", local_base_ids[j], local_mesh_bins[j], rank, subdomain_map_[sr_key]); + + int resident_rank = subdomain_map_[sr_key]; + int challenger_rank = rank; + // int challenger_rank = local_rank_ids[j]; + double resident_rank_load = rank_load_[resident_rank]; + double challenger_rank_load = rank_load_[challenger_rank]; + + // If load of challenger rank is lower, assign source region to that rank, + // otherwise resident keeps it + int sender; + int receiver; + if (challenger_rank_load < resident_rank_load){ + subdomain_map_[sr_key] = challenger_rank; + sender = resident_rank; + receiver = challenger_rank; + } else{ + // resident keeps it + sender = challenger_rank; + receiver = resident_rank; + } + + // if (mpi::master){ + // printf("sender: %d, receiver: %d, resident: %d, challenger: %d \n", sender, receiver, challenger_rank, resident_rank); + // printf("resident_rank_load: %f, challenger_rank_load: %f \n", resident_rank_load, challenger_rank_load); + // } + + // // Broadcast n_hits such that each rank can update load balance //TODO: n_hits must be batchwise + // // TODO: is load update here too costly? + // int bcast_n_hits = 0; + // if (mpi::rank == sender) { + // SourceRegion& contested_sr = discovered_source_regions[sr_key]; + // bcast_n_hits = contested_sr.scalars_.n_hits_; + // } + // MPI_Bcast(&bcast_n_hits, 1, MPI_INT, sender, mpi::intracomm); + + // rank_load_[sender] -= bcast_n_hits; + // rank_load_[receiver] += bcast_n_hits; + + // Merge source region data + if (mpi::rank == sender || mpi::rank == receiver){ + transfer_sr_data(sender, receiver, sr_key, discovered_source_regions); + } + + // if (mpi::master){ + // printf(" Source regions transferred\n"); + // } + } + } + } + } + +} + +void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKey sr_key, ParallelMap& + discovered_source_regions){ + + bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; + + SourceRegion& sr = discovered_source_regions[sr_key]; //TODO: maybe this can be done more efficiently? + + int num_scalar_messages = 1; + //! NOTE: update if new vector fields are added to SourceExchangeVectors struct + int num_vector_messages; + if (is_linear){ + num_vector_messages = 8; + } else{ + num_vector_messages = 4; + } + if (settings::run_mode == RunMode::FIXED_SOURCE) { + num_vector_messages += 1; + } + int num_requests = num_scalar_messages + num_vector_messages; + + MPI_Request requests[num_requests]; + int req_idx = 0; + + if (mpi::rank == sender){ + + // SourceRegion sr = discovered_source_regions[sr_key]; //TODO: maybe this can be done more efficiently? + + // printf("Rank %d sending source region with base id %ld, mesh bin %ld to rank %d \n", sender, sr_key.base_source_region_id, sr_key.mesh_bin, receiver); + + // printf("RANK %d: Source Region exists %d \n", mpi::rank, discovered_source_regions.contains(sr_key)); + // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_old_.size()); + // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_new_.size()); + // printf("Size 3 flux new on rank %d: %lu \n", mpi::rank, sr.source_.size()); + // printf("Size 4 flux new on rank %d: %lu \n", mpi::rank, sr.external_source_.size()); + // printf("Size 5 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_final_.size()); + // printf("is linear: %d \n", is_linear); + + // Send scalar data to receiver + MPI_Isend(&sr.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, receiver, 1, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + // Send vector data to receiver + // Tags hardcoded to avoid confusion if new fields are not added sequentially + MPI_Isend(sr.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, receiver, 2, mpi::intracomm, &requests[req_idx]); + req_idx ++; + //TODO: DO I need to send flux old?? + + // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_old_.size()); + + MPI_Isend(sr.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, receiver, 3, mpi::intracomm, &requests[req_idx]); + req_idx ++; - int sr_per_rank = ((domain->n_source_regions() + mpi::n_procs - 1) / mpi::n_procs); + // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_new_.size()); - int sr_cnt = 0; - int rank = 0; - for (int i = 0; i < domain->n_source_regions(); i++) { - if (sr_cnt >= sr_per_rank){ - sr_cnt = 0; - rank++; + MPI_Isend(sr.source_.data(), negroups_, MPI_FLOAT, receiver, 4, mpi::intracomm, &requests[req_idx]); + req_idx ++; + // printf("Size 3 flux new on rank %d: %lu \n", mpi::rank, sr.source_.size()); + + if (settings::run_mode == RunMode::FIXED_SOURCE) { + MPI_Isend(sr.external_source_.data(), negroups_, MPI_FLOAT, receiver, 5, mpi::intracomm, &requests[req_idx]); + req_idx ++; + // printf("Size 4 flux new on rank %d: %lu \n", mpi::rank, sr.external_source_.size()); + } + + MPI_Isend(sr.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, receiver, 6, mpi::intracomm, &requests[req_idx]); + req_idx ++; + // printf("Size 5 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_final_.size()); + + if (is_linear){ + MPI_Isend(sr.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, receiver, 7, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + MPI_Isend(sr.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, receiver, 8, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + MPI_Isend(sr.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, receiver, 9, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + MPI_Isend(sr.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, receiver, 10, mpi::intracomm, &requests[req_idx]); + req_idx ++; } - subdomain_map_[i] = rank; - sr_cnt++; - } + // printf("Send complete"); + + if (req_idx != num_requests){ + fatal_error(fmt::format("Number of MPI requests does not match number of messages sent." + "Check if num_vector_messages is up to date in DecompositionMap::transfer_sr_data().")); + } + + // Wait for all communication to complete + MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); + discovered_source_regions.erase(sr_key); + // printf("Source region erased from rank %d \n", sender); - // int start = mpi::rank * sr_per_rank; // + 1; //TODO: does cell ID numbering starts at 1 - // int end = (mpi::rank + 1) * sr_per_rank; // + 1; + } else if (mpi::rank == receiver){ - // printf("Rank %d: Handling source regions %d to %d\n", mpi::rank, start, end-1); + // printf("RANK %d: Source Region exists %d \n", mpi::rank, discovered_source_regions.contains(sr_key)); + + // printf("Energy groups: %d \n", negroups_); + + SourceRegion sr_recv(negroups_, is_linear); + + // sr_recv.scalar_flux_old_.resize(negroups_); + // sr_recv.scalar_flux_new_.resize(negroups_); + // sr_recv.source_.resize(negroups_); + // sr_recv.external_source_.resize(negroups_); + // sr_recv.scalar_flux_final_.resize(negroups_); + // if (is_linear){ + // sr_recv.source_gradients_.resize(negroups_); + // sr_recv.flux_moments_old_.resize(negroups_); + // sr_recv.flux_moments_new_.resize(negroups_); + // sr_recv.flux_moments_t_.resize(negroups_); + // } + + // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr_recv.scalar_flux_new_.size()); + + // Receive scalar data from sender + MPI_Recv(&sr_recv.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, sender, 1, mpi::intracomm, MPI_STATUS_IGNORE); + + // Receive vector data from sender + MPI_Recv(sr_recv.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, sender, 2, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, sender, 3, mpi::intracomm, MPI_STATUS_IGNORE); + + // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr_recv.scalar_flux_new_.size()); + + + MPI_Recv(sr_recv.source_.data(), negroups_, MPI_FLOAT, sender, 4, mpi::intracomm, MPI_STATUS_IGNORE); - // for (int i = start; i < end; i++) { - // // subdomain_map_[SourceRegionKey(i, 0)] = mpi::rank; - // subdomain_map_[i] = mpi::rank; + if (settings::run_mode == RunMode::FIXED_SOURCE) { + MPI_Recv(sr_recv.external_source_.data(), negroups_, MPI_FLOAT, sender, 5, mpi::intracomm, MPI_STATUS_IGNORE); + } + + MPI_Recv(sr_recv.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, sender, 6, mpi::intracomm, MPI_STATUS_IGNORE); + if (is_linear){ + MPI_Recv(sr_recv.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, sender, 7, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, sender, 8, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, sender, 9, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, sender, 10, mpi::intracomm, MPI_STATUS_IGNORE); + } + // // Merge source region data %TODO: is it OK to make this method of source region class? + // sr_recv.merge(sr, is_linear); + + // // clear old source region data from discovered regions map //TODO: deleting and replacing seems wasteful! + // discovered_source_regions.erase(sr_key); + + // printf("Source region received on rank %d \n", receiver); + // printf("RANK %d: Source Region exists %d \n", mpi::rank, discovered_source_regions.contains(sr_key)); + + // Merge source region data %TODO: is it OK to make this method of source region class? + sr.merge(sr_recv, is_linear); + // TODO: will this feed back automatically into discovered_source_regions? + + // // add new merged source region to discovered regions map + // discovered_source_regions.emplace(sr_key, sr_recv); + + } + + // // Wait for all communication to complete + // MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); + + // if (mpi::rank == sender){ + // // clear old source region data from discovered regions map + // discovered_source_regions.erase(sr_key); + // printf("Source region erased from rank %d \n", sender); // } + } -// Update subdomain list for each decomposition map. -void DecompositionMap::update(){ +// bool DecompositionMap::is_SRK_in_domain(SourceRegionKey sr_key, Position r){ +// bool is_in_my_subdomain = false; + +// // check if in subdomain +// if (subdomain_map_.find(sr_key) != subdomain_map_.end()){ +// if (subdomain_map_[sr_key] == mpi::rank){ +// is_in_my_subdomain = true; +// } +// // else check if already in discovered_regions_map +// } else if (discovered_regions_map_.find(sr_key) != discovered_regions_map_.end()){ +// if (discovered_regions_map_[sr_key] == mpi::rank){ +// is_in_my_subdomain = true; +// } +// // if not record in discovered_regions_map +// } else { +// is_in_my_subdomain = record_new_SRK(sr_key, r); +// } + +// return is_in_my_subdomain +// } - // Volume data needs to be moved around as well +// bool DecompositionMap::is_SRK_in_domain(SourceRegionKey sr_key, Position r, +// ParallelMap& +// discovered_source_regions){ +// // Check if SRK is in rank's subdomain +// auto it = subdomain_map_.find(sr_key); +// if (it != subdomain_map_.end()){ +// return it->second == mpi::rank; +// } + +// // Check if already recorded in newly discovered source regions +// if (discovered_source_regions.contains(sr_key)){ +// return true; +// } + +// // Check if this SRK has been marked as outside +// if (outside_source_regions_.find(sr_key) != outside_source_regions_.end()){ +// return false; +// } + +// // If not found in either map, check if my rank would own source +// // region beased on location +// bool is_in_my_subdomain = is_closest_rank(r); +// if (!is_in_my_subdomain){ +// // Record as outside source region key so that we don't have +// // to do this check again for this SRK +// outside_source_regions_.insert(sr_key); +// } +// return is_in_my_subdomain; +// } + +int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, + ParallelMap& + discovered_source_regions, int64_t ID){ //TODO: Remove ID + + // Check if SRK is in rank's subdomain + auto it = subdomain_map_.find(sr_key); + if (it != subdomain_map_.end()){ + // if (sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ + // printf("RANK %d: Identified owner of ray %ld at check 1 as rank %d\n", mpi::rank, ID, it->second); + // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); + // } + return it->second; + } + + // Check if already recorded in newly discovered source regions + discovered_source_regions.lock(sr_key); + bool sr_key_discovered = discovered_source_regions.contains(sr_key); + discovered_source_regions.unlock(sr_key); + if (sr_key_discovered){ + // if(sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ + // printf("RANK %d: Identified owner of ray %ld at check 2 as rank %d\n", mpi::rank, ID, mpi::rank); + // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); + // } + // printf("RANK %d: Identified owner at check 2 as rank %d\n", mpi::rank, mpi::rank); + return mpi::rank; + } + + // // Check if this SRK has been marked as outside //TODO: This can create problems + // if (outside_source_regions_.find(sr_key) != outside_source_regions_.end()){ + // if (sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ + // printf("RANK %d: Identified owner of ray %ld at check 3 as rank %d\n", mpi::rank, ID, outside_source_regions_[sr_key]); + // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); + // } + // // printf("RANK %d: Identified owner at check 3 as rank %d\n", mpi::rank, outside_source_regions_[sr_key]); + // return outside_source_regions_[sr_key]; + // } + + // If not found in either map, check if my rank would own source + // region beased on location + int closest_rank = find_closest_rank(r); + // if (closest_rank != mpi::rank){ //TODO: This creates problems + // // Record as outside source region so that we don't have + // // to do this check again for this SRK + // outside_source_regions_[sr_key] = closest_rank; + // } + // if (sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ + // printf("RANK %d: Identified owner of ray %ld at check 4 as rank %d\n", mpi::rank, ID, closest_rank); + // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); + // } + // printf("RANK %d: Identified owner at check 4 as rank %d\n", mpi::rank, closest_rank); + return closest_rank; } -// bool DecompositionMap::is_SRK_in_domain(SourceRegionKey sr_key){ -bool DecompositionMap::is_SRK_in_domain(int sr_key){ - if (subdomain_map_.find(sr_key) != subdomain_map_.end()){ - if (subdomain_map_[sr_key] == mpi::rank){ - return true; - } else { - return false; +// void DecompositionMap::is_SRK_in_domain(SourceRegionKey sr_key, bool& is_in_map, bool& is_in_my_subdomain){ +// if (subdomain_map_.find(sr_key) != subdomain_map_.end()){ +// if (subdomain_map_[sr_key] == mpi::rank){ +// is_in_map = true; +// is_in_my_subdomain = true; +// } else { +// is_in_map = true; +// // is_in_my_subdomain = false; +// } +// } // else { +// // is_in_map = false; +// // is_in_my_subdomain = false; +// // } +// } + +// bool DecompositionMap::record_new_SRK(SourceRegionKey sr_key, Position r) { +// // Determine which rank the position belongs to +// int closest_rank = C_NONE; +// double min_distance = INFTY; + +// // Find closest rank center +// for (int rank = 0; rank < mpi::n_procs; rank++) { +// double dist = (r - rank_centers_[rank]).norm(); +// if (dist < min_distance) { +// min_distance = dist; +// closest_rank = rank; +// } +// } + +// if (mpi::master && closest_rank == C_NONE) { +// fatal_error("Could not find closest rank for new source region " +// + std::to_string(sr_key.base_source_region_id) +// + ", " + std::to_string(sr_key.mesh_bin) + " at position (" +// + std::to_string(r.x) + ", " + std::to_string(r.y) + ", " + std::to_string(r.z) + ")."); +// } + +// //TODO: can discovered_source_regions_ be re-used, so that I avoid using additional map? +// // Record in subdomain map +// discovered_regions_map_[sr_key] = closest_rank; + +// // check whether it belongs to this rank's subdomain +// bool is_in_my_subdomain = (closest_rank == mpi::rank); +// return is_in_my_subdomain; +// } + +// bool DecompositionMap::is_closest_rank(Position r) { +int DecompositionMap::find_closest_rank(Position r) { + // Determine which rank the position belongs to + int closest_rank = C_NONE; + double min_distance = INFTY; + + // Find closest rank center + for (int rank = 0; rank < mpi::n_procs; rank++) { + double dist = (r - rank_centers_[rank]).norm(); + if (dist < min_distance) { + min_distance = dist; + closest_rank = rank; + } + } + + if (mpi::master && closest_rank == C_NONE) { + fatal_error("Could not find closest rank for new source region at position (" + + std::to_string(r.x) + ", " + std::to_string(r.y) + ", " + std::to_string(r.z) + ")."); + } + + // check whether it belongs to this rank's subdomain + // bool is_in_my_subdomain = (closest_rank == mpi::rank); + // return is_in_my_subdomain; + return closest_rank; +} + +void DecompositionMap::calculate_rank_load(uint64_t total_geometric_intersections){ + + // Reset rank load + std::fill(rank_load_.begin(), rank_load_.end(), 0.0); + + // Temporary print-outs + if (mpi::master) { + printf("Load distribution: "); + } + + // Calculate rank load based on number of geometric intersections + uint64_t total_geometric_intersections_sum = 0; + MPI_Allreduce(&total_geometric_intersections, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); + double load = (total_geometric_intersections/static_cast(total_geometric_intersections_sum))*100.0; + + for (int rank = 0; rank < mpi::n_procs; rank++) { + // Broadcast load + double bcast_load = 0.0; + if (rank == mpi::rank) { + bcast_load = load; + } + MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); + rank_load_[rank] = bcast_load; + // Temporary print-outs + if (mpi::master) { + printf("RANK %d: %.2f%% ", rank, rank_load_[rank]); } - } else { - return false; + } + // Temporary print-outs + if (mpi::master) { + printf("\n"); } } -// int DecompositionMap::n_source_regions(){ -// int count = 0; +// void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ + +// // Reset rank load +// std::fill(rank_load_.begin(), rank_load_.end(), 0.0); + +// // Add number of hits for each source region by going through all exisiting source regions. +// int64_t n_hits_rank = 0; -// for (const auto& [key, val] : subdomain_map_) { -// if (val == mpi::rank) { -// count++; +// // add source region hits +// #pragma omp parallel for reduction(+ : n_hits_rank) +// for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { +// n_hits_rank += domain->source_regions_.n_hits(sr); // } + +// // add newly discovered source region hits +// for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { +// n_hits_rank += sr.scalars_.n_hits_; // } -// return count; +// // source_region_map_ +// // Temporary print-outs +// if (mpi::master) { +// printf("Load distribution: "); +// } + +// // Calculate rank load based on number of geometric intersections +// uint64_t n_hits_total = 0; +// MPI_Allreduce(&n_hits_rank, &n_hits_total, 1, MPI_INT64_T, MPI_SUM, mpi::intracomm); +// double load = (n_hits_rank/static_cast(n_hits_total))*100.0; + +// if(mpi::master){ +// printf("Total hits: %ld \n", n_hits_total); +// } + +// for (int rank = 0; rank < mpi::n_procs; rank++) { +// // Broadcast load +// double bcast_load = 0.0; +// if (rank == mpi::rank) { +// bcast_load = load; +// } +// MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); +// rank_load_[rank] = bcast_load; +// // Temporary print-outs +// if (mpi::master) { +// printf("RANK %d: %.2f%% ", rank, rank_load_[rank]); +// } +// } +// // Temporary print-outs +// if (mpi::master) { +// printf("\n"); +// } // } -}// namespace openmc +}// namespace openmc \ No newline at end of file diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 75f59282cc9..6a2d01b6334 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -1053,7 +1053,7 @@ void FlatSourceDomain::output_to_vtk_decomp() const // Relate voxel spatial locations to random ray source regions vector voxel_indices(Nx * Ny * Nz); - vector voxel_indices_key(Nx * Ny * Nz); + // vector voxel_indices_key(Nx * Ny * Nz); vector voxel_positions(Nx * Ny * Nz); vector weight_windows(Nx * Ny * Nz); vector my_voxel_ids; @@ -1075,7 +1075,7 @@ void FlatSourceDomain::output_to_vtk_decomp() const bool found = exhaustive_find_cell(p); if (!found) { - voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1,-1}; + // voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1,-1}; voxel_indices[z * Ny * Nx + y * Nx + x] = -1; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; weight_windows[z * Ny * Nx + y * Nx + x] = 0.0; @@ -1102,14 +1102,14 @@ void FlatSourceDomain::output_to_vtk_decomp() const } } - voxel_indices_key[z * Ny * Nx + y * Nx + x] = sr_key; + // voxel_indices_key[z * Ny * Nx + y * Nx + x] = sr_key; voxel_indices[z * Ny * Nx + y * Nx + x] = sr; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; // Assumed master rank = 0 int assigned_rank = 0; // Which rank is responsible - auto it = mpi::decomp_map.subdomain_map_.find(sr_key.base_source_region_id); + auto it = mpi::decomp_map.subdomain_map_.find(sr_key); if (it != mpi::decomp_map.subdomain_map_.end()){ assigned_rank = it->second; } @@ -1954,7 +1954,7 @@ void FlatSourceDomain::finalize_discovered_source_regions() // Extract keys for entries with a valid volume. vector keys; for (const auto& pair : discovered_source_regions_) { - if (pair.second.volume_ > 0.0) { + if (pair.second.scalars_.volume_ > 0.0) { keys.push_back(pair.first); } } diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 18cc44bcf1d..54c65057c87 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -269,8 +269,9 @@ uint64_t RandomRay::transport_history_based_single_ray() { using namespace openmc; while (alive()) { - // if (simulation::current_batch == 30){ - // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travlled: %f\n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_);} + // if (id() == 1083){ + // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); + // } event_advance_ray(); if (!alive()) break; @@ -323,10 +324,25 @@ void RandomRay::event_advance_ray() attenuate_flux(distance_dead); is_active_ = true; + distance_travelled_ = 0.0; //TODO: This is probably not very nice here. + + // if (id() == 1083){ + // printf("RANK %d: Stop between inactive and active \n", mpi::rank); + // } + if (has_left_subdomain()) { + // exchange_data_.distance_travelled = 0.0; //TODO: maybe additional flag is better? + // if (simulation::current_batch == 25) { + // printf("RANK %d: distance travelled: %f \n", mpi::rank, exchange_data_.distance_travelled); + // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); + // } return; } + // if (simulation::current_batch == 25){ + // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); + // } + double distance_alive = distance - distance_dead; // Ensure we haven't travelled past the active phase as well @@ -391,15 +407,29 @@ void RandomRay::attenuate_flux(double distance, double offset) mesh_fractional_lengths_.resize(0); mesh->bins_crossed(start, end, u(), mesh_bins_, mesh_fractional_lengths_); + // if (simulation::current_batch == 25) { + // printf("Start: %f, %f, %f \n", start.x, start.y, start.z); + // printf("End: %f, %f, %f \n", end.x, end.y, end.z); + // printf("Distance: %f \n", reduced_distance); + // printf("Mesh bin size: %ld \n", mesh_bins_.size()); + // } + // Loop over all mesh bins and attenuate flux for (int b = 0; b < mesh_bins_.size(); b++) { double physical_length = reduced_distance * mesh_fractional_lengths_[b]; attenuate_flux_inner( physical_length, sr, mesh_bins_[b], start); + + // if (sr == 134 && mesh_bins_[b] == 64056){ + // printf("RANK %d: Start (%f, %f, %f) \n", mpi::rank, start.x, start.y, start.z); + // Position test = start - u() * TINY_BIT; + // printf("RANK %d: Corrected start (%f, %f, %f) \n", mpi::rank, test.x, test.y, test.z); + // } start += physical_length * u(); - // if (simulation::current_batch == 30) { - // printf("RANK %d: Source region %ld, mesh bin %d\n", mpi::rank, sr, mesh_bins_[b]);} + // if (id() == 1083){ + // printf("RANK %d: Source region %ld, mesh bin %d\n", mpi::rank, sr, mesh_bins_[b]); + // } // If ray has left my subdomain, stop transport // and correct position @@ -427,27 +457,75 @@ void RandomRay::attenuate_flux(double distance, double offset) // If ray has left my subdomain, buffer ray state // if(has_left_subdomain() && !is_buffered_) { if(has_left_subdomain()) { - // if (simulation::current_batch == 30) { - // printf("RANK %d: buffering \n", mpi::rank);} + // if (id() == 1083){ + // printf("RANK %d: buffering, new owner %d \n", mpi::rank, owner_rank_); + // printf("RANK %d: distance travelled old: %f, offset: %f, mesh_partial_length: %f \n", mpi::rank, distance_travelled_, offset, mesh_partial_length); + // } Position position_buffer = r() + (offset + mesh_partial_length) * u(); - double distance_buffer = distance_travelled_ + offset + mesh_partial_length; + double distance_buffer = distance_travelled_ + mesh_partial_length; + // double distance_buffer = distance_travelled_ + offset + mesh_partial_length; pack_ray_for_buffer(distance_buffer, position_buffer, SourceRegionKey(sr, mesh_bin), sr); wgt() = 0.0; + // if (sr == 134 && mesh_bin == 64056){ + // printf("RANK %d: Buffered (%f, %f, %f) \n", mpi::rank, position_buffer.x, position_buffer.y, position_buffer.z); + // } + // if (simulation::current_batch == 25) { + // printf("RANK %d: distance travelled new: %f %f \n", mpi::rank, distance_buffer, exchange_data_.distance_travelled); + // } } } void RandomRay::attenuate_flux_inner( - double distance, int64_t sr, int mesh_bin, Position r) + double distance, int64_t sr, int mesh_bin, Position r) //, double mesh_width) { - // Check if SR belongs to my subdomain. - // If not, buffer ray, set wgt to zero and leave function. - bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(sr); - // bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin)); - if (!is_in_my_subdomain) { + // Check if source region is in subdomain_map. //TODO: only when MPIactive? + // If so, check if it is in this rank's subdomain. If it is in another rank's + // subdomain, mark as not local and leave function. + // bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin), r); + // bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin), r, + // domain_->discovered_source_regions_); + // printf("Rank %d checking ownership of SRK (%ld, %ld)\n", mpi::rank, sr, mesh_bin); + + int owner = mpi::rank; + + if (mpi::n_procs > 1){ //TODO: is this if condition necessary? + Position midpoint = r + u() * (distance / 2.0); + owner = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), midpoint, + domain_->discovered_source_regions_, id()); + } + + // if (!is_in_my_subdomain) { + if (owner != mpi::rank) { is_local_ = false; + owner_rank_ = owner; return; } + // bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin)); + // bool is_in_map = false; + // bool is_in_my_subdomain = false; + // // mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin), Position r); + + // mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin), is_in_map, is_in_my_subdomain); + + // if (!is_in_my_subdomain) { + // if(is_in_map){ + // // if is not in subdomain but in map mark as not local and stop attenuate + // is_local_ = false; + // return; + // } else { + // // if region has not been recorded yet, check which rank the current position belongs to. + // is_in_my_subdomain = mpi::decomp_map.record_new_SRK(SourceRegionKey(sr, mesh_bin), r); + // // discovered_new_SRK_ = true; + // if (!is_in_my_subdomain) { + // is_local_ = false; + // return; + // } + // } + // } + + // if ray is in subdomain continue as normal + SourceRegionHandle srh; if (mesh_subdivision_enabled_) { srh = domain_->get_subdivided_source_region_handle( @@ -834,6 +912,7 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData data, vect domain_ = domain; distance_travelled_ = data.distance_travelled; + owner_rank_ = mpi::rank; // Reset particle event counter. I read out intersections after each ray transport, // so the reset to zero after transmission between ranks should be OK here. @@ -854,6 +933,10 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData data, vect // Set location and direction as in previous subdomain site.r = data.position; + // if (id() == 2){ + // printf("RANK %d: Restart ray, position: %f, %f, %f\n", mpi::rank, site.r.x, site.r.y, site.r.z); + // } + // angle site.u = data.direction; @@ -891,7 +974,7 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData data, vect angular_flux_[g] = angular_flux[g]; } - // printf(" Restart: ray %ld, position: %f, %f, %f, angular flux: %f, distance travlled: %f, rank %d\n", id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, mpi::rank); + // printf("RANK %d: Restart ray %ld, position: %f, %f, %f, angular flux: %f, distance travlled: %f, rank %d\n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, mpi::rank); } @@ -899,6 +982,8 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) { domain_ = domain; + owner_rank_ = mpi::rank; + // Reset particle event counter n_event() = 0; @@ -1028,6 +1113,7 @@ void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_bu exchange_data_.sr = sr; exchange_data_.is_active = is_active_; exchange_data_.ray_id = id(); +// exchange_data_.receiving_rank = owner_rank_; // is_buffered_ = true; } diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index fa55288f9f1..631b54beadf 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -64,8 +64,10 @@ void openmc_run_random_ray() sim.apply_fixed_sources_and_mesh_domains(); // Initialize subdomains for MPI ranks + simulation::time_decomposition_handling.start(); mpi::decomp_map.generate_rank_centers(); - mpi::decomp_map.create(sim.domain()); + // mpi::decomp_map.create(sim.domain()); + simulation::time_decomposition_handling.stop(); // Begin main simulation timer simulation::time_total.start(); @@ -144,6 +146,9 @@ void openmc_run_random_ray() // Output all simulation results adjoint_sim.output_simulation_results(); } + + printf("Finished adjoint simulation\n"); + } // Enforces restrictions on inputs in random ray mode. While there are @@ -456,17 +461,53 @@ void RandomRaySimulation::simulate() domain_->prepare_base_source_regions(); } + // printf("Rank %d Test1 \n", mpi::rank); + // Transport sweep over all random rays for the iteration if (mpi::n_procs > 1){ + + // printf("1: Rank %d Starting transport sweep \n", mpi::rank); transport_sweep_decomp(RB); + // printf("2: Rank %d Ended transport sweep \n", mpi::rank); + + // bool test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); + // printf("2 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + + // bool test2 = false; + // if(domain_->source_region_map_.find(SourceRegionKey(4, 104171)) != domain_->source_region_map_.end()){ + // test2 = true; + // } + // printf("2 RANK %d: Source region (4, 104171) in main map? %d \n", mpi::rank, test2); + // if (test) { + // SourceRegion& sr = domain_->discovered_source_regions_[SourceRegionKey(4, 104171)]; + // printf("RANK %d: volume: %f\n", mpi::rank, sr.scalars_.volume_); + // } + + // Update decomposition map with newly discovered source regions + simulation::time_decomposition_handling.start(); + mpi::decomp_map.update(domain_->discovered_source_regions_); + simulation::time_decomposition_handling.stop(); + // printf("3: Rank %d Updated decomp map \n", mpi::rank); + } else { transport_sweep(); } - // Update decomposition map with newly discovered source regions - simulation::time_decomposition_handling.start(); - mpi::decomp_map.update(); - simulation::time_decomposition_handling.stop(); + // printf("Rank %d Test6 \n", mpi::rank); + + // bool test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); + // printf("3 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + // if (test) { + // SourceRegion& sr = domain_->discovered_source_regions_[SourceRegionKey(4, 104171)]; + // printf("RANK %d: volume: %f\n", mpi::rank, sr.scalars_.volume_); + // } + + + // bool test2 = false; + // if(domain_->source_region_map_.find(SourceRegionKey(4, 104171)) != domain_->source_region_map_.end()){ + // test2 = true; + // } + // printf("3 RANK %d: Source region (4, 104171) in main map? %d \n", mpi::rank, test2); // If using mesh subdivision, add any newly discovered source regions // to the main source region container. @@ -474,6 +515,15 @@ void RandomRaySimulation::simulate() domain_->finalize_discovered_source_regions(); } + // test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); + // printf("4 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + + // test2 = false; + // if(domain_->source_region_map_.find(SourceRegionKey(4, 104171)) != domain_->source_region_map_.end()){ + // test2 = true; + // } + // printf("4 RANK %d: Source region (4, 104171) in main map? %d \n", mpi::rank, test2); + // Normalize scalar flux and update volumes domain_->normalize_scalar_flux_and_volumes( settings::n_particles * RandomRay::distance_active_); @@ -585,6 +635,8 @@ void RandomRaySimulation::instability_check( if (mpi::n_procs > 1){ // Reduce n_hits and n_source_regions on master rank to compute // global miss rate + // printf("RANK %d: n_hits: %ld, n_source_regions: %ld \n", mpi::rank, n_hits, n_source_regions); + simulation::time_decomposition_handling.stop(); if (mpi::master) { MPI_Reduce(MPI_IN_PLACE, &n_hits, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); @@ -597,6 +649,8 @@ void RandomRaySimulation::instability_check( } if (mpi::master) { + // printf("TOTAL: n_hits: %ld, n_source_regions: %ld \n", n_hits, n_source_regions); + double percent_missed = ((n_source_regions - n_hits) / static_cast(n_source_regions)) * 100.0; @@ -779,27 +833,45 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } } + // printf("RANK %d: Ray bank contains %d rays \n", mpi::rank, RB.ray_bank_size()); + int num_comms = 0; bool keep_running = true; + // if (simulation::current_batch == 2){ + // printf("Rank %d Starting transport sweep with %d rays \n", mpi::rank, RB.ray_bank_size()); + // } + // printf("Rank %d Test2 \n", mpi::rank); + + // Move rays across ranks until they are terminated while (keep_running) { // Start timer for transport simulation::time_transport.start(); + // printf("RANK %d: Starting transport sweep with %d rays \n", mpi::rank, RB.ray_bank_size()); + #pragma omp parallel for schedule(dynamic) \ reduction(+ : total_geometric_intersections_) for (int i = 0; i < RB.ray_bank_size(); i++) { RandomRay& ray = RB.my_ray_list_[i]; total_geometric_intersections_ += ray.transport_history_based_single_ray(); + // printf("RANK %d: Transported ray %ld \n", mpi::rank, ray.id()); + + // printf("RANK %d: Transport of ray %d complete, new owner: %d \n", mpi::rank, i, ray.owner_rank_); + // If ray has left my subdomain, buffer ray state if(ray.has_left_subdomain()){ #pragma omp critical (raybuffer) { + // printf("RANK %d: Buffering ray %d, new owner: %d \n", mpi::rank, i, ray.owner_rank_); + // printf("Rank %d Test2.2 \n", mpi::rank); simulation::time_ray_buffering.start(); + num_ray_crossings_ += 1; RB.buffer_ray_data_to_send(ray, domain_.get()); simulation::time_ray_buffering.stop(); + // printf("Rank %d Test2.3 \n", mpi::rank); } } } @@ -807,38 +879,54 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // Remove dead rays and move rays across subdomains between ranks simulation::time_decomposition_handling.start(); + + // Check if new source regions were discovered and add them to subdomain map + // if (mpi::decomp_map.new_sr_discovered()){ + // mpi::decomp_map.exchange_sr_info() + // } + + // printf("Rank %d Test3 \n", mpi::rank); + + // if (simulation::current_batch == 2){ + // printf("Rank %d Completed transport of %d rays \n", mpi::rank, RB.ray_bank_size()); + // } + + // printf("RANK %d: Update ray bank \n", mpi::rank); RB.update(domain_.get()); + + // bool test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); + // printf("1 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); + + // bool test2 = false; + // if(domain_->source_region_map_.find(SourceRegionKey(4, 104171)) != domain_->source_region_map_.end()){ + // test2 = true; + // } + // printf("1 RANK %d: Source region (4, 104171) in main map? %d \n", mpi::rank, test2); + + + // if (simulation::current_batch == 2){ + // printf("Rank %d Completed send/recv, now has %d rays \n", mpi::rank, RB.ray_bank_size()); + // } + + // printf("Rank %d Test4 \n", mpi::rank); keep_running = RB.is_any_ray_alive(); num_comms ++; simulation::time_decomposition_handling.stop(); } - simulation::time_decomposition_handling.start(); + // printf("Rank %d Test5 \n", mpi::rank); - // Temporary diagnostics data - uint64_t total_geometric_intersections_sum = 0; + simulation::time_decomposition_handling.start(); if (mpi::master) { printf("Max subdomain crossings: %d\n", num_comms); - printf("Load distribution: "); + printf("Number of ray crossings: %ld\n", num_ray_crossings_); } - MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); - double load = (total_geometric_intersections_/static_cast(total_geometric_intersections_sum))*100.0; - - // send load data to master rank (rank 0) - if (mpi::master) { - printf("RANK %d: %.2f%%, ", 0, load); - for (int i = 1; i < mpi::n_procs-1; i++) { - MPI_Recv(&load, 1, MPI_DOUBLE, i, 1, mpi::intracomm, MPI_STATUS_IGNORE); - printf("RANK %d: %.2f%%, ", i, load); - } - MPI_Recv(&load, 1, MPI_DOUBLE, mpi::n_procs-1, 1, mpi::intracomm, MPI_STATUS_IGNORE); - printf("RANK %d: %.2f%%\n", mpi::n_procs-1, load); - } else { - MPI_Send(&load, 1, MPI_DOUBLE, 0, 1, mpi::intracomm); - } + // Calculate load per rank based on geometric intersections + mpi::decomp_map.calculate_rank_load(total_geometric_intersections_); + // mpi::decomp_map.calculate_rank_load(domain_.get()); avg_num_comms_ += num_comms; diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index d6efe65bdaf..bcaf2e78585 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -24,34 +24,66 @@ void RayBank::add_ray_to_bank(RandomRay& ray){ void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ // Read source region key from ray - // SourceRegionKey sr_key = ray.exchange_data_.sr_key; - int sr_key = ray.exchange_data_.sr; + SourceRegionKey sr_key = ray.exchange_data_.sr_key; //TODO: SRK might not actually need to be buffered + // int sr_key = ray.exchange_data_.sr; // Get rank to send ray to - int rank; - - if (mpi::decomp_map.subdomain_map_.find(sr_key) != mpi::decomp_map.subdomain_map_.end()){ - rank = mpi::decomp_map.subdomain_map_[sr_key]; - } else { - std::string err_msg = "ERROR: Source region key " + std::to_string(sr_key) + - " not found in decomposition map for ray " + - std::to_string(ray.exchange_data_.ray_id) + " at position: (" + - std::to_string(ray.exchange_data_.position.x) + ", " + - std::to_string(ray.exchange_data_.position.y) + ", " + - std::to_string(ray.exchange_data_.position.z) + ")."; - fatal_error(err_msg); + int rank = ray.owner_rank_; + + // printf("RANK %d: Put ray %ld into map, new owner: %d, %d \n", mpi::rank, ray.exchange_data_.ray_id, ray.owner_rank_, rank); + + if (rank == mpi::rank){ + warning(fmt::format( + "Ray {} at position ({:.5e}, {:.5e}, {:.5e}) in source region key ({}, {})" + "is being sent to the same rank {}. This may indicate an error in the decomposition map." + , ray.exchange_data_.ray_id, ray.exchange_data_.position.x, ray.exchange_data_.position.y, ray.exchange_data_.position.z, + sr_key.base_source_region_id, sr_key.mesh_bin, rank)); + // warning("Ray {} at position ({:.5e}, {:.5e}, {:.5e}) in source region key ({}, {}) is being sent to the same rank {}. This may indicate an error in the decomposition map.", + // ray.exchange_data_.ray_id, ray.exchange_data_.position.x, ray.exchange_data_.position.y, ray.exchange_data_.position.z, + // sr_key.base_source_region_id, sr_key.mesh_bin, rank); } + // if (mpi::decomp_map.subdomain_map_.find(sr_key) != mpi::decomp_map.subdomain_map_.end()){ + // rank = mpi::decomp_map.subdomain_map_[sr_key]; + // } else { + // std::string err_msg = "ERROR: Source region key " + std::to_string(sr_key.base_source_region_id) + + // "," + std::to_string(sr_key.mesh_bin) + + // " not found in decomposition map for ray " + + // std::to_string(ray.exchange_data_.ray_id) + " at position: (" + + // std::to_string(ray.exchange_data_.position.x) + ", " + + // std::to_string(ray.exchange_data_.position.y) + ", " + + // std::to_string(ray.exchange_data_.position.z) + ")."; + // fatal_error(err_msg); + // } + // Add ray data to buffer ray_send_buffer_[rank].push_back(ray.exchange_data_); + + // for (auto& [rank, rays] : ray_send_buffer_) { + // for (int r = 0; r < rays.size(); r++){ + // printf("RANK %d: 1: Buffered ray ID %ld to be sent to rank: %d \n", mpi::rank, rays[r].ray_id, rank); + // } + // } } // Update ray bank void RayBank::update(FlatSourceDomain* domain){ + // for (auto& [rank, rays] : ray_send_buffer_) { + // for (int r = 0; r < rays.size(); r++){ + // printf("RANK %d: 2: Buffered ray ID %ld to be sent to rank: %d \n", mpi::rank, rays[r].ray_id, rank); + // } + // } + // Empty ray list because rays have either died or are in buffer to be sent to other ranks reset_my_ray_list(); + // for (auto& [rank, rays] : ray_send_buffer_) { + // for (int r = 0; r < rays.size(); r++){ + // printf("RANK %d: 3: Buffered ray ID %ld to be sent to rank: %d \n", mpi::rank, rays[r].ray_id, rank); + // } + // } + // Communicate how many rays will be sent to each rank communicate_message_metadata(); @@ -90,6 +122,9 @@ void RayBank::communicate_message_metadata() { for (auto& [rank, rays] : ray_send_buffer_) { num_messages_sending[rank] = rays.size(); total_sending_rays_ += num_messages_sending[rank]; + // for (int r = 0; r < rays.size(); r++){ + // printf("RANK %d: Metadata, ray ID %ld to be sent to rank: %d \n", mpi::rank, rays[r].ray_id, rank); + // } } // Exchange message counts with all ranks @@ -150,6 +185,7 @@ void RayBank::communicate_rays(){ angular_flux_data[(vector_send_idx + i) * negroups_ + g] = rays[i].angular_flux[g]; } } + // printf("RANK %d: Sending ray %ld to rank: %d \n", mpi::rank, ray_data[vector_send_idx].ray_id, receiving_rank); MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); MPI_Isend(&angular_flux_data[vector_send_idx * negroups_], num_rays_sending * negroups_, MPI_FLOAT, receiving_rank, 2, mpi::intracomm, &requests[req_idx+1]); @@ -165,6 +201,7 @@ void RayBank::communicate_rays(){ if (num_rays_receiving == 0) continue; MPI_Recv(&received_ray_data_[vector_receive_idx], num_rays_receiving * sizeof(RayExchangeData), MPI_BYTE, sending_rank, 1, mpi::intracomm, MPI_STATUS_IGNORE); MPI_Recv(&received_angular_flux_data_[vector_receive_idx * negroups_], num_rays_receiving * negroups_, MPI_FLOAT, sending_rank, 2, mpi::intracomm, MPI_STATUS_IGNORE); + // printf("RANK %d: Receiving ray %ld from rank: %d \n", mpi::rank, received_ray_data_[vector_receive_idx].ray_id, sending_rank); vector_receive_idx += num_rays_receiving; } @@ -199,18 +236,37 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ } -bool RayBank::is_any_ray_alive() { +// bool RayBank::is_any_ray_alive() { - int global_rays_alive = 0; - int local_rays_alive = ray_bank_size(); - MPI_Allreduce(&local_rays_alive, &global_rays_alive, 1, MPI_INT, MPI_SUM, mpi::intracomm); +// int global_rays_alive = 0; +// int local_rays_alive = ray_bank_size(); +// //TODO: maybe this can be optimised, such that if local_rays_alive > 0, +// // we don't need to do MPI_Allreduce. But maybe Allreduce does not matter +// // because they will be synchronised anyway. +// MPI_Allreduce(&local_rays_alive, &global_rays_alive, 1, MPI_INT, MPI_SUM, mpi::intracomm); - if (global_rays_alive > 0){ - return true; - } else { - return false; - } +// if (global_rays_alive > 0){ +// return true; +// } else { +// return false; +// } + +// } + +bool RayBank::is_any_ray_alive(){ + int local_rays_alive = ray_bank_size(); + int flag = 0; + if (local_rays_alive > 0) { + flag = 1; + } + + //TODO: maybe this can be optimised, such that if local_rays_alive > 0, + // we don't need to do MPI_Allreduce. But maybe Allreduce does not matter + // because they will be synchronised anyway. + MPI_Allreduce(MPI_IN_PLACE, &flag, 1, MPI_INT, MPI_MAX, mpi::intracomm); + + return flag > 0; } }// namespace openmc diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index 1205b995a6f..64a882055d1 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -10,18 +10,18 @@ namespace openmc { // SourceRegionHandle implementation //============================================================================== SourceRegionHandle::SourceRegionHandle(SourceRegion& sr) - : negroups_(sr.scalar_flux_old_.size()), material_(&sr.material_), - is_small_(&sr.is_small_), n_hits_(&sr.n_hits_), + : negroups_(sr.scalar_flux_old_.size()), material_(&sr.scalars_.material_), + is_small_(&sr.scalars_.is_small_), n_hits_(&sr.scalars_.n_hits_), is_linear_(sr.source_gradients_.size() > 0), lock_(&sr.lock_), - volume_(&sr.volume_), volume_t_(&sr.volume_t_), volume_sq_(&sr.volume_sq_), - volume_sq_t_(&sr.volume_sq_t_), volume_naive_(&sr.volume_naive_), - position_recorded_(&sr.position_recorded_), - external_source_present_(&sr.external_source_present_), - position_(&sr.position_), centroid_(&sr.centroid_), - centroid_iteration_(&sr.centroid_iteration_), centroid_t_(&sr.centroid_t_), - mom_matrix_(&sr.mom_matrix_), mom_matrix_t_(&sr.mom_matrix_t_), - volume_task_(&sr.volume_task_), mesh_(&sr.mesh_), - parent_sr_(&sr.parent_sr_), scalar_flux_old_(sr.scalar_flux_old_.data()), + volume_(&sr.scalars_.volume_), volume_t_(&sr.scalars_.volume_t_), volume_sq_(&sr.scalars_.volume_sq_), + volume_sq_t_(&sr.scalars_.volume_sq_t_), volume_naive_(&sr.scalars_.volume_naive_), + position_recorded_(&sr.scalars_.position_recorded_), + external_source_present_(&sr.scalars_.external_source_present_), + position_(&sr.scalars_.position_), centroid_(&sr.scalars_.centroid_), + centroid_iteration_(&sr.scalars_.centroid_iteration_), centroid_t_(&sr.scalars_.centroid_t_), + mom_matrix_(&sr.scalars_.mom_matrix_), mom_matrix_t_(&sr.scalars_.mom_matrix_t_), + volume_task_(&sr.volume_task_), mesh_(&sr.scalars_.mesh_), + parent_sr_(&sr.scalars_.parent_sr_), scalar_flux_old_(sr.scalar_flux_old_.data()), scalar_flux_new_(sr.scalar_flux_new_.data()), source_(sr.source_.data()), external_source_(sr.external_source_.data()), scalar_flux_final_(sr.scalar_flux_final_.data()), @@ -63,22 +63,65 @@ SourceRegion::SourceRegion(int negroups, bool is_linear) SourceRegion::SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr) : SourceRegion(handle.negroups_, handle.is_linear_) { - material_ = handle.material(); - mesh_ = handle.mesh(); - parent_sr_ = parent_sr; + scalars_.material_ = handle.material(); + scalars_.mesh_ = handle.mesh(); + scalars_.parent_sr_ = parent_sr; for (int g = 0; g < scalar_flux_new_.size(); g++) { scalar_flux_old_[g] = handle.scalar_flux_old(g); source_[g] = handle.source(g); } if (settings::run_mode == RunMode::FIXED_SOURCE) { - external_source_present_ = handle.external_source_present(); + scalars_.external_source_present_ = handle.external_source_present(); for (int g = 0; g < scalar_flux_new_.size(); g++) { external_source_[g] = handle.external_source(g); } } } +// combine two source regions from different ranks together +void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) { + + // printf("RANK %d: Test 1\n", mpi::rank); + + // scalar fields + scalars_.volume_ += sr_add.scalars_.volume_; + scalars_.volume_sq_ += sr_add.scalars_.volume_sq_; + scalars_.volume_naive_ += sr_add.scalars_.volume_naive_; + scalars_.n_hits_ += sr_add.scalars_.n_hits_; + scalars_.external_source_present_ = std::max(scalars_.external_source_present_, sr_add.scalars_.external_source_present_); + if (is_linear) { + scalars_.centroid_iteration_ += sr_add.scalars_.centroid_iteration_; + scalars_.mom_matrix_ += sr_add.scalars_.mom_matrix_; + } + + // printf("RANK %d: Test 2\n", mpi::rank); + // printf("Size scalar flux new %lu \n", scalar_flux_new_.size()); + + // vector fields + // #pragma omp simd //TODO: check if this is safe + for (int g = 0; g < scalar_flux_new_.size(); g++) { + // printf("RANK %d: Test 2.1\n", mpi::rank); + // printf("1 Size scalar flux new %lu \n", sr_add.scalar_flux_new_.size()); + scalar_flux_new_[g] += sr_add.scalar_flux_new_[g]; + // printf("0 Size scalar flux new %lu \n", scalar_flux_new_.size()); + // printf("1 Size scalar flux new %lu \n", sr_add.scalar_flux_new_.size()); + scalar_flux_final_[g] += sr_add.scalar_flux_final_[g]; + // printf("2 Size scalar flux new %lu \n", sr_add.scalar_flux_final_.size()); + if (settings::run_mode == RunMode::FIXED_SOURCE) { + external_source_[g] += sr_add.external_source_[g]; + // printf("3 Size scalar flux new %lu \n", sr_add.external_source_.size()); + } + // printf("is linear %d \n", is_linear); + if (is_linear) { + flux_moments_new_[g] += sr_add.flux_moments_new_[g]; + } + } + + // printf("RANK %d: Test 3\n", mpi::rank); + +} + //============================================================================== // SourceRegionContainer implementation //============================================================================== @@ -88,29 +131,29 @@ void SourceRegionContainer::push_back(const SourceRegion& sr) n_source_regions_++; // Scalar fields - material_.push_back(sr.material_); - is_small_.push_back(sr.is_small_); - n_hits_.push_back(sr.n_hits_); + material_.push_back(sr.scalars_.material_); + is_small_.push_back(sr.scalars_.is_small_); + n_hits_.push_back(sr.scalars_.n_hits_); lock_.push_back(sr.lock_); - volume_.push_back(sr.volume_); - volume_t_.push_back(sr.volume_t_); - volume_sq_.push_back(sr.volume_sq_); - volume_sq_t_.push_back(sr.volume_sq_t_); - volume_naive_.push_back(sr.volume_naive_); - position_recorded_.push_back(sr.position_recorded_); - external_source_present_.push_back(sr.external_source_present_); - position_.push_back(sr.position_); + volume_.push_back(sr.scalars_.volume_); + volume_t_.push_back(sr.scalars_.volume_t_); + volume_sq_.push_back(sr.scalars_.volume_sq_); + volume_sq_t_.push_back(sr.scalars_.volume_sq_t_); + volume_naive_.push_back(sr.scalars_.volume_naive_); + position_recorded_.push_back(sr.scalars_.position_recorded_); + external_source_present_.push_back(sr.scalars_.external_source_present_); + position_.push_back(sr.scalars_.position_); volume_task_.push_back(sr.volume_task_); - mesh_.push_back(sr.mesh_); - parent_sr_.push_back(sr.parent_sr_); + mesh_.push_back(sr.scalars_.mesh_); + parent_sr_.push_back(sr.scalars_.parent_sr_); // Only store these fields if is_linear_ is true if (is_linear_) { - centroid_.push_back(sr.centroid_); - centroid_iteration_.push_back(sr.centroid_iteration_); - centroid_t_.push_back(sr.centroid_t_); - mom_matrix_.push_back(sr.mom_matrix_); - mom_matrix_t_.push_back(sr.mom_matrix_t_); + centroid_.push_back(sr.scalars_.centroid_); + centroid_iteration_.push_back(sr.scalars_.centroid_iteration_); + centroid_t_.push_back(sr.scalars_.centroid_t_); + mom_matrix_.push_back(sr.scalars_.mom_matrix_); + mom_matrix_t_.push_back(sr.scalars_.mom_matrix_t_); } // Energy-dependent fields From 48bbf2cd91a725b62d7ebe7fe16cf486c7c8e80b Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 2 Oct 2025 21:38:22 +0100 Subject: [PATCH 06/48] Corrections and timers --- include/openmc/random_ray/decomposition_map.h | 5 +- include/openmc/random_ray/random_ray.h | 10 +- include/openmc/random_ray/ray_bank.h | 2 +- include/openmc/timer.h | 6 + src/main.cpp | 9 - src/random_ray/decomposition_map.cpp | 300 +++++------------- src/random_ray/random_ray.cpp | 53 +--- src/random_ray/random_ray_simulation.cpp | 77 +++-- src/random_ray/ray_bank.cpp | 83 ++--- src/timer.cpp | 5 + 10 files changed, 196 insertions(+), 354 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 8787d6a0c89..0a364b1aa0f 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -38,7 +38,6 @@ class DecompositionMap { Position calculate_centroids(const Position position_sum, const int num_points, int rank); // Methods to create and update subdomain list - void create(FlatSourceDomain* domain); void update(ParallelMap& discovered_source_regions); void exchange_sr_info(ParallelMap& @@ -66,8 +65,8 @@ class DecompositionMap { // Calculates the load per rank based on the total number of hits all source regions // experience - // void calculate_rank_load(FlatSourceDomain* domain); - void calculate_rank_load(uint64_t total_geometric_intersections); + void calculate_rank_load(FlatSourceDomain* domain); + // void calculate_rank_load(uint64_t total_geometric_intersections); diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index 89897a13eef..a86c4273d1f 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -16,8 +16,8 @@ struct RayBufferContainer { Direction direction; double distance_travelled; vector angular_flux; - SourceRegionKey sr_key; - int sr; //TODO: remove + // SourceRegionKey sr_key; + // int sr; // int receiving_rank; bool is_active; uint64_t ray_id; @@ -47,7 +47,7 @@ class RandomRay : public Particle { // Constructors RandomRay(); RandomRay(uint64_t ray_id, FlatSourceDomain* domain); - RandomRay(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux); + RandomRay(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux); // RandomRay(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); //---------------------------------------------------------------------------- @@ -66,7 +66,7 @@ class RandomRay : public Particle { SourceRegionHandle& srh, double distance, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); - void restart_ray(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux); + void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux); // void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); uint64_t transport_history_based_single_ray(); SourceSite sample_prng(); @@ -74,7 +74,7 @@ class RandomRay : public Particle { bool has_left_subdomain(); // RayBufferContainer pack_ray(); - void pack_ray_for_buffer(double distance_buffer, Position position_buffer, SourceRegionKey sr_key, int sr); + void pack_ray_for_buffer(double distance_buffer, Position position_buffer); //, SourceRegionKey sr_key, int sr); int get_energy_groups(); //---------------------------------------------------------------------------- diff --git a/include/openmc/random_ray/ray_bank.h b/include/openmc/random_ray/ray_bank.h index eb8c84f11df..8d10ba15f20 100644 --- a/include/openmc/random_ray/ray_bank.h +++ b/include/openmc/random_ray/ray_bank.h @@ -58,7 +58,7 @@ class RayBank { // Map that contains the rank to which rays are buffered to be sent std::unordered_map> ray_send_buffer_; - // Map that contains the number of rays to be received from each rank + // Vector that contains the number of rays to be received from each rank vector num_messages_receiving_; // vectors that received ray data diff --git a/include/openmc/timer.h b/include/openmc/timer.h index ae48ac93743..8ad3fd596af 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -35,6 +35,12 @@ extern Timer time_update_src; extern Timer time_ray_comms; extern Timer time_decomposition_handling; extern Timer time_ray_buffering; +extern Timer time_generate_voronoi_centers; +extern Timer time_source_region_exchange; +extern Timer time_add_ray_to_bank; +extern Timer time_comms_metadata; +extern Timer time_unpack_data; +extern Timer time_mpi_imbalance; } // namespace simulation diff --git a/src/main.cpp b/src/main.cpp index a93d8b808b4..542b3cb03e7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -38,7 +38,6 @@ int main(int argc, char* argv[]) break; case SolverType::RANDOM_RAY: openmc_run_random_ray(); - printf("Finished random ray simulation\n"); err = 0; break; } @@ -64,22 +63,14 @@ int main(int argc, char* argv[]) if (err) fatal_error(openmc_err_msg); - printf("before finalize\n"); - // Finalize and free up memory err = openmc_finalize(); if (err) fatal_error(openmc_err_msg); - MPI_Barrier(mpi::intracomm); - printf("RANK: %d after finalize\n", mpi::rank); - MPI_Barrier(mpi::intracomm); - // If MPI is in use and enabled, terminate it #ifdef OPENMC_MPI - printf("RANK: %d OPENMC_MPI compiled\n", mpi::rank); MPI_Finalize(); #endif - printf("MPI finalize\n"); } diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 807f7e87aed..377d0a21487 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -6,6 +6,7 @@ #include "openmc/random_ray/random_ray.h" #include "openmc/random_lcg.h" #include "openmc/mgxs_interface.h" +#include "openmc/timer.h" //TODO: temporary? #include "openmc/simulation.h" @@ -17,9 +18,8 @@ namespace mpi { // Constructor DecompositionMap::DecompositionMap() { - negroups_ = data::mg.num_energy_groups_; //TODO: constructor gets called before num_energy_groups is known? - rank_load_.resize(mpi::n_procs, 0.0); - // generate_rank_centers(); + // negroups_ = data::mg.num_energy_groups_; //TODO: constructor gets called before num_energy_groups is known? + // rank_load_.resize(mpi::n_procs, 0.0); } void DecompositionMap::generate_rank_centers(){ @@ -200,26 +200,6 @@ Position DecompositionMap::calculate_centroids(const Position position_sum, cons return centroid; } -// // Method to initialize subdomain list -// void DecompositionMap::create(FlatSourceDomain* domain){ -// vector start(mpi::n_procs); -// vector end(mpi::n_procs); - -// int sr_per_rank = ((domain->n_source_regions() + mpi::n_procs - 1) / mpi::n_procs); - -// int sr_cnt = 0; -// int rank = 0; -// for (int i = 0; i < domain->n_source_regions(); i++) { -// if (sr_cnt >= sr_per_rank){ -// sr_cnt = 0; -// rank++; -// } -// subdomain_map_[i] = rank; -// sr_cnt++; -// } - -// } - // Update subdomain list for each decomposition map. void DecompositionMap::update(ParallelMap& discovered_source_regions){ @@ -231,10 +211,15 @@ void DecompositionMap::update(ParallelMap requests(num_requests); + // MPI_Request requests[num_requests]; int req_idx = 0; - if (mpi::rank == sender){ + if (mpi::rank == sender){ //TODO: maybe add check that only sends fields that are needed when source regions are freshly discovered? // SourceRegion sr = discovered_source_regions[sr_key]; //TODO: maybe this can be done more efficiently? @@ -457,7 +441,6 @@ void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKe // Tags hardcoded to avoid confusion if new fields are not added sequentially MPI_Isend(sr.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, receiver, 2, mpi::intracomm, &requests[req_idx]); req_idx ++; - //TODO: DO I need to send flux old?? // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_old_.size()); @@ -501,7 +484,8 @@ void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKe } // Wait for all communication to complete - MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); + // MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); + MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); discovered_source_regions.erase(sr_key); // printf("Source region erased from rank %d \n", sender); @@ -545,6 +529,7 @@ void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKe } MPI_Recv(sr_recv.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, sender, 6, mpi::intracomm, MPI_STATUS_IGNORE); + if (is_linear){ MPI_Recv(sr_recv.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, sender, 7, mpi::intracomm, MPI_STATUS_IGNORE); MPI_Recv(sr_recv.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, sender, 8, mpi::intracomm, MPI_STATUS_IGNORE); @@ -580,58 +565,6 @@ void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKe } -// bool DecompositionMap::is_SRK_in_domain(SourceRegionKey sr_key, Position r){ -// bool is_in_my_subdomain = false; - -// // check if in subdomain -// if (subdomain_map_.find(sr_key) != subdomain_map_.end()){ -// if (subdomain_map_[sr_key] == mpi::rank){ -// is_in_my_subdomain = true; -// } -// // else check if already in discovered_regions_map -// } else if (discovered_regions_map_.find(sr_key) != discovered_regions_map_.end()){ -// if (discovered_regions_map_[sr_key] == mpi::rank){ -// is_in_my_subdomain = true; -// } -// // if not record in discovered_regions_map -// } else { -// is_in_my_subdomain = record_new_SRK(sr_key, r); -// } - -// return is_in_my_subdomain -// } - -// bool DecompositionMap::is_SRK_in_domain(SourceRegionKey sr_key, Position r, -// ParallelMap& -// discovered_source_regions){ - -// // Check if SRK is in rank's subdomain -// auto it = subdomain_map_.find(sr_key); -// if (it != subdomain_map_.end()){ -// return it->second == mpi::rank; -// } - -// // Check if already recorded in newly discovered source regions -// if (discovered_source_regions.contains(sr_key)){ -// return true; -// } - -// // Check if this SRK has been marked as outside -// if (outside_source_regions_.find(sr_key) != outside_source_regions_.end()){ -// return false; -// } - -// // If not found in either map, check if my rank would own source -// // region beased on location -// bool is_in_my_subdomain = is_closest_rank(r); -// if (!is_in_my_subdomain){ -// // Record as outside source region key so that we don't have -// // to do this check again for this SRK -// outside_source_regions_.insert(sr_key); -// } -// return is_in_my_subdomain; -// } - int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, ParallelMap& discovered_source_regions, int64_t ID){ //TODO: Remove ID @@ -659,24 +592,9 @@ int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, return mpi::rank; } - // // Check if this SRK has been marked as outside //TODO: This can create problems - // if (outside_source_regions_.find(sr_key) != outside_source_regions_.end()){ - // if (sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ - // printf("RANK %d: Identified owner of ray %ld at check 3 as rank %d\n", mpi::rank, ID, outside_source_regions_[sr_key]); - // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); - // } - // // printf("RANK %d: Identified owner at check 3 as rank %d\n", mpi::rank, outside_source_regions_[sr_key]); - // return outside_source_regions_[sr_key]; - // } - // If not found in either map, check if my rank would own source // region beased on location int closest_rank = find_closest_rank(r); - // if (closest_rank != mpi::rank){ //TODO: This creates problems - // // Record as outside source region so that we don't have - // // to do this check again for this SRK - // outside_source_regions_[sr_key] = closest_rank; - // } // if (sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ // printf("RANK %d: Identified owner of ray %ld at check 4 as rank %d\n", mpi::rank, ID, closest_rank); // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); @@ -685,51 +603,6 @@ int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, return closest_rank; } -// void DecompositionMap::is_SRK_in_domain(SourceRegionKey sr_key, bool& is_in_map, bool& is_in_my_subdomain){ -// if (subdomain_map_.find(sr_key) != subdomain_map_.end()){ -// if (subdomain_map_[sr_key] == mpi::rank){ -// is_in_map = true; -// is_in_my_subdomain = true; -// } else { -// is_in_map = true; -// // is_in_my_subdomain = false; -// } -// } // else { -// // is_in_map = false; -// // is_in_my_subdomain = false; -// // } -// } - -// bool DecompositionMap::record_new_SRK(SourceRegionKey sr_key, Position r) { -// // Determine which rank the position belongs to -// int closest_rank = C_NONE; -// double min_distance = INFTY; - -// // Find closest rank center -// for (int rank = 0; rank < mpi::n_procs; rank++) { -// double dist = (r - rank_centers_[rank]).norm(); -// if (dist < min_distance) { -// min_distance = dist; -// closest_rank = rank; -// } -// } - -// if (mpi::master && closest_rank == C_NONE) { -// fatal_error("Could not find closest rank for new source region " -// + std::to_string(sr_key.base_source_region_id) -// + ", " + std::to_string(sr_key.mesh_bin) + " at position (" -// + std::to_string(r.x) + ", " + std::to_string(r.y) + ", " + std::to_string(r.z) + ")."); -// } - -// //TODO: can discovered_source_regions_ be re-used, so that I avoid using additional map? -// // Record in subdomain map -// discovered_regions_map_[sr_key] = closest_rank; - -// // check whether it belongs to this rank's subdomain -// bool is_in_my_subdomain = (closest_rank == mpi::rank); -// return is_in_my_subdomain; -// } - // bool DecompositionMap::is_closest_rank(Position r) { int DecompositionMap::find_closest_rank(Position r) { // Determine which rank the position belongs to @@ -756,73 +629,20 @@ int DecompositionMap::find_closest_rank(Position r) { return closest_rank; } -void DecompositionMap::calculate_rank_load(uint64_t total_geometric_intersections){ - - // Reset rank load - std::fill(rank_load_.begin(), rank_load_.end(), 0.0); - - // Temporary print-outs - if (mpi::master) { - printf("Load distribution: "); - } - - // Calculate rank load based on number of geometric intersections - uint64_t total_geometric_intersections_sum = 0; - MPI_Allreduce(&total_geometric_intersections, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); - double load = (total_geometric_intersections/static_cast(total_geometric_intersections_sum))*100.0; - - for (int rank = 0; rank < mpi::n_procs; rank++) { - // Broadcast load - double bcast_load = 0.0; - if (rank == mpi::rank) { - bcast_load = load; - } - MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); - rank_load_[rank] = bcast_load; - // Temporary print-outs - if (mpi::master) { - printf("RANK %d: %.2f%% ", rank, rank_load_[rank]); - } - } - // Temporary print-outs - if (mpi::master) { - printf("\n"); - } -} - -// void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ +// void DecompositionMap::calculate_rank_load(uint64_t total_geometric_intersections){ // // Reset rank load // std::fill(rank_load_.begin(), rank_load_.end(), 0.0); -// // Add number of hits for each source region by going through all exisiting source regions. -// int64_t n_hits_rank = 0; - -// // add source region hits -// #pragma omp parallel for reduction(+ : n_hits_rank) -// for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { -// n_hits_rank += domain->source_regions_.n_hits(sr); -// } - -// // add newly discovered source region hits -// for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { -// n_hits_rank += sr.scalars_.n_hits_; -// } - -// // source_region_map_ // // Temporary print-outs // if (mpi::master) { // printf("Load distribution: "); // } // // Calculate rank load based on number of geometric intersections -// uint64_t n_hits_total = 0; -// MPI_Allreduce(&n_hits_rank, &n_hits_total, 1, MPI_INT64_T, MPI_SUM, mpi::intracomm); -// double load = (n_hits_rank/static_cast(n_hits_total))*100.0; - -// if(mpi::master){ -// printf("Total hits: %ld \n", n_hits_total); -// } +// uint64_t total_geometric_intersections_sum = 0; +// MPI_Allreduce(&total_geometric_intersections, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); +// double load = (total_geometric_intersections/static_cast(total_geometric_intersections_sum))*100.0; // for (int rank = 0; rank < mpi::n_procs; rank++) { // // Broadcast load @@ -843,4 +663,58 @@ void DecompositionMap::calculate_rank_load(uint64_t total_geometric_intersection // } // } +void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: This uses accumulated value, not batch-wise values! + + rank_load_.resize(mpi::n_procs, 0.0); //TODO: that should be moved elsewhere + + // Reset rank load + std::fill(rank_load_.begin(), rank_load_.end(), 0.0); + + // Add number of hits for each source region by going through all exisiting source regions. + int64_t n_hits_rank = 0; + + // add source region hits + #pragma omp parallel for reduction(+ : n_hits_rank) + for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + n_hits_rank += domain->source_regions_.n_hits(sr); + } + + // add newly discovered source region hits + for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { + n_hits_rank += sr.scalars_.n_hits_; + } + + // Temporary print-outs + if (mpi::master) { + printf("Load distribution: "); + } + + // Calculate rank load based on number of geometric intersections + uint64_t n_hits_total = 0; + MPI_Allreduce(&n_hits_rank, &n_hits_total, 1, MPI_INT64_T, MPI_SUM, mpi::intracomm); + double load = (n_hits_rank/static_cast(n_hits_total))*100.0; + + if(mpi::master){ + printf("Total hits: %ld \n", n_hits_total); + } + + for (int rank = 0; rank < mpi::n_procs; rank++) { + // Broadcast load + double bcast_load = 0.0; + if (rank == mpi::rank) { + bcast_load = load; + } + MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); + rank_load_[rank] = bcast_load; + // Temporary print-outs + if (mpi::master) { + printf("RANK %d: %.2f%% ", rank, rank_load_[rank]); + } + } + // Temporary print-outs + if (mpi::master) { + printf("\n"); + } +} + }// namespace openmc \ No newline at end of file diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 54c65057c87..75a6259cda4 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -9,6 +9,7 @@ #include "openmc/search.h" #include "openmc/settings.h" #include "openmc/simulation.h" +#include "openmc/timer.h" //TODO: temporary? #include "openmc/distribution_spatial.h" #include "openmc/random_dist.h" @@ -259,7 +260,7 @@ RandomRay::RandomRay(uint64_t ray_id, FlatSourceDomain* domain) : RandomRay() initialize_ray(ray_id, domain); } -RandomRay::RandomRay(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux) : RandomRay() +RandomRay::RandomRay(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux) : RandomRay() { restart_ray(domain, data, angular_flux); } @@ -464,7 +465,7 @@ void RandomRay::attenuate_flux(double distance, double offset) Position position_buffer = r() + (offset + mesh_partial_length) * u(); double distance_buffer = distance_travelled_ + mesh_partial_length; // double distance_buffer = distance_travelled_ + offset + mesh_partial_length; - pack_ray_for_buffer(distance_buffer, position_buffer, SourceRegionKey(sr, mesh_bin), sr); + pack_ray_for_buffer(distance_buffer, position_buffer); //, SourceRegionKey(sr, mesh_bin), sr); wgt() = 0.0; // if (sr == 134 && mesh_bin == 64056){ // printf("RANK %d: Buffered (%f, %f, %f) \n", mpi::rank, position_buffer.x, position_buffer.y, position_buffer.z); @@ -476,55 +477,27 @@ void RandomRay::attenuate_flux(double distance, double offset) } void RandomRay::attenuate_flux_inner( - double distance, int64_t sr, int mesh_bin, Position r) //, double mesh_width) + double distance, int64_t sr, int mesh_bin, Position r) { - // Check if source region is in subdomain_map. //TODO: only when MPIactive? - // If so, check if it is in this rank's subdomain. If it is in another rank's - // subdomain, mark as not local and leave function. - // bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin), r); - // bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin), r, - // domain_->discovered_source_regions_); - // printf("Rank %d checking ownership of SRK (%ld, %ld)\n", mpi::rank, sr, mesh_bin); - int owner = mpi::rank; if (mpi::n_procs > 1){ //TODO: is this if condition necessary? + // Check which rank owns the source region at the current position + // simulation::time_find_owner_rank.start(); Position midpoint = r + u() * (distance / 2.0); owner = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), midpoint, domain_->discovered_source_regions_, id()); + // simulation::time_find_owner_rank.stop(); } - // if (!is_in_my_subdomain) { + // If current rank is not the owner return and mark as not local. if (owner != mpi::rank) { is_local_ = false; owner_rank_ = owner; return; } - // bool is_in_my_subdomain = mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin)); - // bool is_in_map = false; - // bool is_in_my_subdomain = false; - // // mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin), Position r); - - // mpi::decomp_map.is_SRK_in_domain(SourceRegionKey(sr, mesh_bin), is_in_map, is_in_my_subdomain); - - // if (!is_in_my_subdomain) { - // if(is_in_map){ - // // if is not in subdomain but in map mark as not local and stop attenuate - // is_local_ = false; - // return; - // } else { - // // if region has not been recorded yet, check which rank the current position belongs to. - // is_in_my_subdomain = mpi::decomp_map.record_new_SRK(SourceRegionKey(sr, mesh_bin), r); - // // discovered_new_SRK_ = true; - // if (!is_in_my_subdomain) { - // is_local_ = false; - // return; - // } - // } - // } - - // if ray is in subdomain continue as normal + // If ray is in subdomain continue as normal SourceRegionHandle srh; if (mesh_subdivision_enabled_) { @@ -907,7 +880,7 @@ void RandomRay::attenuate_flux_linear_source_void( } } -void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData data, vector angular_flux) +void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux) { domain_ = domain; @@ -1104,13 +1077,13 @@ bool RandomRay::has_left_subdomain() { return !is_local_; } -void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_buffer, SourceRegionKey sr_key, int sr) { +void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_buffer) { exchange_data_.position = position_buffer; exchange_data_.direction = u(); exchange_data_.angular_flux = angular_flux_; exchange_data_.distance_travelled = distance_buffer; - exchange_data_.sr_key = sr_key; - exchange_data_.sr = sr; +// exchange_data_.sr_key = sr_key; +// exchange_data_.sr = sr; exchange_data_.is_active = is_active_; exchange_data_.ray_id = id(); // exchange_data_.receiving_rank = owner_rank_; diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 631b54beadf..1e1652ee89b 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -64,10 +64,9 @@ void openmc_run_random_ray() sim.apply_fixed_sources_and_mesh_domains(); // Initialize subdomains for MPI ranks - simulation::time_decomposition_handling.start(); + simulation::time_generate_voronoi_centers.start(); mpi::decomp_map.generate_rank_centers(); - // mpi::decomp_map.create(sim.domain()); - simulation::time_decomposition_handling.stop(); + simulation::time_generate_voronoi_centers.stop(); // Begin main simulation timer simulation::time_total.start(); @@ -147,8 +146,6 @@ void openmc_run_random_ray() adjoint_sim.output_simulation_results(); } - printf("Finished adjoint simulation\n"); - } // Enforces restrictions on inputs in random ray mode. While there are @@ -571,6 +568,7 @@ void RandomRaySimulation::simulate() finalize_batch(); } // End random ray power iteration loop + // Compute average load per rank based on geometric intersections if (mpi::n_procs > 1){ // Compute total intersections and load balancing data @@ -584,7 +582,8 @@ void RandomRaySimulation::simulate() float rank_load_local = (total_geometric_intersections_/static_cast(total_geometric_intersections_sum))*100.0; total_geometric_intersections_ = total_geometric_intersections_sum; - rank_load_.resize(mpi::n_procs); + rank_load_.resize(mpi::n_procs); //TODO: Decomposition map also owns raak load + // send load data to master rank (rank 0) if (mpi::master) { rank_load_[0] = rank_load_local; @@ -637,7 +636,7 @@ void RandomRaySimulation::instability_check( // global miss rate // printf("RANK %d: n_hits: %ld, n_source_regions: %ld \n", mpi::rank, n_hits, n_source_regions); - simulation::time_decomposition_handling.stop(); + simulation::time_decomposition_handling.start(); if (mpi::master) { MPI_Reduce(MPI_IN_PLACE, &n_hits, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); MPI_Reduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); @@ -687,9 +686,13 @@ void RandomRaySimulation::print_results_random_ray( double time_per_integration = (time_transport.elapsed() - time_ray_buffering.elapsed()) / total_integrations; + double time_domain_decomposition = time_decomposition_handling.elapsed() + + time_generate_voronoi_centers.elapsed() + time_ray_buffering.elapsed() - time_transport.elapsed(); + double time_transport_total = + (time_transport.elapsed() - time_ray_buffering.elapsed()); double misc_time = time_total.elapsed() - time_update_src.elapsed() - - time_transport.elapsed() - time_tallies.elapsed() - - time_bank_sendrecv.elapsed(); + time_transport_total - time_tallies.elapsed() - + time_bank_sendrecv.elapsed() - time_domain_decomposition; header("Simulation Statistics", 4); fmt::print( @@ -776,10 +779,24 @@ void RandomRaySimulation::print_results_random_ray( show_time("Total time for initialization", time_initialize.elapsed()); show_time("Reading cross sections", time_read_xs.elapsed(), 1); show_time("Total simulation time", time_total.elapsed()); - show_time("Transport sweep only", time_transport.elapsed(), 1); + show_time("Transport sweep only", time_transport_total, 1); show_time("Source update only", time_update_src.elapsed(), 1); show_time("Tally conversion only", time_tallies.elapsed(), 1); + if (mpi::n_procs > 1){ + double time_decomp_misc = time_domain_decomposition - time_generate_voronoi_centers.elapsed() + - time_ray_comms.elapsed() - time_comms_metadata.elapsed() - time_unpack_data.elapsed() - time_mpi_imbalance.elapsed(); + + show_time("Decomposition handling", time_domain_decomposition, 1); + show_time("Ray communication", time_ray_comms.elapsed(), 2); + show_time("Source region exchange", time_source_region_exchange.elapsed(), 2); + show_time("Load imbalance", time_mpi_imbalance.elapsed(), 2); + show_time("Generating Voronoi centers", time_generate_voronoi_centers.elapsed(), 2); + show_time("Sending ray metadata", time_comms_metadata.elapsed(), 2); + show_time("Unpacking ray data", time_unpack_data.elapsed(), 2); + show_time("Other decomposition routines", time_decomp_misc, 2); + } show_time("Other iteration routines", misc_time, 1); + if (settings::run_mode == RunMode::EIGENVALUE) { show_time("Time in inactive batches", time_inactive.elapsed()); } @@ -787,11 +804,6 @@ void RandomRaySimulation::print_results_random_ray( show_time("Time writing statepoints", time_statepoint.elapsed()); show_time("Total time for finalization", time_finalize.elapsed()); show_time("Time per integration", time_per_integration); - if (mpi::n_procs > 1){ - show_time("Time in ray communication", time_ray_comms.elapsed()); - show_time("Time in decomposition handling", time_decomposition_handling.elapsed() - + time_ray_buffering.elapsed()); - } } if (settings::verbosity >= 4 && settings::run_mode == RunMode::EIGENVALUE) { @@ -820,31 +832,36 @@ void RandomRaySimulation::transport_sweep() { void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { - // Transport sweep over all random rays for the iteration + simulation::time_decomposition_handling.start(); + + // Create rays and add them to ray bank #pragma omp parallel for schedule(static) for (int i = 0; i < simulation::work_per_rank; i++) { uint64_t id = simulation::work_index[mpi::rank] + i; RandomRay ray(id, domain_.get()); // Add ray to ray bank + #pragma omp critical (raybank) { RB.add_ray_to_bank(ray); } } - // printf("RANK %d: Ray bank contains %d rays \n", mpi::rank, RB.ray_bank_size()); int num_comms = 0; - bool keep_running = true; + // bool keep_running = true; // if (simulation::current_batch == 2){ // printf("Rank %d Starting transport sweep with %d rays \n", mpi::rank, RB.ray_bank_size()); // } // printf("Rank %d Test2 \n", mpi::rank); - // Move rays across ranks until they are terminated - while (keep_running) { + // Move rays across ranks until they are terminated + while (RB.is_any_ray_alive()) { + // while (keep_running) { + + // simulation::time_decomposition_handling.stop(); // Start timer for transport simulation::time_transport.start(); @@ -868,7 +885,7 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // printf("RANK %d: Buffering ray %d, new owner: %d \n", mpi::rank, i, ray.owner_rank_); // printf("Rank %d Test2.2 \n", mpi::rank); simulation::time_ray_buffering.start(); - num_ray_crossings_ += 1; + num_ray_crossings_ ++; RB.buffer_ray_data_to_send(ray, domain_.get()); simulation::time_ray_buffering.stop(); // printf("Rank %d Test2.3 \n", mpi::rank); @@ -876,9 +893,10 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } } simulation::time_transport.stop(); + // simulation::time_decomposition_handling.start(); // Remove dead rays and move rays across subdomains between ranks - simulation::time_decomposition_handling.start(); + // simulation::time_decomposition_handling.start(); // Check if new source regions were discovered and add them to subdomain map // if (mpi::decomp_map.new_sr_discovered()){ @@ -892,6 +910,7 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // } // printf("RANK %d: Update ray bank \n", mpi::rank); + RB.update(domain_.get()); // bool test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); @@ -910,23 +929,27 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // printf("Rank %d Test4 \n", mpi::rank); - keep_running = RB.is_any_ray_alive(); + // simulation::time_check_ray_rank.start(); + // keep_running = RB.is_any_ray_alive(); + // simulation::time_check_ray_rank.stop(); + num_comms ++; - simulation::time_decomposition_handling.stop(); + // simulation::time_decomposition_handling.stop(); } // printf("Rank %d Test5 \n", mpi::rank); - simulation::time_decomposition_handling.start(); + // simulation::time_decomposition_handling.start(); if (mpi::master) { printf("Max subdomain crossings: %d\n", num_comms); printf("Number of ray crossings: %ld\n", num_ray_crossings_); } + // Calculate load per rank based on geometric intersections - mpi::decomp_map.calculate_rank_load(total_geometric_intersections_); - // mpi::decomp_map.calculate_rank_load(domain_.get()); + // mpi::decomp_map.calculate_rank_load(total_geometric_intersections_); + mpi::decomp_map.calculate_rank_load(domain_.get()); avg_num_comms_ += num_comms; diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index bcaf2e78585..509ca3d0ce0 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -23,10 +23,6 @@ void RayBank::add_ray_to_bank(RandomRay& ray){ // Buffer ray that has left my subdomain void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ - // Read source region key from ray - SourceRegionKey sr_key = ray.exchange_data_.sr_key; //TODO: SRK might not actually need to be buffered - // int sr_key = ray.exchange_data_.sr; - // Get rank to send ray to int rank = ray.owner_rank_; @@ -34,36 +30,14 @@ void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ if (rank == mpi::rank){ warning(fmt::format( - "Ray {} at position ({:.5e}, {:.5e}, {:.5e}) in source region key ({}, {})" + "Ray {} at position ({:.5e}, {:.5e}, {:.5e})" "is being sent to the same rank {}. This may indicate an error in the decomposition map." - , ray.exchange_data_.ray_id, ray.exchange_data_.position.x, ray.exchange_data_.position.y, ray.exchange_data_.position.z, - sr_key.base_source_region_id, sr_key.mesh_bin, rank)); - // warning("Ray {} at position ({:.5e}, {:.5e}, {:.5e}) in source region key ({}, {}) is being sent to the same rank {}. This may indicate an error in the decomposition map.", - // ray.exchange_data_.ray_id, ray.exchange_data_.position.x, ray.exchange_data_.position.y, ray.exchange_data_.position.z, - // sr_key.base_source_region_id, sr_key.mesh_bin, rank); + , ray.exchange_data_.ray_id, ray.exchange_data_.position.x, ray.exchange_data_.position.y, ray.exchange_data_.position.z, rank)); } - // if (mpi::decomp_map.subdomain_map_.find(sr_key) != mpi::decomp_map.subdomain_map_.end()){ - // rank = mpi::decomp_map.subdomain_map_[sr_key]; - // } else { - // std::string err_msg = "ERROR: Source region key " + std::to_string(sr_key.base_source_region_id) + - // "," + std::to_string(sr_key.mesh_bin) + - // " not found in decomposition map for ray " + - // std::to_string(ray.exchange_data_.ray_id) + " at position: (" + - // std::to_string(ray.exchange_data_.position.x) + ", " + - // std::to_string(ray.exchange_data_.position.y) + ", " + - // std::to_string(ray.exchange_data_.position.z) + ")."; - // fatal_error(err_msg); - // } - // Add ray data to buffer ray_send_buffer_[rank].push_back(ray.exchange_data_); - // for (auto& [rank, rays] : ray_send_buffer_) { - // for (int r = 0; r < rays.size(); r++){ - // printf("RANK %d: 1: Buffered ray ID %ld to be sent to rank: %d \n", mpi::rank, rays[r].ray_id, rank); - // } - // } } // Update ray bank @@ -85,17 +59,27 @@ void RayBank::update(FlatSourceDomain* domain){ // } // Communicate how many rays will be sent to each rank - communicate_message_metadata(); - simulation::time_ray_comms.start(); + + + simulation::time_mpi_imbalance.start(); + MPI_Barrier(mpi::intracomm); + simulation::time_mpi_imbalance.stop(); + + simulation::time_comms_metadata.start(); + communicate_message_metadata(); + simulation::time_comms_metadata.stop(); // Send and receive rays between MPI ranks + simulation::time_ray_comms.start(); communicate_rays(); - simulation::time_ray_comms.stop(); + + simulation::time_unpack_data.start(); // Add received rays to ray list of that rank update_my_ray_list(domain); + simulation::time_unpack_data.stop(); } @@ -150,19 +134,22 @@ void RayBank::communicate_rays(){ // Each ray requires 2 sends (data + angular flux) int num_requests = ray_send_buffer_.size() * 2; - // vector requests(num_requests); // heap - MPI_Request requests[num_requests]; // stack + vector requests(num_requests); // heap + // MPI_Request requests[num_requests]; // stack int req_idx = 0; // Define one-dimensional arrays to be sent and received and allocate size + // Sending vector ray_data; vector angular_flux_data; ray_data.resize(total_sending_rays_); angular_flux_data.resize(total_sending_rays_ * negroups_); + // Receiving received_ray_data_.resize(total_receiving_rays_); received_angular_flux_data_.resize(total_receiving_rays_ * negroups_); + // Indices to keep track of where to pack/unpack data in 1D arrays int vector_send_idx = 0; int vector_receive_idx = 0; @@ -195,7 +182,7 @@ void RayBank::communicate_rays(){ } //TODO: Post Irecv before Isend? - // Receive ray data to neighbouring ranks //TODO: OMP? + // Receive ray data from neighbouring ranks //TODO: OMP? for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { int num_rays_receiving = num_messages_receiving_[sending_rank]; if (num_rays_receiving == 0) continue; @@ -207,8 +194,8 @@ void RayBank::communicate_rays(){ } // Wait for all communication to complete - MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); - // MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); + // MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); + MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); // Empty buffered_ray_data ray_send_buffer_.clear(); @@ -218,8 +205,11 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ //TODO: OMP? + // Temporary vector containing angular flux data for re-initialization of random rays vector angular_flux_vec; angular_flux_vec.resize(negroups_); + + // Add re-initialized random ray objects to my_ray_list for (int i = 0; i < received_ray_data_.size(); i++) { for (int g = 0; g < negroups_; g++) { @@ -231,28 +221,12 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ my_ray_list_.push_back(ray_received); } + // clear received data vectors //TODO: maybe resize(0)? received_ray_data_.clear(); received_angular_flux_data_.clear(); } -// bool RayBank::is_any_ray_alive() { - -// int global_rays_alive = 0; -// int local_rays_alive = ray_bank_size(); -// //TODO: maybe this can be optimised, such that if local_rays_alive > 0, -// // we don't need to do MPI_Allreduce. But maybe Allreduce does not matter -// // because they will be synchronised anyway. -// MPI_Allreduce(&local_rays_alive, &global_rays_alive, 1, MPI_INT, MPI_SUM, mpi::intracomm); - -// if (global_rays_alive > 0){ -// return true; -// } else { -// return false; -// } - -// } - bool RayBank::is_any_ray_alive(){ int local_rays_alive = ray_bank_size(); @@ -261,9 +235,6 @@ bool RayBank::is_any_ray_alive(){ flag = 1; } - //TODO: maybe this can be optimised, such that if local_rays_alive > 0, - // we don't need to do MPI_Allreduce. But maybe Allreduce does not matter - // because they will be synchronised anyway. MPI_Allreduce(MPI_IN_PLACE, &flag, 1, MPI_INT, MPI_MAX, mpi::intracomm); return flag > 0; diff --git a/src/timer.cpp b/src/timer.cpp index 58bd09170e7..02c31bd7db0 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -30,6 +30,11 @@ Timer time_update_src; Timer time_ray_comms; Timer time_ray_buffering; Timer time_decomposition_handling; +Timer time_generate_voronoi_centers; +Timer time_source_region_exchange; +Timer time_comms_metadata; +Timer time_unpack_data; +Timer time_mpi_imbalance; } // namespace simulation From 9013d792239f6c64a3cdc3134fae1d95f7f02f62 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 2 Oct 2025 22:51:08 +0100 Subject: [PATCH 07/48] Corrected timers --- src/random_ray/random_ray_simulation.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 1e1652ee89b..6b2adb971c8 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -63,11 +63,6 @@ void openmc_run_random_ray() // Initialize fixed sources, if present sim.apply_fixed_sources_and_mesh_domains(); - // Initialize subdomains for MPI ranks - simulation::time_generate_voronoi_centers.start(); - mpi::decomp_map.generate_rank_centers(); - simulation::time_generate_voronoi_centers.stop(); - // Begin main simulation timer simulation::time_total.start(); @@ -428,6 +423,12 @@ void RandomRaySimulation::prepare_fixed_sources_adjoint( void RandomRaySimulation::simulate() { + + // Initialize subdomains for MPI ranks + simulation::time_generate_voronoi_centers.start(); + mpi::decomp_map.generate_rank_centers(); + simulation::time_generate_voronoi_centers.stop(); + // Create ray bank RayBank RB; From 1cd95d47b2703eee9182f6aee252ca0f311d4e05 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 9 Oct 2025 19:57:44 +0100 Subject: [PATCH 08/48] Implement load balancing --- examples/2D_c5g7_python_mesh/build-xml-2d.py | 4 +- examples/c5g7_no_mesh/pin_power_error.py | 63 ++ examples/c5g7_no_mesh/reference.txt | 34 + include/openmc/random_ray/decomposition_map.h | 22 +- .../openmc/random_ray/random_ray_simulation.h | 2 +- include/openmc/random_ray/source_region.h | 14 + src/random_ray/decomposition_map.cpp | 582 +++++++++++++++--- src/random_ray/flat_source_domain.cpp | 8 + src/random_ray/linear_source_domain.cpp | 2 +- src/random_ray/random_ray.cpp | 9 +- src/random_ray/random_ray_simulation.cpp | 52 +- src/random_ray/source_region.cpp | 146 ++++- 12 files changed, 810 insertions(+), 128 deletions(-) create mode 100644 examples/c5g7_no_mesh/pin_power_error.py create mode 100644 examples/c5g7_no_mesh/reference.txt diff --git a/examples/2D_c5g7_python_mesh/build-xml-2d.py b/examples/2D_c5g7_python_mesh/build-xml-2d.py index 27d78031a8c..a4a6b98143b 100755 --- a/examples/2D_c5g7_python_mesh/build-xml-2d.py +++ b/examples/2D_c5g7_python_mesh/build-xml-2d.py @@ -12,8 +12,8 @@ # Instantiate a Settings, set all runtime parameters, and export to XML settings_file = openmc.Settings() settings_file.energy_mode = "multi-group" -settings_file.batches = 20 #1000 -settings_file.inactive = 10 #600 +settings_file.batches = 1000 +settings_file.inactive = 600 settings_file.particles = 1750 settings_file.run_mode = 'eigenvalue' settings_file.output = {'tallies': False, 'summary': False} diff --git a/examples/c5g7_no_mesh/pin_power_error.py b/examples/c5g7_no_mesh/pin_power_error.py new file mode 100644 index 00000000000..027b9e86644 --- /dev/null +++ b/examples/c5g7_no_mesh/pin_power_error.py @@ -0,0 +1,63 @@ +import numpy as np +import matplotlib.pyplot as plt +import math +import sys +import openmc + +def reformat(arr, dev): + arr = np.rot90(arr, 3) + dev = np.rot90(dev, 3) + val = arr.sum() + factor = ((17 * 17 * 4) - (25 * 4)) / val + arr = arr * factor + dev = dev * factor + return arr[0:34,0:34], dev[0:34,0:34] + +def get_err(fname): + # Load the statepoint file + sp = openmc.StatePoint(fname) + tally = sp.get_tally(scores=['flux']) + flux = tally.get_slice(scores=['flux']) + fission = tally.get_slice(scores=['fission']) + + dim = 51 + flux.std_dev.shape = (dim, dim) + flux.mean.shape = (dim, dim) + fission.std_dev.shape = (dim, dim) + fission.mean.shape = (dim, dim) + + trrm_power, trrm_std_dev = reformat(fission.mean, fission.std_dev) + + np.savetxt("trrm.csv", trrm_power, delimiter=",") + + ref = np.loadtxt("reference.txt") + ref = ref.reshape((34, 34)) + val = ref.sum() + factor = ((17 * 17 * 4) - (25 * 4)) / val + ref = ref * factor + + trrm_power[trrm_power == 0] = np.nan + ref[ref == 0] = np.nan + + rel_diff = (trrm_power - ref) / ref + + rel_diff_squared = np.power(rel_diff, 2) + + RMS = math.sqrt(np.nanmean(rel_diff_squared)) + + abs_percent_diff = np.absolute(rel_diff) + + print("RMS = ", 100.0 * RMS) + print("AAPE = ", 100.0 * np.nanmean(abs_percent_diff)) + print("MAX = ", 100.0 *np.nanmax(abs_percent_diff)) + + +n = len(sys.argv) +if (n != 2): + print("Must provide statepoint name to read as argument.") + exit(1) + +fname = sys.argv[1] +print("Opening statepoint file: ", fname) + +get_err(fname) diff --git a/examples/c5g7_no_mesh/reference.txt b/examples/c5g7_no_mesh/reference.txt new file mode 100644 index 00000000000..71e05ad26c7 --- /dev/null +++ b/examples/c5g7_no_mesh/reference.txt @@ -0,0 +1,34 @@ +2.197612652000000E+00 2.203064459000000E+00 2.213433582000000E+00 2.224465473000000E+00 2.231713169000000E+00 2.227586900000000E+00 2.183993825000000E+00 2.147990520000000E+00 2.120156373000000E+00 2.054662000000000E+00 1.997559134000000E+00 1.945536069000000E+00 1.852992182000000E+00 1.750771873000000E+00 1.630889847000000E+00 1.480633774000000E+00 1.281694135000000E+00 1.311371206000000E+00 1.060656506000000E+00 9.374435330000000E-01 8.642268360000000E-01 8.147009120000000E-01 7.690233230000000E-01 7.131519230000000E-01 6.652080920000000E-01 6.219635050000000E-01 5.705476220000000E-01 5.266338520000000E-01 4.851637750000000E-01 4.382162350000000E-01 3.985185290000000E-01 3.778700780000000E-01 4.121052870000000E-01 6.014796770000000E-01 +2.202551348000000E+00 2.212279081000000E+00 2.239666393000000E+00 2.273724152000000E+00 2.302437001000000E+00 2.370424239000000E+00 2.254632138000000E+00 2.213754276000000E+00 2.247812034000000E+00 2.118471658000000E+00 2.062717847000000E+00 2.072231784000000E+00 1.916921566000000E+00 1.795566483000000E+00 1.655076628000000E+00 1.492031257000000E+00 1.280736328000000E+00 1.295428413000000E+00 1.343395761000000E+00 1.170746659000000E+00 1.093852665000000E+00 1.049271850000000E+00 1.046340702000000E+00 9.199614060000000E-01 8.516620250000000E-01 8.392725260000000E-01 7.331525710000000E-01 6.724408230000000E-01 6.580288110000000E-01 5.677704070000000E-01 5.044375150000000E-01 4.706234850000000E-01 5.174940580000000E-01 5.921624320000000E-01 +2.209307312000000E+00 2.239345699000000E+00 2.312335772000000E+00 2.443649488000000E+00 2.472148541000000E+00 0.000000000000000E+00 2.383594094000000E+00 2.334955425000000E+00 0.000000000000000E+00 2.239987088000000E+00 2.177366138000000E+00 0.000000000000000E+00 2.058339298000000E+00 1.929229822000000E+00 1.711076305000000E+00 1.510308707000000E+00 1.284030929000000E+00 1.288332512000000E+00 1.318898976000000E+00 1.175274865000000E+00 1.175944048000000E+00 1.121246391000000E+00 0.000000000000000E+00 9.487255660000000E-01 8.719277800000000E-01 0.000000000000000E+00 7.556225680000000E-01 6.882681660000000E-01 0.000000000000000E+00 6.070362440000000E-01 5.427049230000000E-01 4.764708150000000E-01 5.082281250000000E-01 5.872857380000000E-01 +2.222519926000000E+00 2.275755217000000E+00 2.444504674000000E+00 0.000000000000000E+00 2.497697205000000E+00 2.453612398000000E+00 2.295616898000000E+00 2.243258172000000E+00 2.294547916000000E+00 2.150962289000000E+00 2.098804532000000E+00 2.144484260000000E+00 2.078652089000000E+00 0.000000000000000E+00 1.813241027000000E+00 1.541208693000000E+00 1.292383953000000E+00 1.291086209000000E+00 1.334424866000000E+00 1.262642743000000E+00 0.000000000000000E+00 1.114077799000000E+00 1.128739953000000E+00 9.589257900000000E-01 8.815464780000000E-01 8.792225120000000E-01 7.592228980000000E-01 6.976431360000000E-01 7.026203150000000E-01 5.902126100000000E-01 0.000000000000000E+00 5.150653320000000E-01 5.135174460000000E-01 5.880960260000000E-01 +2.230002799000000E+00 2.303249427000000E+00 2.472426477000000E+00 2.497633066000000E+00 2.399671580000000E+00 2.426951994000000E+00 2.278192495000000E+00 2.229553826000000E+00 2.276439365000000E+00 2.137309254000000E+00 2.085138670000000E+00 2.121997160000000E+00 1.999092054000000E+00 1.972955450000000E+00 1.831717308000000E+00 1.561333343000000E+00 1.296142492000000E+00 1.293611144000000E+00 1.357367352000000E+00 1.288097336000000E+00 1.179300651000000E+00 1.141161520000000E+00 1.083607544000000E+00 9.265292290000000E-01 8.556920860000000E-01 8.548796600000000E-01 7.377598830000000E-01 6.767338530000000E-01 6.759898420000000E-01 6.106151950000000E-01 5.391687320000000E-01 5.217272260000000E-01 5.217999170000000E-01 5.863364820000000E-01 +2.229553826000000E+00 2.372220129000000E+00 0.000000000000000E+00 2.455151732000000E+00 2.426866475000000E+00 0.000000000000000E+00 2.343699696000000E+00 2.298332111000000E+00 0.000000000000000E+00 2.205287941000000E+00 2.150064344000000E+00 0.000000000000000E+00 2.027824145000000E+00 1.940030813000000E+00 0.000000000000000E+00 1.614151731000000E+00 1.297887071000000E+00 1.293251966000000E+00 1.423064832000000E+00 0.000000000000000E+00 1.281910070000000E+00 1.142395125000000E+00 0.000000000000000E+00 9.828538770000000E-01 9.021115490000000E-01 0.000000000000000E+00 7.854685380000000E-01 7.126495020000000E-01 0.000000000000000E+00 6.197357470000000E-01 5.784730520000000E-01 0.000000000000000E+00 5.480049350000000E-01 5.887224490000000E-01 +2.181043435000000E+00 2.254054888000000E+00 2.381905103000000E+00 2.295958972000000E+00 2.276674541000000E+00 2.347163197000000E+00 2.215272230000000E+00 2.172598479000000E+00 2.224080640000000E+00 2.084174448000000E+00 2.027321724000000E+00 2.055241389000000E+00 1.901000152000000E+00 1.814008556000000E+00 1.766667631000000E+00 1.529832590000000E+00 1.276370606000000E+00 1.272601377000000E+00 1.332366007000000E+00 1.224896998000000E+00 1.146335392000000E+00 1.038133061000000E+00 1.037316359000000E+00 8.993664040000000E-01 8.322151090000000E-01 8.339425830000000E-01 7.227727590000000E-01 6.605580220000000E-01 6.544691020000000E-01 5.620299750000000E-01 5.221954400000000E-01 4.886956900000000E-01 5.135751710000000E-01 5.793645830000000E-01 +2.145467723000000E+00 2.212065285000000E+00 2.334720249000000E+00 2.245909247000000E+00 2.231114540000000E+00 2.301004565000000E+00 2.178135805000000E+00 2.138369684000000E+00 2.184656593000000E+00 2.047206922000000E+00 1.993494866000000E+00 2.015723272000000E+00 1.864665463000000E+00 1.776305570000000E+00 1.733294021000000E+00 1.505647947000000E+00 1.255238975000000E+00 1.253800126000000E+00 1.311358378000000E+00 1.198341353000000E+00 1.123014486000000E+00 1.018128136000000E+00 1.017972065000000E+00 8.885055490000000E-01 8.216300520000000E-01 8.223270280000000E-01 7.115676920000000E-01 6.527202480000000E-01 6.448974390000000E-01 5.514149870000000E-01 5.139984880000000E-01 4.805564630000000E-01 5.099534610000000E-01 5.753430740000000E-01 +2.118614902000000E+00 2.250527248000000E+00 0.000000000000000E+00 2.291276832000000E+00 2.276182810000000E+00 0.000000000000000E+00 2.225128242000000E+00 2.186773177000000E+00 0.000000000000000E+00 2.096593878000000E+00 2.036683866000000E+00 0.000000000000000E+00 1.904929729000000E+00 1.813636551000000E+00 0.000000000000000E+00 1.538420789000000E+00 1.244720195000000E+00 1.242887960000000E+00 1.358261021000000E+00 0.000000000000000E+00 1.187508292000000E+00 1.072699654000000E+00 0.000000000000000E+00 9.436564550000000E-01 8.714788080000000E-01 0.000000000000000E+00 7.575274930000000E-01 6.902799900000000E-01 0.000000000000000E+00 5.896973610000000E-01 5.413280750000000E-01 0.000000000000000E+00 5.309675040000000E-01 5.720997830000000E-01 +2.052568934000000E+00 2.119991750000000E+00 2.235882198000000E+00 2.148118798000000E+00 2.134142930000000E+00 2.206998312000000E+00 2.087321530000000E+00 2.050837184000000E+00 2.098118246000000E+00 1.965945068000000E+00 1.915824791000000E+00 1.939346665000000E+00 1.792870511000000E+00 1.707206591000000E+00 1.672118334000000E+00 1.451181189000000E+00 1.212101286000000E+00 1.209619111000000E+00 1.267196605000000E+00 1.162451361000000E+00 1.088757898000000E+00 9.874034630000000E-01 9.896868080000000E-01 8.628521250000000E-01 8.012381560000000E-01 8.036070200000000E-01 6.962791160000000E-01 6.374722920000000E-01 6.300236280000000E-01 5.407615150000000E-01 5.015405750000000E-01 4.708672130000000E-01 4.967750540000000E-01 5.633020640000000E-01 +2.000770355000000E+00 2.061928938000000E+00 2.180936537000000E+00 2.097551686000000E+00 2.084437418000000E+00 2.146044973000000E+00 2.027854076000000E+00 1.996550015000000E+00 2.039882259000000E+00 1.915258230000000E+00 1.865920447000000E+00 1.892016429000000E+00 1.751806647000000E+00 1.672336407000000E+00 1.632858911000000E+00 1.418572971000000E+00 1.185357501000000E+00 1.184784527000000E+00 1.242595059000000E+00 1.143126309000000E+00 1.071660604000000E+00 9.744987160000000E-01 9.726279980000000E-01 8.479868650000000E-01 7.881196120000000E-01 7.897102570000000E-01 6.819975200000000E-01 6.286061580000000E-01 6.224124780000000E-01 5.352455690000000E-01 4.990541230000000E-01 4.681284820000000E-01 4.924285740000000E-01 5.578502570000000E-01 +1.949544750000000E+00 2.070532103000000E+00 0.000000000000000E+00 2.141533870000000E+00 2.121402806000000E+00 0.000000000000000E+00 2.054242960000000E+00 2.016527146000000E+00 0.000000000000000E+00 1.938985349000000E+00 1.889613358000000E+00 0.000000000000000E+00 1.790747514000000E+00 1.717477368000000E+00 0.000000000000000E+00 1.438458169000000E+00 1.165705341000000E+00 1.166289005000000E+00 1.287248564000000E+00 0.000000000000000E+00 1.160398916000000E+00 1.043601971000000E+00 0.000000000000000E+00 9.053078040000000E-01 8.314176490000000E-01 0.000000000000000E+00 7.270273060000000E-01 6.659585180000000E-01 0.000000000000000E+00 5.804613580000000E-01 5.402569550000000E-01 0.000000000000000E+00 5.169916370000000E-01 5.540746130000000E-01 +1.857313006000000E+00 1.920432102000000E+00 2.060250637000000E+00 2.079545757000000E+00 2.002478588000000E+00 2.025318452000000E+00 1.902943561000000E+00 1.866852599000000E+00 1.907854463000000E+00 1.792030292000000E+00 1.752659694000000E+00 1.791848565000000E+00 1.690143505000000E+00 1.671506877000000E+00 1.563965176000000E+00 1.338472031000000E+00 1.117060258000000E+00 1.120562242000000E+00 1.185635436000000E+00 1.134424797000000E+00 1.042537265000000E+00 1.015177747000000E+00 9.691816010000000E-01 8.328287040000000E-01 7.695834690000000E-01 7.718518480000000E-01 6.714338420000000E-01 6.178778570000000E-01 6.218844010000000E-01 5.599304950000000E-01 4.954324130000000E-01 4.774606920000000E-01 4.817793780000000E-01 5.412126250000000E-01 +1.753859092000000E+00 1.796180079000000E+00 1.932483802000000E+00 0.000000000000000E+00 1.975146863000000E+00 1.938996039000000E+00 1.816185003000000E+00 1.779572379000000E+00 1.816843496000000E+00 1.706543822000000E+00 1.674249884000000E+00 1.717126741000000E+00 1.670713692000000E+00 0.000000000000000E+00 1.478459465000000E+00 1.260724989000000E+00 1.066448249000000E+00 1.074884653000000E+00 1.124295127000000E+00 1.076122534000000E+00 0.000000000000000E+00 9.644994610000000E-01 9.849383920000000E-01 8.375600180000000E-01 7.746376150000000E-01 7.740090530000000E-01 6.737193250000000E-01 6.251554850000000E-01 6.335576810000000E-01 5.322053850000000E-01 0.000000000000000E+00 4.667045980000000E-01 4.673951600000000E-01 5.330285010000000E-01 +1.634317002000000E+00 1.653821643000000E+00 1.712979092000000E+00 1.814709808000000E+00 1.831471442000000E+00 0.000000000000000E+00 1.766917773000000E+00 1.736922145000000E+00 0.000000000000000E+00 1.671795502000000E+00 1.636202686000000E+00 0.000000000000000E+00 1.562618259000000E+00 1.477176687000000E+00 1.317847098000000E+00 1.173810360000000E+00 1.013805174000000E+00 1.033284159000000E+00 1.083081605000000E+00 9.830826390000000E-01 9.994637150000000E-01 9.604800890000000E-01 0.000000000000000E+00 8.246060970000000E-01 7.601315330000000E-01 0.000000000000000E+00 6.680815150000000E-01 6.131978550000000E-01 0.000000000000000E+00 5.463223580000000E-01 4.893734250000000E-01 4.305131520000000E-01 4.585867510000000E-01 5.268198550000000E-01 +1.486498208000000E+00 1.494483502000000E+00 1.514118558000000E+00 1.538700862000000E+00 1.561421000000000E+00 1.613533859000000E+00 1.533719407000000E+00 1.506539478000000E+00 1.539098523000000E+00 1.452076996000000E+00 1.419359741000000E+00 1.437812504000000E+00 1.336024063000000E+00 1.261965008000000E+00 1.175601974000000E+00 1.080988538000000E+00 9.547353820000000E-01 1.004842831000000E+00 1.088144302000000E+00 9.846540420000000E-01 9.436521790000000E-01 9.159035510000000E-01 9.235446320000000E-01 8.188100780000000E-01 7.654999590000000E-01 7.599583570000000E-01 6.689794600000000E-01 6.179740650000000E-01 6.070554860000000E-01 5.282031170000000E-01 4.721029560000000E-01 4.404033710000000E-01 4.781533920000000E-01 5.379479550000000E-01 +1.283132985000000E+00 1.281508132000000E+00 1.286352758000000E+00 1.293307553000000E+00 1.297324786000000E+00 1.299950205000000E+00 1.278326843000000E+00 1.259309658000000E+00 1.245936696000000E+00 1.213747518000000E+00 1.183803202000000E+00 1.164967744000000E+00 1.116681839000000E+00 1.067583507000000E+00 1.011848938000000E+00 9.541410280000000E-01 8.786260200000000E-01 1.014797189000000E+00 9.101973270000000E-01 8.536203990000000E-01 8.195476750000000E-01 7.873841530000000E-01 7.559069170000000E-01 7.096242830000000E-01 6.675427480000000E-01 6.308788130000000E-01 5.837196150000000E-01 5.413858000000000E-01 5.055727740000000E-01 4.605408490000000E-01 4.208089360000000E-01 3.971523700000000E-01 4.227630350000000E-01 5.780048380000000E-01 +1.311371206000000E+00 1.295428413000000E+00 1.288332512000000E+00 1.291086209000000E+00 1.293611144000000E+00 1.293251966000000E+00 1.272601377000000E+00 1.253800126000000E+00 1.242887960000000E+00 1.209619111000000E+00 1.184784527000000E+00 1.166289005000000E+00 1.120562242000000E+00 1.074884653000000E+00 1.033284159000000E+00 1.004842831000000E+00 1.014797189000000E+00 7.955062760000000E-01 7.908946890000000E-01 7.730790390000000E-01 7.509019440000000E-01 7.273993120000000E-01 7.012092590000000E-01 6.615927960000000E-01 6.233296640000000E-01 5.880810600000000E-01 5.453880680000000E-01 5.066973430000000E-01 4.723445460000000E-01 4.313469580000000E-01 3.955125520000000E-01 3.762345360000000E-01 3.921110520000000E-01 5.029345270000000E-01 +1.060656506000000E+00 1.343395761000000E+00 1.318898976000000E+00 1.334424866000000E+00 1.357367352000000E+00 1.423064832000000E+00 1.332366007000000E+00 1.311358378000000E+00 1.358261021000000E+00 1.267196605000000E+00 1.242595059000000E+00 1.287248564000000E+00 1.185635436000000E+00 1.124295127000000E+00 1.083081605000000E+00 1.088144302000000E+00 9.101973270000000E-01 7.919871880000000E-01 8.266008170000000E-01 8.311033680000000E-01 8.274944860000000E-01 8.118681110000000E-01 8.072201780000000E-01 7.400710210000000E-01 6.968328480000000E-01 6.799258330000000E-01 6.129434370000000E-01 5.718304000000000E-01 5.476436190000000E-01 4.861664790000000E-01 4.435932130000000E-01 4.144142870000000E-01 4.243836110000000E-01 5.294516880000000E-01 +9.374435330000000E-01 1.170746659000000E+00 1.175274865000000E+00 1.262642743000000E+00 1.288097336000000E+00 0.000000000000000E+00 1.224896998000000E+00 1.198341353000000E+00 0.000000000000000E+00 1.162451361000000E+00 1.143126309000000E+00 0.000000000000000E+00 1.134424797000000E+00 1.076122534000000E+00 9.830826390000000E-01 9.846540420000000E-01 8.536203990000000E-01 7.714263940000000E-01 8.313406820000000E-01 8.656977550000000E-01 9.015578160000000E-01 8.875456040000000E-01 0.000000000000000E+00 7.998677220000000E-01 7.533007390000000E-01 0.000000000000000E+00 6.644747710000000E-01 6.179676520000000E-01 0.000000000000000E+00 5.373300830000000E-01 4.908935170000000E-01 4.406770310000000E-01 4.378976780000000E-01 5.361563410000000E-01 +8.642268360000000E-01 1.093852665000000E+00 1.175944048000000E+00 0.000000000000000E+00 1.179300651000000E+00 1.281910070000000E+00 1.146335392000000E+00 1.123014486000000E+00 1.187508292000000E+00 1.088757898000000E+00 1.071660604000000E+00 1.160398916000000E+00 1.042537265000000E+00 0.000000000000000E+00 9.994637150000000E-01 9.436521790000000E-01 8.195476750000000E-01 7.505235250000000E-01 8.264618490000000E-01 8.982225930000000E-01 0.000000000000000E+00 8.911993830000000E-01 8.514311250000000E-01 7.674668850000000E-01 7.219496430000000E-01 7.081469510000000E-01 6.377502280000000E-01 5.940801860000000E-01 5.816543420000000E-01 5.415354570000000E-01 0.000000000000000E+00 4.656484440000000E-01 4.435419020000000E-01 5.316965500000000E-01 +8.147009120000000E-01 1.049271850000000E+00 1.121246391000000E+00 1.114077799000000E+00 1.141161520000000E+00 1.142395125000000E+00 1.038133061000000E+00 1.018128136000000E+00 1.072699654000000E+00 9.874034630000000E-01 9.744987160000000E-01 1.043601971000000E+00 1.015177747000000E+00 9.644994610000000E-01 9.604800890000000E-01 9.159035510000000E-01 7.873841530000000E-01 7.266018510000000E-01 8.129905410000000E-01 8.889288660000000E-01 8.899037770000000E-01 8.389368660000000E-01 8.231757990000000E-01 7.498393760000000E-01 7.077257720000000E-01 6.916931840000000E-01 6.232035240000000E-01 5.820135200000000E-01 5.681808960000000E-01 5.141652490000000E-01 4.945943310000000E-01 4.633886170000000E-01 4.429133400000000E-01 5.195016060000000E-01 +7.690233230000000E-01 1.046340702000000E+00 0.000000000000000E+00 1.128739953000000E+00 1.083607544000000E+00 0.000000000000000E+00 1.037316359000000E+00 1.017972065000000E+00 0.000000000000000E+00 9.896868080000000E-01 9.726279980000000E-01 0.000000000000000E+00 9.691816010000000E-01 9.849383920000000E-01 0.000000000000000E+00 9.235446320000000E-01 7.559069170000000E-01 7.011387060000000E-01 8.099802890000000E-01 0.000000000000000E+00 8.499516540000000E-01 8.225707560000000E-01 0.000000000000000E+00 7.525909350000000E-01 7.121620460000000E-01 0.000000000000000E+00 6.291299590000000E-01 5.853487430000000E-01 0.000000000000000E+00 5.097631820000000E-01 4.739009830000000E-01 0.000000000000000E+00 4.457824870000000E-01 5.094766950000000E-01 +7.131519230000000E-01 9.199614060000000E-01 9.487255660000000E-01 9.589257900000000E-01 9.265292290000000E-01 9.828538770000000E-01 8.993664040000000E-01 8.885055490000000E-01 9.436564550000000E-01 8.628521250000000E-01 8.479868650000000E-01 9.053078040000000E-01 8.328287040000000E-01 8.375600180000000E-01 8.246060970000000E-01 8.188100780000000E-01 7.096242830000000E-01 6.590806890000000E-01 7.393847350000000E-01 8.018218200000000E-01 7.674305400000000E-01 7.486378410000000E-01 7.523578970000000E-01 6.897241200000000E-01 6.532034270000000E-01 6.432362420000000E-01 5.787360220000000E-01 5.374433950000000E-01 5.238758790000000E-01 4.660760370000000E-01 4.314966160000000E-01 4.258759100000000E-01 4.123725320000000E-01 4.852578450000000E-01 +6.652080920000000E-01 8.516620250000000E-01 8.719277800000000E-01 8.815464780000000E-01 8.556920860000000E-01 9.021115490000000E-01 8.322151090000000E-01 8.216300520000000E-01 8.714788080000000E-01 8.012381560000000E-01 7.881196120000000E-01 8.314176490000000E-01 7.695834690000000E-01 7.746376150000000E-01 7.601315330000000E-01 7.654999590000000E-01 6.675427480000000E-01 6.222157850000000E-01 6.979274850000000E-01 7.555391870000000E-01 7.239400870000000E-01 7.055471870000000E-01 7.103020180000000E-01 6.534728110000000E-01 6.206614850000000E-01 6.093088990000000E-01 5.505448350000000E-01 5.123693600000000E-01 4.972881650000000E-01 4.416262860000000E-01 4.108994750000000E-01 4.046972430000000E-01 3.926989920000000E-01 4.616739700000000E-01 +6.219635050000000E-01 8.392725260000000E-01 0.000000000000000E+00 8.792225120000000E-01 8.548796600000000E-01 0.000000000000000E+00 8.339425830000000E-01 8.223270280000000E-01 0.000000000000000E+00 8.036070200000000E-01 7.897102570000000E-01 0.000000000000000E+00 7.718518480000000E-01 7.740090530000000E-01 0.000000000000000E+00 7.599583570000000E-01 6.308788130000000E-01 5.881473370000000E-01 6.806099810000000E-01 0.000000000000000E+00 7.106996790000000E-01 6.922426400000000E-01 0.000000000000000E+00 6.443522590000000E-01 6.107071280000000E-01 0.000000000000000E+00 5.430598250000000E-01 5.059383660000000E-01 0.000000000000000E+00 4.362920680000000E-01 4.043423410000000E-01 0.000000000000000E+00 3.855475050000000E-01 4.394819090000000E-01 +5.705476220000000E-01 7.331525710000000E-01 7.556225680000000E-01 7.592228980000000E-01 7.377598830000000E-01 7.854685380000000E-01 7.227727590000000E-01 7.115676920000000E-01 7.575274930000000E-01 6.962791160000000E-01 6.819975200000000E-01 7.270273060000000E-01 6.714338420000000E-01 6.737193250000000E-01 6.680815150000000E-01 6.689794600000000E-01 5.837196150000000E-01 5.455911740000000E-01 6.141000760000000E-01 6.641198690000000E-01 6.392403880000000E-01 6.242874720000000E-01 6.306457750000000E-01 5.797558300000000E-01 5.504635930000000E-01 5.430042380000000E-01 4.888859690000000E-01 4.565257540000000E-01 4.440699790000000E-01 3.934430040000000E-01 3.649995380000000E-01 3.612581020000000E-01 3.500722770000000E-01 4.110833400000000E-01 +5.266338520000000E-01 6.724408230000000E-01 6.882681660000000E-01 6.976431360000000E-01 6.767338530000000E-01 7.126495020000000E-01 6.605580220000000E-01 6.527202480000000E-01 6.902799900000000E-01 6.374722920000000E-01 6.286061580000000E-01 6.659585180000000E-01 6.178778570000000E-01 6.251554850000000E-01 6.131978550000000E-01 6.179740650000000E-01 5.413858000000000E-01 5.054359440000000E-01 5.689569770000000E-01 6.178650290000000E-01 5.949460610000000E-01 5.820904870000000E-01 5.850750840000000E-01 5.401864020000000E-01 5.128867470000000E-01 5.046641390000000E-01 4.548324870000000E-01 4.262436390000000E-01 4.137322770000000E-01 3.688500100000000E-01 3.421981570000000E-01 3.361605480000000E-01 3.271939300000000E-01 3.842882440000000E-01 +4.851637750000000E-01 6.580288110000000E-01 0.000000000000000E+00 7.026203150000000E-01 6.759898420000000E-01 0.000000000000000E+00 6.544691020000000E-01 6.448974390000000E-01 0.000000000000000E+00 6.300236280000000E-01 6.224124780000000E-01 0.000000000000000E+00 6.218844010000000E-01 6.335576810000000E-01 0.000000000000000E+00 6.070554860000000E-01 5.055727740000000E-01 4.719041250000000E-01 5.468033990000000E-01 0.000000000000000E+00 5.825522870000000E-01 5.679093750000000E-01 0.000000000000000E+00 5.251586570000000E-01 4.976794130000000E-01 0.000000000000000E+00 4.429646520000000E-01 4.130224730000000E-01 0.000000000000000E+00 3.594707640000000E-01 3.344181080000000E-01 0.000000000000000E+00 3.151849890000000E-01 3.589063420000000E-01 +4.382162350000000E-01 5.677704070000000E-01 6.070362440000000E-01 5.902126100000000E-01 6.106151950000000E-01 6.197357470000000E-01 5.620299750000000E-01 5.514149870000000E-01 5.896973610000000E-01 5.407615150000000E-01 5.352455690000000E-01 5.804613580000000E-01 5.599304950000000E-01 5.322053850000000E-01 5.463223580000000E-01 5.282031170000000E-01 4.605408490000000E-01 4.310583330000000E-01 4.869938710000000E-01 5.375887770000000E-01 5.411228300000000E-01 5.143298720000000E-01 5.089015830000000E-01 4.664394910000000E-01 4.411986940000000E-01 4.362407560000000E-01 3.932890700000000E-01 3.679648930000000E-01 3.594515220000000E-01 3.252654870000000E-01 3.118925250000000E-01 2.944830890000000E-01 2.815526850000000E-01 3.283591200000000E-01 +3.985185290000000E-01 5.044375150000000E-01 5.427049230000000E-01 0.000000000000000E+00 5.391687320000000E-01 5.784730520000000E-01 5.221954400000000E-01 5.139984880000000E-01 5.413280750000000E-01 5.015405750000000E-01 4.990541230000000E-01 5.402569550000000E-01 4.954324130000000E-01 0.000000000000000E+00 4.893734250000000E-01 4.721029560000000E-01 4.208089360000000E-01 3.953928260000000E-01 4.435055560000000E-01 4.914964220000000E-01 0.000000000000000E+00 4.934783150000000E-01 4.737149800000000E-01 4.321294530000000E-01 4.104227100000000E-01 4.033396370000000E-01 3.657798940000000E-01 3.411569690000000E-01 3.344352120000000E-01 3.136285510000000E-01 0.000000000000000E+00 2.701723060000000E-01 2.567801030000000E-01 3.008200120000000E-01 +3.778700780000000E-01 4.706234850000000E-01 4.764708150000000E-01 5.150653320000000E-01 5.217272260000000E-01 0.000000000000000E+00 4.886956900000000E-01 4.805564630000000E-01 0.000000000000000E+00 4.708672130000000E-01 4.681284820000000E-01 0.000000000000000E+00 4.774606920000000E-01 4.667045980000000E-01 4.305131520000000E-01 4.404033710000000E-01 3.971523700000000E-01 3.746503050000000E-01 4.153314740000000E-01 4.414124900000000E-01 4.657040310000000E-01 4.630743360000000E-01 0.000000000000000E+00 4.259293590000000E-01 4.048297970000000E-01 0.000000000000000E+00 3.607749220000000E-01 3.368126270000000E-01 0.000000000000000E+00 2.965547750000000E-01 2.699820270000000E-01 2.428833400000000E-01 2.373524290000000E-01 2.771420670000000E-01 +4.121052870000000E-01 5.174940580000000E-01 5.082281250000000E-01 5.135174460000000E-01 5.217999170000000E-01 5.480049350000000E-01 5.135751710000000E-01 5.099534610000000E-01 5.309675040000000E-01 4.967750540000000E-01 4.924285740000000E-01 5.169916370000000E-01 4.817793780000000E-01 4.673951600000000E-01 4.585867510000000E-01 4.781533920000000E-01 4.227630350000000E-01 3.903964060000000E-01 4.256535610000000E-01 4.399757790000000E-01 4.458380740000000E-01 4.412842120000000E-01 4.447348850000000E-01 4.127851590000000E-01 3.936781800000000E-01 3.857677150000000E-01 3.498606180000000E-01 3.273970360000000E-01 3.165939070000000E-01 2.826216670000000E-01 2.560574710000000E-01 2.363796550000000E-01 2.315029610000000E-01 2.654944420000000E-01 +6.014796770000000E-01 5.921624320000000E-01 5.872857380000000E-01 5.880960260000000E-01 5.863364820000000E-01 5.887224490000000E-01 5.793645830000000E-01 5.753430740000000E-01 5.720997830000000E-01 5.633020640000000E-01 5.578502570000000E-01 5.540746130000000E-01 5.412126250000000E-01 5.330285010000000E-01 5.268198550000000E-01 5.379479550000000E-01 5.780048380000000E-01 5.015106430000000E-01 5.273329660000000E-01 5.350937730000000E-01 5.318355170000000E-01 5.195016060000000E-01 5.076872200000000E-01 4.835154050000000E-01 4.602736040000000E-01 4.398624670000000E-01 4.112372740000000E-01 3.843288650000000E-01 3.578608780000000E-01 3.286220890000000E-01 3.000503450000000E-01 2.765840580000000E-01 2.652378860000000E-01 2.862925500000000E-01 diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 0a364b1aa0f..023fd6ecd4e 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -31,6 +31,7 @@ class DecompositionMap { // Methods to find rank centres that divide spatial domain up into equal // Voronoi volumes + void initialize(); void generate_rank_centers(); //TODO: put in constructor void calculate_grid_points(int grid_points_per_dimension); void initialize_points(); @@ -44,8 +45,12 @@ class DecompositionMap { discovered_source_regions); bool any_discovered_source_regions(ParallelMap& discovered_source_regions); - void transfer_sr_data(int sender, int receiver, SourceRegionKey sr_key, ParallelMap& - discovered_source_regions); + // void transfer_sr_data(int sender, int receiver, SourceRegionKey sr_key, ParallelMap& + // discovered_source_regions); + void transfer_sr_data(int sender, int receiver, SourceRegion& sr_send, SourceRegion& sr_recv); + void send_sr_data(int receiver, SourceRegion& sr_send); + void receive_sr_data(int sender, SourceRegion& sr_recv); + // Method to check if source region key is in subdomain of calling rank // bool is_SRK_in_domain(SourceRegionKey sr_key, Position r); @@ -68,6 +73,10 @@ class DecompositionMap { void calculate_rank_load(FlatSourceDomain* domain); // void calculate_rank_load(uint64_t total_geometric_intersections); + void balance_load(FlatSourceDomain* domain); + void update_load(FlatSourceDomain* domain); + void redistribute_source_regions(FlatSourceDomain* domain); + bool load_balanced() const { return max_imbalance_ < imbalance_tolerance_; } @@ -94,7 +103,8 @@ class DecompositionMap { vector rank_load_; // std::unordered_set outside_source_regions_; // std::unordered_map outside_source_regions_; - + double target_load_; + vector rank_weights_; private: //---------------------------------------------------------------------------- @@ -105,6 +115,12 @@ class DecompositionMap { vector grid_points_; int grid_points_per_rank_{10}; int negroups_; + uint64_t n_hits_sum_; + + double max_domain_length_; + bool is_linear_; + double max_imbalance_ = 0.0; + double imbalance_tolerance_ = 0.01; // 1% imbalance tolerance // vector position_sum_per_rank(mpi::n_procs, Position(0,0,0)); // vector num_points_per_rank(mpi::n_procs, 0); diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index b1aebc43654..00f0883aa0f 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -68,7 +68,7 @@ class RandomRaySimulation { uint64_t avg_num_comms_ {0}; uint64_t num_comms_batch_ {0}; uint64_t num_ray_crossings_ {0}; //TODO: temporary - vector rank_load_; + // vector rank_load_; }; // class RandomRaySimulation diff --git a/include/openmc/random_ray/source_region.h b/include/openmc/random_ray/source_region.h index def1485a1cf..3f8fa6cbffe 100644 --- a/include/openmc/random_ray/source_region.h +++ b/include/openmc/random_ray/source_region.h @@ -163,6 +163,7 @@ class SourceRegionHandle { Position* centroid_t_; MomentMatrix* mom_matrix_; MomentMatrix* mom_matrix_t_; + SourceRegionKey* key_; // A set of volume tally tasks. This more complicated data structure is // convenient for ensuring that volumes are only tallied once per source // region, regardless of how many energy groups are used for tallying. @@ -246,6 +247,9 @@ class SourceRegionHandle { MomentMatrix& mom_matrix_t() { return *mom_matrix_t_; } const MomentMatrix mom_matrix_t() const { return *mom_matrix_t_; } + SourceRegionKey& key() { return *key_; } + const SourceRegionKey key() const { return *key_; } + std::unordered_set& volume_task() { return *volume_task_; @@ -320,6 +324,7 @@ class ScalarSourceRegionFields { // Mesh that subdivides this source region int mesh_ {C_NONE}; //!< Index in openmc::model::meshes array that subdivides //!< this source region + SourceRegionKey key_ {0, 0}; //!< The key (base source region + mesh bin) int64_t parent_sr_ {C_NONE}; //!< Index of a parent source region Position position_ { 0.0, 0.0, 0.0}; //!< A position somewhere inside the region @@ -340,6 +345,7 @@ class SourceRegion { // Constructors SourceRegion(int negroups, bool is_linear); SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr); + SourceRegion(const SourceRegionHandle& handle); SourceRegion() = default; //---------------------------------------------------------------------------- @@ -469,6 +475,12 @@ class SourceRegionContainer { return mom_matrix_t_[sr]; } + SourceRegionKey& key(int64_t sr) { return key_[sr]; } + const SourceRegionKey key(int64_t sr) const + { + return key_[sr]; + } + MomentArray& source_gradients(int64_t sr, int g) { return source_gradients_[index(sr, g)]; @@ -617,6 +629,7 @@ class SourceRegionContainer { // Public Methods void push_back(const SourceRegion& sr); + // void erase(int sr_idx); void assign(int n_source_regions, const SourceRegion& source_region); void flux_swap(); int64_t n_source_regions() const { return n_source_regions_; } @@ -655,6 +668,7 @@ class SourceRegionContainer { vector centroid_t_; vector mom_matrix_; vector mom_matrix_t_; + vector key_; // A set of volume tally tasks. This more complicated data structure is // convenient for ensuring that volumes are only tallied once per source // region, regardless of how many energy groups are used for tallying. diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 377d0a21487..ea75fa5f655 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -17,16 +17,28 @@ namespace mpi { } // Constructor -DecompositionMap::DecompositionMap() { - // negroups_ = data::mg.num_energy_groups_; //TODO: constructor gets called before num_energy_groups is known? - // rank_load_.resize(mpi::n_procs, 0.0); -} +DecompositionMap::DecompositionMap() {} -void DecompositionMap::generate_rank_centers(){ +void DecompositionMap::initialize(){ + negroups_ = data::mg.num_energy_groups_; + rank_load_.resize(mpi::n_procs, 0.0); + target_load_ = 1.0/mpi::n_procs; + rank_weights_.resize(mpi::n_procs, 0.0); spatial_box_ = dynamic_cast( dynamic_cast(RandomRay::ray_source_.get())->space()); + double x_length = spatial_box_->upper_right().x - spatial_box_->lower_left().x; + double y_length = spatial_box_->upper_right().y - spatial_box_->lower_left().y; + double z_length = spatial_box_->upper_right().z - spatial_box_->lower_left().z; + + max_domain_length_ = sqrt(x_length*x_length + y_length*y_length + z_length*z_length); + + is_linear_ = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; //TODO: SHould that be decided gloabbly or on sr by sr base? +} + +void DecompositionMap::generate_rank_centers(){ + // Calculate grid points that are used for Voronoi cells int grid_points_per_dimension = ceil(grid_points_per_rank_ * cbrt(mpi::n_procs)); // number of grid points in each dimension calculate_grid_points(grid_points_per_dimension); @@ -157,6 +169,9 @@ void DecompositionMap::calculate_voronoi(vector& position_sum_per_rank // Find closest rank center for (int rank = 0; rank < mpi::n_procs; rank++) { double dist = (point - rank_centers_[rank]).norm(); + // Power Voronoi diagram uses sqaured distances + dist *= dist; + if (dist < min_distance) { min_distance = dist; closest_rank = rank; @@ -185,7 +200,7 @@ void DecompositionMap::calculate_voronoi(vector& position_sum_per_rank Position DecompositionMap::calculate_centroids(const Position position_sum, const int num_points, int rank){ // check if any points have been recorded in rank - if (position_sum.norm() == 0.0){ + if (num_points == 0){ fatal_error("Rank " + std::to_string(rank) + " has no Voronoi cell points. Mesh is too coarse."); } @@ -204,7 +219,7 @@ Position DecompositionMap::calculate_centroids(const Position position_sum, cons void DecompositionMap::update(ParallelMap& discovered_source_regions){ - negroups_ = data::mg.num_energy_groups_; //TODO: This should not be called here again an dagain + // negroups_ = data::mg.num_energy_groups_; //TODO: This should not be called here again an dagain // outside_source_regions_.clear(); @@ -252,6 +267,8 @@ bool DecompositionMap::any_discovered_source_regions(ParallelMap& discovered_source_regions){ + // bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; + // Communicate maps for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -379,13 +396,36 @@ void DecompositionMap::exchange_sr_info(ParallelMap(n_hits_sum_); + rank_load_[sender] -= load_change; + rank_load_[receiver] += load_change; // Merge source region data - if (mpi::rank == sender || mpi::rank == receiver){ - transfer_sr_data(sender, receiver, sr_key, discovered_source_regions); - } + // if (mpi::rank == sender || mpi::rank == receiver){ + // SourceRegion& sr = discovered_source_regions[sr_key]; + // SourceRegion sr_recv(negroups_, is_linear); + // transfer_sr_data(sender, receiver, sr, sr_recv, is_linear); + + if (mpi::rank == sender){ + SourceRegion& sr = discovered_source_regions[sr_key]; + // SourceRegion sr_recv(negroups_, is_linear); + // transfer_sr_data(sender, receiver, sr, sr_recv, is_linear); + send_sr_data(receiver, sr); + + // clear old source region data from discovered regions map + discovered_source_regions.erase(sr_key); + // printf("Source region erased from rank %d \n", sender); + } + if (mpi::rank == receiver){ + SourceRegion& sr = discovered_source_regions[sr_key]; + SourceRegion sr_recv(negroups_, is_linear_); + // transfer_sr_data(sender, receiver, sr, sr_recv, is_linear); + receive_sr_data(sender, sr_recv); + + sr.merge(sr_recv, is_linear_); + } + + // } // if (mpi::master){ // printf(" Source regions transferred\n"); @@ -397,17 +437,19 @@ void DecompositionMap::exchange_sr_info(ParallelMap& - discovered_source_regions){ +// void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKey sr_key, ParallelMap& +// discovered_source_regions){ + +void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegion& sr_send, SourceRegion& sr_recv){ - bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; + // bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; - SourceRegion& sr = discovered_source_regions[sr_key]; //TODO: maybe this can be done more efficiently? + // SourceRegion& sr_send = discovered_source_regions[sr_key]; int num_scalar_messages = 1; //! NOTE: update if new vector fields are added to SourceExchangeVectors struct int num_vector_messages = 4; - if (is_linear){ + if (is_linear_){ num_vector_messages += 4; } if (settings::run_mode == RunMode::FIXED_SOURCE) { @@ -416,64 +458,51 @@ void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKe int num_requests = num_scalar_messages + num_vector_messages; vector requests(num_requests); - // MPI_Request requests[num_requests]; int req_idx = 0; if (mpi::rank == sender){ //TODO: maybe add check that only sends fields that are needed when source regions are freshly discovered? - // SourceRegion sr = discovered_source_regions[sr_key]; //TODO: maybe this can be done more efficiently? - - // printf("Rank %d sending source region with base id %ld, mesh bin %ld to rank %d \n", sender, sr_key.base_source_region_id, sr_key.mesh_bin, receiver); - - // printf("RANK %d: Source Region exists %d \n", mpi::rank, discovered_source_regions.contains(sr_key)); - // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_old_.size()); - // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_new_.size()); - // printf("Size 3 flux new on rank %d: %lu \n", mpi::rank, sr.source_.size()); - // printf("Size 4 flux new on rank %d: %lu \n", mpi::rank, sr.external_source_.size()); - // printf("Size 5 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_final_.size()); - // printf("is linear: %d \n", is_linear); - // Send scalar data to receiver - MPI_Isend(&sr.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, receiver, 1, mpi::intracomm, &requests[req_idx]); + MPI_Isend(&sr_send.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, receiver, 1, mpi::intracomm, &requests[req_idx]); req_idx ++; // Send vector data to receiver // Tags hardcoded to avoid confusion if new fields are not added sequentially - MPI_Isend(sr.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, receiver, 2, mpi::intracomm, &requests[req_idx]); + MPI_Isend(sr_send.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, receiver, 2, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_old_.size()); + // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_old_.size()); - MPI_Isend(sr.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, receiver, 3, mpi::intracomm, &requests[req_idx]); + MPI_Isend(sr_send.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, receiver, 3, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_new_.size()); + // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_new_.size()); - MPI_Isend(sr.source_.data(), negroups_, MPI_FLOAT, receiver, 4, mpi::intracomm, &requests[req_idx]); + MPI_Isend(sr_send.source_.data(), negroups_, MPI_FLOAT, receiver, 4, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 3 flux new on rank %d: %lu \n", mpi::rank, sr.source_.size()); + // printf("Size 3 flux new on rank %d: %lu \n", mpi::rank, sr_send.source_.size()); if (settings::run_mode == RunMode::FIXED_SOURCE) { - MPI_Isend(sr.external_source_.data(), negroups_, MPI_FLOAT, receiver, 5, mpi::intracomm, &requests[req_idx]); + MPI_Isend(sr_send.external_source_.data(), negroups_, MPI_FLOAT, receiver, 5, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 4 flux new on rank %d: %lu \n", mpi::rank, sr.external_source_.size()); + // printf("Size 4 flux new on rank %d: %lu \n", mpi::rank, sr_send.external_source_.size()); } - MPI_Isend(sr.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, receiver, 6, mpi::intracomm, &requests[req_idx]); + MPI_Isend(sr_send.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, receiver, 6, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 5 flux new on rank %d: %lu \n", mpi::rank, sr.scalar_flux_final_.size()); + // printf("Size 5 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_final_.size()); - if (is_linear){ - MPI_Isend(sr.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, receiver, 7, mpi::intracomm, &requests[req_idx]); + if (is_linear_){ + MPI_Isend(sr_send.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, receiver, 7, mpi::intracomm, &requests[req_idx]); req_idx ++; - MPI_Isend(sr.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, receiver, 8, mpi::intracomm, &requests[req_idx]); + MPI_Isend(sr_send.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, receiver, 8, mpi::intracomm, &requests[req_idx]); req_idx ++; - MPI_Isend(sr.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, receiver, 9, mpi::intracomm, &requests[req_idx]); + MPI_Isend(sr_send.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, receiver, 9, mpi::intracomm, &requests[req_idx]); req_idx ++; - MPI_Isend(sr.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, receiver, 10, mpi::intracomm, &requests[req_idx]); + MPI_Isend(sr_send.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, receiver, 10, mpi::intracomm, &requests[req_idx]); req_idx ++; } // printf("Send complete"); @@ -487,7 +516,7 @@ void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKe // MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); - discovered_source_regions.erase(sr_key); + // discovered_source_regions.erase(sr_key); // printf("Source region erased from rank %d \n", sender); } else if (mpi::rank == receiver){ @@ -496,32 +525,14 @@ void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKe // printf("Energy groups: %d \n", negroups_); - SourceRegion sr_recv(negroups_, is_linear); - - // sr_recv.scalar_flux_old_.resize(negroups_); - // sr_recv.scalar_flux_new_.resize(negroups_); - // sr_recv.source_.resize(negroups_); - // sr_recv.external_source_.resize(negroups_); - // sr_recv.scalar_flux_final_.resize(negroups_); - // if (is_linear){ - // sr_recv.source_gradients_.resize(negroups_); - // sr_recv.flux_moments_old_.resize(negroups_); - // sr_recv.flux_moments_new_.resize(negroups_); - // sr_recv.flux_moments_t_.resize(negroups_); - // } - - // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr_recv.scalar_flux_new_.size()); + // SourceRegion sr_recv(negroups_, is_linear); // Receive scalar data from sender MPI_Recv(&sr_recv.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, sender, 1, mpi::intracomm, MPI_STATUS_IGNORE); // Receive vector data from sender MPI_Recv(sr_recv.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, sender, 2, mpi::intracomm, MPI_STATUS_IGNORE); - MPI_Recv(sr_recv.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, sender, 3, mpi::intracomm, MPI_STATUS_IGNORE); - - // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr_recv.scalar_flux_new_.size()); - - + MPI_Recv(sr_recv.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, sender, 3, mpi::intracomm, MPI_STATUS_IGNORE); MPI_Recv(sr_recv.source_.data(), negroups_, MPI_FLOAT, sender, 4, mpi::intracomm, MPI_STATUS_IGNORE); if (settings::run_mode == RunMode::FIXED_SOURCE) { @@ -530,38 +541,113 @@ void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegionKe MPI_Recv(sr_recv.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, sender, 6, mpi::intracomm, MPI_STATUS_IGNORE); - if (is_linear){ + if (is_linear_){ MPI_Recv(sr_recv.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, sender, 7, mpi::intracomm, MPI_STATUS_IGNORE); MPI_Recv(sr_recv.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, sender, 8, mpi::intracomm, MPI_STATUS_IGNORE); MPI_Recv(sr_recv.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, sender, 9, mpi::intracomm, MPI_STATUS_IGNORE); MPI_Recv(sr_recv.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, sender, 10, mpi::intracomm, MPI_STATUS_IGNORE); } - // // Merge source region data %TODO: is it OK to make this method of source region class? - // sr_recv.merge(sr, is_linear); - - // // clear old source region data from discovered regions map //TODO: deleting and replacing seems wasteful! - // discovered_source_regions.erase(sr_key); - - // printf("Source region received on rank %d \n", receiver); - // printf("RANK %d: Source Region exists %d \n", mpi::rank, discovered_source_regions.contains(sr_key)); // Merge source region data %TODO: is it OK to make this method of source region class? - sr.merge(sr_recv, is_linear); + // sr_send.merge(sr_recv, is_linear); // TODO: will this feed back automatically into discovered_source_regions? + } + +} - // // add new merged source region to discovered regions map - // discovered_source_regions.emplace(sr_key, sr_recv); +void DecompositionMap::send_sr_data(int receiver, SourceRegion& sr_send){ + int num_scalar_messages = 1; + //! NOTE: update if new vector fields are added to SourceExchangeVectors struct + int num_vector_messages = 4; + if (is_linear_){ + num_vector_messages += 4; + } + if (settings::run_mode == RunMode::FIXED_SOURCE) { + num_vector_messages += 1; } + int num_requests = num_scalar_messages + num_vector_messages; - // // Wait for all communication to complete - // MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); + vector requests(num_requests); + int req_idx = 0; - // if (mpi::rank == sender){ - // // clear old source region data from discovered regions map - // discovered_source_regions.erase(sr_key); - // printf("Source region erased from rank %d \n", sender); - // } + // Send scalar data to receiver + MPI_Isend(&sr_send.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, receiver, 1, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + // Send vector data to receiver + // Tags hardcoded to avoid confusion if new fields are not added sequentially + MPI_Isend(sr_send.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, receiver, 2, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_old_.size()); + + MPI_Isend(sr_send.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, receiver, 3, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_new_.size()); + + MPI_Isend(sr_send.source_.data(), negroups_, MPI_FLOAT, receiver, 4, mpi::intracomm, &requests[req_idx]); + req_idx ++; + // printf("Size 3 flux new on rank %d: %lu \n", mpi::rank, sr_send.source_.size()); + + if (settings::run_mode == RunMode::FIXED_SOURCE) { + MPI_Isend(sr_send.external_source_.data(), negroups_, MPI_FLOAT, receiver, 5, mpi::intracomm, &requests[req_idx]); + req_idx ++; + // printf("Size 4 flux new on rank %d: %lu \n", mpi::rank, sr_send.external_source_.size()); + } + + MPI_Isend(sr_send.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, receiver, 6, mpi::intracomm, &requests[req_idx]); + req_idx ++; + // printf("Size 5 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_final_.size()); + + if (is_linear_){ + MPI_Isend(sr_send.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, receiver, 7, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + MPI_Isend(sr_send.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, receiver, 8, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + MPI_Isend(sr_send.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, receiver, 9, mpi::intracomm, &requests[req_idx]); + req_idx ++; + + MPI_Isend(sr_send.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, receiver, 10, mpi::intracomm, &requests[req_idx]); + req_idx ++; + } + // printf("Send complete"); + + if (req_idx != num_requests){ + fatal_error(fmt::format("Number of MPI requests does not match number of messages sent." + "Check if num_vector_messages is up to date in DecompositionMap::transfer_sr_data().")); + } + + // Wait for all communication to complete + MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); + +} + +void DecompositionMap::receive_sr_data(int sender, SourceRegion& sr_recv){ + + // Receive scalar data from sender + MPI_Recv(&sr_recv.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, sender, 1, mpi::intracomm, MPI_STATUS_IGNORE); + + // Receive vector data from sender + MPI_Recv(sr_recv.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, sender, 2, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, sender, 3, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.source_.data(), negroups_, MPI_FLOAT, sender, 4, mpi::intracomm, MPI_STATUS_IGNORE); + + if (settings::run_mode == RunMode::FIXED_SOURCE) { + MPI_Recv(sr_recv.external_source_.data(), negroups_, MPI_FLOAT, sender, 5, mpi::intracomm, MPI_STATUS_IGNORE); + } + + MPI_Recv(sr_recv.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, sender, 6, mpi::intracomm, MPI_STATUS_IGNORE); + + if (is_linear_){ + MPI_Recv(sr_recv.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, sender, 7, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, sender, 8, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, sender, 9, mpi::intracomm, MPI_STATUS_IGNORE); + MPI_Recv(sr_recv.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, sender, 10, mpi::intracomm, MPI_STATUS_IGNORE); + } } @@ -612,6 +698,9 @@ int DecompositionMap::find_closest_rank(Position r) { // Find closest rank center for (int rank = 0; rank < mpi::n_procs; rank++) { double dist = (r - rank_centers_[rank]).norm(); + // Power Voronoi diagram uses sqaured distances + // dist *= dist; + dist = dist*dist - rank_weights_[rank]; if (dist < min_distance) { min_distance = dist; closest_rank = rank; @@ -665,7 +754,7 @@ int DecompositionMap::find_closest_rank(Position r) { void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: This uses accumulated value, not batch-wise values! - rank_load_.resize(mpi::n_procs, 0.0); //TODO: that should be moved elsewhere + // rank_load_.resize(mpi::n_procs, 0.0); //TODO: that should be moved elsewhere // Reset rank load std::fill(rank_load_.begin(), rank_load_.end(), 0.0); @@ -692,7 +781,8 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th // Calculate rank load based on number of geometric intersections uint64_t n_hits_total = 0; MPI_Allreduce(&n_hits_rank, &n_hits_total, 1, MPI_INT64_T, MPI_SUM, mpi::intracomm); - double load = (n_hits_rank/static_cast(n_hits_total))*100.0; + double load = (n_hits_rank/static_cast(n_hits_total)); + n_hits_sum_ = n_hits_total; if(mpi::master){ printf("Total hits: %ld \n", n_hits_total); @@ -708,13 +798,327 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th rank_load_[rank] = bcast_load; // Temporary print-outs if (mpi::master) { - printf("RANK %d: %.2f%% ", rank, rank_load_[rank]); + printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); } } // Temporary print-outs if (mpi::master) { printf("\n"); } + + double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); + double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; + max_imbalance_ = (max_load - avg_load) / avg_load; +} + +void DecompositionMap::balance_load(FlatSourceDomain* domain){ + + // if (mpi::master) printf("Starting MPI load balancing... \n"); + + int max_iterations = 1000; + // double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); + // double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; + // double max_imbalance = (max_load - avg_load) / avg_load; + double max_imbalance = max_imbalance_; + + // double tol_outer = 0.01; + int it_outer = 0; + double adaptation_factor = 0.5; //1; //0.1; + double min_factor = 0.1; + double max_factor = 2; + double prev_imbalance = max_imbalance; + double avg_rank_distance = max_domain_length_/cbrt(mpi::n_procs); // rough estimate of average distance between ranks //TODO: cubic root might not be adaquate for problems that are not box like + double weight_scale = avg_rank_distance * avg_rank_distance; + double beta = 0.6; // momentum damping + + vector weight_change(mpi::n_procs, 0.0); + + std::unordered_map> sr_send; // contains regions to be send + + // if (mpi::master) printf("Max. load: %.2f%%, Avg. load: %.2f%%, Max. imbalance: %.2f%% \n", max_load*100.0, avg_load*100.0, max_imbalance*100.0); + + while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ + + if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); + + // Optimise rank load rank by rank + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // double correction = adaptation_factor * ((rank_load_[rank] - target_load_) / target_load_); // * weight_scale; + // rank_weights_[rank] -= correction; + // } + + for (int rank = 0; rank < mpi::n_procs; rank++) { + double corr = ((rank_load_[rank] - target_load_) / target_load_) * weight_scale; + weight_change[rank] = beta * weight_change[rank] + (1.0 - beta) * corr; // keep some inertia from previous changes to prevent oscillations + // double damping = std::min(1.0, max_imbalance / imbalance_tolerance_); // dampening factor based on how far we are from convergence + double damping = std::clamp(max_imbalance / prev_imbalance, 0.1, 1.0); // dampening factor based on whether we are getting closer to convergence or not, prevents big jumps, if too big a change, more dampening is applied + rank_weights_[rank] -= adaptation_factor * damping * weight_change[rank]; + } + + update_load(domain); + it_outer ++; + + double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); + double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0) / mpi::n_procs; + max_imbalance = (max_load - avg_load) / avg_load; + + // Adaptive factor + if (max_imbalance > prev_imbalance) + adaptation_factor = std::max(adaptation_factor * 0.5, min_factor); // don’t go below min + else + adaptation_factor = std::min(adaptation_factor * 1.05, max_factor); // stable - accelerate slightly + + prev_imbalance = max_imbalance; + + } + + if (mpi::master && it_outer == max_iterations){ + warning("MPI load balancing has not converged. Using best estimate after " + + std::to_string(max_iterations) + " iterations."); //TODO: maybe revert to previous weights, if not converged? + } else { + if (mpi::master){ + printf("MPI load balancing converged after %d iterations. Max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); + } + } + + // if (mpi::master) printf("Finished rebalancing \n"); + + // fatal_error("STOP"); + + // update decomposition map + redistribute_source_regions(domain); + +} + +void DecompositionMap::update_load(FlatSourceDomain* domain){ + + vector n_hits(mpi::n_procs, 0); + + // add source region hits + #pragma omp parallel + { + // number of hits per thread + vector local_hits(mpi::n_procs, 0); + + // if (mpi::master) printf("Calculating rank loads... \n"); + + #pragma omp for + for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + + Position centroid = domain->source_regions_.centroid(sr); + int owner = C_NONE; + double min_distance = INFTY; + + // Find closest rank center + for (int rank = 0; rank < mpi::n_procs; rank++) { + double dist = (centroid - rank_centers_[rank]).norm(); + // Power Voronoi diagram uses squared distances + dist = dist*dist - rank_weights_[rank]; + if (dist < min_distance) { + min_distance = dist; + owner = rank; + // if (min_distance < 0.0){ + // break; // no need to continue searching + // } + } + } + + local_hits[owner] += domain->source_regions_.n_hits(sr); + } + + // Combine results from different threads + #pragma omp critical (combining_hits) + { + for (int i = 0; i < mpi::n_procs; i++) { + n_hits[i] += local_hits[i]; + } + } + } + + // if (mpi::master) printf("Total hits before allreduce: %d \n", std::accumulate(n_hits.begin(), n_hits.end(), 0)); + + // Accumulate rank loads across all ranks + MPI_Allreduce(MPI_IN_PLACE, n_hits.data(), mpi::n_procs, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + + for (int rank = 0; rank < mpi::n_procs; rank++){ + rank_load_[rank] = (n_hits[rank]/static_cast(n_hits_sum_)); + } + + // if (mpi::master) printf("Total hits after allreduce: %d \n", std::accumulate(n_hits.begin(), n_hits.end(), 0)); +} + +void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { + + // printf("1 Rank %d: Redistributing source regions... \n", mpi::rank); + + std::unordered_map> sr_send_list; + vector num_sr_receiving(mpi::n_procs, 0); + + // local source region container that contains updated list + SourceRegionContainer source_regions_new(negroups_, is_linear_); + + // Each rank identifies source regions that need to be transferred to new owner and updates subdomain map accordingly + for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + + Position centroid = domain->source_regions_.centroid(sr); + int owner = C_NONE; + double min_distance = INFTY; + + // Find closest rank center //TODO: Should this be put in update_load() to avoid repeating the same loop? But then I might right + for (int rank = 0; rank < mpi::n_procs; rank++) { + double dist = (centroid - rank_centers_[rank]).norm(); + // Power Voronoi diagram uses squared distances + dist = dist*dist - rank_weights_[rank]; + if (dist < min_distance) { + min_distance = dist; + owner = rank; + } + } + + // If owner changed, write source region to list of outbound source regions + if (owner != mpi::rank){ + sr_send_list[owner].push_back(sr); + } else { + // If owner did not change, add source region to new local container + source_regions_new.push_back(domain->source_regions_.get_source_region_handle(sr)); + } + } + + // printf("2 Rank %d: Identified %lu ranks to send source regions to... \n", mpi::rank, sr_send_list.size()); + + // Each rank communicates other ranks about ownership changes to update subdomain map + for (int rank = 0; rank < mpi::n_procs; rank++) { + + // Send size + int bcast_size = 0; + if (rank == mpi::rank) { + for (const auto& pair : sr_send_list) { + bcast_size += pair.second.size(); + } + // printf("2.1 Rank %d: Broadcasting %d source regions of %ld total source regions to update subdomain map... \n", mpi::rank, bcast_size, domain->n_source_regions()); + } + MPI_Bcast(&bcast_size, 1, MPI_INT, rank, mpi::intracomm); + + if (bcast_size > 0) { + vector rank_ids(bcast_size); + vector base_ids(bcast_size); + vector mesh_bins(bcast_size); + + // Current owner prepares communication and fills vectors to be sent + if(rank == mpi::rank) { + int i = 0; + for (auto& pair : sr_send_list) { + + int receiver = pair.first; // new owner + vector& sr_indices = pair.second; // vector of source region indices + + // Iterate through all source regions for this key + for (int sr_idx : sr_indices) { + SourceRegionKey sr_key = domain->source_regions_.key(sr_idx); + rank_ids[i] = receiver; + base_ids[i] = sr_key.base_source_region_id; + mesh_bins[i] = sr_key.mesh_bin; + i++; + } + } + } + + // Broadcast source region data + MPI_Bcast(rank_ids.data(), bcast_size, MPI_INT, rank, mpi::intracomm); + MPI_Bcast(base_ids.data(), bcast_size, MPI_INT64_T, rank, mpi::intracomm); + MPI_Bcast(mesh_bins.data(), bcast_size, MPI_INT64_T, rank, mpi::intracomm); + + // Every rank updates subdomain map + for (int j = 0; j < bcast_size; j++) { + + // Re-assemble source region key and extract new owner + SourceRegionKey sr_key(base_ids[j], mesh_bins[j]); + int rank_new = rank_ids[j]; + + // Update subdomain_map with new owner + subdomain_map_[sr_key] = rank_new; + + // If calling rank is new owner, increase count of source regions coming from sending rank (current broadcaster) + if (mpi::rank == rank_new){ + num_sr_receiving[rank] += 1; + } + + //TODO: Do sending here? + } + } + } + + // printf("3 Rank %d: Updated subdomain map... \n", mpi::rank); + + // clear source_region_map_ + domain->source_region_map_.clear(); + + // printf("3.1 Rank %d: Updated subdomain map... \n", mpi::rank); + + // Send source regions + for (auto& pair : sr_send_list) { + + // printf("Rank %d: Test-2 \n", mpi::rank); + int receiver = pair.first; // destination rank + vector& sr_indices = pair.second; // vector of source region indices + // printf("Rank %d: Test-1 \n", mpi::rank); + + // Sort indices in descending order to make sure the correct source regions are erased //TODO: Is this safe? + std::sort(sr_indices.begin(), sr_indices.end(), std::greater()); + // printf("Rank %d: Test0 \n", mpi::rank); + + // Iterate through all source regions for this key + for (int sr_idx : sr_indices) { + SourceRegionKey sr_key = domain->source_regions_.key(sr_idx); + // printf("Rank %d: Test1 \n", mpi::rank); + SourceRegionHandle srh = domain->source_regions_.get_source_region_handle(sr_idx); + // printf("Rank %d: Test2 \n", mpi::rank); + SourceRegion sr(srh); + // printf("Rank %d: Test3 \n", mpi::rank); + send_sr_data(receiver, sr); + // printf("Rank %d: Test4 \n", mpi::rank); + // source_regions_new.erase(sr_idx); // remove source region from local container //TODO: Erase seems ugly? + // printf("Rank %d: Test5 \n", mpi::rank); + } + } + + // printf("4 Rank %d: Sent source regions... \n", mpi::rank); + + // Receive source regions + for (int sender = 0; sender < mpi::n_procs; sender++) { + + if (sender == mpi::rank) { + if (num_sr_receiving[sender] > 0){ + fatal_error("Rank sends source regions to itself. Rank should not receive source regions from itself."); + } + continue; // skip self + } + + int num_sr = num_sr_receiving[sender]; + for (int i = 0; i < num_sr; ++i) { + SourceRegion sr_recv(negroups_, is_linear_); + receive_sr_data(sender, sr_recv); //TODO: Use n_source_regions(); + + // Update source regions in domain + domain->source_regions_ = source_regions_new; + + int num_sr_new = domain->n_source_regions(); + + // Update source region map + for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + SourceRegionKey key = domain->source_regions_.key(sr); + domain->source_region_map_[key] = sr; + } + + // printf("6 Rank %d: Updated source region map... \n", mpi::rank); + // printf("Rank %d: Source regions before: %d, after: %d \n", mpi::rank, num_sr_old, num_sr_new); } }// namespace openmc \ No newline at end of file diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 6a2d01b6334..e5c635d021d 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -101,6 +101,7 @@ void FlatSourceDomain::batch_reset() // Reset scalar fluxes and iteration volume tallies to zero #pragma omp parallel for for (int64_t sr = 0; sr < n_source_regions(); sr++) { + source_regions_.centroid_iteration(sr) = {0.0, 0.0, 0.0}; source_regions_.volume(sr) = 0.0; source_regions_.volume_sq(sr) = 0.0; } @@ -191,6 +192,7 @@ void FlatSourceDomain::normalize_scalar_flux_and_volumes( // update the simulation-averaged cell-wise volume estimates #pragma omp parallel for for (int64_t sr = 0; sr < n_source_regions(); sr++) { + source_regions_.centroid_t(sr) += source_regions_.centroid_iteration(sr); source_regions_.volume_t(sr) += source_regions_.volume(sr); source_regions_.volume_sq_t(sr) += source_regions_.volume_sq(sr); source_regions_.volume_naive(sr) = @@ -199,6 +201,11 @@ void FlatSourceDomain::normalize_scalar_flux_and_volumes( source_regions_.volume_sq_t(sr) / source_regions_.volume_t(sr); source_regions_.volume(sr) = source_regions_.volume_t(sr) * volume_normalization_factor; + if (source_regions_.volume_t(sr) > 0.0) { + double inv_volume = 1.0 / source_regions_.volume_t(sr); + source_regions_.centroid(sr) = source_regions_.centroid_t(sr); + source_regions_.centroid(sr) *= inv_volume; + } } } @@ -1927,6 +1934,7 @@ SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( sr_key, {base_source_regions_.get_source_region_handle(sr), sr}); discovered_source_regions_.unlock(sr_key); SourceRegionHandle handle {*sr_ptr}; + handle.key() = sr_key; // Check if the new source region contains a point source and apply it if so auto it2 = point_source_map_.find(sr_key); diff --git a/src/random_ray/linear_source_domain.cpp b/src/random_ray/linear_source_domain.cpp index 81412164eca..fdf21a8daba 100644 --- a/src/random_ray/linear_source_domain.cpp +++ b/src/random_ray/linear_source_domain.cpp @@ -25,7 +25,7 @@ void LinearSourceDomain::batch_reset() FlatSourceDomain::batch_reset(); #pragma omp parallel for for (int64_t sr = 0; sr < n_source_regions(); sr++) { - source_regions_.centroid_iteration(sr) = {0.0, 0.0, 0.0}; + // source_regions_.centroid_iteration(sr) = {0.0, 0.0, 0.0}; source_regions_.mom_matrix(sr) = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; } #pragma omp parallel for diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 75a6259cda4..b7e95ec2696 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -565,6 +565,7 @@ void RandomRay::attenuate_flux_flat_source( // If ray is in the active phase (not in dead zone), make contributions to // source region bookkeeping + Position midpoint = r + u() * (distance / 2.0); // Aquire lock for source region srh.lock(); @@ -579,6 +580,7 @@ void RandomRay::attenuate_flux_flat_source( // Accomulate volume (ray distance) into this iteration's estimate // of the source region's volume srh.volume() += distance; + srh.centroid_iteration() += midpoint * distance; srh.n_hits() += 1; } @@ -586,7 +588,7 @@ void RandomRay::attenuate_flux_flat_source( // Tally valid position inside the source region (e.g., midpoint of // the ray) if not done already if (!srh.position_recorded()) { - Position midpoint = r + u() * (distance / 2.0); + // Position midpoint = r + u() * (distance / 2.0); srh.position() = midpoint; srh.position_recorded() = 1; } @@ -608,6 +610,8 @@ void RandomRay::attenuate_flux_flat_source_void( // source region bookkeeping if (is_active_) { + Position midpoint = r + u() * (distance / 2.0); + // Aquire lock for source region srh.lock(); @@ -620,13 +624,14 @@ void RandomRay::attenuate_flux_flat_source_void( // Accomulate volume (ray distance) into this iteration's estimate // of the source region's volume srh.volume() += distance; + srh.centroid_iteration() += midpoint * distance; srh.volume_sq() += distance * distance; srh.n_hits() += 1; // Tally valid position inside the source region (e.g., midpoint of // the ray) if not done already if (!srh.position_recorded()) { - Position midpoint = r + u() * (distance / 2.0); + // Position midpoint = r + u() * (distance / 2.0); srh.position() = midpoint; srh.position_recorded() = 1; } diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 6b2adb971c8..d4d84cca56d 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -425,6 +425,7 @@ void RandomRaySimulation::simulate() { // Initialize subdomains for MPI ranks + mpi::decomp_map.initialize(); simulation::time_generate_voronoi_centers.start(); mpi::decomp_map.generate_rank_centers(); simulation::time_generate_voronoi_centers.stop(); @@ -480,6 +481,8 @@ void RandomRaySimulation::simulate() // SourceRegion& sr = domain_->discovered_source_regions_[SourceRegionKey(4, 104171)]; // printf("RANK %d: volume: %f\n", mpi::rank, sr.scalars_.volume_); // } + // Position centroid = domain_->source_regions_.centroid(1); + // printf ("1 Centroid (%f, %f, %f) \n", centroid.x, centroid.y, centroid.z); // Update decomposition map with newly discovered source regions simulation::time_decomposition_handling.start(); @@ -512,7 +515,6 @@ void RandomRaySimulation::simulate() if (RandomRay::mesh_subdivision_enabled_) { domain_->finalize_discovered_source_regions(); } - // test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); // printf("4 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); @@ -526,6 +528,10 @@ void RandomRaySimulation::simulate() domain_->normalize_scalar_flux_and_volumes( settings::n_particles * RandomRay::distance_active_); + if (mpi::n_procs > 1 && mpi::decomp_map.load_balanced() == false){ + mpi::decomp_map.balance_load(domain_.get()); + } + // Add source to scalar flux, compute number of FSR hits int64_t n_hits = domain_->add_source_to_scalar_flux(); @@ -575,26 +581,26 @@ void RandomRaySimulation::simulate() // Compute total intersections and load balancing data simulation::time_decomposition_handling.start(); - // Exchange intersection data - uint64_t total_geometric_intersections_sum = 0; - MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); + // // Exchange intersection data + // uint64_t total_geometric_intersections_sum = 0; + // MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); - // Local work load - float rank_load_local = (total_geometric_intersections_/static_cast(total_geometric_intersections_sum))*100.0; + // // Local work load + // float rank_load_local = (total_geometric_intersections_/static_cast(total_geometric_intersections_sum)); - total_geometric_intersections_ = total_geometric_intersections_sum; - rank_load_.resize(mpi::n_procs); //TODO: Decomposition map also owns raak load + // total_geometric_intersections_ = total_geometric_intersections_sum; + // rank_load_.resize(mpi::n_procs); //TODO: Decomposition map also owns raak load - // send load data to master rank (rank 0) - if (mpi::master) { - rank_load_[0] = rank_load_local; + // // send load data to master rank (rank 0) + // if (mpi::master) { + // rank_load_[0] = rank_load_local; - for (int i = 1; i < mpi::n_procs; i++) { - MPI_Recv(&rank_load_[i], 1, MPI_FLOAT, i, 1, mpi::intracomm, MPI_STATUS_IGNORE); - } - } else { - MPI_Send(&rank_load_local, 1, MPI_FLOAT, 0, 1, mpi::intracomm); - } + // for (int i = 1; i < mpi::n_procs; i++) { + // MPI_Recv(&rank_load_[i], 1, MPI_FLOAT, i, 1, mpi::intracomm, MPI_STATUS_IGNORE); + // } + // } else { + // MPI_Send(&rank_load_local, 1, MPI_FLOAT, 0, 1, mpi::intracomm); + // } // Average number of ray communications between ranks per batch avg_num_comms_ = avg_num_comms_/settings::n_batches; //TODO: should this be double? @@ -724,9 +730,9 @@ void RandomRaySimulation::print_results_random_ray( if (mpi::n_procs > 1){ fmt::print(" MPI Ranks = {}\n", mpi::n_procs); fmt::print(" Avg Number of Subdomain Crossings = {}\n", avg_num_comms); - fmt::print(" Load per MPI Rank = Rank {}: {:.2f}%\n", 0, rank_load_[0]); + fmt::print(" Load per MPI Rank = Rank {}: {:.2f}%\n", 0, mpi::decomp_map.rank_load_[0]*100.0); for (int i = 1; i < mpi::n_procs; i++) { - fmt::print(" Rank {}: {:.2f}%\n", i, rank_load_[i]); + fmt::print(" Rank {}: {:.2f}%\n", i, mpi::decomp_map.rank_load_[i]*100.0); } } @@ -818,6 +824,10 @@ void RandomRaySimulation::transport_sweep() { // Start timer for transport simulation::time_transport.start(); + + // int num = domain->n_source_regions(); + // Position centroid = domain_->source_regions_.centroid(num); + // printf ("1 Centroid (%f, %f, %f), number: %d \n", centroid.x, centroid.y, centroid.z, num); // Transport sweep over all random rays for the iteration #pragma omp parallel for schedule(dynamic) \ @@ -827,6 +837,10 @@ void RandomRaySimulation::transport_sweep() { total_geometric_intersections_ += ray.transport_history_based_single_ray(); } + // int num = domain->n_source_regions(); + // Position centroid = domain_->source_regions_.centroid(num); + // printf ("1 Centroid (%f, %f, %f), number: %d \n", centroid.x, centroid.y, centroid.z, num); + simulation::time_transport.stop(); } diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index 64a882055d1..cd35553f91f 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -29,7 +29,7 @@ SourceRegionHandle::SourceRegionHandle(SourceRegion& sr) flux_moments_old_(sr.flux_moments_old_.data()), flux_moments_new_(sr.flux_moments_new_.data()), flux_moments_t_(sr.flux_moments_t_.data()), - tally_task_(sr.tally_task_.data()) + tally_task_(sr.tally_task_.data()), key_(&sr.scalars_.key_) {} //============================================================================== @@ -79,6 +79,51 @@ SourceRegion::SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr) } } +SourceRegion::SourceRegion(const SourceRegionHandle& handle) + : SourceRegion(handle.negroups_, handle.is_linear_) +{ + scalars_.material_ = handle.material(); + scalars_.is_small_ = handle.is_small(); + scalars_.n_hits_ = handle.n_hits(); + scalars_.volume_ = handle.volume(); + scalars_.volume_t_ = handle.volume_t(); + scalars_.volume_sq_ = handle.volume_sq(); + scalars_.volume_sq_t_ = handle.volume_sq_t(); + scalars_.volume_naive_ = handle.volume_naive(); + scalars_.position_recorded_ = handle.position_recorded(); + scalars_.position_ = handle.position(); + scalars_.centroid_ = handle.centroid(); + scalars_.centroid_iteration_ = handle.centroid_iteration(); + scalars_.centroid_t_ = handle.centroid_t(); + scalars_.key_ = handle.key(); + scalars_.mesh_ = handle.mesh(); + scalars_.parent_sr_ = handle.parent_sr(); + + if (handle.is_linear_) { + scalars_.mom_matrix_ = handle.mom_matrix(); + scalars_.mom_matrix_t_ = handle.mom_matrix_t(); + } + + for (int g = 0; g < scalar_flux_new_.size(); g++) { + scalar_flux_old_[g] = handle.scalar_flux_old(g); + scalar_flux_new_[g] = handle.scalar_flux_new(g); + source_[g] = handle.source(g); + scalar_flux_final_[g] = handle.scalar_flux_final(g); + if (handle.is_linear_) { + source_gradients_[g] = handle.source_gradients(g); + flux_moments_old_[g] = handle.flux_moments_old(g); + flux_moments_new_[g] = handle.flux_moments_new(g); + flux_moments_t_[g] = handle.flux_moments_t(g); + } + } + if (settings::run_mode == RunMode::FIXED_SOURCE) { + scalars_.external_source_present_ = handle.external_source_present(); + for (int g = 0; g < scalar_flux_new_.size(); g++) { + external_source_[g] = handle.external_source(g); + } + } +} + // combine two source regions from different ranks together void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) { @@ -90,8 +135,9 @@ void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) { scalars_.volume_naive_ += sr_add.scalars_.volume_naive_; scalars_.n_hits_ += sr_add.scalars_.n_hits_; scalars_.external_source_present_ = std::max(scalars_.external_source_present_, sr_add.scalars_.external_source_present_); + scalars_.centroid_iteration_ += sr_add.scalars_.centroid_iteration_; if (is_linear) { - scalars_.centroid_iteration_ += sr_add.scalars_.centroid_iteration_; + // scalars_.centroid_iteration_ += sr_add.scalars_.centroid_iteration_; scalars_.mom_matrix_ += sr_add.scalars_.mom_matrix_; } @@ -146,12 +192,17 @@ void SourceRegionContainer::push_back(const SourceRegion& sr) volume_task_.push_back(sr.volume_task_); mesh_.push_back(sr.scalars_.mesh_); parent_sr_.push_back(sr.scalars_.parent_sr_); + key_.push_back(sr.scalars_.key_); + + centroid_.push_back(sr.scalars_.centroid_); + centroid_iteration_.push_back(sr.scalars_.centroid_iteration_); + centroid_t_.push_back(sr.scalars_.centroid_t_); // Only store these fields if is_linear_ is true if (is_linear_) { - centroid_.push_back(sr.scalars_.centroid_); - centroid_iteration_.push_back(sr.scalars_.centroid_iteration_); - centroid_t_.push_back(sr.scalars_.centroid_t_); + // centroid_.push_back(sr.scalars_.centroid_); + // centroid_iteration_.push_back(sr.scalars_.centroid_iteration_); + // centroid_t_.push_back(sr.scalars_.centroid_t_); mom_matrix_.push_back(sr.scalars_.mom_matrix_); mom_matrix_t_.push_back(sr.scalars_.mom_matrix_t_); } @@ -179,6 +230,67 @@ void SourceRegionContainer::push_back(const SourceRegion& sr) } } +// void SourceRegionContainer::erase(int sr_idx) +// { +// n_source_regions_--; + +// // Scalar fields +// material_.erase(material_.begin() + sr_idx); +// is_small_.erase(is_small_.begin() + sr_idx); +// n_hits_.erase(n_hits_.begin() + sr_idx); +// lock_.erase(lock_.begin() + sr_idx); +// volume_.erase(volume_.begin() + sr_idx); +// volume_t_.erase(volume_t_.begin() + sr_idx); +// volume_sq_.erase(volume_sq_.begin() + sr_idx); +// volume_sq_t_.erase(volume_sq_t_.begin() + sr_idx); +// volume_naive_.erase(volume_naive_.begin() + sr_idx); +// position_recorded_.erase(position_recorded_.begin() + sr_idx); +// external_source_present_.erase(external_source_present_.begin() + sr_idx); +// position_.erase(position_.begin() + sr_idx); +// volume_task_.erase(volume_task_.begin() + sr_idx); +// mesh_.erase(mesh_.begin() + sr_idx); +// parent_sr_.erase(parent_sr_.begin() + sr_idx); +// key_.erase(key_.begin() + sr_idx); + +// centroid_.erase(centroid_.begin() + sr_idx); +// centroid_iteration_.erase(centroid_iteration_.begin() + sr_idx); +// centroid_t_.erase(centroid_t_.begin() + sr_idx); + +// // Only store these fields if is_linear_ is true +// if (is_linear_) { +// // centroid_.erase(sr.scalars_.centroid_); +// // centroid_iteration_.erase(sr.scalars_.centroid_iteration_); +// // centroid_t_.erase(sr.scalars_.centroid_t_); +// mom_matrix_.erase(mom_matrix_.begin() + sr_idx); +// mom_matrix_t_.erase(mom_matrix_t_.begin() + sr_idx); +// } + +// // Energy-dependent fields +// const int first = sr_idx * negroups_; +// const int last = first + negroups_; + +// scalar_flux_old_.erase(scalar_flux_old_.begin() + first, scalar_flux_old_.begin() + last); +// scalar_flux_new_.erase(scalar_flux_new_.begin() + first, scalar_flux_new_.begin() + last); +// scalar_flux_final_.erase(scalar_flux_final_.begin() + first, scalar_flux_final_.begin() + last); +// source_.erase(source_.begin() + first, source_.begin() + last); + +// if (settings::run_mode == RunMode::FIXED_SOURCE) { +// external_source_.erase(external_source_.begin() + first, external_source_.begin() + last); +// } + +// // Only erase these fields if is_linear_ is true +// if (is_linear_) { +// source_gradients_.erase(source_gradients_.begin() + first, source_gradients_.begin() + last); +// flux_moments_old_.erase(flux_moments_old_.begin() + first, flux_moments_old_.begin() + last); +// flux_moments_new_.erase(flux_moments_new_.begin() + first, flux_moments_new_.begin() + last); +// flux_moments_t_.erase(flux_moments_t_.begin() + first, flux_moments_t_.begin() + last); +// } + +// // Tally tasks +// tally_task_.erase(tally_task_.begin() + first, tally_task_.begin() + last); + +// } + void SourceRegionContainer::assign( int n_source_regions, const SourceRegion& source_region) { @@ -199,10 +311,15 @@ void SourceRegionContainer::assign( mesh_.clear(); parent_sr_.clear(); + centroid_.clear(); + centroid_iteration_.clear(); + centroid_t_.clear(); + key_.clear(); + if (is_linear_) { - centroid_.clear(); - centroid_iteration_.clear(); - centroid_t_.clear(); + // centroid_.clear(); + // centroid_iteration_.clear(); + // centroid_t_.clear(); mom_matrix_.clear(); mom_matrix_t_.clear(); } @@ -268,10 +385,16 @@ SourceRegionHandle SourceRegionContainer::get_source_region_handle(int64_t sr) handle.scalar_flux_final_ = &scalar_flux_final(sr, 0); handle.tally_task_ = &tally_task(sr, 0); + handle.centroid_ = ¢roid(sr); + handle.centroid_iteration_ = ¢roid_iteration(sr); + handle.centroid_t_ = ¢roid_t(sr); + handle.key_ = &key(sr); + + if (handle.is_linear_) { - handle.centroid_ = ¢roid(sr); - handle.centroid_iteration_ = ¢roid_iteration(sr); - handle.centroid_t_ = ¢roid_t(sr); + // handle.centroid_ = ¢roid(sr); + // handle.centroid_iteration_ = ¢roid_iteration(sr); + // handle.centroid_t_ = ¢roid_t(sr); handle.mom_matrix_ = &mom_matrix(sr); handle.mom_matrix_t_ = &mom_matrix_t(sr); handle.source_gradients_ = &source_gradients(sr, 0); @@ -298,6 +421,7 @@ void SourceRegionContainer::adjoint_reset() std::fill(centroid_iteration_.begin(), centroid_iteration_.end(), Position {0.0, 0.0, 0.0}); std::fill(centroid_t_.begin(), centroid_t_.end(), Position {0.0, 0.0, 0.0}); + std::fill(key_.begin(), key_.end(), SourceRegionKey {0, 0}); std::fill(mom_matrix_.begin(), mom_matrix_.end(), MomentMatrix {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}); std::fill(mom_matrix_t_.begin(), mom_matrix_t_.end(), From 57753a91677e831074fbd6ea6f819d6f5b5db599 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 13 Oct 2025 21:53:14 +0100 Subject: [PATCH 09/48] Optimise solver for load balancing --- include/openmc/random_ray/decomposition_map.h | 7 +- src/random_ray/decomposition_map.cpp | 210 ++++++++++++++---- src/random_ray/flat_source_domain.cpp | 5 + src/random_ray/random_ray.cpp | 9 +- 4 files changed, 183 insertions(+), 48 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 023fd6ecd4e..92d41bb919e 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -33,7 +33,8 @@ class DecompositionMap { // Voronoi volumes void initialize(); void generate_rank_centers(); //TODO: put in constructor - void calculate_grid_points(int grid_points_per_dimension); + // void calculate_grid_points(int grid_points_per_dimension); + void calculate_grid_points(int grid_points_total); void initialize_points(); void calculate_voronoi(vector& position_sum_per_rank, vector& num_points_per_rank); Position calculate_centroids(const Position position_sum, const int num_points, int rank); @@ -113,7 +114,9 @@ class DecompositionMap { SpatialBox* spatial_box_ = nullptr; // Add this member variable // std::unordered_map> voronoi_map_; vector grid_points_; - int grid_points_per_rank_{10}; + // int grid_points_per_rank_{2}; + int grid_points_per_rank_{100}; + // int grid_points_per_rank_{1000}; int negroups_; uint64_t n_hits_sum_; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index ea75fa5f655..f6e73c3b4b9 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -23,7 +23,8 @@ void DecompositionMap::initialize(){ negroups_ = data::mg.num_energy_groups_; rank_load_.resize(mpi::n_procs, 0.0); target_load_ = 1.0/mpi::n_procs; - rank_weights_.resize(mpi::n_procs, 0.0); + // rank_weights_.resize(mpi::n_procs, 0.0); + rank_weights_.resize(mpi::n_procs, 1.0); spatial_box_ = dynamic_cast( dynamic_cast(RandomRay::ray_source_.get())->space()); @@ -40,8 +41,13 @@ void DecompositionMap::initialize(){ void DecompositionMap::generate_rank_centers(){ // Calculate grid points that are used for Voronoi cells - int grid_points_per_dimension = ceil(grid_points_per_rank_ * cbrt(mpi::n_procs)); // number of grid points in each dimension - calculate_grid_points(grid_points_per_dimension); + // int grid_points_per_dimension = ceil(grid_points_per_rank_ * cbrt(mpi::n_procs)); // number of grid points in each dimension + int grid_points_total = grid_points_per_rank_ * mpi::n_procs; + printf("Calculating %d grid points for Voronoi tessellation...\n", grid_points_total); + // printf("Grid points per dimension: %d \n", grid_points_per_dimension); + // calculate_grid_points(grid_points_per_dimension); + calculate_grid_points(grid_points_total); + // Initialize points with random positions initialize_points(); @@ -109,20 +115,112 @@ void DecompositionMap::generate_rank_centers(){ } -void DecompositionMap::calculate_grid_points(int grid_points_per_dimension){ +// void DecompositionMap::calculate_grid_points(int grid_points_per_dimension){ +void DecompositionMap::calculate_grid_points(int grid_points_total){ + + // Calculate grid spacing + vector domain_length(3); + domain_length[0] = spatial_box_->upper_right().x - spatial_box_->lower_left().x; + domain_length[1] = spatial_box_->upper_right().y - spatial_box_->lower_left().y; + domain_length[2] = spatial_box_->upper_right().z - spatial_box_->lower_left().z; + // double x_length = spatial_box_->upper_right().x - spatial_box_->lower_left().x; + // double y_length = spatial_box_->upper_right().y - spatial_box_->lower_left().y; + // double z_length = spatial_box_->upper_right().z - spatial_box_->lower_left().z; + + double volume = domain_length[0] * domain_length[1] * domain_length[2]; + + // printf("Spatial box dimensions: %f x %f x %f \n", x_length, y_length, z_length); + printf("Spatial box volume: %f \n", volume); + // printf("Grid points per dimension: %d \n", grid_points_per_dimension); + + // int grid_points_x = std::max(2, static_cast(round((x_length / cbrt(volume)) * cbrt(grid_points_total)))); + // int grid_points_y = std::max(2, static_cast(round((y_length / cbrt(volume)) * cbrt(grid_points_total)))); + // int grid_points_z = std::max(2, static_cast(round((z_length / cbrt(volume)) * cbrt(grid_points_total)))); + + int excluded_dimension = -1; + vector grid_points_per_dimension(3); + for (int i = 0; i < 3; i++){ + double grid_points_estimate = ((domain_length[i] / cbrt(volume)) * cbrt(grid_points_total)); + // Check if any dimension distorted + if (grid_points_estimate > 2){ + grid_points_per_dimension[i] = std::max(2, static_cast(round(grid_points_estimate))); + } else { + excluded_dimension = i; + grid_points_per_dimension[i] = 2; + } + } + + if (excluded_dimension != -1){ + double area = 1.0; + + for (int i = 0; i < 3; i++){ + if (i == excluded_dimension) continue; + area *= domain_length[i]; + } + + // Recalculate grid points in non-distorted dimensions based on area + for (int i = 0; i < 3; i++){ + if (i == excluded_dimension) continue; + grid_points_per_dimension[i] = round((domain_length[i] / sqrt(area)) * sqrt(grid_points_total/2.0)); + } + } + + printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); + + // int total_grid_points = grid_points_per_dimension * grid_points_per_dimension * grid_points_per_dimension; + + // int grid_points_x = std::max(2, static_cast(round((x_length / cbrt(volume)) * grid_points_per_dimension))); + // int grid_points_y = std::max(2, static_cast(round((y_length / cbrt(volume)) * grid_points_per_dimension))); + // int grid_points_z = std::max(2, static_cast(round((z_length / cbrt(volume)) * grid_points_per_dimension))); - // Calculate grid spacing - double delta_x = (spatial_box_->upper_right().x - spatial_box_->lower_left().x) / (grid_points_per_dimension - 1); - double delta_y = (spatial_box_->upper_right().y - spatial_box_->lower_left().y) / (grid_points_per_dimension - 1); - double delta_z = (spatial_box_->upper_right().z - spatial_box_->lower_left().z) / (grid_points_per_dimension - 1); + double new_total = grid_points_per_dimension[0] * grid_points_per_dimension[1] * grid_points_per_dimension[2]; + double adjustment; + if (excluded_dimension != -1) { + // When one dimension is fixed at 2, use square root for the other two dimensions + adjustment = sqrt(grid_points_total / new_total); + } else { + // When all dimensions are free, use cube root + adjustment = cbrt(grid_points_total / new_total); + } + + // double adjustment = cbrt(grid_points_total / new_total); + + for (int i = 0; i < 3; i++){ + if (i == excluded_dimension) continue; + grid_points_per_dimension[i] = round(grid_points_per_dimension[i] * adjustment); + } + + // grid_points_x = std::max(2, static_cast(round(grid_points_x * adjustment))); + // grid_points_y = std::max(2, static_cast(round(grid_points_y * adjustment))); + // grid_points_z = std::max(2, static_cast(round(grid_points_z * adjustment))); + + // double exponent_x = (x_length / cbrt(volume)); + // double exponent_y = (y_length / cbrt(volume)); + // double exponent_z = (z_length / cbrt(volume)); + + // int grid_points_x = std::pow(total_grid_points, exponent_x/3.0); + // int grid_points_y = std::pow(total_grid_points, exponent_y/3.0); + // int grid_points_z = std::pow(total_grid_points, exponent_z/3.0); + + + + printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); + + double delta_x = (spatial_box_->upper_right().x - spatial_box_->lower_left().x) / (grid_points_per_dimension[0] - 1); + double delta_y = (spatial_box_->upper_right().y - spatial_box_->lower_left().y) / (grid_points_per_dimension[1] - 1); + double delta_z = (spatial_box_->upper_right().z - spatial_box_->lower_left().z) / (grid_points_per_dimension[2] - 1); + + // double delta_x = (spatial_box_->upper_right().x - spatial_box_->lower_left().x) / (grid_points_per_dimension - 1); + // double delta_y = (spatial_box_->upper_right().y - spatial_box_->lower_left().y) / (grid_points_per_dimension - 1); + // double delta_z = (spatial_box_->upper_right().z - spatial_box_->lower_left().z) / (grid_points_per_dimension - 1); // Generate all grid points - for (int i = 0; i < grid_points_per_dimension; i++) { + for (int i = 0; i < grid_points_per_dimension[0]; i++) { double x = spatial_box_->lower_left().x + i * delta_x; - for (int j = 0; j < grid_points_per_dimension; j++) { + for (int j = 0; j < grid_points_per_dimension[1]; j++) { double y = spatial_box_->lower_left().y + j * delta_y; - for (int k = 0; k < grid_points_per_dimension; k++) { + for (int k = 0; k < grid_points_per_dimension[2]; k++) { double z = spatial_box_->lower_left().z + k * delta_z; grid_points_.push_back({x, y, z}); } @@ -823,16 +921,20 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // double tol_outer = 0.01; int it_outer = 0; - double adaptation_factor = 0.5; //1; //0.1; - double min_factor = 0.1; + double adaptation_factor = 1; //0.5 //0.1; + double min_factor = 0.01; double max_factor = 2; double prev_imbalance = max_imbalance; double avg_rank_distance = max_domain_length_/cbrt(mpi::n_procs); // rough estimate of average distance between ranks //TODO: cubic root might not be adaquate for problems that are not box like - double weight_scale = avg_rank_distance * avg_rank_distance; + double weight_scale = avg_rank_distance * avg_rank_distance; //TODO: maybe adjust dynamically dependent on wether previous batch has converged + // double weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; // scale weights based on average load double beta = 0.6; // momentum damping vector weight_change(mpi::n_procs, 0.0); + vector old_weights = rank_weights_; + double max_imbalance_old = max_imbalance_; + std::unordered_map> sr_send; // contains regions to be send // if (mpi::master) printf("Max. load: %.2f%%, Avg. load: %.2f%%, Max. imbalance: %.2f%% \n", max_load*100.0, avg_load*100.0, max_imbalance*100.0); @@ -848,6 +950,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // } for (int rank = 0; rank < mpi::n_procs; rank++) { + // weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; double corr = ((rank_load_[rank] - target_load_) / target_load_) * weight_scale; weight_change[rank] = beta * weight_change[rank] + (1.0 - beta) * corr; // keep some inertia from previous changes to prevent oscillations // double damping = std::min(1.0, max_imbalance / imbalance_tolerance_); // dampening factor based on how far we are from convergence @@ -872,9 +975,15 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ } - if (mpi::master && it_outer == max_iterations){ - warning("MPI load balancing has not converged. Using best estimate after " - + std::to_string(max_iterations) + " iterations."); //TODO: maybe revert to previous weights, if not converged? + if (it_outer == max_iterations){ + if(mpi::master) { + warning("MPI load balancing has not converged after " + + std::to_string(max_iterations) + " iterations."); + } + if (max_imbalance_old < max_imbalance){ + rank_weights_ = old_weights; + return; + } } else { if (mpi::master){ printf("MPI load balancing converged after %d iterations. Max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); @@ -888,6 +997,15 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // update decomposition map redistribute_source_regions(domain); + + if (mpi::master){ + printf("Weights: "); + for (int rank = 0; rank < mpi::n_procs; rank++) { + printf("RANK %d: %.2f ", rank, rank_weights_[rank]); + } + printf("\n"); + } + } void DecompositionMap::update_load(FlatSourceDomain* domain){ @@ -906,22 +1024,24 @@ void DecompositionMap::update_load(FlatSourceDomain* domain){ for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { Position centroid = domain->source_regions_.centroid(sr); - int owner = C_NONE; - double min_distance = INFTY; + // int owner = C_NONE; + // double min_distance = INFTY; - // Find closest rank center - for (int rank = 0; rank < mpi::n_procs; rank++) { - double dist = (centroid - rank_centers_[rank]).norm(); - // Power Voronoi diagram uses squared distances - dist = dist*dist - rank_weights_[rank]; - if (dist < min_distance) { - min_distance = dist; - owner = rank; - // if (min_distance < 0.0){ - // break; // no need to continue searching - // } - } - } + // // Find closest rank center + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // double dist = (centroid - rank_centers_[rank]).norm(); + // // Power Voronoi diagram uses squared distances + // dist = dist*dist - rank_weights_[rank]; + // if (dist < min_distance) { + // min_distance = dist; + // owner = rank; + // // if (min_distance < 0.0){ + // // break; // no need to continue searching + // // } + // } + // } + + int owner = find_closest_rank(centroid); local_hits[owner] += domain->source_regions_.n_hits(sr); } @@ -961,19 +1081,21 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { Position centroid = domain->source_regions_.centroid(sr); - int owner = C_NONE; - double min_distance = INFTY; + // int owner = C_NONE; + // double min_distance = INFTY; - // Find closest rank center //TODO: Should this be put in update_load() to avoid repeating the same loop? But then I might right - for (int rank = 0; rank < mpi::n_procs; rank++) { - double dist = (centroid - rank_centers_[rank]).norm(); - // Power Voronoi diagram uses squared distances - dist = dist*dist - rank_weights_[rank]; - if (dist < min_distance) { - min_distance = dist; - owner = rank; - } - } + // // Find closest rank center //TODO: Should this be put in update_load() to avoid repeating the same loop? But then I might right + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // double dist = (centroid - rank_centers_[rank]).norm(); + // // Power Voronoi diagram uses squared distances + // dist = dist*dist - rank_weights_[rank]; + // if (dist < min_distance) { + // min_distance = dist; + // owner = rank; + // } + // } + + int owner = find_closest_rank(centroid); // If owner changed, write source region to list of outbound source regions if (owner != mpi::rank){ diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index e5c635d021d..8d6eb1d59e8 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -157,8 +157,13 @@ void FlatSourceDomain::update_neutron_source(double k_eff) scatter_source += sigma_s * scalar_flux; fission_source += nu_sigma_f * scalar_flux * chi; } + source_regions_.source(sr, g_out) = (scatter_source + fission_source * inverse_k_eff) / sigma_t; + + // if (source_regions_.key(sr) == SourceRegionKey(96506,0)){ + // printf("Rank: %d, Batch: %d; Scalar_flux_old: %f, Source: %f for material %d \n", mpi::rank, simulation::current_batch, source_regions_.scalar_flux_old(sr, g_out), source_regions_.source(sr, g_out), material); + // } } } diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index b7e95ec2696..f2b2cd08782 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -271,7 +271,8 @@ uint64_t RandomRay::transport_history_based_single_ray() using namespace openmc; while (alive()) { // if (id() == 1083){ - // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); + // if (simulation::current_batch == 130) { + // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); // } event_advance_ray(); if (!alive()) @@ -459,7 +460,7 @@ void RandomRay::attenuate_flux(double distance, double offset) // if(has_left_subdomain() && !is_buffered_) { if(has_left_subdomain()) { // if (id() == 1083){ - // printf("RANK %d: buffering, new owner %d \n", mpi::rank, owner_rank_); + // if (simulation::current_batch == 130) printf("RANK %d: buffering, new owner %d \n", mpi::rank, owner_rank_); // printf("RANK %d: distance travelled old: %f, offset: %f, mesh_partial_length: %f \n", mpi::rank, distance_travelled_, offset, mesh_partial_length); // } Position position_buffer = r() + (offset + mesh_partial_length) * u(); @@ -1017,6 +1018,10 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) } srh = domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); + // if (simulation::current_batch == 130){ + // printf("RANK %d: Ray %ld in source region %ld, mesh bin %d \n", mpi::rank, id(), sr, mesh_bin); + // printf("RANK %d: Source = %f \n", mpi::rank, srh.source(0)); + // } } else { srh = domain_->source_regions_.get_source_region_handle(sr); } From 511ce80b3354fb7fb37375692d00dcacf8ed3f6c Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Wed, 15 Oct 2025 20:40:21 +0100 Subject: [PATCH 10/48] Clean up, surface of ray is transferred in MPI --- examples/simple_tokamak/simple_tok.py | 108 ++++ include/openmc/random_ray/decomposition_map.h | 70 +-- include/openmc/random_ray/random_ray.h | 4 +- .../openmc/random_ray/random_ray_simulation.h | 4 - include/openmc/random_ray/source_region.h | 1 - include/openmc/timer.h | 1 + src/random_ray/decomposition_map.cpp | 580 ++++-------------- src/random_ray/random_ray.cpp | 31 +- src/random_ray/random_ray_simulation.cpp | 198 ++---- src/random_ray/ray_bank.cpp | 50 +- src/random_ray/source_region.cpp | 61 -- src/timer.cpp | 1 + 12 files changed, 323 insertions(+), 786 deletions(-) create mode 100644 examples/simple_tokamak/simple_tok.py diff --git a/examples/simple_tokamak/simple_tok.py b/examples/simple_tokamak/simple_tok.py new file mode 100644 index 00000000000..9726f3bd213 --- /dev/null +++ b/examples/simple_tokamak/simple_tok.py @@ -0,0 +1,108 @@ +import openmc +import numpy as np + +model = openmc.Model.from_model_xml(path="original_mc_model.xml") + +# Adjust original MC boundaries to fit more tightly for use with random ray +reflective_face_1 = model.geometry.get_all_surfaces()[10000] +reflective_face_2 = model.geometry.get_all_surfaces()[11000] + +vac_zmax = openmc.ZPlane(z0= 1000, boundary_type='vacuum') +vac_zmin = openmc.ZPlane(z0= -1000, boundary_type='vacuum') +vac_ymax = openmc.YPlane(y0= 625, boundary_type='vacuum') +vac_ymin = openmc.YPlane(y0= -625, boundary_type='vacuum') +vac_xmax = openmc.XPlane(x0= 1864.0, boundary_type='vacuum') +vac_xmin = openmc.XPlane(x0= -100.0, boundary_type='vacuum') + +outer_region = ( + -vac_zmax & +vac_zmin & + -vac_ymax & +vac_ymin & + -vac_xmax & +vac_xmin & + +reflective_face_1 & -reflective_face_2 +) + +outer_cell = openmc.Cell(region=outer_region, + fill=model.geometry.root_universe) +outer_universe = openmc.Universe(cells=[outer_cell]) +model.geometry.root_universe = outer_universe +model.geometry.determine_paths() + +# Make coarse mesh and tally for random ray void SR subdivision +mesh_cell_size_cm = 100.0 # cm +coarse_mesh = openmc.RegularMesh() +bbox = model.geometry.bounding_box +ll = np.array(bbox.lower_left) +ur = np.array(bbox.upper_right) +coarse_mesh.lower_left = ll +coarse_mesh.upper_right = ur +dims = np.ceil((ur - ll) / mesh_cell_size_cm).astype(int) +coarse_mesh.dimension = tuple(dims) +coarse_mesh_filter = openmc.MeshFilter(coarse_mesh) +coarse_mesh_tally = openmc.Tally(name="coarse_mesh_tally") +coarse_mesh_tally.filters = [coarse_mesh_filter] +coarse_mesh_tally.scores = ["flux"] +model.tallies.append(coarse_mesh_tally) + + +# Make fine mesh and tally for random ray void SR subdivision +mesh_cell_size_cm = 7.5 # cm +fine_mesh = openmc.RegularMesh() +bbox = model.geometry.bounding_box +ll = np.array(bbox.lower_left) +ur = np.array(bbox.upper_right) +fine_mesh.lower_left = ll +fine_mesh.upper_right = ur +dims = np.ceil((ur - ll) / mesh_cell_size_cm).astype(int) +fine_mesh.dimension = tuple(dims) +fine_mesh_filter = openmc.MeshFilter(fine_mesh) +fine_mesh_tally = openmc.Tally(name="fine_mesh_tally") +fine_mesh_tally.filters = [fine_mesh_filter] +fine_mesh_tally.scores = ["flux"] +model.tallies.append(fine_mesh_tally) + +model.convert_to_multigroup( + method = "stochastic_slab", + nparticles = 10000, + groups='CASMO-8', + correction=None, + overwrite_mgxs_library=False +) + +model.convert_to_random_ray() + +bbox = model.geometry.bounding_box +orig_src = model.settings.source[0] + +rr_src = openmc.IndependentSource() +rr_src.space = openmc.stats.Box(bbox.lower_left, bbox.upper_right) +rr_src.constraints = {'domains': [outer_cell]} + +void_cells = [c for c in model.geometry.get_all_cells().values() if c.fill is None] +material_cells = [ + c for c in model.geometry.get_all_cells().values() + if isinstance(c.fill, openmc.Material) +] + +model.settings.random_ray['ray_source'] = rr_src +model.settings.random_ray["source_region_meshes"] = [(fine_mesh, material_cells), (coarse_mesh, void_cells)] +model.settings.random_ray['volume_estimator'] = 'naive' +model.settings.random_ray["distance_inactive"] = 1500.0 +model.settings.random_ray["distance_active"] = 3000.0 +model.settings.random_ray["sample_method"] = 'prng' +model.settings.particles = 40000 +model.settings.batches = 200 +model.settings.inactive = 100 + +plot = openmc.Plot() +box = model.geometry.bounding_box +plot.origin = (0.5*(box.lower_left[0]+box.upper_right[0]), + 0.5*(box.lower_left[1]+box.upper_right[1]), + 0.5*(box.lower_left[2]+box.upper_right[2])) +plot.width = [box.upper_right[0]-box.lower_left[0], + box.upper_right[1]-box.lower_left[1], + box.upper_right[2]-box.lower_left[2]] +plot.pixels = [300, 300, 300] +plot.type = 'voxel' +model.plots = [plot] + +model.export_to_model_xml() \ No newline at end of file diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 92d41bb919e..9fb59068b0c 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -7,13 +7,6 @@ namespace openmc { -// // Container that contains the data to calculate the centroid -// // of the Voronoi cell corresponding to each rank -// struct VoronoiCellData { -// Position position; -// int cell_count; -// }; - class DecompositionMap; namespace mpi { @@ -32,54 +25,37 @@ class DecompositionMap { // Methods to find rank centres that divide spatial domain up into equal // Voronoi volumes void initialize(); - void generate_rank_centers(); //TODO: put in constructor - // void calculate_grid_points(int grid_points_per_dimension); + void generate_rank_centers(); //TODO: put in constructor? void calculate_grid_points(int grid_points_total); void initialize_points(); void calculate_voronoi(vector& position_sum_per_rank, vector& num_points_per_rank); Position calculate_centroids(const Position position_sum, const int num_points, int rank); - // Methods to create and update subdomain list + // Methods to create and update subdomain list and exchange source region data void update(ParallelMap& discovered_source_regions); void exchange_sr_info(ParallelMap& discovered_source_regions); bool any_discovered_source_regions(ParallelMap& discovered_source_regions); - // void transfer_sr_data(int sender, int receiver, SourceRegionKey sr_key, ParallelMap& - // discovered_source_regions); - void transfer_sr_data(int sender, int receiver, SourceRegion& sr_send, SourceRegion& sr_recv); void send_sr_data(int receiver, SourceRegion& sr_send); void receive_sr_data(int sender, SourceRegion& sr_recv); - - // Method to check if source region key is in subdomain of calling rank - // bool is_SRK_in_domain(SourceRegionKey sr_key, Position r); - // bool is_SRK_in_domain(SourceRegionKey sr_key, Position r, - // ParallelMap& - // discovered_source_regions); - int find_owner(SourceRegionKey sr_key, Position r, - ParallelMap& - discovered_source_regions, int64_t ID); - // bool record_new_SRK(SourceRegionKey sr_key, Position r); - // bool is_closest_rank(Position r); - int find_closest_rank(Position r); - // bool is_SRK_in_domain(SourceRegionKey sr_key); - // int n_source_regions(); - - // void calculate_rank_load(uint64_t total_geometric_intersections); - - // Calculates the load per rank based on the total number of hits all source regions - // experience - void calculate_rank_load(FlatSourceDomain* domain); - // void calculate_rank_load(uint64_t total_geometric_intersections); - + // Methods for balancing the load between ranks void balance_load(FlatSourceDomain* domain); void update_load(FlatSourceDomain* domain); void redistribute_source_regions(FlatSourceDomain* domain); bool load_balanced() const { return max_imbalance_ < imbalance_tolerance_; } - + // Methods to find owner of source region + int find_owner(SourceRegionKey sr_key, Position r, + ParallelMap& + discovered_source_regions); + int find_closest_rank(Position r); + + // Method to calculate the load per rank based on the total number of hits in all source regions + // of a rank + void calculate_rank_load(FlatSourceDomain* domain); //---------------------------------------------------------------------------- // Static data members @@ -93,30 +69,19 @@ class DecompositionMap { std::unordered_map subdomain_map_; - // Map that contains all newly discovered source region keys in a batch - // that have not yet assigned a rank with certainty. - // std::unordered_map - // discovered_regions_map_; //TODO: could exisiting discovered_source_regions container be re-used? - - // std::unordered_map subdomain_map_; + // Centers of each rank's Voronoi cell vector rank_centers_; vector rank_load_; - // std::unordered_set outside_source_regions_; - // std::unordered_map outside_source_regions_; - double target_load_; vector rank_weights_; + double target_load_; private: //---------------------------------------------------------------------------- // Private data members - // vector my_subdomain_list_; - SpatialBox* spatial_box_ = nullptr; // Add this member variable - // std::unordered_map> voronoi_map_; - vector grid_points_; - // int grid_points_per_rank_{2}; + SpatialBox* spatial_box_ = nullptr; + vector grid_points_; //TODO: This can be local variable when Voronoi centres ae established int grid_points_per_rank_{100}; - // int grid_points_per_rank_{1000}; int negroups_; uint64_t n_hits_sum_; @@ -124,8 +89,7 @@ class DecompositionMap { bool is_linear_; double max_imbalance_ = 0.0; double imbalance_tolerance_ = 0.01; // 1% imbalance tolerance - // vector position_sum_per_rank(mpi::n_procs, Position(0,0,0)); - // vector num_points_per_rank(mpi::n_procs, 0); + double optimization_history_factor_ = 1.0; }; // class DecompositionMap diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index a86c4273d1f..1e8050a7fd9 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -10,12 +10,13 @@ namespace openmc { -// Container for MPI exchange +// Container for MPI exchange //TODO: can we avoid this duplication with RayExchangeData? struct RayBufferContainer { Position position; Direction direction; double distance_travelled; vector angular_flux; + int surface; // SourceRegionKey sr_key; // int sr; // int receiving_rank; @@ -28,6 +29,7 @@ struct RayExchangeData { Position position; Direction direction; double distance_travelled; + int surface; bool is_active; uint64_t ray_id; }; diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 00f0883aa0f..0ab5d74bd4e 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -58,17 +58,13 @@ class RandomRaySimulation { // Tracks the total number of geometric intersections by all rays for // reporting uint64_t total_geometric_intersections_ {0}; - // batch-wise intersection counter - // uint64_t batch_geometric_intersections_ {0}; // Number of energy groups int negroups_; // Average number of ray communications between rank per batch uint64_t avg_num_comms_ {0}; - uint64_t num_comms_batch_ {0}; uint64_t num_ray_crossings_ {0}; //TODO: temporary - // vector rank_load_; }; // class RandomRaySimulation diff --git a/include/openmc/random_ray/source_region.h b/include/openmc/random_ray/source_region.h index 3f8fa6cbffe..01f7dcb3849 100644 --- a/include/openmc/random_ray/source_region.h +++ b/include/openmc/random_ray/source_region.h @@ -629,7 +629,6 @@ class SourceRegionContainer { // Public Methods void push_back(const SourceRegion& sr); - // void erase(int sr_idx); void assign(int n_source_regions, const SourceRegion& source_region); void flux_swap(); int64_t n_source_regions() const { return n_source_regions_; } diff --git a/include/openmc/timer.h b/include/openmc/timer.h index 8ad3fd596af..3558bbacc70 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -34,6 +34,7 @@ extern Timer time_event_death; extern Timer time_update_src; extern Timer time_ray_comms; extern Timer time_decomposition_handling; +extern Timer time_load_balance; extern Timer time_ray_buffering; extern Timer time_generate_voronoi_centers; extern Timer time_source_region_exchange; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index f6e73c3b4b9..91673a3e205 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -6,7 +6,7 @@ #include "openmc/random_ray/random_ray.h" #include "openmc/random_lcg.h" #include "openmc/mgxs_interface.h" -#include "openmc/timer.h" //TODO: temporary? +#include "openmc/timer.h" #include "openmc/simulation.h" @@ -23,7 +23,6 @@ void DecompositionMap::initialize(){ negroups_ = data::mg.num_energy_groups_; rank_load_.resize(mpi::n_procs, 0.0); target_load_ = 1.0/mpi::n_procs; - // rank_weights_.resize(mpi::n_procs, 0.0); rank_weights_.resize(mpi::n_procs, 1.0); spatial_box_ = dynamic_cast( @@ -41,14 +40,10 @@ void DecompositionMap::initialize(){ void DecompositionMap::generate_rank_centers(){ // Calculate grid points that are used for Voronoi cells - // int grid_points_per_dimension = ceil(grid_points_per_rank_ * cbrt(mpi::n_procs)); // number of grid points in each dimension int grid_points_total = grid_points_per_rank_ * mpi::n_procs; printf("Calculating %d grid points for Voronoi tessellation...\n", grid_points_total); - // printf("Grid points per dimension: %d \n", grid_points_per_dimension); - // calculate_grid_points(grid_points_per_dimension); calculate_grid_points(grid_points_total); - // Initialize points with random positions initialize_points(); @@ -61,10 +56,6 @@ void DecompositionMap::generate_rank_centers(){ // https://en.wikipedia.org/wiki/Lloyd%27s_algorithm while (err > precision && it < max_iterations) { - // if (mpi::master){ - // printf("ITERATION %d \n", it); - // } - // Reset error to determine maximum movement below err = 0.0; @@ -78,7 +69,8 @@ void DecompositionMap::generate_rank_centers(){ for (int rank = 0; rank < mpi::n_procs; rank++) { if (mpi::master){ - printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); + //TODO: temporary + printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); } // Calculate centroid of the cell @@ -99,57 +91,52 @@ void DecompositionMap::generate_rank_centers(){ it++; } - if (mpi::master){ - for (int rank = 0; rank < mpi::n_procs; rank++) { - printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); - } - } - if (mpi::master) { if (it == max_iterations) { warning("Lloyd's algorithm did not converge within the maximum number of iterations."); } else { printf("Lloyd's algorithm converged in %d iterations.\n", it); } + printf("The following Voronoi centres are being used:\n"); + for (int rank = 0; rank < mpi::n_procs; rank++) { + printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); + } } } -// void DecompositionMap::calculate_grid_points(int grid_points_per_dimension){ void DecompositionMap::calculate_grid_points(int grid_points_total){ - // Calculate grid spacing + // Calculate length along each dimension vector domain_length(3); domain_length[0] = spatial_box_->upper_right().x - spatial_box_->lower_left().x; domain_length[1] = spatial_box_->upper_right().y - spatial_box_->lower_left().y; domain_length[2] = spatial_box_->upper_right().z - spatial_box_->lower_left().z; - // double x_length = spatial_box_->upper_right().x - spatial_box_->lower_left().x; - // double y_length = spatial_box_->upper_right().y - spatial_box_->lower_left().y; - // double z_length = spatial_box_->upper_right().z - spatial_box_->lower_left().z; double volume = domain_length[0] * domain_length[1] * domain_length[2]; - // printf("Spatial box dimensions: %f x %f x %f \n", x_length, y_length, z_length); + //TODO: temporary printf("Spatial box volume: %f \n", volume); - // printf("Grid points per dimension: %d \n", grid_points_per_dimension); - - // int grid_points_x = std::max(2, static_cast(round((x_length / cbrt(volume)) * cbrt(grid_points_total)))); - // int grid_points_y = std::max(2, static_cast(round((y_length / cbrt(volume)) * cbrt(grid_points_total)))); - // int grid_points_z = std::max(2, static_cast(round((z_length / cbrt(volume)) * cbrt(grid_points_total)))); + // For each dimension, determine grid points along that direction based on aspect ratio: + // domain_length / volume^(1/3) = grid_points_dimension / grid_points_total^(1/3). + // Check if any dimension is so distorted that it would only receive minimun of 2 grid + // points and flag that direction to correct total number of grid points. int excluded_dimension = -1; vector grid_points_per_dimension(3); for (int i = 0; i < 3; i++){ double grid_points_estimate = ((domain_length[i] / cbrt(volume)) * cbrt(grid_points_total)); - // Check if any dimension distorted + if (grid_points_estimate > 2){ - grid_points_per_dimension[i] = std::max(2, static_cast(round(grid_points_estimate))); + grid_points_per_dimension[i] = round(grid_points_estimate); } else { excluded_dimension = i; grid_points_per_dimension[i] = 2; } } + // If one dimension is excluded, recalculate grid points in other two dimensions based on area. Divide total + // number of grid points by 2 to account for the fixed 2 grid points in excluded direction. if (excluded_dimension != -1){ double area = 1.0; @@ -158,64 +145,41 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ area *= domain_length[i]; } - // Recalculate grid points in non-distorted dimensions based on area for (int i = 0; i < 3; i++){ if (i == excluded_dimension) continue; grid_points_per_dimension[i] = round((domain_length[i] / sqrt(area)) * sqrt(grid_points_total/2.0)); } } + //TODO: temporary printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); - // int total_grid_points = grid_points_per_dimension * grid_points_per_dimension * grid_points_per_dimension; - - // int grid_points_x = std::max(2, static_cast(round((x_length / cbrt(volume)) * grid_points_per_dimension))); - // int grid_points_y = std::max(2, static_cast(round((y_length / cbrt(volume)) * grid_points_per_dimension))); - // int grid_points_z = std::max(2, static_cast(round((z_length / cbrt(volume)) * grid_points_per_dimension))); - + // Adjust grid points in each dimension to match actual total number of grid points to the number of grid points requested double new_total = grid_points_per_dimension[0] * grid_points_per_dimension[1] * grid_points_per_dimension[2]; double adjustment; if (excluded_dimension != -1) { // When one dimension is fixed at 2, use square root for the other two dimensions adjustment = sqrt(grid_points_total / new_total); } else { - // When all dimensions are free, use cube root + // When all dimensions are used, use cubic root adjustment = cbrt(grid_points_total / new_total); } - // double adjustment = cbrt(grid_points_total / new_total); - + // Multiply adjustment factor for (int i = 0; i < 3; i++){ if (i == excluded_dimension) continue; grid_points_per_dimension[i] = round(grid_points_per_dimension[i] * adjustment); } - - // grid_points_x = std::max(2, static_cast(round(grid_points_x * adjustment))); - // grid_points_y = std::max(2, static_cast(round(grid_points_y * adjustment))); - // grid_points_z = std::max(2, static_cast(round(grid_points_z * adjustment))); - - // double exponent_x = (x_length / cbrt(volume)); - // double exponent_y = (y_length / cbrt(volume)); - // double exponent_z = (z_length / cbrt(volume)); - - // int grid_points_x = std::pow(total_grid_points, exponent_x/3.0); - // int grid_points_y = std::pow(total_grid_points, exponent_y/3.0); - // int grid_points_z = std::pow(total_grid_points, exponent_z/3.0); - - - + + //TODO: temporary printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); + // Calculate spacing between grid points in each dimension double delta_x = (spatial_box_->upper_right().x - spatial_box_->lower_left().x) / (grid_points_per_dimension[0] - 1); double delta_y = (spatial_box_->upper_right().y - spatial_box_->lower_left().y) / (grid_points_per_dimension[1] - 1); double delta_z = (spatial_box_->upper_right().z - spatial_box_->lower_left().z) / (grid_points_per_dimension[2] - 1); - // double delta_x = (spatial_box_->upper_right().x - spatial_box_->lower_left().x) / (grid_points_per_dimension - 1); - // double delta_y = (spatial_box_->upper_right().y - spatial_box_->lower_left().y) / (grid_points_per_dimension - 1); - // double delta_z = (spatial_box_->upper_right().z - spatial_box_->lower_left().z) / (grid_points_per_dimension - 1); - // Generate all grid points - for (int i = 0; i < grid_points_per_dimension[0]; i++) { double x = spatial_box_->lower_left().x + i * delta_x; for (int j = 0; j < grid_points_per_dimension[1]; j++) { @@ -244,7 +208,7 @@ void DecompositionMap::initialize_points(){ Position xi {x, y, z}; - // make a small shift in position to avoid geometry floating point issues //TODO: necessary? + // make a small shift in position to avoid geometry floating point issues //TODO: necessary? Adopted from halton sampling Position shift {FP_COINCIDENT, FP_COINCIDENT, FP_COINCIDENT}; rank_centers_[rank] = (spatial_box_->lower_left() + shift) + xi * ((spatial_box_->upper_right() - shift) - (spatial_box_->lower_left() + shift)); @@ -313,47 +277,25 @@ Position DecompositionMap::calculate_centroids(const Position position_sum, cons return centroid; } -// Update subdomain list for each decomposition map. +// Update subdomain list for each decomposition map. //TODO: This function seems obsolete and should be included into main code void DecompositionMap::update(ParallelMap& discovered_source_regions){ - // negroups_ = data::mg.num_energy_groups_; //TODO: This should not be called here again an dagain - - // outside_source_regions_.clear(); - - // bool test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); - // printf("Exchange sr data info"); - - bool any_sr_to_exchange = any_discovered_source_regions(discovered_source_regions); - - // Check if any new regions discovered - // if (any_discovered_source_regions(discovered_source_regions)){ - if (any_sr_to_exchange){ - // Exchange discovered cell data between ranks + // Check if any new regions discovered and if so, exchange discovered cell data between ranks + if (any_discovered_source_regions(discovered_source_regions)){ simulation::time_source_region_exchange.start(); exchange_sr_info(discovered_source_regions); simulation::time_source_region_exchange.stop(); } - // test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); - // printf("2.9 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); - - // vector rank_counts(mpi::n_procs, 0); - - // for (auto [sr_key, rank] : discovered_regions_map_){ - // // subdomain_map_[sr_key] = rank; - // } - } bool DecompositionMap::any_discovered_source_regions(ParallelMap& discovered_source_regions){ - // int local_new_srs = discovered_regions_map_.size(); int flag = 0; if(discovered_source_regions.begin() != discovered_source_regions.end()) { - // if (local_new_srs > 0) { flag = 1; } @@ -365,22 +307,14 @@ bool DecompositionMap::any_discovered_source_regions(ParallelMap& discovered_source_regions){ - // bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; - // Communicate maps for (int rank = 0; rank < mpi::n_procs; rank++) { - // if (simulation::current_batch == 6) { - // bool test = discovered_source_regions.contains(SourceRegionKey(4, 104171)); - // printf("2.2 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); - // } - // Send size uint64_t bcast_size = 0; if (rank == mpi::rank) { - // bcast_size = discovered_source_regions.size(); - // bcast_size = discovered_regions_map_.size(); for (const auto& pair : discovered_source_regions) { + // Only broadcast source regions that have non-zero volume, i.e. regions discovered during active phase of ray if (pair.second.scalars_.volume_ > 0.0) { //TODO: can this check be avoided? bcast_size++; } @@ -389,26 +323,15 @@ void DecompositionMap::exchange_sr_info(ParallelMap 0) { - // vector local_rank_ids(bcast_size); vector local_base_ids(bcast_size); vector local_mesh_bins(bcast_size); if(rank == mpi::rank) { // fill in vectors to be sent int i = 0; - // for (auto [sr_key, rank] : discovered_regions_map_){ for (const auto& pair : discovered_source_regions) { - // for (auto [sr_key, rank] : discovered_regions_map_){ - // local_rank_ids[i] = rank; if (pair.second.scalars_.volume_ > 0.0) { SourceRegionKey sr_key = pair.first; local_base_ids[i] = sr_key.base_source_region_id; @@ -418,51 +341,21 @@ void DecompositionMap::exchange_sr_info(ParallelMap& -// discovered_source_regions){ - -void DecompositionMap::transfer_sr_data(int sender, int receiver, SourceRegion& sr_send, SourceRegion& sr_recv){ - - // bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; - - // SourceRegion& sr_send = discovered_source_regions[sr_key]; - - int num_scalar_messages = 1; - //! NOTE: update if new vector fields are added to SourceExchangeVectors struct - int num_vector_messages = 4; - if (is_linear_){ - num_vector_messages += 4; - } - if (settings::run_mode == RunMode::FIXED_SOURCE) { - num_vector_messages += 1; - } - int num_requests = num_scalar_messages + num_vector_messages; - - vector requests(num_requests); - int req_idx = 0; - - if (mpi::rank == sender){ //TODO: maybe add check that only sends fields that are needed when source regions are freshly discovered? - - // Send scalar data to receiver - MPI_Isend(&sr_send.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, receiver, 1, mpi::intracomm, &requests[req_idx]); - req_idx ++; - - // Send vector data to receiver - // Tags hardcoded to avoid confusion if new fields are not added sequentially - MPI_Isend(sr_send.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, receiver, 2, mpi::intracomm, &requests[req_idx]); - req_idx ++; - - // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_old_.size()); - - MPI_Isend(sr_send.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, receiver, 3, mpi::intracomm, &requests[req_idx]); - req_idx ++; - - // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_new_.size()); - - MPI_Isend(sr_send.source_.data(), negroups_, MPI_FLOAT, receiver, 4, mpi::intracomm, &requests[req_idx]); - req_idx ++; - // printf("Size 3 flux new on rank %d: %lu \n", mpi::rank, sr_send.source_.size()); - - if (settings::run_mode == RunMode::FIXED_SOURCE) { - MPI_Isend(sr_send.external_source_.data(), negroups_, MPI_FLOAT, receiver, 5, mpi::intracomm, &requests[req_idx]); - req_idx ++; - // printf("Size 4 flux new on rank %d: %lu \n", mpi::rank, sr_send.external_source_.size()); - } - - MPI_Isend(sr_send.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, receiver, 6, mpi::intracomm, &requests[req_idx]); - req_idx ++; - // printf("Size 5 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_final_.size()); - - if (is_linear_){ - MPI_Isend(sr_send.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, receiver, 7, mpi::intracomm, &requests[req_idx]); - req_idx ++; - - MPI_Isend(sr_send.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, receiver, 8, mpi::intracomm, &requests[req_idx]); - req_idx ++; - - MPI_Isend(sr_send.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, receiver, 9, mpi::intracomm, &requests[req_idx]); - req_idx ++; - - MPI_Isend(sr_send.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, receiver, 10, mpi::intracomm, &requests[req_idx]); - req_idx ++; - } - // printf("Send complete"); - - if (req_idx != num_requests){ - fatal_error(fmt::format("Number of MPI requests does not match number of messages sent." - "Check if num_vector_messages is up to date in DecompositionMap::transfer_sr_data().")); - } - - // Wait for all communication to complete - // MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); - MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); - - // discovered_source_regions.erase(sr_key); - // printf("Source region erased from rank %d \n", sender); - - } else if (mpi::rank == receiver){ - - // printf("RANK %d: Source Region exists %d \n", mpi::rank, discovered_source_regions.contains(sr_key)); - - // printf("Energy groups: %d \n", negroups_); - - // SourceRegion sr_recv(negroups_, is_linear); - - // Receive scalar data from sender - MPI_Recv(&sr_recv.scalars_, sizeof(ScalarSourceRegionFields), MPI_BYTE, sender, 1, mpi::intracomm, MPI_STATUS_IGNORE); - - // Receive vector data from sender - MPI_Recv(sr_recv.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, sender, 2, mpi::intracomm, MPI_STATUS_IGNORE); - MPI_Recv(sr_recv.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, sender, 3, mpi::intracomm, MPI_STATUS_IGNORE); - MPI_Recv(sr_recv.source_.data(), negroups_, MPI_FLOAT, sender, 4, mpi::intracomm, MPI_STATUS_IGNORE); - - if (settings::run_mode == RunMode::FIXED_SOURCE) { - MPI_Recv(sr_recv.external_source_.data(), negroups_, MPI_FLOAT, sender, 5, mpi::intracomm, MPI_STATUS_IGNORE); - } - - MPI_Recv(sr_recv.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, sender, 6, mpi::intracomm, MPI_STATUS_IGNORE); - - if (is_linear_){ - MPI_Recv(sr_recv.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, sender, 7, mpi::intracomm, MPI_STATUS_IGNORE); - MPI_Recv(sr_recv.flux_moments_old_.data(), 3*negroups_, MPI_DOUBLE, sender, 8, mpi::intracomm, MPI_STATUS_IGNORE); - MPI_Recv(sr_recv.flux_moments_new_.data(), 3*negroups_, MPI_DOUBLE, sender, 9, mpi::intracomm, MPI_STATUS_IGNORE); - MPI_Recv(sr_recv.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, sender, 10, mpi::intracomm, MPI_STATUS_IGNORE); - } - - // Merge source region data %TODO: is it OK to make this method of source region class? - // sr_send.merge(sr_recv, is_linear); - // TODO: will this feed back automatically into discovered_source_regions? - } - -} - void DecompositionMap::send_sr_data(int receiver, SourceRegion& sr_send){ int num_scalar_messages = 1; @@ -678,26 +433,19 @@ void DecompositionMap::send_sr_data(int receiver, SourceRegion& sr_send){ MPI_Isend(sr_send.scalar_flux_old_.data(), negroups_, MPI_DOUBLE, receiver, 2, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 1 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_old_.size()); - MPI_Isend(sr_send.scalar_flux_new_.data(), negroups_, MPI_DOUBLE, receiver, 3, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 2 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_new_.size()); - MPI_Isend(sr_send.source_.data(), negroups_, MPI_FLOAT, receiver, 4, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 3 flux new on rank %d: %lu \n", mpi::rank, sr_send.source_.size()); if (settings::run_mode == RunMode::FIXED_SOURCE) { MPI_Isend(sr_send.external_source_.data(), negroups_, MPI_FLOAT, receiver, 5, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 4 flux new on rank %d: %lu \n", mpi::rank, sr_send.external_source_.size()); } MPI_Isend(sr_send.scalar_flux_final_.data(), negroups_, MPI_DOUBLE, receiver, 6, mpi::intracomm, &requests[req_idx]); req_idx ++; - // printf("Size 5 flux new on rank %d: %lu \n", mpi::rank, sr_send.scalar_flux_final_.size()); if (is_linear_){ MPI_Isend(sr_send.source_gradients_.data(), 3*negroups_, MPI_DOUBLE, receiver, 7, mpi::intracomm, &requests[req_idx]); @@ -712,7 +460,6 @@ void DecompositionMap::send_sr_data(int receiver, SourceRegion& sr_send){ MPI_Isend(sr_send.flux_moments_t_.data(), 3*negroups_, MPI_DOUBLE, receiver, 10, mpi::intracomm, &requests[req_idx]); req_idx ++; } - // printf("Send complete"); if (req_idx != num_requests){ fatal_error(fmt::format("Number of MPI requests does not match number of messages sent." @@ -751,15 +498,11 @@ void DecompositionMap::receive_sr_data(int sender, SourceRegion& sr_recv){ int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, ParallelMap& - discovered_source_regions, int64_t ID){ //TODO: Remove ID - - // Check if SRK is in rank's subdomain + discovered_source_regions){ + + // Check if SRK is in subdomain map auto it = subdomain_map_.find(sr_key); if (it != subdomain_map_.end()){ - // if (sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ - // printf("RANK %d: Identified owner of ray %ld at check 1 as rank %d\n", mpi::rank, ID, it->second); - // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); - // } return it->second; } @@ -768,26 +511,15 @@ int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, bool sr_key_discovered = discovered_source_regions.contains(sr_key); discovered_source_regions.unlock(sr_key); if (sr_key_discovered){ - // if(sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ - // printf("RANK %d: Identified owner of ray %ld at check 2 as rank %d\n", mpi::rank, ID, mpi::rank); - // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); - // } - // printf("RANK %d: Identified owner at check 2 as rank %d\n", mpi::rank, mpi::rank); return mpi::rank; } - // If not found in either map, check if my rank would own source + // If not found in either map, check which rank would own source // region beased on location int closest_rank = find_closest_rank(r); - // if (sr_key.base_source_region_id == 134 && sr_key.mesh_bin == 64056 || ID == 1083){ - // printf("RANK %d: Identified owner of ray %ld at check 4 as rank %d\n", mpi::rank, ID, closest_rank); - // printf("RANK %d: Position (%f, %f, %f) \n", mpi::rank, r.x, r.y, r.z); - // } - // printf("RANK %d: Identified owner at check 4 as rank %d\n", mpi::rank, closest_rank); return closest_rank; } -// bool DecompositionMap::is_closest_rank(Position r) { int DecompositionMap::find_closest_rank(Position r) { // Determine which rank the position belongs to int closest_rank = C_NONE; @@ -796,8 +528,7 @@ int DecompositionMap::find_closest_rank(Position r) { // Find closest rank center for (int rank = 0; rank < mpi::n_procs; rank++) { double dist = (r - rank_centers_[rank]).norm(); - // Power Voronoi diagram uses sqaured distances - // dist *= dist; + // Distance function corresponding to weighted power Voronoi diagram. dist = dist*dist - rank_weights_[rank]; if (dist < min_distance) { min_distance = dist; @@ -810,100 +541,61 @@ int DecompositionMap::find_closest_rank(Position r) { + std::to_string(r.x) + ", " + std::to_string(r.y) + ", " + std::to_string(r.z) + ")."); } - // check whether it belongs to this rank's subdomain - // bool is_in_my_subdomain = (closest_rank == mpi::rank); - // return is_in_my_subdomain; return closest_rank; } -// void DecompositionMap::calculate_rank_load(uint64_t total_geometric_intersections){ - -// // Reset rank load -// std::fill(rank_load_.begin(), rank_load_.end(), 0.0); - -// // Temporary print-outs -// if (mpi::master) { -// printf("Load distribution: "); -// } - -// // Calculate rank load based on number of geometric intersections -// uint64_t total_geometric_intersections_sum = 0; -// MPI_Allreduce(&total_geometric_intersections, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); -// double load = (total_geometric_intersections/static_cast(total_geometric_intersections_sum))*100.0; - -// for (int rank = 0; rank < mpi::n_procs; rank++) { -// // Broadcast load -// double bcast_load = 0.0; -// if (rank == mpi::rank) { -// bcast_load = load; -// } -// MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); -// rank_load_[rank] = bcast_load; -// // Temporary print-outs -// if (mpi::master) { -// printf("RANK %d: %.2f%% ", rank, rank_load_[rank]); -// } -// } -// // Temporary print-outs -// if (mpi::master) { -// printf("\n"); -// } -// } - void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: This uses accumulated value, not batch-wise values! - - // rank_load_.resize(mpi::n_procs, 0.0); //TODO: that should be moved elsewhere // Reset rank load std::fill(rank_load_.begin(), rank_load_.end(), 0.0); - - // Add number of hits for each source region by going through all exisiting source regions. int64_t n_hits_rank = 0; - // add source region hits + // Add number of hits for each source region by going through all exisiting source regions. #pragma omp parallel for reduction(+ : n_hits_rank) for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { n_hits_rank += domain->source_regions_.n_hits(sr); } - // add newly discovered source region hits + // Add newly discovered source region hits. for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { n_hits_rank += sr.scalars_.n_hits_; } - // Temporary print-outs + //TODO: Temporary print-outs if (mpi::master) { printf("Load distribution: "); } - // Calculate rank load based on number of geometric intersections + // Calculate rank load based on number of source region hits uint64_t n_hits_total = 0; MPI_Allreduce(&n_hits_rank, &n_hits_total, 1, MPI_INT64_T, MPI_SUM, mpi::intracomm); double load = (n_hits_rank/static_cast(n_hits_total)); n_hits_sum_ = n_hits_total; + //TODO: Temporary print-outs if(mpi::master){ printf("Total hits: %ld \n", n_hits_total); } + // Communicate load across ranks for (int rank = 0; rank < mpi::n_procs; rank++) { - // Broadcast load double bcast_load = 0.0; if (rank == mpi::rank) { bcast_load = load; } MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); rank_load_[rank] = bcast_load; - // Temporary print-outs + //TODO: Temporary print-outs if (mpi::master) { printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); } } - // Temporary print-outs + //TODO: Temporary print-outs if (mpi::master) { printf("\n"); } + // Calculate imbalance double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; max_imbalance_ = (max_load - avg_load) / avg_load; @@ -911,36 +603,34 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th void DecompositionMap::balance_load(FlatSourceDomain* domain){ - // if (mpi::master) printf("Starting MPI load balancing... \n"); + //TODO: The optimisation seems really messy int max_iterations = 1000; - // double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); - // double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; - // double max_imbalance = (max_load - avg_load) / avg_load; double max_imbalance = max_imbalance_; - // double tol_outer = 0.01; int it_outer = 0; double adaptation_factor = 1; //0.5 //0.1; - double min_factor = 0.01; - double max_factor = 2; + double min_adaptation_factor = 0.01; + double max_adaptation_factor = 2; double prev_imbalance = max_imbalance; double avg_rank_distance = max_domain_length_/cbrt(mpi::n_procs); // rough estimate of average distance between ranks //TODO: cubic root might not be adaquate for problems that are not box like - double weight_scale = avg_rank_distance * avg_rank_distance; //TODO: maybe adjust dynamically dependent on wether previous batch has converged + double weight_scale = avg_rank_distance * avg_rank_distance * optimization_history_factor_; //TODO: maybe adjust dynamically dependent on wether previous batch has converged // double weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; // scale weights based on average load double beta = 0.6; // momentum damping - vector weight_change(mpi::n_procs, 0.0); + // History tracking + vector imbalance_history; + imbalance_history.push_back(max_imbalance); + vector weight_change(mpi::n_procs, 0.0); vector old_weights = rank_weights_; - double max_imbalance_old = max_imbalance_; + // double max_imbalance_old = max_imbalance_; std::unordered_map> sr_send; // contains regions to be send - // if (mpi::master) printf("Max. load: %.2f%%, Avg. load: %.2f%%, Max. imbalance: %.2f%% \n", max_load*100.0, avg_load*100.0, max_imbalance*100.0); - while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ + //TODO: temporary if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); // Optimise rank load rank by rank @@ -965,39 +655,66 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0) / mpi::n_procs; max_imbalance = (max_load - avg_load) / avg_load; + // Store imbalance history for diagnostics if convergence fails + imbalance_history.push_back(max_imbalance); + // Adaptive factor if (max_imbalance > prev_imbalance) - adaptation_factor = std::max(adaptation_factor * 0.5, min_factor); // don’t go below min + adaptation_factor = std::max(adaptation_factor * 0.5, min_adaptation_factor); // don’t go below min else - adaptation_factor = std::min(adaptation_factor * 1.05, max_factor); // stable - accelerate slightly + adaptation_factor = std::min(adaptation_factor * 1.05, max_adaptation_factor); // stable - accelerate slightly prev_imbalance = max_imbalance; } + // Check convergence and adjust history optimization factor depending on failure mode to enable better convergence in the following batch if (it_outer == max_iterations){ if(mpi::master) { warning("MPI load balancing has not converged after " + std::to_string(max_iterations) + " iterations."); } - if (max_imbalance_old < max_imbalance){ + + // Check if oscillating or simply slow convergence + bool is_oscillating = false; + int direction_changes = 0; + + for (int i = 1; i < imbalance_history.size(); i++) { + // Calculate change + double change = imbalance_history[i] - imbalance_history[i-1]; + + // Count direction changes + if (i > 1) { + double prev_change = imbalance_history[i-1] - imbalance_history[i-2]; + if (change * prev_change < 0) { + direction_changes++; + } + } + } + + double oscillation_ratio = (double)direction_changes / (imbalance_history.size() - 2); + + if (oscillation_ratio > 0.4) { + optimization_history_factor_ *= 0.5; // decrease weight for next batch if oscillating, TODO: SHould this be safeguarded with max/ min value? + } else { + optimization_history_factor_ *= 1.2; // increase weight for faster convergence if too slow. + } + + // Revert to previous weights if load balancing did not improve and return + if (imbalance_history[0] < max_imbalance){ rank_weights_ = old_weights; return; } } else { + optimization_history_factor_ = 1.0; // reset history factor if converged if (mpi::master){ printf("MPI load balancing converged after %d iterations. Max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); } } - // if (mpi::master) printf("Finished rebalancing \n"); - - // fatal_error("STOP"); - - // update decomposition map redistribute_source_regions(domain); - + //TODO: temporary if (mpi::master){ printf("Weights: "); for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -1005,44 +722,22 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ } printf("\n"); } - } void DecompositionMap::update_load(FlatSourceDomain* domain){ vector n_hits(mpi::n_procs, 0); - // add source region hits + // Add up source region hits to respective rank depending of position of centroid of each source region #pragma omp parallel { // number of hits per thread vector local_hits(mpi::n_procs, 0); - // if (mpi::master) printf("Calculating rank loads... \n"); - #pragma omp for for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { - Position centroid = domain->source_regions_.centroid(sr); - // int owner = C_NONE; - // double min_distance = INFTY; - - // // Find closest rank center - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // double dist = (centroid - rank_centers_[rank]).norm(); - // // Power Voronoi diagram uses squared distances - // dist = dist*dist - rank_weights_[rank]; - // if (dist < min_distance) { - // min_distance = dist; - // owner = rank; - // // if (min_distance < 0.0){ - // // break; // no need to continue searching - // // } - // } - // } - int owner = find_closest_rank(centroid); - local_hits[owner] += domain->source_regions_.n_hits(sr); } @@ -1055,22 +750,16 @@ void DecompositionMap::update_load(FlatSourceDomain* domain){ } } - // if (mpi::master) printf("Total hits before allreduce: %d \n", std::accumulate(n_hits.begin(), n_hits.end(), 0)); - - // Accumulate rank loads across all ranks + // Accumulate hits across all ranks MPI_Allreduce(MPI_IN_PLACE, n_hits.data(), mpi::n_procs, MPI_UINT64_T, MPI_SUM, mpi::intracomm); for (int rank = 0; rank < mpi::n_procs; rank++){ rank_load_[rank] = (n_hits[rank]/static_cast(n_hits_sum_)); } - - // if (mpi::master) printf("Total hits after allreduce: %d \n", std::accumulate(n_hits.begin(), n_hits.end(), 0)); } void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { - // printf("1 Rank %d: Redistributing source regions... \n", mpi::rank); - std::unordered_map> sr_send_list; vector num_sr_receiving(mpi::n_procs, 0); @@ -1079,35 +768,19 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { // Each rank identifies source regions that need to be transferred to new owner and updates subdomain map accordingly for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { - Position centroid = domain->source_regions_.centroid(sr); - // int owner = C_NONE; - // double min_distance = INFTY; - - // // Find closest rank center //TODO: Should this be put in update_load() to avoid repeating the same loop? But then I might right - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // double dist = (centroid - rank_centers_[rank]).norm(); - // // Power Voronoi diagram uses squared distances - // dist = dist*dist - rank_weights_[rank]; - // if (dist < min_distance) { - // min_distance = dist; - // owner = rank; - // } - // } - int owner = find_closest_rank(centroid); // If owner changed, write source region to list of outbound source regions if (owner != mpi::rank){ sr_send_list[owner].push_back(sr); - } else { - // If owner did not change, add source region to new local container + } + // If owner did not change, add source region to new local container + else { source_regions_new.push_back(domain->source_regions_.get_source_region_handle(sr)); } } - // printf("2 Rank %d: Identified %lu ranks to send source regions to... \n", mpi::rank, sr_send_list.size()); - // Each rank communicates other ranks about ownership changes to update subdomain map for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -1117,7 +790,6 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { for (const auto& pair : sr_send_list) { bcast_size += pair.second.size(); } - // printf("2.1 Rank %d: Broadcasting %d source regions of %ld total source regions to update subdomain map... \n", mpi::rank, bcast_size, domain->n_source_regions()); } MPI_Bcast(&bcast_size, 1, MPI_INT, rank, mpi::intracomm); @@ -1164,48 +836,27 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { if (mpi::rank == rank_new){ num_sr_receiving[rank] += 1; } - - //TODO: Do sending here? } } } - // printf("3 Rank %d: Updated subdomain map... \n", mpi::rank); - // clear source_region_map_ domain->source_region_map_.clear(); - // printf("3.1 Rank %d: Updated subdomain map... \n", mpi::rank); - - // Send source regions + // Send source region data to new owner for (auto& pair : sr_send_list) { - - // printf("Rank %d: Test-2 \n", mpi::rank); int receiver = pair.first; // destination rank vector& sr_indices = pair.second; // vector of source region indices - // printf("Rank %d: Test-1 \n", mpi::rank); - - // Sort indices in descending order to make sure the correct source regions are erased //TODO: Is this safe? - std::sort(sr_indices.begin(), sr_indices.end(), std::greater()); - // printf("Rank %d: Test0 \n", mpi::rank); // Iterate through all source regions for this key for (int sr_idx : sr_indices) { SourceRegionKey sr_key = domain->source_regions_.key(sr_idx); - // printf("Rank %d: Test1 \n", mpi::rank); SourceRegionHandle srh = domain->source_regions_.get_source_region_handle(sr_idx); - // printf("Rank %d: Test2 \n", mpi::rank); SourceRegion sr(srh); - // printf("Rank %d: Test3 \n", mpi::rank); send_sr_data(receiver, sr); - // printf("Rank %d: Test4 \n", mpi::rank); - // source_regions_new.erase(sr_idx); // remove source region from local container //TODO: Erase seems ugly? - // printf("Rank %d: Test5 \n", mpi::rank); } } - // printf("4 Rank %d: Sent source regions... \n", mpi::rank); - // Receive source regions for (int sender = 0; sender < mpi::n_procs; sender++) { @@ -1224,23 +875,14 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { } } - // printf("5 Rank %d: Received source regions... \n", mpi::rank); - - int num_sr_old = domain->n_source_regions(); - // Update source regions in domain domain->source_regions_ = source_regions_new; - - int num_sr_new = domain->n_source_regions(); // Update source region map for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { SourceRegionKey key = domain->source_regions_.key(sr); domain->source_region_map_[key] = sr; } - - // printf("6 Rank %d: Updated source region map... \n", mpi::rank); - // printf("Rank %d: Source regions before: %d, after: %d \n", mpi::rank, num_sr_old, num_sr_new); } }// namespace openmc \ No newline at end of file diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index f2b2cd08782..db0bf4986ca 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -270,8 +270,7 @@ uint64_t RandomRay::transport_history_based_single_ray() { using namespace openmc; while (alive()) { - // if (id() == 1083){ - // if (simulation::current_batch == 130) { + // if (id() == 6543){ // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); // } event_advance_ray(); @@ -429,8 +428,8 @@ void RandomRay::attenuate_flux(double distance, double offset) // } start += physical_length * u(); - // if (id() == 1083){ - // printf("RANK %d: Source region %ld, mesh bin %d\n", mpi::rank, sr, mesh_bins_[b]); + // if (id() == 6543){ + // printf("RANK %d: Source region %ld, mesh bin %d, physical length %f\n", mpi::rank, sr, mesh_bins_[b], physical_length); // } // If ray has left my subdomain, stop transport @@ -468,9 +467,11 @@ void RandomRay::attenuate_flux(double distance, double offset) // double distance_buffer = distance_travelled_ + offset + mesh_partial_length; pack_ray_for_buffer(distance_buffer, position_buffer); //, SourceRegionKey(sr, mesh_bin), sr); wgt() = 0.0; - // if (sr == 134 && mesh_bin == 64056){ - // printf("RANK %d: Buffered (%f, %f, %f) \n", mpi::rank, position_buffer.x, position_buffer.y, position_buffer.z); + // if (id() == 6543){ + // printf("RANK %d: Buffered (%f, %f, %f) at source region %ld, mesh bin %d \n", mpi::rank, position_buffer.x, position_buffer.y, position_buffer.z, sr, mesh_bin); + // printf("RANK %d: material %d \n", mpi::rank, this->material()); // } + // if (simulation::current_batch == 25) { // printf("RANK %d: distance travelled new: %f %f \n", mpi::rank, distance_buffer, exchange_data_.distance_travelled); // } @@ -487,12 +488,15 @@ void RandomRay::attenuate_flux_inner( // simulation::time_find_owner_rank.start(); Position midpoint = r + u() * (distance / 2.0); owner = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), midpoint, - domain_->discovered_source_regions_, id()); + domain_->discovered_source_regions_); // simulation::time_find_owner_rank.stop(); } // If current rank is not the owner return and mark as not local. if (owner != mpi::rank) { + // if (id() == 6543){ + // printf("RANK %d: Ray %ld leaving subdomain, owner is %d \n", mpi::rank, id(), owner); + // } is_local_ = false; owner_rank_ = owner; return; @@ -922,6 +926,9 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vec site.E = 0.0; this->from_source(&site); + // reinitialize last surface that was crossed + surface() = data.surface; + // Locate ray if (lowest_coord().cell() == C_NONE) { if (!exhaustive_find_cell(*this)) { @@ -939,6 +946,10 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vec int i_cell = lowest_coord().cell(); int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); + // if (id() == 6543){ + // printf("RANK %d: Restart ray %ld, last surface crossed: %d, %d, cell: %d, source region %ld \n", mpi::rank, id(), exchange_data_.surface, surface(), i_cell, sr); + // } + if (sr == C_NONE || sr < 0){ std::string err_msg = "ERROR: Cell " + std::to_string(sr) + " not found when restarting ray " + std::to_string(id()) + @@ -946,7 +957,7 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vec std::to_string(site.r.y) + ", " + std::to_string(site.r.z) + ")"; fatal_error(err_msg); -} + } // Set ray's angular flux to value before subdomain change for (int g = 0; g < negroups_; g++) { @@ -1092,6 +1103,10 @@ void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_bu exchange_data_.direction = u(); exchange_data_.angular_flux = angular_flux_; exchange_data_.distance_travelled = distance_buffer; + exchange_data_.surface = surface(); + // if (id() == 6543){ + // printf("RANK: %d: Surface crossed: %d \n", mpi::rank, surface()); + // } // exchange_data_.sr_key = sr_key; // exchange_data_.sr = sr; exchange_data_.is_active = is_active_; diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index d4d84cca56d..7fe7610178d 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -430,7 +430,7 @@ void RandomRaySimulation::simulate() mpi::decomp_map.generate_rank_centers(); simulation::time_generate_voronoi_centers.stop(); - // Create ray bank + // Create ray bank //TODO: Should this just be local object? RayBank RB; // Random ray power iteration loop @@ -460,76 +460,35 @@ void RandomRaySimulation::simulate() domain_->prepare_base_source_regions(); } - // printf("Rank %d Test1 \n", mpi::rank); - // Transport sweep over all random rays for the iteration if (mpi::n_procs > 1){ - // printf("1: Rank %d Starting transport sweep \n", mpi::rank); transport_sweep_decomp(RB); - // printf("2: Rank %d Ended transport sweep \n", mpi::rank); - - // bool test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); - // printf("2 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); - - // bool test2 = false; - // if(domain_->source_region_map_.find(SourceRegionKey(4, 104171)) != domain_->source_region_map_.end()){ - // test2 = true; - // } - // printf("2 RANK %d: Source region (4, 104171) in main map? %d \n", mpi::rank, test2); - // if (test) { - // SourceRegion& sr = domain_->discovered_source_regions_[SourceRegionKey(4, 104171)]; - // printf("RANK %d: volume: %f\n", mpi::rank, sr.scalars_.volume_); - // } - // Position centroid = domain_->source_regions_.centroid(1); - // printf ("1 Centroid (%f, %f, %f) \n", centroid.x, centroid.y, centroid.z); // Update decomposition map with newly discovered source regions simulation::time_decomposition_handling.start(); mpi::decomp_map.update(domain_->discovered_source_regions_); simulation::time_decomposition_handling.stop(); - // printf("3: Rank %d Updated decomp map \n", mpi::rank); } else { transport_sweep(); } - // printf("Rank %d Test6 \n", mpi::rank); - - // bool test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); - // printf("3 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); - // if (test) { - // SourceRegion& sr = domain_->discovered_source_regions_[SourceRegionKey(4, 104171)]; - // printf("RANK %d: volume: %f\n", mpi::rank, sr.scalars_.volume_); - // } - - - // bool test2 = false; - // if(domain_->source_region_map_.find(SourceRegionKey(4, 104171)) != domain_->source_region_map_.end()){ - // test2 = true; - // } - // printf("3 RANK %d: Source region (4, 104171) in main map? %d \n", mpi::rank, test2); - // If using mesh subdivision, add any newly discovered source regions // to the main source region container. if (RandomRay::mesh_subdivision_enabled_) { domain_->finalize_discovered_source_regions(); } - // test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); - // printf("4 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); - - // test2 = false; - // if(domain_->source_region_map_.find(SourceRegionKey(4, 104171)) != domain_->source_region_map_.end()){ - // test2 = true; - // } - // printf("4 RANK %d: Source region (4, 104171) in main map? %d \n", mpi::rank, test2); // Normalize scalar flux and update volumes domain_->normalize_scalar_flux_and_volumes( settings::n_particles * RandomRay::distance_active_); + // Balance load between ranks by changing weights of Voronoi cells if (mpi::n_procs > 1 && mpi::decomp_map.load_balanced() == false){ + simulation::time_load_balance.start(); mpi::decomp_map.balance_load(domain_.get()); + simulation::time_load_balance.stop(); } // Add source to scalar flux, compute number of FSR hits @@ -578,34 +537,8 @@ void RandomRaySimulation::simulate() // Compute average load per rank based on geometric intersections if (mpi::n_procs > 1){ - // Compute total intersections and load balancing data - simulation::time_decomposition_handling.start(); - - // // Exchange intersection data - // uint64_t total_geometric_intersections_sum = 0; - // MPI_Allreduce(&total_geometric_intersections_, &total_geometric_intersections_sum, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, mpi::intracomm); - - // // Local work load - // float rank_load_local = (total_geometric_intersections_/static_cast(total_geometric_intersections_sum)); - - // total_geometric_intersections_ = total_geometric_intersections_sum; - // rank_load_.resize(mpi::n_procs); //TODO: Decomposition map also owns raak load - - // // send load data to master rank (rank 0) - // if (mpi::master) { - // rank_load_[0] = rank_load_local; - - // for (int i = 1; i < mpi::n_procs; i++) { - // MPI_Recv(&rank_load_[i], 1, MPI_FLOAT, i, 1, mpi::intracomm, MPI_STATUS_IGNORE); - // } - // } else { - // MPI_Send(&rank_load_local, 1, MPI_FLOAT, 0, 1, mpi::intracomm); - // } - // Average number of ray communications between ranks per batch avg_num_comms_ = avg_num_comms_/settings::n_batches; //TODO: should this be double? - - simulation::time_decomposition_handling.stop(); } domain_->count_external_source_regions(); @@ -641,8 +574,6 @@ void RandomRaySimulation::instability_check( if (mpi::n_procs > 1){ // Reduce n_hits and n_source_regions on master rank to compute // global miss rate - // printf("RANK %d: n_hits: %ld, n_source_regions: %ld \n", mpi::rank, n_hits, n_source_regions); - simulation::time_decomposition_handling.start(); if (mpi::master) { MPI_Reduce(MPI_IN_PLACE, &n_hits, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); @@ -655,8 +586,6 @@ void RandomRaySimulation::instability_check( } if (mpi::master) { - // printf("TOTAL: n_hits: %ld, n_source_regions: %ld \n", n_hits, n_source_regions); - double percent_missed = ((n_source_regions - n_hits) / static_cast(n_source_regions)) * 100.0; @@ -694,7 +623,7 @@ void RandomRaySimulation::print_results_random_ray( (time_transport.elapsed() - time_ray_buffering.elapsed()) / total_integrations; double time_domain_decomposition = time_decomposition_handling.elapsed() - + time_generate_voronoi_centers.elapsed() + time_ray_buffering.elapsed() - time_transport.elapsed(); + + time_generate_voronoi_centers.elapsed() + time_ray_buffering.elapsed() + time_load_balance.elapsed() - time_transport.elapsed(); double time_transport_total = (time_transport.elapsed() - time_ray_buffering.elapsed()); double misc_time = time_total.elapsed() - time_update_src.elapsed() - @@ -791,12 +720,13 @@ void RandomRaySimulation::print_results_random_ray( show_time("Tally conversion only", time_tallies.elapsed(), 1); if (mpi::n_procs > 1){ double time_decomp_misc = time_domain_decomposition - time_generate_voronoi_centers.elapsed() - - time_ray_comms.elapsed() - time_comms_metadata.elapsed() - time_unpack_data.elapsed() - time_mpi_imbalance.elapsed(); + - time_ray_comms.elapsed() - time_comms_metadata.elapsed() - time_unpack_data.elapsed() - time_mpi_imbalance.elapsed() - time_load_balance.elapsed(); show_time("Decomposition handling", time_domain_decomposition, 1); show_time("Ray communication", time_ray_comms.elapsed(), 2); show_time("Source region exchange", time_source_region_exchange.elapsed(), 2); - show_time("Load imbalance", time_mpi_imbalance.elapsed(), 2); + show_time("Load balancing", time_load_balance.elapsed(), 2); + show_time("Waiting for other ranks", time_mpi_imbalance.elapsed(), 2); show_time("Generating Voronoi centers", time_generate_voronoi_centers.elapsed(), 2); show_time("Sending ray metadata", time_comms_metadata.elapsed(), 2); show_time("Unpacking ray data", time_unpack_data.elapsed(), 2); @@ -824,10 +754,6 @@ void RandomRaySimulation::transport_sweep() { // Start timer for transport simulation::time_transport.start(); - - // int num = domain->n_source_regions(); - // Position centroid = domain_->source_regions_.centroid(num); - // printf ("1 Centroid (%f, %f, %f), number: %d \n", centroid.x, centroid.y, centroid.z, num); // Transport sweep over all random rays for the iteration #pragma omp parallel for schedule(dynamic) \ @@ -837,16 +763,47 @@ void RandomRaySimulation::transport_sweep() { total_geometric_intersections_ += ray.transport_history_based_single_ray(); } - // int num = domain->n_source_regions(); - // Position centroid = domain_->source_regions_.centroid(num); - // printf ("1 Centroid (%f, %f, %f), number: %d \n", centroid.x, centroid.y, centroid.z, num); - simulation::time_transport.stop(); } void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { + + // Position sample; + // sample.x = 700.533084; + // sample.y = -365.175846; + // sample.z = -417.239206; + // Particle p; + // p.r() = sample; + // p.r_last() = sample; + // p.E() = 1.0; + // p.E_last() = 1.0; + // p.u() = {1.0, 0.0, 0.0}; + + // int i_cell = p.lowest_coord().cell(); + // int64_t sr = domain_.get()->source_region_offsets_[i_cell] + p.cell_instance(); + // SourceRegionKey sr_key {sr, 0}; + // if (RandomRay::mesh_subdivision_enabled_) { + // int mesh_idx = domain_.get()->base_source_regions_.mesh(sr); + // int mesh_bin; + // if (mesh_idx == C_NONE) { + // mesh_bin = 0; + // } else { + // mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); + // } + // sr_key = {sr, mesh_bin}; + // auto it = domain_.get()->source_region_map_.find(sr_key); + // if (it != domain_.get()->source_region_map_.end()) { + // sr = it->second; + // } else { + // sr = -1; + // } + // } + + // printf("Rank %d: Sampled source region %ld, meshbin %ld\n", mpi::rank, + // sr_key.base_source_region_id, sr_key.mesh_bin); // Assuming these are the correct member names + simulation::time_decomposition_handling.start(); // Create rays and add them to ray bank @@ -856,114 +813,55 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { RandomRay ray(id, domain_.get()); // Add ray to ray bank - #pragma omp critical (raybank) { RB.add_ray_to_bank(ray); } } - // printf("RANK %d: Ray bank contains %d rays \n", mpi::rank, RB.ray_bank_size()); int num_comms = 0; - // bool keep_running = true; - // if (simulation::current_batch == 2){ - // printf("Rank %d Starting transport sweep with %d rays \n", mpi::rank, RB.ray_bank_size()); - // } - // printf("Rank %d Test2 \n", mpi::rank); + printf("Rank %d: Starting transport sweep with %d rays\n", mpi::rank, RB.ray_bank_size()); // Move rays across ranks until they are terminated while (RB.is_any_ray_alive()) { - // while (keep_running) { - - // simulation::time_decomposition_handling.stop(); // Start timer for transport simulation::time_transport.start(); - // printf("RANK %d: Starting transport sweep with %d rays \n", mpi::rank, RB.ray_bank_size()); - #pragma omp parallel for schedule(dynamic) \ reduction(+ : total_geometric_intersections_) for (int i = 0; i < RB.ray_bank_size(); i++) { RandomRay& ray = RB.my_ray_list_[i]; total_geometric_intersections_ += ray.transport_history_based_single_ray(); - // printf("RANK %d: Transported ray %ld \n", mpi::rank, ray.id()); - - // printf("RANK %d: Transport of ray %d complete, new owner: %d \n", mpi::rank, i, ray.owner_rank_); - // If ray has left my subdomain, buffer ray state if(ray.has_left_subdomain()){ #pragma omp critical (raybuffer) { - // printf("RANK %d: Buffering ray %d, new owner: %d \n", mpi::rank, i, ray.owner_rank_); - // printf("Rank %d Test2.2 \n", mpi::rank); simulation::time_ray_buffering.start(); num_ray_crossings_ ++; RB.buffer_ray_data_to_send(ray, domain_.get()); simulation::time_ray_buffering.stop(); - // printf("Rank %d Test2.3 \n", mpi::rank); } } } simulation::time_transport.stop(); - // simulation::time_decomposition_handling.start(); - - // Remove dead rays and move rays across subdomains between ranks - // simulation::time_decomposition_handling.start(); - - // Check if new source regions were discovered and add them to subdomain map - // if (mpi::decomp_map.new_sr_discovered()){ - // mpi::decomp_map.exchange_sr_info() - // } - - // printf("Rank %d Test3 \n", mpi::rank); - - // if (simulation::current_batch == 2){ - // printf("Rank %d Completed transport of %d rays \n", mpi::rank, RB.ray_bank_size()); - // } - - // printf("RANK %d: Update ray bank \n", mpi::rank); + // Update ray bank by communicating rays in buffer to new owner ranks and removing terminated ranks + // if (RB.ray_bank_size() != 0) printf("Rank %d: Communicating %d rays\n", mpi::rank, RB.ray_bank_size()); RB.update(domain_.get()); - // bool test = domain_->discovered_source_regions_.contains(SourceRegionKey(4, 104171)); - // printf("1 RANK %d: Source region (4, 104171) discovered? %d \n", mpi::rank, test); - - // bool test2 = false; - // if(domain_->source_region_map_.find(SourceRegionKey(4, 104171)) != domain_->source_region_map_.end()){ - // test2 = true; - // } - // printf("1 RANK %d: Source region (4, 104171) in main map? %d \n", mpi::rank, test2); - - - // if (simulation::current_batch == 2){ - // printf("Rank %d Completed send/recv, now has %d rays \n", mpi::rank, RB.ray_bank_size()); - // } - - // printf("Rank %d Test4 \n", mpi::rank); - - // simulation::time_check_ray_rank.start(); - // keep_running = RB.is_any_ray_alive(); - // simulation::time_check_ray_rank.stop(); - num_comms ++; - // simulation::time_decomposition_handling.stop(); } - // printf("Rank %d Test5 \n", mpi::rank); - - // simulation::time_decomposition_handling.start(); - + //TODO: temporary if (mpi::master) { printf("Max subdomain crossings: %d\n", num_comms); printf("Number of ray crossings: %ld\n", num_ray_crossings_); } - - // Calculate load per rank based on geometric intersections - // mpi::decomp_map.calculate_rank_load(total_geometric_intersections_); + // Calculate load per rank based on number of hits in each source region that a rank owns mpi::decomp_map.calculate_rank_load(domain_.get()); avg_num_comms_ += num_comms; diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 509ca3d0ce0..a3f01519cd4 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -15,7 +15,7 @@ RayBank::RayBank() { num_messages_receiving_.resize(mpi::n_procs, 0); } -// Initialize list of ray bank that each MPI rank will handle +// Initialize list of ray bank that each MPI rank will handle //TODO: this does not need to be separate function void RayBank::add_ray_to_bank(RandomRay& ray){ my_ray_list_.push_back(ray); } @@ -26,8 +26,6 @@ void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ // Get rank to send ray to int rank = ray.owner_rank_; - // printf("RANK %d: Put ray %ld into map, new owner: %d, %d \n", mpi::rank, ray.exchange_data_.ray_id, ray.owner_rank_, rank); - if (rank == mpi::rank){ warning(fmt::format( "Ray {} at position ({:.5e}, {:.5e}, {:.5e})" @@ -37,30 +35,13 @@ void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ // Add ray data to buffer ray_send_buffer_[rank].push_back(ray.exchange_data_); - } // Update ray bank void RayBank::update(FlatSourceDomain* domain){ - // for (auto& [rank, rays] : ray_send_buffer_) { - // for (int r = 0; r < rays.size(); r++){ - // printf("RANK %d: 2: Buffered ray ID %ld to be sent to rank: %d \n", mpi::rank, rays[r].ray_id, rank); - // } - // } - // Empty ray list because rays have either died or are in buffer to be sent to other ranks - reset_my_ray_list(); - - // for (auto& [rank, rays] : ray_send_buffer_) { - // for (int r = 0; r < rays.size(); r++){ - // printf("RANK %d: 3: Buffered ray ID %ld to be sent to rank: %d \n", mpi::rank, rays[r].ray_id, rank); - // } - // } - - // Communicate how many rays will be sent to each rank - - + reset_my_ray_list(); simulation::time_mpi_imbalance.start(); MPI_Barrier(mpi::intracomm); @@ -75,7 +56,6 @@ void RayBank::update(FlatSourceDomain* domain){ communicate_rays(); simulation::time_ray_comms.stop(); - simulation::time_unpack_data.start(); // Add received rays to ray list of that rank update_my_ray_list(domain); @@ -83,7 +63,7 @@ void RayBank::update(FlatSourceDomain* domain){ } -// Clears my_ray_list, but keeps memory allocation in place +// Clears my_ray_list, but keeps memory allocation in place //TODO: Does this need to be separate function? void RayBank::reset_my_ray_list(){ my_ray_list_.resize(0); } @@ -106,8 +86,11 @@ void RayBank::communicate_message_metadata() { for (auto& [rank, rays] : ray_send_buffer_) { num_messages_sending[rank] = rays.size(); total_sending_rays_ += num_messages_sending[rank]; - // for (int r = 0; r < rays.size(); r++){ - // printf("RANK %d: Metadata, ray ID %ld to be sent to rank: %d \n", mpi::rank, rays[r].ray_id, rank); + + // if (mpi::rank == 5 || mpi::rank == 47){ + // for (auto& rays : ray_send_buffer_[rank]){ + // printf("Rank %d: Sending ray %ld to rank %d\n", mpi::rank, rays.ray_id, rank); + // } // } } @@ -119,15 +102,6 @@ void RayBank::communicate_message_metadata() { total_receiving_rays_ = accumulate(num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); - // // Store results - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // // Skip over non-sending ranks - // if (num_messages_receiving[rank] == 0) continue; - // // Save number of incoming rays from each rank sending to me in incoming_ray_data map - // incoming_ray_data_[rank] = num_messages_receiving[rank]; //TODO: Could also just be vector - // total_receiving_rays_ += num_messages_receiving[rank]; - // } - } void RayBank::communicate_rays(){ @@ -158,7 +132,7 @@ void RayBank::communicate_rays(){ int num_rays_sending = rays.size(); - for (int i = 0; i < num_rays_sending; i++) { + for (int i = 0; i < num_rays_sending; i++) { //TODO: get rid of this! Entire rayExchangeData should be buffered // Pack slimmed down data container for MPI send RayExchangeData exchange_data; exchange_data.position = rays[i].position; @@ -166,13 +140,13 @@ void RayBank::communicate_rays(){ exchange_data.distance_travelled = rays[i].distance_travelled; exchange_data.is_active = rays[i].is_active; exchange_data.ray_id = rays[i].ray_id; + exchange_data.surface = rays[i].surface; ray_data[vector_send_idx + i] = exchange_data; // Angular flux array for (int g = 0; g < negroups_; g++){ angular_flux_data[(vector_send_idx + i) * negroups_ + g] = rays[i].angular_flux[g]; } } - // printf("RANK %d: Sending ray %ld to rank: %d \n", mpi::rank, ray_data[vector_send_idx].ray_id, receiving_rank); MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); MPI_Isend(&angular_flux_data[vector_send_idx * negroups_], num_rays_sending * negroups_, MPI_FLOAT, receiving_rank, 2, mpi::intracomm, &requests[req_idx+1]); @@ -188,13 +162,11 @@ void RayBank::communicate_rays(){ if (num_rays_receiving == 0) continue; MPI_Recv(&received_ray_data_[vector_receive_idx], num_rays_receiving * sizeof(RayExchangeData), MPI_BYTE, sending_rank, 1, mpi::intracomm, MPI_STATUS_IGNORE); MPI_Recv(&received_angular_flux_data_[vector_receive_idx * negroups_], num_rays_receiving * negroups_, MPI_FLOAT, sending_rank, 2, mpi::intracomm, MPI_STATUS_IGNORE); - // printf("RANK %d: Receiving ray %ld from rank: %d \n", mpi::rank, received_ray_data_[vector_receive_idx].ray_id, sending_rank); vector_receive_idx += num_rays_receiving; } // Wait for all communication to complete - // MPI_Waitall(num_requests, requests, MPI_STATUSES_IGNORE); MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); // Empty buffered_ray_data @@ -221,7 +193,7 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ my_ray_list_.push_back(ray_received); } - // clear received data vectors //TODO: maybe resize(0)? + // clear received data vectors received_ray_data_.clear(); received_angular_flux_data_.clear(); diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index cd35553f91f..0bd65fbec8e 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -230,67 +230,6 @@ void SourceRegionContainer::push_back(const SourceRegion& sr) } } -// void SourceRegionContainer::erase(int sr_idx) -// { -// n_source_regions_--; - -// // Scalar fields -// material_.erase(material_.begin() + sr_idx); -// is_small_.erase(is_small_.begin() + sr_idx); -// n_hits_.erase(n_hits_.begin() + sr_idx); -// lock_.erase(lock_.begin() + sr_idx); -// volume_.erase(volume_.begin() + sr_idx); -// volume_t_.erase(volume_t_.begin() + sr_idx); -// volume_sq_.erase(volume_sq_.begin() + sr_idx); -// volume_sq_t_.erase(volume_sq_t_.begin() + sr_idx); -// volume_naive_.erase(volume_naive_.begin() + sr_idx); -// position_recorded_.erase(position_recorded_.begin() + sr_idx); -// external_source_present_.erase(external_source_present_.begin() + sr_idx); -// position_.erase(position_.begin() + sr_idx); -// volume_task_.erase(volume_task_.begin() + sr_idx); -// mesh_.erase(mesh_.begin() + sr_idx); -// parent_sr_.erase(parent_sr_.begin() + sr_idx); -// key_.erase(key_.begin() + sr_idx); - -// centroid_.erase(centroid_.begin() + sr_idx); -// centroid_iteration_.erase(centroid_iteration_.begin() + sr_idx); -// centroid_t_.erase(centroid_t_.begin() + sr_idx); - -// // Only store these fields if is_linear_ is true -// if (is_linear_) { -// // centroid_.erase(sr.scalars_.centroid_); -// // centroid_iteration_.erase(sr.scalars_.centroid_iteration_); -// // centroid_t_.erase(sr.scalars_.centroid_t_); -// mom_matrix_.erase(mom_matrix_.begin() + sr_idx); -// mom_matrix_t_.erase(mom_matrix_t_.begin() + sr_idx); -// } - -// // Energy-dependent fields -// const int first = sr_idx * negroups_; -// const int last = first + negroups_; - -// scalar_flux_old_.erase(scalar_flux_old_.begin() + first, scalar_flux_old_.begin() + last); -// scalar_flux_new_.erase(scalar_flux_new_.begin() + first, scalar_flux_new_.begin() + last); -// scalar_flux_final_.erase(scalar_flux_final_.begin() + first, scalar_flux_final_.begin() + last); -// source_.erase(source_.begin() + first, source_.begin() + last); - -// if (settings::run_mode == RunMode::FIXED_SOURCE) { -// external_source_.erase(external_source_.begin() + first, external_source_.begin() + last); -// } - -// // Only erase these fields if is_linear_ is true -// if (is_linear_) { -// source_gradients_.erase(source_gradients_.begin() + first, source_gradients_.begin() + last); -// flux_moments_old_.erase(flux_moments_old_.begin() + first, flux_moments_old_.begin() + last); -// flux_moments_new_.erase(flux_moments_new_.begin() + first, flux_moments_new_.begin() + last); -// flux_moments_t_.erase(flux_moments_t_.begin() + first, flux_moments_t_.begin() + last); -// } - -// // Tally tasks -// tally_task_.erase(tally_task_.begin() + first, tally_task_.begin() + last); - -// } - void SourceRegionContainer::assign( int n_source_regions, const SourceRegion& source_region) { diff --git a/src/timer.cpp b/src/timer.cpp index 02c31bd7db0..3fcf1589f6a 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -30,6 +30,7 @@ Timer time_update_src; Timer time_ray_comms; Timer time_ray_buffering; Timer time_decomposition_handling; +Timer time_load_balance; Timer time_generate_voronoi_centers; Timer time_source_region_exchange; Timer time_comms_metadata; From 0ad4f3a2ae3244eecffc91ef14f85af7e45984a0 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Wed, 15 Oct 2025 22:45:18 +0100 Subject: [PATCH 11/48] Correct plotting, improve weight optimiser --- include/openmc/random_ray/decomposition_map.h | 2 +- src/random_ray/decomposition_map.cpp | 21 +++++++++++++------ src/random_ray/flat_source_domain.cpp | 2 +- src/random_ray/random_ray_simulation.cpp | 2 +- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 9fb59068b0c..f21c46e860d 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -81,7 +81,7 @@ class DecompositionMap { // Private data members SpatialBox* spatial_box_ = nullptr; vector grid_points_; //TODO: This can be local variable when Voronoi centres ae established - int grid_points_per_rank_{100}; + int grid_points_per_rank_{125}; // default 5x5x5 grid points per rank int negroups_; uint64_t n_hits_sum_; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 91673a3e205..4de289887b2 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -605,7 +605,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ //TODO: The optimisation seems really messy - int max_iterations = 1000; + int max_iterations = 500; double max_imbalance = max_imbalance_; int it_outer = 0; @@ -620,10 +620,12 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // History tracking vector imbalance_history; + vector> weight_history; imbalance_history.push_back(max_imbalance); + weight_history.push_back(rank_weights_); vector weight_change(mpi::n_procs, 0.0); - vector old_weights = rank_weights_; + // vector old_weights = rank_weights_; // double max_imbalance_old = max_imbalance_; std::unordered_map> sr_send; // contains regions to be send @@ -657,6 +659,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // Store imbalance history for diagnostics if convergence fails imbalance_history.push_back(max_imbalance); + weight_history.push_back(rank_weights_); // Adaptive factor if (max_imbalance > prev_imbalance) @@ -695,14 +698,20 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ double oscillation_ratio = (double)direction_changes / (imbalance_history.size() - 2); if (oscillation_ratio > 0.4) { - optimization_history_factor_ *= 0.5; // decrease weight for next batch if oscillating, TODO: SHould this be safeguarded with max/ min value? + // decrease weight for next batch if oscillating, TODO: SHould this be safeguarded with max/ min value? + optimization_history_factor_ = std::max(optimization_history_factor_ * 0.5, min_adaptation_factor); } else { - optimization_history_factor_ *= 1.2; // increase weight for faster convergence if too slow. + // increase weight for faster convergence if too slow. + optimization_history_factor_ = std::min(optimization_history_factor_ * 1.2, max_adaptation_factor); // stable - accelerate slightly } // Revert to previous weights if load balancing did not improve and return - if (imbalance_history[0] < max_imbalance){ - rank_weights_ = old_weights; + auto min_it = std::min_element(imbalance_history.begin(), imbalance_history.end()); + int best_index = std::distance(imbalance_history.begin(), min_it); + double best_imbalance = *min_it; + rank_weights_ = weight_history[best_index]; + + if (best_index == 0){ return; } } else { diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 8d6eb1d59e8..51ac13296cb 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -1288,7 +1288,7 @@ void FlatSourceDomain::output_to_vtk_decomp() const } if (mpi::master){ - std::fprintf(plot, "SCALARS rank_subdomains int\n"); + std::fprintf(plot, "SCALARS rank_subdomains float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); for (float value : vector_out) { diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 7fe7610178d..f3689a7a420 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -821,7 +821,7 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { int num_comms = 0; - printf("Rank %d: Starting transport sweep with %d rays\n", mpi::rank, RB.ray_bank_size()); + // printf("Rank %d: Starting transport sweep with %d rays\n", mpi::rank, RB.ray_bank_size()); // Move rays across ranks until they are terminated while (RB.is_any_ray_alive()) { From e35725cff9e099a26dad32fb5131d0dbb493ffbc Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 16 Oct 2025 00:34:47 +0100 Subject: [PATCH 12/48] Increase load tolerance if not converging --- include/openmc/random_ray/decomposition_map.h | 5 ++++- src/random_ray/decomposition_map.cpp | 16 ++++++++++++++++ src/random_ray/random_ray_simulation.cpp | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index f21c46e860d..e54cb5d75f9 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -75,6 +75,9 @@ class DecompositionMap { vector rank_load_; vector rank_weights_; double target_load_; + //TODO: temporary + int cnt_unconverged_optimizations_total_ = 0; + int cnt_optimizations_total_ = 0; private: //---------------------------------------------------------------------------- @@ -90,7 +93,7 @@ class DecompositionMap { double max_imbalance_ = 0.0; double imbalance_tolerance_ = 0.01; // 1% imbalance tolerance double optimization_history_factor_ = 1.0; - + int cnt_unconverged_optimizations_ = 0; }; // class DecompositionMap } // namespace openmc diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 4de289887b2..0acfb3f699e 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -604,6 +604,7 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th void DecompositionMap::balance_load(FlatSourceDomain* domain){ //TODO: The optimisation seems really messy + cnt_optimizations_total_ ++; int max_iterations = 500; double max_imbalance = max_imbalance_; @@ -678,6 +679,9 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ + std::to_string(max_iterations) + " iterations."); } + cnt_unconverged_optimizations_ ++; + cnt_unconverged_optimizations_total_ ++; + // Check if oscillating or simply slow convergence bool is_oscillating = false; int direction_changes = 0; @@ -711,10 +715,22 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ double best_imbalance = *min_it; rank_weights_ = weight_history[best_index]; + if (mpi::master){ + printf("Best imbalance during optimization was %.2f%% at iteration %d. New history factor: %.2f \n", + best_imbalance*100.0, best_index, optimization_history_factor_); + } + + if (cnt_unconverged_optimizations_ > 5){ + cnt_unconverged_optimizations_ = 0; + imbalance_tolerance_ = best_imbalance; // relax tolerance if not converging + printf("Relaxing MPI load balancing tolerance to %.2f%% \n", imbalance_tolerance_*100.0); + } + if (best_index == 0){ return; } } else { + cnt_unconverged_optimizations_ = 0; optimization_history_factor_ = 1.0; // reset history factor if converged if (mpi::master){ printf("MPI load balancing converged after %d iterations. Max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index f3689a7a420..3fb8bb98515 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -659,6 +659,8 @@ void RandomRaySimulation::print_results_random_ray( if (mpi::n_procs > 1){ fmt::print(" MPI Ranks = {}\n", mpi::n_procs); fmt::print(" Avg Number of Subdomain Crossings = {}\n", avg_num_comms); + fmt::print(" Number of load optimzation calls = {}\n", mpi::decomp_map.cnt_optimizations_total_); + fmt::print(" unconverged optimizations = {}\n", mpi::decomp_map.cnt_unconverged_optimizations_total_); fmt::print(" Load per MPI Rank = Rank {}: {:.2f}%\n", 0, mpi::decomp_map.rank_load_[0]*100.0); for (int i = 1; i < mpi::n_procs; i++) { fmt::print(" Rank {}: {:.2f}%\n", i, mpi::decomp_map.rank_load_[i]*100.0); From 75b7c5628f6be22636d73fc987790d4e6d148402 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 16 Oct 2025 22:05:16 +0100 Subject: [PATCH 13/48] Implement 3D check, check ray initialisation rank --- include/openmc/constants.h | 1 + include/openmc/random_ray/decomposition_map.h | 2 +- .../openmc/random_ray/flat_source_domain.h | 1 + include/openmc/random_ray/random_ray.h | 1 + .../openmc/random_ray/random_ray_simulation.h | 1 + include/openmc/timer.h | 1 + src/random_ray/decomposition_map.cpp | 60 ++++++--- src/random_ray/flat_source_domain.cpp | 119 ++++++++++++++++-- src/random_ray/random_ray.cpp | 48 ++++++- src/random_ray/random_ray_simulation.cpp | 52 ++++++-- src/timer.cpp | 1 + 11 files changed, 253 insertions(+), 34 deletions(-) diff --git a/include/openmc/constants.h b/include/openmc/constants.h index ae705607958..d783cc5e80e 100644 --- a/include/openmc/constants.h +++ b/include/openmc/constants.h @@ -359,6 +359,7 @@ enum class SolverType { MONTE_CARLO, RANDOM_RAY }; enum class RandomRayVolumeEstimator { NAIVE, SIMULATION_AVERAGED, HYBRID }; enum class RandomRaySourceShape { FLAT, LINEAR, LINEAR_XY }; +enum class RandomRayGeomDim { TWO_DIM, THREE_DIM }; enum class RandomRaySampleMethod { PRNG, HALTON }; //============================================================================== diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index e54cb5d75f9..cdb5e9b0d1f 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -78,6 +78,7 @@ class DecompositionMap { //TODO: temporary int cnt_unconverged_optimizations_total_ = 0; int cnt_optimizations_total_ = 0; + double max_imbalance_ = 0.0; //TODO: rename in max_load_imbalance_ private: //---------------------------------------------------------------------------- @@ -90,7 +91,6 @@ class DecompositionMap { double max_domain_length_; bool is_linear_; - double max_imbalance_ = 0.0; double imbalance_tolerance_ = 0.01; // 1% imbalance tolerance double optimization_history_factor_ = 1.0; int cnt_unconverged_optimizations_ = 0; diff --git a/include/openmc/random_ray/flat_source_domain.h b/include/openmc/random_ray/flat_source_domain.h index e3df1f2f525..1a905f9add0 100644 --- a/include/openmc/random_ray/flat_source_domain.h +++ b/include/openmc/random_ray/flat_source_domain.h @@ -32,6 +32,7 @@ class FlatSourceDomain { double compute_k_eff(double k_eff_old) const; virtual void normalize_scalar_flux_and_volumes( double total_active_distance_per_iteration); + bool is_geometry_3D(); int64_t add_source_to_scalar_flux(); virtual void batch_reset(); diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index 1e8050a7fd9..bcc6da1cb87 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -86,6 +86,7 @@ class RandomRay : public Particle { static unique_ptr ray_source_; // Starting source for ray sampling static RandomRaySourceShape source_shape_; // Flag for linear source static bool mesh_subdivision_enabled_; // Flag for mesh subdivision + static RandomRayGeomDim geom_dim_; // Flag for 2D vs 3D geometry static RandomRaySampleMethod sample_method_; // Flag for sampling method //---------------------------------------------------------------------------- diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 0ab5d74bd4e..825097b96a2 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -22,6 +22,7 @@ class RandomRaySimulation { //---------------------------------------------------------------------------- // Methods void compute_segment_correction_factors(); + // void check_geometry_dimensions(); void apply_fixed_sources_and_mesh_domains(); void prepare_fixed_sources_adjoint(vector& forward_flux, SourceRegionContainer& forward_source_regions, diff --git a/include/openmc/timer.h b/include/openmc/timer.h index 3558bbacc70..b78af92a59c 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -35,6 +35,7 @@ extern Timer time_update_src; extern Timer time_ray_comms; extern Timer time_decomposition_handling; extern Timer time_load_balance; +extern Timer time_load_balance_sr_transfer; extern Timer time_ray_buffering; extern Timer time_generate_voronoi_centers; extern Timer time_source_region_exchange; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 0acfb3f699e..f521f48d944 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -120,23 +120,28 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ // For each dimension, determine grid points along that direction based on aspect ratio: // domain_length / volume^(1/3) = grid_points_dimension / grid_points_total^(1/3). - // Check if any dimension is so distorted that it would only receive minimun of 2 grid - // points and flag that direction to correct total number of grid points. + // Check if any dimension is so distorted that it would only receive minimun of 1 grid + // point and flag that direction to correct total number of grid points. int excluded_dimension = -1; vector grid_points_per_dimension(3); for (int i = 0; i < 3; i++){ double grid_points_estimate = ((domain_length[i] / cbrt(volume)) * cbrt(grid_points_total)); - if (grid_points_estimate > 2){ + if (grid_points_estimate > 1){ grid_points_per_dimension[i] = round(grid_points_estimate); } else { excluded_dimension = i; - grid_points_per_dimension[i] = 2; + grid_points_per_dimension[i] = 1; } } - // If one dimension is excluded, recalculate grid points in other two dimensions based on area. Divide total - // number of grid points by 2 to account for the fixed 2 grid points in excluded direction. + // If problem is 2D, exclude z direction + if (RandomRay::geom_dim_ == RandomRayGeomDim::TWO_DIM){ + excluded_dimension = 2; + grid_points_per_dimension[2] = 1; + } + + // If one dimension is excluded, recalculate grid points in other two dimensions based on area. if (excluded_dimension != -1){ double area = 1.0; @@ -147,7 +152,7 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ for (int i = 0; i < 3; i++){ if (i == excluded_dimension) continue; - grid_points_per_dimension[i] = round((domain_length[i] / sqrt(area)) * sqrt(grid_points_total/2.0)); + grid_points_per_dimension[i] = round((domain_length[i] / sqrt(area)) * sqrt(grid_points_total)); } } @@ -175,17 +180,31 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); // Calculate spacing between grid points in each dimension - double delta_x = (spatial_box_->upper_right().x - spatial_box_->lower_left().x) / (grid_points_per_dimension[0] - 1); - double delta_y = (spatial_box_->upper_right().y - spatial_box_->lower_left().y) / (grid_points_per_dimension[1] - 1); - double delta_z = (spatial_box_->upper_right().z - spatial_box_->lower_left().z) / (grid_points_per_dimension[2] - 1); + vector delta_value(3, 0.0); + + for (int i = 0; i < 3; i++){ + if (grid_points_per_dimension[i] > 1){ + delta_value[i] = domain_length[i] / (grid_points_per_dimension[i] - 1); + } + } + + double x = spatial_box_->lower_left().x + domain_length[0] * 0.5; + double y = spatial_box_->lower_left().y + domain_length[1] * 0.5; + double z = spatial_box_->lower_left().z + domain_length[2] * 0.5; // Generate all grid points for (int i = 0; i < grid_points_per_dimension[0]; i++) { - double x = spatial_box_->lower_left().x + i * delta_x; + if (grid_points_per_dimension[0] > 1) { + x = spatial_box_->lower_left().x + i * delta_value[0]; + } for (int j = 0; j < grid_points_per_dimension[1]; j++) { - double y = spatial_box_->lower_left().y + j * delta_y; + if (grid_points_per_dimension[1] > 1) { + y = spatial_box_->lower_left().y + j * delta_value[1]; + } for (int k = 0; k < grid_points_per_dimension[2]; k++) { - double z = spatial_box_->lower_left().z + k * delta_z; + if (grid_points_per_dimension[2] > 1) { + z = spatial_box_->lower_left().z + k * delta_value[2]; + } grid_points_.push_back({x, y, z}); } } @@ -204,7 +223,12 @@ void DecompositionMap::initialize_points(){ double x = prn(&seed); double y = prn(&seed); - double z = prn(&seed); + double z = 0.0; + if (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM){ + z = prn(&seed); + } else{ + z = 0.5; // Mid-plane in z direction + } Position xi {x, y, z}; @@ -261,7 +285,7 @@ void DecompositionMap::calculate_voronoi(vector& position_sum_per_rank Position DecompositionMap::calculate_centroids(const Position position_sum, const int num_points, int rank){ - // check if any points have been recorded in rank + // check if any points have been recorded in rank //TODO: Message not precise enough, specify what is meant by "mesh". if (num_points == 0){ fatal_error("Rank " + std::to_string(rank) + " has no Voronoi cell points. Mesh is too coarse."); } @@ -723,7 +747,9 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ if (cnt_unconverged_optimizations_ > 5){ cnt_unconverged_optimizations_ = 0; imbalance_tolerance_ = best_imbalance; // relax tolerance if not converging - printf("Relaxing MPI load balancing tolerance to %.2f%% \n", imbalance_tolerance_*100.0); + if (mpi::master){ + printf("Relaxing MPI load balancing tolerance to %.2f%% \n", imbalance_tolerance_*100.0); + } } if (best_index == 0){ @@ -737,7 +763,9 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ } } + simulation::time_load_balance_sr_transfer.start(); redistribute_source_regions(domain); + simulation::time_load_balance_sr_transfer.stop(); //TODO: temporary if (mpi::master){ diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 51ac13296cb..b3e23e7bd9b 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -1057,10 +1057,14 @@ void FlatSourceDomain::output_to_vtk_decomp() const write_message(5, "Processing plot {}: {}... (Estimated size is {} MB)", openmc_plot->id(), filename, bytes / 1.0e6); if (bytes / 1.0e9 > 1.0) { - warning("Voxel plot specification is very large (>1 GB). Plotting may be " - "slow."); + if (mpi::master) { + warning("Voxel plot specification is very large (>1 GB). Plotting may be " + "slow."); + } } else if (bytes / 1.0e9 > 100.0) { - fatal_error("Voxel plot specification is too large (>100 GB). Exiting."); + if (mpi::master) { + fatal_error("Voxel plot specification is too large (>100 GB). Exiting."); + } } // Relate voxel spatial locations to random ray source regions @@ -1126,7 +1130,7 @@ void FlatSourceDomain::output_to_vtk_decomp() const assigned_rank = it->second; } if (assigned_rank == mpi::rank) { - #pragma omp critical + #pragma omp critical (create_my_voxel_ids) { my_voxel_ids.push_back(z * Ny * Nx + y * Nx + x); } @@ -2044,10 +2048,109 @@ void FlatSourceDomain::apply_transport_stabilization() } } -// void FlatSourceDomain::initialize_ray_bank(){ -// // RB_.clear(); -// // RB_.shrink_to_fit(); -// } +bool FlatSourceDomain::is_geometry_3D() +{ + // Get spatial box of ray_source_ + SpatialBox* sb = dynamic_cast( + dynamic_cast(RandomRay::ray_source_.get())->space()); + + // printf("Test1\n"); + + Position shift {FP_COINCIDENT, FP_COINCIDENT, FP_COINCIDENT}; //TODO: necessary? Adopted from halton sampling + + double x_length = sb->upper_right().x - sb->lower_left().x; + double y_length = sb->upper_right().y - sb->lower_left().y; + double z_length = sb->upper_right().z - sb->lower_left().z; + + // printf("Test2\n"); + + int num_xy_points = 100; + int num_z_points = 100; + uint64_t seed = openmc_get_seed(); + + // printf("Test3\n"); + + for (int i = 0; i < num_xy_points; i++) { + Position sample; + sample.x = sb->lower_left().x + x_length * prn(&seed); + sample.y = sb->lower_left().y + y_length * prn(&seed); + + // z_point_samples = rhalton(num_z_points, current_seed(), skip = 0); + SourceRegionKey sr_key_prev {-1, -1}; + bool check_key = false; + + // printf("Checking x,y = %1.6f, %1.6f\n", sample.x, sample.y); + + for (int j = 0; j < num_z_points; j++){ //TODO: include uppermost and lowermost position? + sample.z = sb->lower_left().z + z_length * prn(&seed); + + // printf(" Checking z = %1.6f\n", sample.z); + + Particle p; + p.r() = sample; + p.r_last() = sample; + p.E() = 1.0; + p.E_last() = 1.0; + p.u() = {0.0, 0.0, 1.0}; + + bool found = exhaustive_find_cell(p); + if (!found) { + continue; + } + + // printf("Test5\n"); + + int i_cell = p.lowest_coord().cell(); + int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); + SourceRegionKey sr_key {sr, 0}; + + // printf("Test6\n"); + if (RandomRay::mesh_subdivision_enabled_) { + + // printf("Test6.1\n"); + + int mesh_idx = base_source_regions_.mesh(sr); + + // printf("Test6.2\n"); + + int mesh_bin; + if (mesh_idx == C_NONE) { + mesh_bin = 0; + } else { + mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); + } + sr_key = {sr, mesh_bin}; + + // printf("Test6.3\n"); + + // printf(" Found source region key = (%ld, %ld)\n", sr_key.base_source_region_id, sr_key.mesh_bin); + + if (check_key && (sr_key.base_source_region_id != sr_key_prev.base_source_region_id || + sr_key.mesh_bin != sr_key_prev.mesh_bin)) { + return true; + } + + // printf("Test6.4\n"); + + sr_key_prev = sr_key; + check_key = true; + //TODO: why is this code checking sr when it is already known? + // auto it = source_region_map_.find(sr_key); + // if (it != source_region_map_.end()) { + // sr = it->second; + // } else { + // sr = -1; + // } + } + + // printf("Test7\n"); + + } + } + + return false; +} + } // namespace openmc diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index db0bf4986ca..6739650e32b 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -242,6 +242,7 @@ double RandomRay::distance_active_; unique_ptr RandomRay::ray_source_; RandomRaySourceShape RandomRay::source_shape_ {RandomRaySourceShape::FLAT}; bool RandomRay::mesh_subdivision_enabled_ {false}; +RandomRayGeomDim RandomRay::geom_dim_ {RandomRayGeomDim::THREE_DIM}; RandomRaySampleMethod RandomRay::sample_method_ {RandomRaySampleMethod::PRNG}; RandomRay::RandomRay() @@ -960,8 +961,36 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vec } // Set ray's angular flux to value before subdomain change - for (int g = 0; g < negroups_; g++) { - angular_flux_[g] = angular_flux[g]; + if (distance_travelled_ > 0.0 || is_active_){ + for (int g = 0; g < negroups_; g++) { + angular_flux_[g] = angular_flux[g]; + } + } + // Initialize ray's starting angular flux to starting location's isotropic + // source + else { + SourceRegionHandle srh; + if (mesh_subdivision_enabled_) { + int mesh_idx = domain_->base_source_regions_.mesh(sr); + int mesh_bin; + if (mesh_idx == C_NONE) { + mesh_bin = 0; + } else { + Mesh* mesh = model::meshes[mesh_idx].get(); + mesh_bin = mesh->get_bin(r()); + } + + srh = + domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); + } else { + srh = domain_->source_regions_.get_source_region_handle(sr); + } + + if (!srh.is_numerical_fp_artifact_) { + for (int g = 0; g < negroups_; g++) { + angular_flux_[g] = srh.source(g); + } + } } // printf("RANK %d: Restart ray %ld, position: %f, %f, %f, angular flux: %f, distance travlled: %f, rank %d\n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, mpi::rank); @@ -1027,6 +1056,21 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) Mesh* mesh = model::meshes[mesh_idx].get(); mesh_bin = mesh->get_bin(r()); } + + if (mpi::n_procs > 1){ + // Check if ray sampling site belongs to subdomain + owner_rank_ = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), r(), + domain_->discovered_source_regions_); + if (owner_rank_ != mpi::rank) { + for (int g = 0; g < negroups_; g++) { + angular_flux_[g] = 0.0; + } + pack_ray_for_buffer(0.0, r()); + is_local_ = false; + return; + } + } + srh = domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); // if (simulation::current_batch == 130){ diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 3fb8bb98515..e49c15375d2 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -63,6 +63,9 @@ void openmc_run_random_ray() // Initialize fixed sources, if present sim.apply_fixed_sources_and_mesh_domains(); + // // Check if problem is 3D or 2D + // sim.check_geometry_dimensions(); + // Begin main simulation timer simulation::time_total.start(); @@ -394,6 +397,15 @@ RandomRaySimulation::RandomRaySimulation() domain_->flatten_xs(); } +// void RandomRaySimulation::check_geometry_dimensions(){ +// // Check if problem is 3D +// if (!domain_->is_geometry_3D()){ +// RandomRay::geom_dim_ = RandomRayGeomDim::TWO_DIM; +// } + +// printf("Geometry is %s\n", (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM) ? "3D" : "2D"); +// } + void RandomRaySimulation::apply_fixed_sources_and_mesh_domains() { domain_->apply_meshes(); @@ -426,9 +438,6 @@ void RandomRaySimulation::simulate() // Initialize subdomains for MPI ranks mpi::decomp_map.initialize(); - simulation::time_generate_voronoi_centers.start(); - mpi::decomp_map.generate_rank_centers(); - simulation::time_generate_voronoi_centers.stop(); // Create ray bank //TODO: Should this just be local object? RayBank RB; @@ -458,6 +467,21 @@ void RandomRaySimulation::simulate() if (RandomRay::mesh_subdivision_enabled_ && simulation::current_batch == 1 && !FlatSourceDomain::adjoint_) { domain_->prepare_base_source_regions(); + + // printf("Geometry is %s\n", (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM) ? "3D" : "2D"); + + // Check if problem is 3D + if (!domain_->is_geometry_3D()){ + RandomRay::geom_dim_ = RandomRayGeomDim::TWO_DIM; + } + + printf("Geometry is %s\n", (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM) ? "3D" : "2D"); + + // Generate Voronoi cells, each of which corresponds to a rank subdomain + simulation::time_generate_voronoi_centers.start(); + mpi::decomp_map.generate_rank_centers(); + simulation::time_generate_voronoi_centers.stop(); + } // Transport sweep over all random rays for the iteration @@ -665,6 +689,7 @@ void RandomRaySimulation::print_results_random_ray( for (int i = 1; i < mpi::n_procs; i++) { fmt::print(" Rank {}: {:.2f}%\n", i, mpi::decomp_map.rank_load_[i]*100.0); } + fmt::print("Maximum Load Imbalance = {:.2f}%\n", mpi::decomp_map.max_imbalance_*100.0); } std::string estimator; @@ -728,6 +753,8 @@ void RandomRaySimulation::print_results_random_ray( show_time("Ray communication", time_ray_comms.elapsed(), 2); show_time("Source region exchange", time_source_region_exchange.elapsed(), 2); show_time("Load balancing", time_load_balance.elapsed(), 2); + show_time("Optimization", time_load_balance.elapsed() - time_load_balance_sr_transfer.elapsed(), 3); + show_time("Source region transfer", time_load_balance_sr_transfer.elapsed(), 3); show_time("Waiting for other ranks", time_mpi_imbalance.elapsed(), 2); show_time("Generating Voronoi centers", time_generate_voronoi_centers.elapsed(), 2); show_time("Sending ray metadata", time_comms_metadata.elapsed(), 2); @@ -814,10 +841,21 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { uint64_t id = simulation::work_index[mpi::rank] + i; RandomRay ray(id, domain_.get()); - // Add ray to ray bank - #pragma omp critical (raybank) - { - RB.add_ray_to_bank(ray); + // Add ray to ray bank if it starts in my subdomain + if (!ray.has_left_subdomain()){ + #pragma omp critical (raybank) + { + RB.add_ray_to_bank(ray); + } + } + // Put ray if straight into buffer it starts outside my subdomain + else { + #pragma omp critical (raybuffer) + { + simulation::time_ray_buffering.start(); + RB.buffer_ray_data_to_send(ray, domain_.get()); + simulation::time_ray_buffering.stop(); + } } } diff --git a/src/timer.cpp b/src/timer.cpp index 3fcf1589f6a..9764a024994 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -31,6 +31,7 @@ Timer time_ray_comms; Timer time_ray_buffering; Timer time_decomposition_handling; Timer time_load_balance; +Timer time_load_balance_sr_transfer; Timer time_generate_voronoi_centers; Timer time_source_region_exchange; Timer time_comms_metadata; From cf73d61702032cc2009e4115161535dbcb3f3a82 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Fri, 17 Oct 2025 14:11:14 +0100 Subject: [PATCH 14/48] Include neighbor lookup --- include/openmc/random_ray/decomposition_map.h | 8 ++- src/random_ray/decomposition_map.cpp | 52 ++++++++++++++++--- src/random_ray/random_ray_simulation.cpp | 10 ++++ src/random_ray/ray_bank.cpp | 9 ++++ 4 files changed, 69 insertions(+), 10 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index cdb5e9b0d1f..05b72bd05b2 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -43,7 +43,7 @@ class DecompositionMap { // Methods for balancing the load between ranks void balance_load(FlatSourceDomain* domain); - void update_load(FlatSourceDomain* domain); + void update_load(FlatSourceDomain* domain, bool check_all_ranks); void redistribute_source_regions(FlatSourceDomain* domain); bool load_balanced() const { return max_imbalance_ < imbalance_tolerance_; } @@ -51,7 +51,7 @@ class DecompositionMap { int find_owner(SourceRegionKey sr_key, Position r, ParallelMap& discovered_source_regions); - int find_closest_rank(Position r); + int find_closest_rank(Position r, bool test_all_ranks); // Method to calculate the load per rank based on the total number of hits in all source regions // of a rank @@ -72,6 +72,10 @@ class DecompositionMap { // Centers of each rank's Voronoi cell vector rank_centers_; + // Neighbors of each rank's Voronoi cell + std::unordered_set my_neighbors; + // vector my_neighbors; + vector rank_load_; vector rank_weights_; double target_load_; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index f521f48d944..21f8ced2832 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -540,17 +540,31 @@ int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, // If not found in either map, check which rank would own source // region beased on location - int closest_rank = find_closest_rank(r); + int closest_rank = find_closest_rank(r, true); //TODO: Maybe make condition if all ranks need to be check dependend on whether new neighbours were identified! return closest_rank; } -int DecompositionMap::find_closest_rank(Position r) { +int DecompositionMap::find_closest_rank(Position r, bool test_all_ranks) { // Determine which rank the position belongs to int closest_rank = C_NONE; double min_distance = INFTY; + + vector test_ranks; + // test_ranks = mpi::decomp_map.my_neighbors; + + + if (test_all_ranks){ + test_ranks.resize(mpi::n_procs); + std::iota(test_ranks.begin(), test_ranks.end(), 0); // fill with 0, 1, ..., n_procs-1 + } else { + // convert unordered set to vector + test_ranks=vector(mpi::decomp_map.my_neighbors.begin(), mpi::decomp_map.my_neighbors.end()); + test_ranks.push_back(mpi::rank); // Always include own rank + } // Find closest rank center - for (int rank = 0; rank < mpi::n_procs; rank++) { + // for (int rank = 0; rank < mpi::n_procs; rank++) { + for (int rank : test_ranks) { double dist = (r - rank_centers_[rank]).norm(); // Distance function corresponding to weighted power Voronoi diagram. dist = dist*dist - rank_weights_[rank]; @@ -630,7 +644,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ //TODO: The optimisation seems really messy cnt_optimizations_total_ ++; - int max_iterations = 500; + int max_iterations = 300; double max_imbalance = max_imbalance_; int it_outer = 0; @@ -642,6 +656,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ double weight_scale = avg_rank_distance * avg_rank_distance * optimization_history_factor_; //TODO: maybe adjust dynamically dependent on wether previous batch has converged // double weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; // scale weights based on average load double beta = 0.6; // momentum damping + bool check_all_ranks = true; // History tracking vector imbalance_history; @@ -675,7 +690,12 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ rank_weights_[rank] -= adaptation_factor * damping * weight_change[rank]; } - update_load(domain); + // if (it_outer > 0 && simulation::current_batch > 1){ + if (simulation::current_batch > 1){ + check_all_ranks = false; + } + + update_load(domain, check_all_ranks); it_outer ++; double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); @@ -777,7 +797,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ } } -void DecompositionMap::update_load(FlatSourceDomain* domain){ +void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks){ vector n_hits(mpi::n_procs, 0); @@ -790,7 +810,7 @@ void DecompositionMap::update_load(FlatSourceDomain* domain){ #pragma omp for for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { Position centroid = domain->source_regions_.centroid(sr); - int owner = find_closest_rank(centroid); + int owner = find_closest_rank(centroid, check_all_ranks); local_hits[owner] += domain->source_regions_.n_hits(sr); } @@ -803,6 +823,22 @@ void DecompositionMap::update_load(FlatSourceDomain* domain){ } } + // // Check if any new neighbors were discovered during this update + // if (check_all_ranks){ + + // // Create a set from current neighbors for faster lookups + // std::unordered_set existing_neighbors( + // mpi::decomp_map.my_neighbors.begin(), + // mpi::decomp_map.my_neighbors.end() + // ); + + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // // add to neighbor list if new neighbour found + // if (n_hits[rank] > 0 && rank != mpi::rank && existing_neighbors.count(rank) == 0){ + // mpi::decomp_map.my_neighbors.push_back(rank); + // } + // } + // } // Accumulate hits across all ranks MPI_Allreduce(MPI_IN_PLACE, n_hits.data(), mpi::n_procs, MPI_UINT64_T, MPI_SUM, mpi::intracomm); @@ -822,7 +858,7 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { // Each rank identifies source regions that need to be transferred to new owner and updates subdomain map accordingly for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { Position centroid = domain->source_regions_.centroid(sr); - int owner = find_closest_rank(centroid); + int owner = find_closest_rank(centroid, true); // If owner changed, write source region to list of outbound source regions if (owner != mpi::rank){ diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index e49c15375d2..26e7c9c0b1c 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -508,6 +508,14 @@ void RandomRaySimulation::simulate() domain_->normalize_scalar_flux_and_volumes( settings::n_particles * RandomRay::distance_active_); + if (mpi::master) { + printf("Rank %d has %ld neighbors: ", mpi::rank, mpi::decomp_map.my_neighbors.size()); + for (int rank : mpi::decomp_map.my_neighbors){ + printf("%d ", rank); + } + printf("\n"); + } + // Balance load between ranks by changing weights of Voronoi cells if (mpi::n_procs > 1 && mpi::decomp_map.load_balanced() == false){ simulation::time_load_balance.start(); @@ -833,6 +841,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // printf("Rank %d: Sampled source region %ld, meshbin %ld\n", mpi::rank, // sr_key.base_source_region_id, sr_key.mesh_bin); // Assuming these are the correct member names + // mpi::decomp_map.my_neighbors.clear(); + simulation::time_decomposition_handling.start(); // Create rays and add them to ray bank diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index a3f01519cd4..aa21014cf19 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -75,6 +75,8 @@ int RayBank::ray_bank_size(){ // Tells each rank how many rays to receive from whom void RayBank::communicate_message_metadata() { + + // mpi::decomp_map.my_neighbors.resize(0); //TODO: Should this be reset here in each iteration? Maybe only if weight has changed? Maybe it does not need to be reset ever vector num_messages_sending(mpi::n_procs, 0); // Ensure all values are zero @@ -146,6 +148,13 @@ void RayBank::communicate_rays(){ for (int g = 0; g < negroups_; g++){ angular_flux_data[(vector_send_idx + i) * negroups_ + g] = rays[i].angular_flux[g]; } + + // Check neighbor list and add if not already known. Filter out rays that are sampled elsewhere TODO: Positioning here might be inefficient + if (rays[i].distance_travelled > 0.0 || rays[i].is_active) { + if (mpi::decomp_map.my_neighbors.count(receiving_rank) == 0) { + mpi::decomp_map.my_neighbors.insert(receiving_rank); + } + } } MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); From 1b191547f11a9d46b24e77674315ba73d6c448c3 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Fri, 17 Oct 2025 15:23:56 +0100 Subject: [PATCH 15/48] Change optimization variable to max load deviation --- src/random_ray/decomposition_map.cpp | 37 +++++++++++++++++------- src/random_ray/random_ray_simulation.cpp | 11 ++++--- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 21f8ced2832..16ef66995d2 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -634,9 +634,14 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th } // Calculate imbalance - double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); - double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; - max_imbalance_ = (max_load - avg_load) / avg_load; + vector imbalance_per_rank(mpi::n_procs, 0.0); + for (int rank = 0; rank < mpi::n_procs; rank++) { + imbalance_per_rank[rank] = std::abs(rank_load_[rank] - target_load_) / target_load_; + } + max_imbalance_ = *std::max_element(imbalance_per_rank.begin(), imbalance_per_rank.end()); + // double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); + // double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; + // max_imbalance_ = (max_load - avg_load) / avg_load; } void DecompositionMap::balance_load(FlatSourceDomain* domain){ @@ -644,7 +649,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ //TODO: The optimisation seems really messy cnt_optimizations_total_ ++; - int max_iterations = 300; + int max_iterations = 200; double max_imbalance = max_imbalance_; int it_outer = 0; @@ -668,6 +673,9 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // vector old_weights = rank_weights_; // double max_imbalance_old = max_imbalance_; + + vector imbalance_per_rank(mpi::n_procs, 0.0); + std::unordered_map> sr_send; // contains regions to be send while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ @@ -683,7 +691,8 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ for (int rank = 0; rank < mpi::n_procs; rank++) { // weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; - double corr = ((rank_load_[rank] - target_load_) / target_load_) * weight_scale; + imbalance_per_rank[rank] = (rank_load_[rank] - target_load_) / target_load_; + double corr = imbalance_per_rank[rank] * weight_scale; weight_change[rank] = beta * weight_change[rank] + (1.0 - beta) * corr; // keep some inertia from previous changes to prevent oscillations // double damping = std::min(1.0, max_imbalance / imbalance_tolerance_); // dampening factor based on how far we are from convergence double damping = std::clamp(max_imbalance / prev_imbalance, 0.1, 1.0); // dampening factor based on whether we are getting closer to convergence or not, prevents big jumps, if too big a change, more dampening is applied @@ -698,11 +707,19 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ update_load(domain, check_all_ranks); it_outer ++; - double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); - double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0) / mpi::n_procs; - max_imbalance = (max_load - avg_load) / avg_load; + // double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); + // double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0) / mpi::n_procs; + // max_imbalance = (max_load - avg_load) / avg_load; + + max_imbalance = 0.0; + for (int rank = 0; rank < mpi::n_procs; rank++) { + double imbalance = std::abs(imbalance_per_rank[rank]); + if (imbalance > max_imbalance) { + max_imbalance = imbalance; + } + } - // Store imbalance history for diagnostics if convergence fails + // Store imbalance history imbalance_history.push_back(max_imbalance); weight_history.push_back(rank_weights_); @@ -764,7 +781,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ best_imbalance*100.0, best_index, optimization_history_factor_); } - if (cnt_unconverged_optimizations_ > 5){ + if (cnt_unconverged_optimizations_ == 5){ cnt_unconverged_optimizations_ = 0; imbalance_tolerance_ = best_imbalance; // relax tolerance if not converging if (mpi::master){ diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 26e7c9c0b1c..db981ef65df 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -508,13 +508,13 @@ void RandomRaySimulation::simulate() domain_->normalize_scalar_flux_and_volumes( settings::n_particles * RandomRay::distance_active_); - if (mpi::master) { + // if (mpi::master) { printf("Rank %d has %ld neighbors: ", mpi::rank, mpi::decomp_map.my_neighbors.size()); for (int rank : mpi::decomp_map.my_neighbors){ printf("%d ", rank); } printf("\n"); - } + // } // Balance load between ranks by changing weights of Voronoi cells if (mpi::n_procs > 1 && mpi::decomp_map.load_balanced() == false){ @@ -841,8 +841,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // printf("Rank %d: Sampled source region %ld, meshbin %ld\n", mpi::rank, // sr_key.base_source_region_id, sr_key.mesh_bin); // Assuming these are the correct member names - // mpi::decomp_map.my_neighbors.clear(); - simulation::time_decomposition_handling.start(); // Create rays and add them to ray bank @@ -911,6 +909,11 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { printf("Number of ray crossings: %ld\n", num_ray_crossings_); } + // // Reset neighbors after first batch because first load balance operation will change layout strongly //TODO: However, we want to make sure we capture all possible neighbours, and if ray density is too low, it might actually be good to accumulate niehgbours over whole simulation + // if (simulation::current_batch == 1) { + // mpi::decomp_map.my_neighbors.clear(); + // } + // Calculate load per rank based on number of hits in each source region that a rank owns mpi::decomp_map.calculate_rank_load(domain_.get()); From 93dcd2d1e0b2ae35da0f426aad834f365ba943d8 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Fri, 17 Oct 2025 16:52:10 +0100 Subject: [PATCH 16/48] Revert optimization value, add timers for testing --- include/openmc/timer.h | 1 + src/random_ray/decomposition_map.cpp | 43 ++++++++++++------------ src/random_ray/random_ray_simulation.cpp | 1 + src/random_ray/ray_bank.cpp | 2 ++ src/timer.cpp | 1 + 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/include/openmc/timer.h b/include/openmc/timer.h index b78af92a59c..731e46bec05 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -43,6 +43,7 @@ extern Timer time_add_ray_to_bank; extern Timer time_comms_metadata; extern Timer time_unpack_data; extern Timer time_mpi_imbalance; +extern Timer time_test; //TODO: remove } // namespace simulation diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 16ef66995d2..2b5c72bf102 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -634,14 +634,14 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th } // Calculate imbalance - vector imbalance_per_rank(mpi::n_procs, 0.0); - for (int rank = 0; rank < mpi::n_procs; rank++) { - imbalance_per_rank[rank] = std::abs(rank_load_[rank] - target_load_) / target_load_; - } - max_imbalance_ = *std::max_element(imbalance_per_rank.begin(), imbalance_per_rank.end()); - // double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); - // double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; - // max_imbalance_ = (max_load - avg_load) / avg_load; + // vector imbalance_per_rank(mpi::n_procs, 0.0); + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // imbalance_per_rank[rank] = std::abs(rank_load_[rank] - target_load_) / target_load_; + // } + // max_imbalance_ = *std::max_element(imbalance_per_rank.begin(), imbalance_per_rank.end()); + double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); + double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; + max_imbalance_ = (max_load - avg_load) / avg_load; } void DecompositionMap::balance_load(FlatSourceDomain* domain){ @@ -674,7 +674,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // double max_imbalance_old = max_imbalance_; - vector imbalance_per_rank(mpi::n_procs, 0.0); + // vector imbalance_per_rank(mpi::n_procs, 0.0); std::unordered_map> sr_send; // contains regions to be send @@ -691,8 +691,9 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ for (int rank = 0; rank < mpi::n_procs; rank++) { // weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; - imbalance_per_rank[rank] = (rank_load_[rank] - target_load_) / target_load_; - double corr = imbalance_per_rank[rank] * weight_scale; + // imbalance_per_rank[rank] = (rank_load_[rank] - target_load_) / target_load_; + // double corr = imbalance_per_rank[rank] * weight_scale; + double corr = ((rank_load_[rank] - target_load_) / target_load_) * weight_scale; weight_change[rank] = beta * weight_change[rank] + (1.0 - beta) * corr; // keep some inertia from previous changes to prevent oscillations // double damping = std::min(1.0, max_imbalance / imbalance_tolerance_); // dampening factor based on how far we are from convergence double damping = std::clamp(max_imbalance / prev_imbalance, 0.1, 1.0); // dampening factor based on whether we are getting closer to convergence or not, prevents big jumps, if too big a change, more dampening is applied @@ -707,17 +708,17 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ update_load(domain, check_all_ranks); it_outer ++; - // double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); - // double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0) / mpi::n_procs; - // max_imbalance = (max_load - avg_load) / avg_load; + double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); + double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0) / mpi::n_procs; + max_imbalance = (max_load - avg_load) / avg_load; - max_imbalance = 0.0; - for (int rank = 0; rank < mpi::n_procs; rank++) { - double imbalance = std::abs(imbalance_per_rank[rank]); - if (imbalance > max_imbalance) { - max_imbalance = imbalance; - } - } + // max_imbalance = 0.0; + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // double imbalance = std::abs(imbalance_per_rank[rank]); + // if (imbalance > max_imbalance) { + // max_imbalance = imbalance; + // } + // } // Store imbalance history imbalance_history.push_back(max_imbalance); diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index db981ef65df..0f95bf9e37b 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -768,6 +768,7 @@ void RandomRaySimulation::print_results_random_ray( show_time("Sending ray metadata", time_comms_metadata.elapsed(), 2); show_time("Unpacking ray data", time_unpack_data.elapsed(), 2); show_time("Other decomposition routines", time_decomp_misc, 2); + show_time("Testing: ", time_test.elapsed(), 2); //TODO: remove } show_time("Other iteration routines", misc_time, 1); diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index aa21014cf19..6884a06da7d 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -150,11 +150,13 @@ void RayBank::communicate_rays(){ } // Check neighbor list and add if not already known. Filter out rays that are sampled elsewhere TODO: Positioning here might be inefficient + simulation::time_test.start(); //TODO: Remove if (rays[i].distance_travelled > 0.0 || rays[i].is_active) { if (mpi::decomp_map.my_neighbors.count(receiving_rank) == 0) { mpi::decomp_map.my_neighbors.insert(receiving_rank); } } + simulation::time_test.stop(); } MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); diff --git a/src/timer.cpp b/src/timer.cpp index 9764a024994..3de29589e84 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -37,6 +37,7 @@ Timer time_source_region_exchange; Timer time_comms_metadata; Timer time_unpack_data; Timer time_mpi_imbalance; +Timer time_test; //TODO: remove } // namespace simulation From 29c6f614f35f89a6ce32cbc48c52be8ddb0cd8a9 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 20 Oct 2025 01:31:48 +0100 Subject: [PATCH 17/48] Correct surface for mesh bins --- include/openmc/timer.h | 3 +- src/random_ray/decomposition_map.cpp | 40 +++++++++---------- src/random_ray/flat_source_domain.cpp | 4 ++ src/random_ray/random_ray.cpp | 13 ++++-- src/random_ray/random_ray_simulation.cpp | 50 +++++++++++++++++++----- src/random_ray/ray_bank.cpp | 19 ++++++--- src/timer.cpp | 3 +- 7 files changed, 92 insertions(+), 40 deletions(-) diff --git a/include/openmc/timer.h b/include/openmc/timer.h index 731e46bec05..d54710daf84 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -37,13 +37,14 @@ extern Timer time_decomposition_handling; extern Timer time_load_balance; extern Timer time_load_balance_sr_transfer; extern Timer time_ray_buffering; +// extern Timer time_ray_buffering2; extern Timer time_generate_voronoi_centers; extern Timer time_source_region_exchange; extern Timer time_add_ray_to_bank; extern Timer time_comms_metadata; extern Timer time_unpack_data; extern Timer time_mpi_imbalance; -extern Timer time_test; //TODO: remove +// extern Timer time_test; //TODO: remove } // namespace simulation diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 2b5c72bf102..052458aa936 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -600,9 +600,9 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th } //TODO: Temporary print-outs - if (mpi::master) { - printf("Load distribution: "); - } + // if (mpi::master) { + // printf("Load distribution: "); + // } // Calculate rank load based on number of source region hits uint64_t n_hits_total = 0; @@ -611,9 +611,9 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th n_hits_sum_ = n_hits_total; //TODO: Temporary print-outs - if(mpi::master){ - printf("Total hits: %ld \n", n_hits_total); - } + // if(mpi::master){ + // printf("Total hits: %ld \n", n_hits_total); + // } // Communicate load across ranks for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -624,14 +624,14 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); rank_load_[rank] = bcast_load; //TODO: Temporary print-outs - if (mpi::master) { - printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); - } + // if (mpi::master) { + // printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); + // } } //TODO: Temporary print-outs - if (mpi::master) { - printf("\n"); - } + // if (mpi::master) { + // printf("\n"); + // } // Calculate imbalance // vector imbalance_per_rank(mpi::n_procs, 0.0); @@ -681,7 +681,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ //TODO: temporary - if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); + // if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); // Optimise rank load rank by rank // for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -806,13 +806,13 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ simulation::time_load_balance_sr_transfer.stop(); //TODO: temporary - if (mpi::master){ - printf("Weights: "); - for (int rank = 0; rank < mpi::n_procs; rank++) { - printf("RANK %d: %.2f ", rank, rank_weights_[rank]); - } - printf("\n"); - } + // if (mpi::master){ + // printf("Weights: "); + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // printf("RANK %d: %.2f ", rank, rank_weights_[rank]); + // } + // printf("\n"); + // } } void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks){ diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index b3e23e7bd9b..e014f3c580b 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -387,6 +387,10 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const simulation::time_decomposition_handling.stop(); } + // if (mpi::master) { + // printf("Batch %d, RANK %d: keff_old: %f, Fission Rate Old: %f, Fission Rate New: %f \n", simulation::current_batch, mpi::rank, k_eff_old, fission_rate_old, fission_rate_new); + // } + double k_eff_new = k_eff_old * (fission_rate_new / fission_rate_old); double H = 0.0; diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 6739650e32b..13f92912ad3 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -271,8 +271,8 @@ uint64_t RandomRay::transport_history_based_single_ray() { using namespace openmc; while (alive()) { - // if (id() == 6543){ - // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); + // if (id() == 37849){ + // printf("Batch %d, RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d, surface: %d \n", simulation::current_batch, mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_, surface()); // } event_advance_ray(); if (!alive()) @@ -430,7 +430,7 @@ void RandomRay::attenuate_flux(double distance, double offset) start += physical_length * u(); // if (id() == 6543){ - // printf("RANK %d: Source region %ld, mesh bin %d, physical length %f\n", mpi::rank, sr, mesh_bins_[b], physical_length); + // printf("RANK %d: Source region %ld, mesh bin %d, physical length %f\n", mpi::rank, sr, mesh_bins_[b], physical_length); // } // If ray has left my subdomain, stop transport @@ -444,6 +444,7 @@ void RandomRay::attenuate_flux(double distance, double offset) if (b > 0) { tiny_multiplier = 1.0; + surface() = 0; // Reset last surface crossed to none if ray is stopped within mesh of base source region } // Add TINY_BIT to account for deleted length in first mesh_bin in each base source region @@ -469,7 +470,7 @@ void RandomRay::attenuate_flux(double distance, double offset) pack_ray_for_buffer(distance_buffer, position_buffer); //, SourceRegionKey(sr, mesh_bin), sr); wgt() = 0.0; // if (id() == 6543){ - // printf("RANK %d: Buffered (%f, %f, %f) at source region %ld, mesh bin %d \n", mpi::rank, position_buffer.x, position_buffer.y, position_buffer.z, sr, mesh_bin); + // printf("Batch %d, RANK %d: Buffered (%f, %f, %f) at source region %ld, mesh bin %d, mesh_crossed: %f, surface: %d, new owner: %d \n", simulation::current_batch, mpi::rank, position_buffer.x, position_buffer.y, position_buffer.z, sr, mesh_bin, tiny_multiplier, surface(), owner_rank_); // printf("RANK %d: material %d \n", mpi::rank, this->material()); // } @@ -929,6 +930,7 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vec // reinitialize last surface that was crossed surface() = data.surface; + // printf("RANK %d: Restart ray %ld, last surface crossed: %d \n", mpi::rank, id(), surface()); // Locate ray if (lowest_coord().cell() == C_NONE) { @@ -1067,6 +1069,7 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) } pack_ray_for_buffer(0.0, r()); is_local_ = false; + // printf("Batch: %d, RANK %d: Initialized ray %ld, position: %f, %f, %f, surface: %d, owner: %d\n", simulation::current_batch, mpi::rank, id(), r().x, r().y, r().z, surface(), owner_rank_); return; } } @@ -1086,6 +1089,8 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) angular_flux_[g] = srh.source(g); } } + + // printf("Batch: %d, RANK %d: Initialized ray %ld, position: %f, %f, %f, surface: %d, owner: %d\n", simulation::current_batch, mpi::rank, id(), r().x, r().y, r().z, surface(), owner_rank_); } SourceSite RandomRay::sample_prng() diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 0f95bf9e37b..405538275b7 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -17,6 +17,8 @@ #include "openmc/weight_windows.h" #include "openmc/random_ray/decomposition_map.h" #include "openmc/random_ray/ray_bank.h" +// #include +// #include namespace openmc { @@ -509,11 +511,11 @@ void RandomRaySimulation::simulate() settings::n_particles * RandomRay::distance_active_); // if (mpi::master) { - printf("Rank %d has %ld neighbors: ", mpi::rank, mpi::decomp_map.my_neighbors.size()); - for (int rank : mpi::decomp_map.my_neighbors){ - printf("%d ", rank); - } - printf("\n"); + // printf("Rank %d has %ld neighbors: ", mpi::rank, mpi::decomp_map.my_neighbors.size()); + // for (int rank : mpi::decomp_map.my_neighbors){ + // printf("%d ", rank); + // } + // printf("\n"); // } // Balance load between ranks by changing weights of Voronoi cells @@ -617,6 +619,11 @@ void RandomRaySimulation::instability_check( simulation::time_decomposition_handling.stop(); } + // if (mpi::master) { + // printf("BATCH %d: n_hits = %ld, n_source_regions = %ld, k_eff = %f\n", + // simulation::current_batch, n_hits, n_source_regions, k_eff); + // } + if (mpi::master) { double percent_missed = ((n_source_regions - n_hits) / static_cast(n_source_regions)) * @@ -636,7 +643,12 @@ void RandomRaySimulation::instability_check( percent_missed)); } + // if (simulation::current_batch==56){ + // printf("RANK %d: k_eff = %f\n", mpi::rank, k_eff); + // } + if (k_eff > 10.0 || k_eff < 0.01 || !(std::isfinite(k_eff))) { + // printf("RANK %d: k_eff = %f\n", mpi::rank, k_eff); fatal_error("Instability detected"); } } @@ -754,7 +766,7 @@ void RandomRaySimulation::print_results_random_ray( show_time("Source update only", time_update_src.elapsed(), 1); show_time("Tally conversion only", time_tallies.elapsed(), 1); if (mpi::n_procs > 1){ - double time_decomp_misc = time_domain_decomposition - time_generate_voronoi_centers.elapsed() + double time_decomp_misc = time_domain_decomposition - time_source_region_exchange.elapsed() - time_generate_voronoi_centers.elapsed() - time_ray_comms.elapsed() - time_comms_metadata.elapsed() - time_unpack_data.elapsed() - time_mpi_imbalance.elapsed() - time_load_balance.elapsed(); show_time("Decomposition handling", time_domain_decomposition, 1); @@ -768,7 +780,7 @@ void RandomRaySimulation::print_results_random_ray( show_time("Sending ray metadata", time_comms_metadata.elapsed(), 2); show_time("Unpacking ray data", time_unpack_data.elapsed(), 2); show_time("Other decomposition routines", time_decomp_misc, 2); - show_time("Testing: ", time_test.elapsed(), 2); //TODO: remove + // show_time("Testing: ", time_test.elapsed(), 2); //TODO: remove } show_time("Other iteration routines", misc_time, 1); @@ -844,11 +856,14 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { simulation::time_decomposition_handling.start(); + // int ray_cnt = 0; + // Create rays and add them to ray bank #pragma omp parallel for schedule(static) for (int i = 0; i < simulation::work_per_rank; i++) { uint64_t id = simulation::work_index[mpi::rank] + i; RandomRay ray(id, domain_.get()); + // ray_cnt ++; // Add ray to ray bank if it starts in my subdomain if (!ray.has_left_subdomain()){ @@ -861,13 +876,20 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { else { #pragma omp critical (raybuffer) { - simulation::time_ray_buffering.start(); + // simulation::time_ray_buffering2.start(); RB.buffer_ray_data_to_send(ray, domain_.get()); - simulation::time_ray_buffering.stop(); + // simulation::time_ray_buffering2.stop(); } } } + // If no ray is alive at this stage, it means that all of them have been buffered because they were sampled in foregin subdomain. This requires a ray bank update here. + if (!RB.is_any_ray_alive()) { + RB.update(domain_.get()); + } + + // MPI_Barrier(mpi::intracomm); + // printf("Batch: %d Rank %d: ray cnt %d, RB size %d\n", simulation::current_batch, mpi::rank, ray_cnt, RB.ray_bank_size()); int num_comms = 0; // printf("Rank %d: Starting transport sweep with %d rays\n", mpi::rank, RB.ray_bank_size()); @@ -901,6 +923,10 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // if (RB.ray_bank_size() != 0) printf("Rank %d: Communicating %d rays\n", mpi::rank, RB.ray_bank_size()); RB.update(domain_.get()); + // if (mpi::master){ + // printf("Communication round %d\n", num_comms); + // } + num_comms ++; } @@ -924,6 +950,12 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { RB.reset_my_ray_list(); simulation::time_decomposition_handling.stop(); + + // std::this_thread::sleep_for(std::chrono::seconds(1)); + // if (simulation::current_batch == 10){ + // fatal_error( + // "STOP."); + // } } } // namespace openmc diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 6884a06da7d..b8cbb13f3b7 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -96,6 +96,15 @@ void RayBank::communicate_message_metadata() { // } } + // printf("Rank %d: Sending a total of %d rays to %lu ranks\n", mpi::rank, total_sending_rays_, ray_send_buffer_.size()); + // if (total_sending_rays_==1){ + // for (auto& [rank, rays] : ray_send_buffer_) { + // for (auto& ray : rays){ + // printf("Rank %d: Sending ray %ld to rank %d\n", mpi::rank, ray.ray_id, rank); + // } + // } + // } + // Exchange message counts with all ranks MPI_Alltoall(num_messages_sending.data(), 1, MPI_INT, num_messages_receiving_.data(), 1, MPI_INT, @@ -149,14 +158,14 @@ void RayBank::communicate_rays(){ angular_flux_data[(vector_send_idx + i) * negroups_ + g] = rays[i].angular_flux[g]; } - // Check neighbor list and add if not already known. Filter out rays that are sampled elsewhere TODO: Positioning here might be inefficient - simulation::time_test.start(); //TODO: Remove + // Check neighbor list and add if not already known (insert does this check automatically). Filter out rays that are sampled elsewhere TODO: Positioning here might be inefficient + // simulation::time_test.start(); //TODO: Remove if (rays[i].distance_travelled > 0.0 || rays[i].is_active) { - if (mpi::decomp_map.my_neighbors.count(receiving_rank) == 0) { + // if (mpi::decomp_map.my_neighbors.count(receiving_rank) == 0) { mpi::decomp_map.my_neighbors.insert(receiving_rank); - } + // } } - simulation::time_test.stop(); + // simulation::time_test.stop(); } MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); diff --git a/src/timer.cpp b/src/timer.cpp index 3de29589e84..e1faef21c4b 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -29,6 +29,7 @@ Timer time_event_death; Timer time_update_src; Timer time_ray_comms; Timer time_ray_buffering; +// Timer time_ray_buffering2; Timer time_decomposition_handling; Timer time_load_balance; Timer time_load_balance_sr_transfer; @@ -37,7 +38,7 @@ Timer time_source_region_exchange; Timer time_comms_metadata; Timer time_unpack_data; Timer time_mpi_imbalance; -Timer time_test; //TODO: remove +// Timer time_test; //TODO: remove } // namespace simulation From 8886c0e627521d0489754faf4b14fd8a8568763d Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Wed, 22 Oct 2025 17:13:05 +0100 Subject: [PATCH 18/48] Correct plotting, correct tally data --- src/random_ray/decomposition_map.cpp | 13 ++++ src/random_ray/flat_source_domain.cpp | 88 +++++++++++++++--------- src/random_ray/random_ray_simulation.cpp | 8 ++- src/random_ray/source_region.cpp | 3 + 4 files changed, 77 insertions(+), 35 deletions(-) diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 052458aa936..945d2e8dece 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -964,6 +964,12 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { } } + // // Update source regions in domain + // domain->source_regions_ = source_regions_new; + + // int64_t start_sr_id = domain->source_regions_.n_source_regions(); + int64_t start_sr_id = source_regions_new.n_source_regions(); + // Receive source regions for (int sender = 0; sender < mpi::n_procs; sender++) { @@ -979,9 +985,13 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { SourceRegion sr_recv(negroups_, is_linear_); receive_sr_data(sender, sr_recv); //TODO: Use source_regions_.push_back(sr_recv); } } + // // Reinitialise tallies + // domain->convert_source_regions_to_tallies(start_sr_id); + // Update source regions in domain domain->source_regions_ = source_regions_new; @@ -990,6 +1000,9 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { SourceRegionKey key = domain->source_regions_.key(sr); domain->source_region_map_[key] = sr; } + + // Reinitialise tallies + domain->convert_source_regions_to_tallies(start_sr_id); } }// namespace openmc \ No newline at end of file diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index e014f3c580b..c216715e1fc 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -1013,6 +1013,8 @@ void FlatSourceDomain::output_to_vtk() const // is checked and flipped if necessary. void FlatSourceDomain::output_to_vtk_decomp() const { + // printf("-2 RANK %d: Starting VTK output in random ray mode...\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); if (mpi::master){ // Rename .h5 plot filename(s) to .vtk filenames @@ -1171,14 +1173,21 @@ void FlatSourceDomain::output_to_vtk_decomp() const std::fprintf(plot, "POINT_DATA %d\n", Nx * Ny * Nz); } + // printf("-1 RANK: %d start plotting\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); + int vector_size = Nx * Ny * Nz; - vector vector_out(vector_size, 0.0); + vector vector_out_float(vector_size, 0.0); + vector vector_out_int(vector_size, 0); int64_t num_neg = 0; int64_t num_samples = 0; float min_flux = 0.0; float max_flux = -1.0e20; + // printf("0 RANK: %d start plotting\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); + // Plot multigroup flux data for (int g = 0; g < negroups_; g++) { @@ -1200,27 +1209,30 @@ void FlatSourceDomain::output_to_vtk_decomp() const if (flux > max_flux) max_flux = flux; num_samples++; - vector_out[voxel_id] = flux; + vector_out_float[voxel_id] = flux; } if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } if (mpi::master){ std::fprintf(plot, "SCALARS flux_group_%d float\n", g); std::fprintf(plot, "LOOKUP_TABLE default\n"); - for (float value : vector_out) { + for (float value : vector_out_float) { float print_value = convert_to_big_endian(value); std::fwrite(&print_value, sizeof(float), 1, plot); } } - fill(vector_out.begin(), vector_out.end(), 0.0); + fill(vector_out_float.begin(), vector_out_float.end(), 0.0); } + // printf("1 RANK: %d finished flux plotting\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); + // Slightly negative fluxes can be normal when sampling corners of linear // source regions. However, very common and high magnitude negative fluxes // may indicate numerical instability. //TODO: needs changing for MPI ranks @@ -1234,25 +1246,28 @@ void FlatSourceDomain::output_to_vtk_decomp() const for (int voxel_id : my_voxel_ids) { int fsr = voxel_indices[voxel_id]; float value = future_prn(10, fsr); - vector_out[voxel_id] = value; + vector_out_float[voxel_id] = value; } if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } if (mpi::master){ std::fprintf(plot, "SCALARS FSRs float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); - for (float value : vector_out) { + for (float value : vector_out_float) { float print_value = convert_to_big_endian(value); std::fwrite(&print_value, sizeof(float), 1, plot); } } - fill(vector_out.begin(), vector_out.end(), 0.0); + fill(vector_out_float.begin(), vector_out_float.end(), 0.0); + + // printf("2 RANK: %d Completed FSR plotting\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); // Plot Materials for (int voxel_id : my_voxel_ids) { @@ -1261,51 +1276,54 @@ void FlatSourceDomain::output_to_vtk_decomp() const if (fsr >= 0) { mat = source_regions_.material(fsr); } - vector_out[voxel_id] = mat; + vector_out_int[voxel_id] = mat + 1; // To avoid -1 for void (MPI_SUM) } if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out_int.data(), vector_size, MPI_INT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_int.data(), nullptr, vector_size, MPI_INT, MPI_SUM, 0, mpi::intracomm); } if (mpi::master){ std::fprintf(plot, "SCALARS Materials int\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); - for (float value : vector_out) { - float print_value = convert_to_big_endian(value); + for (int value : vector_out_int) { + int print_value = convert_to_big_endian(value); std::fwrite(&print_value, sizeof(int), 1, plot); } } - fill(vector_out.begin(), vector_out.end(), 0.0); + fill(vector_out_int.begin(), vector_out_int.end(), 0); + + // printf("3 RANK: %d finished material plotting\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); // Plot rank subdomains for (int voxel_id : my_voxel_ids) { int rank_id = mpi::rank; float value = future_prn(10, rank_id); - vector_out[voxel_id] = value; + vector_out_float[voxel_id] = value; } if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } if (mpi::master){ std::fprintf(plot, "SCALARS rank_subdomains float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); - for (float value : vector_out) { + for (float value : vector_out_float) { float print_value = convert_to_big_endian(value); std::fwrite(&print_value, sizeof(float), 1, plot); } } - fill(vector_out.begin(), vector_out.end(), 0.0); + fill(vector_out_float.begin(), vector_out_float.end(), 0.0); // Plot fission source if (settings::run_mode == RunMode::EIGENVALUE) { @@ -1322,7 +1340,7 @@ void FlatSourceDomain::output_to_vtk_decomp() const } } } - vector_out[voxel_id] = total_fission; + vector_out_float[voxel_id] = total_fission; } } else { for (int voxel_id : my_voxel_ids) { @@ -1340,14 +1358,14 @@ void FlatSourceDomain::output_to_vtk_decomp() const total_external += source_regions_.external_source(fsr, g) * sigma_t; } } - vector_out[voxel_id] = total_external; + vector_out_float[voxel_id] = total_external; } } if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } if (mpi::master){ @@ -1357,13 +1375,16 @@ void FlatSourceDomain::output_to_vtk_decomp() const std::fprintf(plot, "SCALARS external_source float\n"); } std::fprintf(plot, "LOOKUP_TABLE default\n"); - for (float value : vector_out) { + for (float value : vector_out_float) { float print_value = convert_to_big_endian(value); std::fwrite(&print_value, sizeof(float), 1, plot); } } - fill(vector_out.begin(), vector_out.end(), 0.0); + fill(vector_out_float.begin(), vector_out_float.end(), 0.0); + + // printf("4 RANK: %d finished fisison plotting\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); // Plot weight window data if (variance_reduction::weight_windows.size() == 1) { @@ -1371,26 +1392,29 @@ void FlatSourceDomain::output_to_vtk_decomp() const float weight = weight_windows[voxel_id]; if (weight == 0.0) weight = min_weight; - vector_out[voxel_id] = weight; + vector_out_float[voxel_id] = weight; } if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); } if (mpi::master){ std::fprintf(plot, "SCALARS weight_window_lower float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); - for (float value : vector_out) { + for (float value : vector_out_float) { float print_value = convert_to_big_endian(value); std::fwrite(&print_value, sizeof(float), 1, plot); } } } + // printf("5 RANK: %d finished plotting\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); + if (mpi::master){ std::fclose(plot); } diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 405538275b7..35f66c2b49e 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -586,9 +586,11 @@ void RandomRaySimulation::output_simulation_results() const avg_miss_rate_ / settings::n_batches, negroups_, domain_->n_source_regions(), domain_->n_external_source_regions_, avg_num_comms_); } - + if (model::plots.size() > 0) { if (mpi::n_procs > 1){ + // printf("RANK: %d start vtk decomp output\n", mpi::rank); + // MPI_Barrier(mpi::intracomm); domain_->output_to_vtk_decomp(); } else { domain_->output_to_vtk(); @@ -908,13 +910,13 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // If ray has left my subdomain, buffer ray state if(ray.has_left_subdomain()){ + simulation::time_ray_buffering.start(); #pragma omp critical (raybuffer) { - simulation::time_ray_buffering.start(); num_ray_crossings_ ++; RB.buffer_ray_data_to_send(ray, domain_.get()); - simulation::time_ray_buffering.stop(); } + simulation::time_ray_buffering.stop(); } } simulation::time_transport.stop(); diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index 0bd65fbec8e..90c79849622 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -115,6 +115,7 @@ SourceRegion::SourceRegion(const SourceRegionHandle& handle) flux_moments_new_[g] = handle.flux_moments_new(g); flux_moments_t_[g] = handle.flux_moments_t(g); } + tally_task_[g] = handle.tally_task(g); } if (settings::run_mode == RunMode::FIXED_SOURCE) { scalars_.external_source_present_ = handle.external_source_present(); @@ -122,6 +123,8 @@ SourceRegion::SourceRegion(const SourceRegionHandle& handle) external_source_[g] = handle.external_source(g); } } + + volume_task_ = handle.volume_task(); } // combine two source regions from different ranks together From 22e9ee273e32f93ebea7400663aa35ad8635ac5a Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 23 Oct 2025 15:04:50 +0100 Subject: [PATCH 19/48] Change load metric to take ray tracing into accnt --- include/openmc/random_ray/decomposition_map.h | 15 +- src/random_ray/decomposition_map.cpp | 229 +++++++++++++++--- src/random_ray/random_ray.cpp | 17 ++ src/random_ray/random_ray_simulation.cpp | 4 +- 4 files changed, 224 insertions(+), 41 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 05b72bd05b2..f70ae9fcfdb 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -76,6 +76,17 @@ class DecompositionMap { std::unordered_set my_neighbors; // vector my_neighbors; + vector num_base_source_region_RT_tot_; // total number of base source region ray trace operations per base source region + vector num_mesh_bin_RT_tot_; // total number of mesh bin ray trace operations per base source region + vector num_base_source_region_RT_batch_; // number of base source region ray trace operations per base source region for current batch + vector num_mesh_bin_RT_batch_; // number of mesh bin ray trace operations per base source region for current batch + vector mesh_bins_per_base_sr_; // number of mesh bin ray trace operations per base source region for current batch + vector ray_tracing_cost_; + + // coefficients for load calculation + double C1 = 1.0; + double C2 = 1.0; + vector rank_load_; vector rank_weights_; double target_load_; @@ -83,6 +94,7 @@ class DecompositionMap { int cnt_unconverged_optimizations_total_ = 0; int cnt_optimizations_total_ = 0; double max_imbalance_ = 0.0; //TODO: rename in max_load_imbalance_ + uint64_t n_base_sr_ = 0; private: //---------------------------------------------------------------------------- @@ -91,7 +103,8 @@ class DecompositionMap { vector grid_points_; //TODO: This can be local variable when Voronoi centres ae established int grid_points_per_rank_{125}; // default 5x5x5 grid points per rank int negroups_; - uint64_t n_hits_sum_; + // uint64_t n_hits_sum_; + double total_load_; double max_domain_length_; bool is_linear_; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 945d2e8dece..9ecb6b0d3d7 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -7,6 +7,8 @@ #include "openmc/random_lcg.h" #include "openmc/mgxs_interface.h" #include "openmc/timer.h" +#include "openmc/cell.h" + #include "openmc/simulation.h" @@ -35,6 +37,24 @@ void DecompositionMap::initialize(){ max_domain_length_ = sqrt(x_length*x_length + y_length*y_length + z_length*z_length); is_linear_ = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; //TODO: SHould that be decided gloabbly or on sr by sr base? + + // Count the number of source regions, compute the cell offset + // indices, and store the material type The reason for the offsets is that + // some cell types may not have material fills, and therefore do not + // produce FSRs. Thus, we cannot index into the global arrays directly + // int base_source_regions = 0; + for (const auto& c : model::cells) { + if (c->type_ == Fill::MATERIAL) { + n_base_sr_ += c->n_instances(); + } + } + + num_base_source_region_RT_tot_.resize(n_base_sr_, 0); + num_mesh_bin_RT_tot_.resize(n_base_sr_, 0); + num_base_source_region_RT_batch_.resize(n_base_sr_, 0); + num_mesh_bin_RT_batch_.resize(n_base_sr_, 0); + mesh_bins_per_base_sr_.resize(n_base_sr_, 0); // at least 1 mesh bin (no mesh) + ray_tracing_cost_.resize(n_base_sr_); } void DecompositionMap::generate_rank_centers(){ @@ -398,14 +418,18 @@ void DecompositionMap::exchange_sr_info(ParallelMap(n_hits_sum_); + // double load_change = bcast_n_hits / static_cast(n_hits_sum_); + double load_change = bcast_load / total_load_; rank_load_[sender] -= load_change; rank_load_[receiver] += load_change; @@ -586,29 +610,121 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th // Reset rank load std::fill(rank_load_.begin(), rank_load_.end(), 0.0); - int64_t n_hits_rank = 0; + + // Share number of ray tracing scores per base source region across all ranks + // MPI_Allreduce(num_base_source_region_RT_batch_.data(), num_base_source_region_RT_tot_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + MPI_Allreduce(MPI_IN_PLACE, num_base_source_region_RT_batch_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + MPI_Allreduce(MPI_IN_PLACE, num_mesh_bin_RT_batch_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + // MPI_Allreduce(num_mesh_bin_RT_batch_.data(), num_mesh_bin_RT_tot_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + + // if(mpi::master){ + // uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), uint64_t{0}); + // uint64_t sum_bsr_RT_tot = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); + // uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), uint64_t{0}); + // printf("Sum of base_source_region_RT_batch_ before: %lu\n", sum_bsr_RT_tot); + // printf("Sum of base_source_region_RT_batch_ new: %lu\n", sum_bsr_RT); + // printf("Sum of mesh_bin_RT_batch_: %lu\n", sum_mb_RT); + // } + + // Add to total + #pragma omp parallel for + for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + num_base_source_region_RT_tot_[bsr] += num_base_source_region_RT_batch_[bsr]; + num_mesh_bin_RT_tot_[bsr] += num_mesh_bin_RT_batch_[bsr]; + } + + // Reset batch-wise counters + fill(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), 0); + fill(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), 0); + + // Add mesh_bins per base source region for newly discovered source regions + vector mesh_bins_per_base_sr_local(n_base_sr_, 0); + for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { + mesh_bins_per_base_sr_local[sr_key.base_source_region_id] ++; + } + + int local_new_sr_discovered = 0; + if (domain->discovered_source_regions_.size() > 0) { + local_new_sr_discovered = 1; + } + int global_new_sr_discovered = 0; + // MPI_Allreduce(&local_new_sr_discovered, &global_new_sr_discovered, 1, MPI_INT, MPI_MAX, mpi::intracomm); + MPI_Allreduce(&local_new_sr_discovered, &global_new_sr_discovered, 1, MPI_INT, MPI_MAX, mpi::intracomm); + + //TODO: Is that check worth it? + if (global_new_sr_discovered > 0) { + // Share mesh_bins_per_base_sr_ across all ranks + MPI_Allreduce(MPI_IN_PLACE, mesh_bins_per_base_sr_local.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + // MPI_Allreduce(mesh_bins_per_base_sr_local.data(), mesh_bins_per_base_sr_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + #pragma omp parallel for + for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + mesh_bins_per_base_sr_[bsr] += mesh_bins_per_base_sr_local[bsr]; + } + } + + // if(mpi::master){ + // printf("RANK: %d, Number of base_source_regions: %lu\n", mpi::rank, n_base_sr_); + // uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); + // uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); + // uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); + // printf("Sum of base_source_region_RT_tot_: %lu\n", sum_bsr_RT); + // printf("Sum of mesh_bin_RT_tot_: %lu\n", sum_mb_RT); + // printf("Sum of mesh bins: %lu\n", sum_mesh_bins); + // } + + + // calculate ray tracing cost per base source region + #pragma omp parallel for + for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + if (mesh_bins_per_base_sr_[bsr] > 0) { + ray_tracing_cost_[bsr] = static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr]) / + mesh_bins_per_base_sr_[bsr]; //TODO: weighted with volume? + } else { + ray_tracing_cost_[bsr] = 0.0; + } + // if (mpi::master){ + // printf("Base source region %lu: Mesh bins %lu, bsrRT %lu, mbRT: %lu, RT cost %f\n", bsr, mesh_bins_per_base_sr_[bsr], num_base_source_region_RT_tot_[bsr], num_mesh_bin_RT_tot_[bsr], ray_tracing_cost_[bsr]); + // } + } - // Add number of hits for each source region by going through all exisiting source regions. - #pragma omp parallel for reduction(+ : n_hits_rank) + // Accumulate load in known source regions + double load = 0.0; + #pragma omp parallel for reduction(+ : load) for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { - n_hits_rank += domain->source_regions_.n_hits(sr); + SourceRegionKey sr_key = domain->source_regions_.key(sr); + uint64_t base_sr = sr_key.base_source_region_id; + double load_sr = C1 * domain->source_regions_.n_hits(sr) * negroups_ + C2 * ray_tracing_cost_[base_sr]; + load += load_sr; } - // Add newly discovered source region hits. + // Add load of newly discovered source regions. + double load_sr; for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { - n_hits_rank += sr.scalars_.n_hits_; + uint64_t base_sr = sr_key.base_source_region_id; + load_sr = C1 * sr.scalars_.n_hits_ * negroups_ + C2 * ray_tracing_cost_[base_sr]; + load += load_sr; + // n_hits_rank += sr.scalars_.n_hits_; } //TODO: Temporary print-outs - // if (mpi::master) { - // printf("Load distribution: "); - // } + if (mpi::master) { + printf("Load distribution: "); + } // Calculate rank load based on number of source region hits - uint64_t n_hits_total = 0; - MPI_Allreduce(&n_hits_rank, &n_hits_total, 1, MPI_INT64_T, MPI_SUM, mpi::intracomm); - double load = (n_hits_rank/static_cast(n_hits_total)); - n_hits_sum_ = n_hits_total; + // uint64_t n_hits_total = 0; + double load_total = 0.0; + MPI_Allreduce(&load, &load_total, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + load = load / load_total; //TODO: Should load actually be fractional? + total_load_ = load_total; + + // n_hits_sum_ = load_total; // TODO: needs renaming + // MPI_Allreduce(&n_hits_rank, &n_hits_total, 1, MPI_INT64_T, MPI_SUM, mpi::intracomm); + // double load = (n_hits_rank/static_cast(n_hits_total)); + // n_hits_sum_ = n_hits_total; //TODO: This needs updating + + + //TODO: Temporary print-outs // if(mpi::master){ @@ -616,32 +732,51 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th // } // Communicate load across ranks + MPI_Allgather(&load, 1, MPI_DOUBLE, rank_load_.data(), 1, MPI_DOUBLE, mpi::intracomm); + + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // double bcast_load = 0.0; + // if (rank == mpi::rank) { + // bcast_load = load; + // } + // MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); + // rank_load_[rank] = bcast_load; + // //TODO: Temporary print-outs + // // if (mpi::master) { + // // printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); + // // } + // } for (int rank = 0; rank < mpi::n_procs; rank++) { - double bcast_load = 0.0; - if (rank == mpi::rank) { - bcast_load = load; + // TODO: Temporary print-outs + if (mpi::master) { + printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); } - MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); - rank_load_[rank] = bcast_load; - //TODO: Temporary print-outs - // if (mpi::master) { - // printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); - // } } //TODO: Temporary print-outs - // if (mpi::master) { - // printf("\n"); - // } + if (mpi::master) { + printf("\n"); + } // Calculate imbalance - // vector imbalance_per_rank(mpi::n_procs, 0.0); + // double max_imbalance = 0.0; // for (int rank = 0; rank < mpi::n_procs; rank++) { - // imbalance_per_rank[rank] = std::abs(rank_load_[rank] - target_load_) / target_load_; + // double imbalance = std::abs(rank_load_[rank] - target_load_)/ target_load_; + // if (imbalance > max_imbalance){ + // max_imbalance = imbalance; + // } + // } + + // max_imbalance_ = max_imbalance; + // if (mpi::master){ + // printf("Current max. load imbalance: %.2f%% \n", max_imbalance_ * 100.0); // } - // max_imbalance_ = *std::max_element(imbalance_per_rank.begin(), imbalance_per_rank.end()); + double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); + // double avg_load = total_load_/mpi::n_procs; double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; max_imbalance_ = (max_load - avg_load) / avg_load; + if (mpi::master){printf("Max load %f, avg load %f \n", max_load, avg_load);} + } void DecompositionMap::balance_load(FlatSourceDomain* domain){ @@ -651,6 +786,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ int max_iterations = 200; double max_imbalance = max_imbalance_; + // double imbalance; int it_outer = 0; double adaptation_factor = 1; //0.5 //0.1; @@ -681,7 +817,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ //TODO: temporary - // if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); + if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); // Optimise rank load rank by rank // for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -710,7 +846,16 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0) / mpi::n_procs; + // double avg_load = total_load_ / mpi::n_procs; max_imbalance = (max_load - avg_load) / avg_load; + // imbalance = 0.0; + // max_imbalance = 0.0; + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // imbalance = std::abs(rank_load_[rank] - target_load_)/ target_load_; + // if (imbalance > max_imbalance){ + // max_imbalance = imbalance; + // } + // } // max_imbalance = 0.0; // for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -817,26 +962,30 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks){ - vector n_hits(mpi::n_procs, 0); + // vector n_hits(mpi::n_procs, 0); + vector load(mpi::n_procs, 0); // Add up source region hits to respective rank depending of position of centroid of each source region #pragma omp parallel { // number of hits per thread - vector local_hits(mpi::n_procs, 0); + // vector local_hits(mpi::n_procs, 0); + vector local_load(mpi::n_procs, 0); #pragma omp for for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { Position centroid = domain->source_regions_.centroid(sr); int owner = find_closest_rank(centroid, check_all_ranks); - local_hits[owner] += domain->source_regions_.n_hits(sr); + // local_hits[owner] += domain->source_regions_.n_hits(sr); + local_load[owner] += C1 * domain->source_regions_.n_hits(sr) * negroups_ + C2 * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]; } // Combine results from different threads #pragma omp critical (combining_hits) { for (int i = 0; i < mpi::n_procs; i++) { - n_hits[i] += local_hits[i]; + // n_hits[i] += local_hits[i]; + load[i] += local_load[i]; } } } @@ -858,10 +1007,12 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_rank // } // } // Accumulate hits across all ranks - MPI_Allreduce(MPI_IN_PLACE, n_hits.data(), mpi::n_procs, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + // MPI_Allreduce(MPI_IN_PLACE, n_hits.data(), mpi::n_procs, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + MPI_Allreduce(MPI_IN_PLACE, load.data(), mpi::n_procs, MPI_DOUBLE, MPI_SUM, mpi::intracomm); for (int rank = 0; rank < mpi::n_procs; rank++){ - rank_load_[rank] = (n_hits[rank]/static_cast(n_hits_sum_)); + // rank_load_[rank] = (n_hits[rank]/static_cast(n_hits_sum_)); + rank_load_[rank] = (load[rank]/total_load_); } } diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 13f92912ad3..b0f423656bc 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -10,6 +10,7 @@ #include "openmc/settings.h" #include "openmc/simulation.h" #include "openmc/timer.h" //TODO: temporary? +#include "openmc/cell.h" #include "openmc/distribution_spatial.h" #include "openmc/random_dist.h" @@ -296,6 +297,19 @@ void RandomRay::event_advance_ray() boundary() = distance_to_boundary(*this); double distance = boundary().distance(); + //TODO: Is that good location? + if (mpi::n_procs > 1) { + // Determine source region index etc. //TODO: This is repeated in attenuate_flux + int i_cell = lowest_coord().cell(); + // The base source region is the spatial region index + int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); + for (int i = 0; i < n_coord(); i++) { + // const auto& coord {coord(i)}; + Cell& c {*model::cells[coord(i).cell()]}; + mpi::decomp_map.num_base_source_region_RT_batch_[sr] += c.surfaces().size(); //TODO: Is this correct value for "surfaces" + } + } + if (distance < 0.0) { mark_as_lost("Negative transport distance detected for particle " + std::to_string(id())); @@ -408,6 +422,9 @@ void RandomRay::attenuate_flux(double distance, double offset) mesh_bins_.resize(0); mesh_fractional_lengths_.resize(0); mesh->bins_crossed(start, end, u(), mesh_bins_, mesh_fractional_lengths_); + if (mpi::n_procs > 1) { + mpi::decomp_map.num_mesh_bin_RT_batch_[sr] += 1; + } // if (simulation::current_batch == 25) { // printf("Start: %f, %f, %f \n", start.x, start.y, start.z); diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 35f66c2b49e..7ff8c42bad3 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -519,6 +519,8 @@ void RandomRaySimulation::simulate() // } // Balance load between ranks by changing weights of Voronoi cells + // if (mpi::master){printf("Max imbalance %f", mpi::decomp_map.max_imbalance_);} + if (mpi::n_procs > 1 && mpi::decomp_map.load_balanced() == false){ simulation::time_load_balance.start(); mpi::decomp_map.balance_load(domain_.get()); @@ -589,7 +591,7 @@ void RandomRaySimulation::output_simulation_results() const if (model::plots.size() > 0) { if (mpi::n_procs > 1){ - // printf("RANK: %d start vtk decomp output\n", mpi::rank); + // printf("RANK: %d start vtk decomp output\n", mpi:Co:rank); // MPI_Barrier(mpi::intracomm); domain_->output_to_vtk_decomp(); } else { From 95333807b42ca6480ad656909442f3bcd39ea520 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 23 Oct 2025 16:59:16 +0100 Subject: [PATCH 20/48] Create accessor for number of cell surfaces --- include/openmc/cell.h | 9 +++++++++ src/geometry.cpp | 2 ++ src/random_ray/random_ray.cpp | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/openmc/cell.h b/include/openmc/cell.h index e9fcfe3911b..243ffdb863f 100644 --- a/include/openmc/cell.h +++ b/include/openmc/cell.h @@ -93,6 +93,10 @@ class Region { //! Get a vector containing all the surfaces in the region expression vector surfaces() const; + //! Get size of surfaces + int n_surfaces() const {return expression_.size(); } + + //---------------------------------------------------------------------------- // Accessors @@ -204,6 +208,9 @@ class Cell { //! Get a vector of surfaces in the cell virtual vector surfaces() const { return vector(); } + //! Get the number of surfaces in the cell + virtual int n_surfaces() const {return 0; } + //! Check if the cell region expression is simple virtual bool is_simple() const { return true; } @@ -371,6 +378,8 @@ class CSGCell : public Cell { // Methods vector surfaces() const override { return region_.surfaces(); } + int n_surfaces() const override {return region_.n_surfaces(); } + std::pair distance(Position r, Direction u, int32_t on_surface, GeometryState* p) const override { diff --git a/src/geometry.cpp b/src/geometry.cpp index df485089163..b80646d05c6 100644 --- a/src/geometry.cpp +++ b/src/geometry.cpp @@ -12,6 +12,8 @@ #include "openmc/simulation.h" #include "openmc/string_utils.h" #include "openmc/surface.h" +// #include "openmc/random_ray/decomposition_map.h" +// #include "openmc/message_passing.h" namespace openmc { diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index b0f423656bc..f61ee79120d 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -306,7 +306,7 @@ void RandomRay::event_advance_ray() for (int i = 0; i < n_coord(); i++) { // const auto& coord {coord(i)}; Cell& c {*model::cells[coord(i).cell()]}; - mpi::decomp_map.num_base_source_region_RT_batch_[sr] += c.surfaces().size(); //TODO: Is this correct value for "surfaces" + mpi::decomp_map.num_base_source_region_RT_batch_[sr] += c.n_surfaces(); //TODO: Is this correct value for "surfaces" } } From dbf0149a10d81f08bede95c4786e52fc1dedb4d1 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 23 Oct 2025 21:33:04 +0100 Subject: [PATCH 21/48] Add load plotting, adjust mesh bin RT counters --- src/random_ray/decomposition_map.cpp | 34 +++--- src/random_ray/flat_source_domain.cpp | 159 ++++++++++++++++++++++++++ src/random_ray/random_ray.cpp | 6 +- 3 files changed, 179 insertions(+), 20 deletions(-) diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 9ecb6b0d3d7..75851bbe798 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -617,14 +617,14 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th MPI_Allreduce(MPI_IN_PLACE, num_mesh_bin_RT_batch_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); // MPI_Allreduce(num_mesh_bin_RT_batch_.data(), num_mesh_bin_RT_tot_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - // if(mpi::master){ - // uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), uint64_t{0}); - // uint64_t sum_bsr_RT_tot = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); - // uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), uint64_t{0}); - // printf("Sum of base_source_region_RT_batch_ before: %lu\n", sum_bsr_RT_tot); - // printf("Sum of base_source_region_RT_batch_ new: %lu\n", sum_bsr_RT); - // printf("Sum of mesh_bin_RT_batch_: %lu\n", sum_mb_RT); - // } + if(mpi::master){ + uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), uint64_t{0}); + uint64_t sum_bsr_RT_tot = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); + uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), uint64_t{0}); + printf("Sum of base_source_region_RT_batch_ before: %lu\n", sum_bsr_RT_tot); + printf("Sum of base_source_region_RT_batch_ new: %lu\n", sum_bsr_RT); + printf("Sum of mesh_bin_RT_batch_: %lu\n", sum_mb_RT); + } // Add to total #pragma omp parallel for @@ -662,15 +662,15 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th } } - // if(mpi::master){ - // printf("RANK: %d, Number of base_source_regions: %lu\n", mpi::rank, n_base_sr_); - // uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); - // uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); - // uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); - // printf("Sum of base_source_region_RT_tot_: %lu\n", sum_bsr_RT); - // printf("Sum of mesh_bin_RT_tot_: %lu\n", sum_mb_RT); - // printf("Sum of mesh bins: %lu\n", sum_mesh_bins); - // } + if(mpi::master){ + printf("RANK: %d, Number of base_source_regions: %lu\n", mpi::rank, n_base_sr_); + uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); + uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); + uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); + printf("Sum of base_source_region_RT_tot_: %lu\n", sum_bsr_RT); + printf("Sum of mesh_bin_RT_tot_: %lu\n", sum_mb_RT); + printf("Sum of mesh bins: %lu\n", sum_mesh_bins); + } // calculate ray tracing cost per base source region diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index c216715e1fc..3df4afa3a38 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -1325,6 +1325,165 @@ void FlatSourceDomain::output_to_vtk_decomp() const fill(vector_out_float.begin(), vector_out_float.end(), 0.0); + // Plot calculated load + for (int voxel_id : my_voxel_ids) { + float value = mpi::decomp_map.rank_load_[mpi::rank]; + vector_out_float[voxel_id] = value; + } + + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } + + if (mpi::master){ + std::fprintf(plot, "SCALARS calculated_load float\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + + for (float value : vector_out_float) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + + // Plot actual load + float transport_time = (simulation::time_transport.elapsed() - simulation::time_ray_buffering.elapsed()); + float total_transport_time = 0.0; + + MPI_Allreduce(&transport_time, &total_transport_time, 1, MPI_FLOAT, MPI_SUM, mpi::intracomm); + + for (int voxel_id : my_voxel_ids) { + float value = transport_time/total_transport_time; + vector_out_float[voxel_id] = value; + } + + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } + + if (mpi::master){ + std::fprintf(plot, "SCALARS measured_load float\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + + for (float value : vector_out_float) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + + fill(vector_out_float.begin(), vector_out_float.end(), 0.0); + + // Plot expensive ray tracing + double sum_bsr_RT = 0; + + for (int i = 0; i < mpi::decomp_map.n_base_sr_; i++) { + sum_bsr_RT += static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[i])/mpi::decomp_map.mesh_bins_per_base_sr_[i]; + } + + // uint64_t sum_bsr_RT = std::accumulate(mpi::decomp_map.num_base_source_region_RT_tot_.begin(), mpi::decomp_map.num_base_source_region_RT_tot_.end(), uint64_t{0}); + + for (int voxel_id : my_voxel_ids) { + int fsr = voxel_indices[voxel_id]; + float value = 0; + if (fsr >= 0) { + SourceRegionKey sr_key = source_regions_.key(fsr); + // value = static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[sr_key.base_source_region_id])/(sum_bsr_RT * mpi::decomp_map.mesh_bins_per_base_sr_[sr_key.base_source_region_id]); + value = static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[sr_key.base_source_region_id])/(mpi::decomp_map.mesh_bins_per_base_sr_[sr_key.base_source_region_id]); + // value = static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[sr_key.base_source_region_id])/(sum_bsr_RT); + // if (mpi::master) printf("num_base_source_region_RT_tot_[1] = %lu\n", mpi::decomp_map.num_base_source_region_RT_tot_[1]); + // if (mpi::master) printf("num_base_source_region_RT_tot_[%lu] = %lu, sum_bsr_RT = %lu, value = %f\n", sr_key.base_source_region_id, mpi::decomp_map.num_base_source_region_RT_tot_[sr_key.base_source_region_id], sum_bsr_RT, value); + } + vector_out_float[voxel_id] = value; // To avoid -1 for void (MPI_SUM) + } + + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } + + if (mpi::master){ + std::fprintf(plot, "SCALARS ExpensiveRT float\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + + for (float value : vector_out_float) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + + fill(vector_out_float.begin(), vector_out_float.end(), 0.0); + + // Plot cheap ray tracing + double sum_mb_RT = 0.0; + + for (int i = 0; i < mpi::decomp_map.n_base_sr_; i++) { + sum_mb_RT += static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[i])/mpi::decomp_map.mesh_bins_per_base_sr_[i]; + } + + // uint64_t sum_mb_RT = std::accumulate(mpi::decomp_map.num_mesh_bin_RT_tot_.begin(), mpi::decomp_map.num_mesh_bin_RT_tot_.end(), uint64_t{0}); + + for (int voxel_id : my_voxel_ids) { + int fsr = voxel_indices[voxel_id]; + float cheapRT = 0; + if (fsr >= 0) { + SourceRegionKey sr_key = source_regions_.key(fsr); + // cheapRT = static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[sr_key.base_source_region_id])/(sum_mb_RT * mpi::decomp_map.mesh_bins_per_base_sr_[sr_key.base_source_region_id]); + cheapRT = static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[sr_key.base_source_region_id])/(mpi::decomp_map.mesh_bins_per_base_sr_[sr_key.base_source_region_id]); + // cheapRT = static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[sr_key.base_source_region_id])/sum_mb_RT; + } + vector_out_float[voxel_id] = cheapRT; // To avoid -1 for void (MPI_SUM) + } + + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } + + if (mpi::master){ + std::fprintf(plot, "SCALARS CheapRT float\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + + for (float value : vector_out_float) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } + } + + fill(vector_out_float.begin(), vector_out_float.end(), 0.0); + + // Plot number of hits + for (int voxel_id : my_voxel_ids) { + int fsr = voxel_indices[voxel_id]; + int n_hits = 0; + if (fsr >= 0) { + n_hits = source_regions_.n_hits(fsr); + } + vector_out_int[voxel_id] = n_hits; + } + + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, vector_out_int.data(), vector_size, MPI_INT, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(vector_out_int.data(), nullptr, vector_size, MPI_INT, MPI_SUM, 0, mpi::intracomm); + } + + if (mpi::master){ + std::fprintf(plot, "SCALARS n_hits int\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); + + for (int value : vector_out_int) { + int print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(int), 1, plot); + } + } + + fill(vector_out_int.begin(), vector_out_int.end(), 0); + // Plot fission source if (settings::run_mode == RunMode::EIGENVALUE) { for (int voxel_id : my_voxel_ids) { diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index f61ee79120d..7fe84073db1 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -422,9 +422,6 @@ void RandomRay::attenuate_flux(double distance, double offset) mesh_bins_.resize(0); mesh_fractional_lengths_.resize(0); mesh->bins_crossed(start, end, u(), mesh_bins_, mesh_fractional_lengths_); - if (mpi::n_procs > 1) { - mpi::decomp_map.num_mesh_bin_RT_batch_[sr] += 1; - } // if (simulation::current_batch == 25) { // printf("Start: %f, %f, %f \n", start.x, start.y, start.z); @@ -435,6 +432,9 @@ void RandomRay::attenuate_flux(double distance, double offset) // Loop over all mesh bins and attenuate flux for (int b = 0; b < mesh_bins_.size(); b++) { + if (mpi::n_procs > 1) { + mpi::decomp_map.num_mesh_bin_RT_batch_[sr] += 1; + } double physical_length = reduced_distance * mesh_fractional_lengths_[b]; attenuate_flux_inner( physical_length, sr, mesh_bins_[b], start); From 27f3d3ee52568c979943138ec0099e6e0c9591d2 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Fri, 24 Oct 2025 20:07:32 +0100 Subject: [PATCH 22/48] Wipe RT counts after each batch, weight w/ volume --- include/openmc/random_ray/decomposition_map.h | 4 +- src/random_ray/decomposition_map.cpp | 143 ++++++++++++------ src/random_ray/flat_source_domain.cpp | 4 + src/random_ray/random_ray_simulation.cpp | 29 ++++ 4 files changed, 134 insertions(+), 46 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index f70ae9fcfdb..03eafefccad 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -82,6 +82,7 @@ class DecompositionMap { vector num_mesh_bin_RT_batch_; // number of mesh bin ray trace operations per base source region for current batch vector mesh_bins_per_base_sr_; // number of mesh bin ray trace operations per base source region for current batch vector ray_tracing_cost_; + vector volume_base_sr_; // coefficients for load calculation double C1 = 1.0; @@ -95,6 +96,7 @@ class DecompositionMap { int cnt_optimizations_total_ = 0; double max_imbalance_ = 0.0; //TODO: rename in max_load_imbalance_ uint64_t n_base_sr_ = 0; + int negroups_; private: //---------------------------------------------------------------------------- @@ -102,7 +104,7 @@ class DecompositionMap { SpatialBox* spatial_box_ = nullptr; vector grid_points_; //TODO: This can be local variable when Voronoi centres ae established int grid_points_per_rank_{125}; // default 5x5x5 grid points per rank - int negroups_; + // int negroups_; // uint64_t n_hits_sum_; double total_load_; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 75851bbe798..5def23397a6 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -55,6 +55,7 @@ void DecompositionMap::initialize(){ num_mesh_bin_RT_batch_.resize(n_base_sr_, 0); mesh_bins_per_base_sr_.resize(n_base_sr_, 0); // at least 1 mesh bin (no mesh) ray_tracing_cost_.resize(n_base_sr_); + volume_base_sr_.resize(n_base_sr_, 0.0); } void DecompositionMap::generate_rank_centers(){ @@ -422,7 +423,8 @@ void DecompositionMap::exchange_sr_info(ParallelMap mesh_bins_per_base_sr_local(n_base_sr_, 0); for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { - mesh_bins_per_base_sr_local[sr_key.base_source_region_id] ++; + mesh_bins_per_base_sr_[sr_key.base_source_region_id] ++; + volume_base_sr_[sr_key.base_source_region_id] += sr.scalars_.volume_; + // mesh_bins_per_base_sr_local[sr_key.base_source_region_id] ++; } - int local_new_sr_discovered = 0; - if (domain->discovered_source_regions_.size() > 0) { - local_new_sr_discovered = 1; + + for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + SourceRegionKey sr_key = domain->source_regions_.key(sr); + uint64_t base_sr = sr_key.base_source_region_id; + volume_base_sr_[base_sr] += domain->source_regions_.volume_t(sr); } - int global_new_sr_discovered = 0; + + // int local_new_sr_discovered = 0; + // if (domain->discovered_source_regions_.size() > 0) { + // local_new_sr_discovered = 1; + // } + // int global_new_sr_discovered = 0; + // // MPI_Allreduce(&local_new_sr_discovered, &global_new_sr_discovered, 1, MPI_INT, MPI_MAX, mpi::intracomm); // MPI_Allreduce(&local_new_sr_discovered, &global_new_sr_discovered, 1, MPI_INT, MPI_MAX, mpi::intracomm); - MPI_Allreduce(&local_new_sr_discovered, &global_new_sr_discovered, 1, MPI_INT, MPI_MAX, mpi::intracomm); - - //TODO: Is that check worth it? - if (global_new_sr_discovered > 0) { - // Share mesh_bins_per_base_sr_ across all ranks - MPI_Allreduce(MPI_IN_PLACE, mesh_bins_per_base_sr_local.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - // MPI_Allreduce(mesh_bins_per_base_sr_local.data(), mesh_bins_per_base_sr_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - #pragma omp parallel for - for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { - mesh_bins_per_base_sr_[bsr] += mesh_bins_per_base_sr_local[bsr]; - } - } + + // //TODO: Is that check worth it? + // if (global_new_sr_discovered > 0) { + // // Share mesh_bins_per_base_sr_ across all ranks + // MPI_Allreduce(MPI_IN_PLACE, mesh_bins_per_base_sr_local.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + // // MPI_Allreduce(mesh_bins_per_base_sr_local.data(), mesh_bins_per_base_sr_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + // #pragma omp parallel for + // for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + // mesh_bins_per_base_sr_[bsr] += mesh_bins_per_base_sr_local[bsr]; + // } + // } - if(mpi::master){ - printf("RANK: %d, Number of base_source_regions: %lu\n", mpi::rank, n_base_sr_); - uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); - uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); - uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); - printf("Sum of base_source_region_RT_tot_: %lu\n", sum_bsr_RT); - printf("Sum of mesh_bin_RT_tot_: %lu\n", sum_mb_RT); - printf("Sum of mesh bins: %lu\n", sum_mesh_bins); - } + // if(mpi::master){ + // printf("RANK: %d, Number of base_source_regions: %lu\n", mpi::rank, n_base_sr_); + // // uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); + // // uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); + // uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); + // // printf("Sum of base_source_region_RT_tot_: %lu\n", sum_bsr_RT); + // // printf("Sum of mesh_bin_RT_tot_: %lu\n", sum_mb_RT); + // printf("Sum of mesh bins: %lu\n", sum_mesh_bins); + // } // calculate ray tracing cost per base source region + //TODO: Add check if volume is zero #pragma omp parallel for for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + // volume_base_sr_[bsr] *= volume_normalization_factor; if (mesh_bins_per_base_sr_[bsr] > 0) { - ray_tracing_cost_[bsr] = static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr]) / - mesh_bins_per_base_sr_[bsr]; //TODO: weighted with volume? + // ray_tracing_cost_[bsr] = (1/volume_base_sr_[bsr])*(static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr]) / + // mesh_bins_per_base_sr_[bsr]); //TODO: weighted with volume? + ray_tracing_cost_[bsr] = static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr])/volume_base_sr_[bsr]; } else { ray_tracing_cost_[bsr] = 0.0; } @@ -693,7 +719,8 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { SourceRegionKey sr_key = domain->source_regions_.key(sr); uint64_t base_sr = sr_key.base_source_region_id; - double load_sr = C1 * domain->source_regions_.n_hits(sr) * negroups_ + C2 * ray_tracing_cost_[base_sr]; + double volume_sr = domain->source_regions_.volume_t(sr); + double load_sr = C1 * domain->source_regions_.n_hits(sr) * negroups_ + C2 * volume_sr * ray_tracing_cost_[base_sr]; load += load_sr; } @@ -701,10 +728,31 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th double load_sr; for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { uint64_t base_sr = sr_key.base_source_region_id; - load_sr = C1 * sr.scalars_.n_hits_ * negroups_ + C2 * ray_tracing_cost_[base_sr]; + double volume_sr = sr.scalars_.volume_; + load_sr = C1 * sr.scalars_.n_hits_ * negroups_ + C2 * volume_sr * ray_tracing_cost_[base_sr]; load += load_sr; // n_hits_rank += sr.scalars_.n_hits_; } + + // if (mpi::master){ + // vector volumes(n_base_sr_, 0.0); + + // for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + // SourceRegionKey sr_key = domain->source_regions_.key(sr); + // uint64_t base_sr = sr_key.base_source_region_id; + // volumes[base_sr] += domain->source_regions_.volume_t(sr)/volume_base_sr_[base_sr]; + // } + + // for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { + // uint64_t base_sr = sr_key.base_source_region_id; + // double volume_sr = sr.scalars_.volume_; + // volumes[base_sr] += volume_sr/volume_base_sr_[base_sr]; + // } + + // for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + // printf("Base source region %lu: Volume total %f, \n", bsr, volumes[bsr]); + // } + // } //TODO: Temporary print-outs if (mpi::master) { @@ -777,6 +825,10 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th max_imbalance_ = (max_load - avg_load) / avg_load; if (mpi::master){printf("Max load %f, avg load %f \n", max_load, avg_load);} + // Reset batch-wise counters + fill(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), 0); + fill(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), 0); + } void DecompositionMap::balance_load(FlatSourceDomain* domain){ @@ -977,7 +1029,8 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_rank Position centroid = domain->source_regions_.centroid(sr); int owner = find_closest_rank(centroid, check_all_ranks); // local_hits[owner] += domain->source_regions_.n_hits(sr); - local_load[owner] += C1 * domain->source_regions_.n_hits(sr) * negroups_ + C2 * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]; + double volume_sr = domain->source_regions_.volume_t(sr); + local_load[owner] += C1 * domain->source_regions_.n_hits(sr) * negroups_ + C2 * volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]; } // Combine results from different threads diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 3df4afa3a38..cfc28aef4bb 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -1347,12 +1347,16 @@ void FlatSourceDomain::output_to_vtk_decomp() const } } + fill(vector_out_float.begin(), vector_out_float.end(), 0.0); + // Plot actual load float transport_time = (simulation::time_transport.elapsed() - simulation::time_ray_buffering.elapsed()); float total_transport_time = 0.0; MPI_Allreduce(&transport_time, &total_transport_time, 1, MPI_FLOAT, MPI_SUM, mpi::intracomm); + // printf("RANK %d: transport_time = %f %f\n", mpi::rank, transport_time, total_transport_time); + for (int voxel_id : my_voxel_ids) { float value = transport_time/total_transport_time; vector_out_float[voxel_id] = value; diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 7ff8c42bad3..caab307eb56 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -96,6 +96,35 @@ void openmc_run_random_ray() // Finalize OpenMC openmc_simulation_finalize(); + // //expensive ray tracing + // double sum_bsr_RT = 0; + // for (int64_t sr = 0; sr < sim.domain()->n_source_regions(); sr++) { + // SourceRegionKey sr_key = sim.domain()->source_regions_.key(sr); + // uint64_t base_sr = sr_key.base_source_region_id; + // sum_bsr_RT += static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[base_sr])/mpi::decomp_map.mesh_bins_per_base_sr_[base_sr]; + // } + + // // cheap ray tracing + // double sum_mb_RT = 0; + // for (int64_t sr = 0; sr < sim.domain()->n_source_regions(); sr++) { + // SourceRegionKey sr_key = sim.domain()->source_regions_.key(sr); + // uint64_t base_sr = sr_key.base_source_region_id; + // sum_mb_RT += static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[base_sr])/mpi::decomp_map.mesh_bins_per_base_sr_[base_sr]; + // } + + // // number of hits + // uint64_t sum_hits = 0; + // for (int64_t sr = 0; sr < sim.domain()->n_source_regions(); sr++) { + // sum_hits += sim.domain()->source_regions_.n_hits(sr) * mpi::decomp_map.negroups_; + // } + + double time_transport_total = + (simulation::time_transport.elapsed() - simulation::time_ray_buffering.elapsed()); + double time_sum = time_transport_total + simulation::time_mpi_imbalance.elapsed(); + + // printf("RANK%d %f %f %f %f %f %lu\n", mpi::rank, time_transport_total, simulation::time_mpi_imbalance.elapsed(), time_sum, sum_bsr_RT, sum_mb_RT, sum_hits); + printf("RANK%d %f %f %f\n", mpi::rank, time_transport_total, simulation::time_mpi_imbalance.elapsed(), time_sum); + // Output all simulation results sim.output_simulation_results(); } From 182989d4b8fd65d3940696e58bced96e6188d4f4 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Fri, 24 Oct 2025 22:44:23 +0100 Subject: [PATCH 23/48] Correct load calculation formula --- include/openmc/random_ray/decomposition_map.h | 3 +- src/random_ray/decomposition_map.cpp | 54 ++++++++++--------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 03eafefccad..c0f1d197ded 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -86,7 +86,8 @@ class DecompositionMap { // coefficients for load calculation double C1 = 1.0; - double C2 = 1.0; + double C2 = 0.1; + double C3 = 0.1; vector rank_load_; vector rank_weights_; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 5def23397a6..001ba3d86b4 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -424,7 +424,7 @@ void DecompositionMap::exchange_sr_info(ParallelMapsource_regions_.key(sr); uint64_t base_sr = sr_key.base_source_region_id; volume_base_sr_[base_sr] += domain->source_regions_.volume_t(sr); + volume_base_sr_[base_sr] += domain->source_regions_.volume(sr); } // int local_new_sr_discovered = 0; @@ -701,10 +702,14 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th #pragma omp parallel for for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { // volume_base_sr_[bsr] *= volume_normalization_factor; - if (mesh_bins_per_base_sr_[bsr] > 0) { - // ray_tracing_cost_[bsr] = (1/volume_base_sr_[bsr])*(static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr]) / + if (volume_base_sr_[bsr] > 0.0) { + // if (mesh_bins_per_base_sr_[bsr] > 0) { + // ray_tracing_cost_[bsr] = (static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr]) / // mesh_bins_per_base_sr_[bsr]); //TODO: weighted with volume? - ray_tracing_cost_[bsr] = static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr])/volume_base_sr_[bsr]; + if (mpi::master){ + printf("Base source region %lu: Volume %f, Mesh bins %lu, bsrRT %lu, mbRT: %lu\n", bsr, volume_base_sr_[bsr], mesh_bins_per_base_sr_[bsr], num_base_source_region_RT_tot_[bsr], num_mesh_bin_RT_tot_[bsr]); + } + ray_tracing_cost_[bsr] = (C2 * static_cast(num_base_source_region_RT_tot_[bsr]) + C3 * static_cast(num_mesh_bin_RT_tot_[bsr]))/volume_base_sr_[bsr]; } else { ray_tracing_cost_[bsr] = 0.0; } @@ -720,7 +725,8 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th SourceRegionKey sr_key = domain->source_regions_.key(sr); uint64_t base_sr = sr_key.base_source_region_id; double volume_sr = domain->source_regions_.volume_t(sr); - double load_sr = C1 * domain->source_regions_.n_hits(sr) * negroups_ + C2 * volume_sr * ray_tracing_cost_[base_sr]; + volume_sr += domain->source_regions_.volume(sr); + double load_sr = C1 * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; load += load_sr; } @@ -729,30 +735,30 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { uint64_t base_sr = sr_key.base_source_region_id; double volume_sr = sr.scalars_.volume_; - load_sr = C1 * sr.scalars_.n_hits_ * negroups_ + C2 * volume_sr * ray_tracing_cost_[base_sr]; + load_sr = C1 * (sr.scalars_.n_hits_/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; load += load_sr; // n_hits_rank += sr.scalars_.n_hits_; } - // if (mpi::master){ - // vector volumes(n_base_sr_, 0.0); + if (mpi::master){ + vector volumes(n_base_sr_, 0.0); - // for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { - // SourceRegionKey sr_key = domain->source_regions_.key(sr); - // uint64_t base_sr = sr_key.base_source_region_id; - // volumes[base_sr] += domain->source_regions_.volume_t(sr)/volume_base_sr_[base_sr]; - // } + for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + SourceRegionKey sr_key = domain->source_regions_.key(sr); + uint64_t base_sr = sr_key.base_source_region_id; + volumes[base_sr] += (domain->source_regions_.volume_t(sr)+domain->source_regions_.volume(sr))/volume_base_sr_[base_sr]; + } - // for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { - // uint64_t base_sr = sr_key.base_source_region_id; - // double volume_sr = sr.scalars_.volume_; - // volumes[base_sr] += volume_sr/volume_base_sr_[base_sr]; - // } + for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { + uint64_t base_sr = sr_key.base_source_region_id; + double volume_sr = sr.scalars_.volume_; + volumes[base_sr] += volume_sr/volume_base_sr_[base_sr]; + } - // for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { - // printf("Base source region %lu: Volume total %f, \n", bsr, volumes[bsr]); - // } - // } + for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + printf("Base source region %lu: Volume total %f, Ray tracing cost %f, \n", bsr, volumes[bsr], ray_tracing_cost_[bsr]); + } + } //TODO: Temporary print-outs if (mpi::master) { @@ -1030,7 +1036,7 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_rank int owner = find_closest_rank(centroid, check_all_ranks); // local_hits[owner] += domain->source_regions_.n_hits(sr); double volume_sr = domain->source_regions_.volume_t(sr); - local_load[owner] += C1 * domain->source_regions_.n_hits(sr) * negroups_ + C2 * volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]; + local_load[owner] += C1 * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]; } // Combine results from different threads From 6c3274f2cf2cc51c76353238874a3baae1b939f7 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 27 Oct 2025 16:59:45 +0000 Subject: [PATCH 24/48] All reduce on intersections, omp for ray unpacking --- include/openmc/random_ray/decomposition_map.h | 6 +- include/openmc/random_ray/random_ray.h | 2 +- src/random_ray/decomposition_map.cpp | 114 ++++++------------ src/random_ray/random_ray.cpp | 2 +- src/random_ray/random_ray_simulation.cpp | 9 +- src/random_ray/ray_bank.cpp | 26 ++-- 6 files changed, 67 insertions(+), 92 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index c0f1d197ded..5411bf186f0 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -85,9 +85,9 @@ class DecompositionMap { vector volume_base_sr_; // coefficients for load calculation - double C1 = 1.0; - double C2 = 0.1; - double C3 = 0.1; + double C1_ = 1.0; + double C2_ = 0.1; + double C3_ = 0.1; vector rank_load_; vector rank_weights_; diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index bcc6da1cb87..b8d1bc2289d 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -68,7 +68,7 @@ class RandomRay : public Particle { SourceRegionHandle& srh, double distance, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); - void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux); + void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector& angular_flux); // void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); uint64_t transport_history_based_single_ray(); SourceSite sample_prng(); diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 001ba3d86b4..f9842b0be46 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -89,10 +89,10 @@ void DecompositionMap::generate_rank_centers(){ for (int rank = 0; rank < mpi::n_procs; rank++) { - if (mpi::master){ - //TODO: temporary - printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); - } + // if (mpi::master){ + // //TODO: temporary + // printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); + // } // Calculate centroid of the cell Position centroid = calculate_centroids(position_sum_per_rank[rank], num_points_per_rank[rank], rank); @@ -137,7 +137,7 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ double volume = domain_length[0] * domain_length[1] * domain_length[2]; //TODO: temporary - printf("Spatial box volume: %f \n", volume); + // printf("Spatial box volume: %f \n", volume); // For each dimension, determine grid points along that direction based on aspect ratio: // domain_length / volume^(1/3) = grid_points_dimension / grid_points_total^(1/3). @@ -178,7 +178,7 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ } //TODO: temporary - printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); + // printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); // Adjust grid points in each dimension to match actual total number of grid points to the number of grid points requested double new_total = grid_points_per_dimension[0] * grid_points_per_dimension[1] * grid_points_per_dimension[2]; @@ -198,7 +198,7 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ } //TODO: temporary - printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); + // printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); // Calculate spacing between grid points in each dimension vector delta_value(3, 0.0); @@ -339,13 +339,12 @@ bool DecompositionMap::any_discovered_source_regions(ParallelMap 0; } @@ -418,19 +417,15 @@ void DecompositionMap::exchange_sr_info(ParallelMap(n_hits_sum_); double load_change = bcast_load / total_load_; rank_load_[sender] -= load_change; rank_load_[receiver] += load_change; @@ -576,8 +571,6 @@ int DecompositionMap::find_closest_rank(Position r, bool test_all_ranks) { double min_distance = INFTY; vector test_ranks; - // test_ranks = mpi::decomp_map.my_neighbors; - if (test_all_ranks){ test_ranks.resize(mpi::n_procs); @@ -589,7 +582,6 @@ int DecompositionMap::find_closest_rank(Position r, bool test_all_ranks) { } // Find closest rank center - // for (int rank = 0; rank < mpi::n_procs; rank++) { for (int rank : test_ranks) { double dist = (r - rank_centers_[rank]).norm(); // Distance function corresponding to weighted power Voronoi diagram. @@ -608,34 +600,30 @@ int DecompositionMap::find_closest_rank(Position r, bool test_all_ranks) { return closest_rank; } -void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: This uses accumulated value, not batch-wise values! +void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ // Reset rank load std::fill(rank_load_.begin(), rank_load_.end(), 0.0); + // Reset volumes, local volumes of base source regions, which might change when source regions change rank ownership std::fill(volume_base_sr_.begin(), volume_base_sr_.end(), 0.0); - - // double volume_normalization_factor = - // 1.0 / (settings::n_particles * RandomRay::distance_active_ * simulation::current_batch); - - // Share number of ray tracing scores per base source region across all ranks // MPI_Allreduce(MPI_IN_PLACE, num_base_source_region_RT_batch_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); // MPI_Allreduce(MPI_IN_PLACE, num_mesh_bin_RT_batch_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - if(mpi::master){ - uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), uint64_t{0}); - uint64_t sum_bsr_RT_tot = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); - uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); - uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), uint64_t{0}); - uint64_t sum_mb_RT_tot = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); - printf("Sum of base_source_region_RT_batch_ before: %lu\n", sum_bsr_RT_tot); - printf("Sum of mesh_bin_RT_batch_ before: %lu\n", sum_mb_RT_tot); - printf("Sum of base_source_region_RT_batch_ new: %lu\n", sum_bsr_RT); - printf("Sum of mesh_bin_RT_batch_ new: %lu\n", sum_mb_RT); - printf("Sum of mesh bins: %lu\n", sum_mesh_bins); - } + // if(mpi::master){ + // uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), uint64_t{0}); + // uint64_t sum_bsr_RT_tot = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); + // uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); + // uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), uint64_t{0}); + // uint64_t sum_mb_RT_tot = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); + // printf("Sum of base_source_region_RT_batch_ before: %lu\n", sum_bsr_RT_tot); + // printf("Sum of mesh_bin_RT_batch_ before: %lu\n", sum_mb_RT_tot); + // printf("Sum of base_source_region_RT_batch_ new: %lu\n", sum_bsr_RT); + // printf("Sum of mesh_bin_RT_batch_ new: %lu\n", sum_mb_RT); + // printf("Sum of mesh bins: %lu\n", sum_mesh_bins); + // } num_base_source_region_RT_tot_ = num_base_source_region_RT_batch_; num_mesh_bin_RT_tot_ = num_mesh_bin_RT_batch_; @@ -654,9 +642,8 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th // Add mesh_bins per base source region for newly discovered source regions vector mesh_bins_per_base_sr_local(n_base_sr_, 0); for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { - mesh_bins_per_base_sr_[sr_key.base_source_region_id] ++; + mesh_bins_per_base_sr_[sr_key.base_source_region_id] ++; //TODO: Remove this, currently still needed for testing volume_base_sr_[sr_key.base_source_region_id] += sr.scalars_.volume_; - // mesh_bins_per_base_sr_local[sr_key.base_source_region_id] ++; } @@ -698,18 +685,16 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th // calculate ray tracing cost per base source region - //TODO: Add check if volume is zero #pragma omp parallel for for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { - // volume_base_sr_[bsr] *= volume_normalization_factor; if (volume_base_sr_[bsr] > 0.0) { // if (mesh_bins_per_base_sr_[bsr] > 0) { // ray_tracing_cost_[bsr] = (static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr]) / // mesh_bins_per_base_sr_[bsr]); //TODO: weighted with volume? - if (mpi::master){ - printf("Base source region %lu: Volume %f, Mesh bins %lu, bsrRT %lu, mbRT: %lu\n", bsr, volume_base_sr_[bsr], mesh_bins_per_base_sr_[bsr], num_base_source_region_RT_tot_[bsr], num_mesh_bin_RT_tot_[bsr]); - } - ray_tracing_cost_[bsr] = (C2 * static_cast(num_base_source_region_RT_tot_[bsr]) + C3 * static_cast(num_mesh_bin_RT_tot_[bsr]))/volume_base_sr_[bsr]; + // if (mpi::master){ + // printf("Base source region %lu: Volume %f, Mesh bins %lu, bsrRT %lu, mbRT: %lu\n", bsr, volume_base_sr_[bsr], mesh_bins_per_base_sr_[bsr], num_base_source_region_RT_tot_[bsr], num_mesh_bin_RT_tot_[bsr]); + // } + ray_tracing_cost_[bsr] = (C2_ * static_cast(num_base_source_region_RT_tot_[bsr]) + C3_ * static_cast(num_mesh_bin_RT_tot_[bsr]))/volume_base_sr_[bsr]; } else { ray_tracing_cost_[bsr] = 0.0; } @@ -726,7 +711,7 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th uint64_t base_sr = sr_key.base_source_region_id; double volume_sr = domain->source_regions_.volume_t(sr); volume_sr += domain->source_regions_.volume(sr); - double load_sr = C1 * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; + double load_sr = C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; load += load_sr; } @@ -735,9 +720,8 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { uint64_t base_sr = sr_key.base_source_region_id; double volume_sr = sr.scalars_.volume_; - load_sr = C1 * (sr.scalars_.n_hits_/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; + load_sr = C1_ * (sr.scalars_.n_hits_/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; load += load_sr; - // n_hits_rank += sr.scalars_.n_hits_; } if (mpi::master){ @@ -755,9 +739,9 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th volumes[base_sr] += volume_sr/volume_base_sr_[base_sr]; } - for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { - printf("Base source region %lu: Volume total %f, Ray tracing cost %f, \n", bsr, volumes[bsr], ray_tracing_cost_[bsr]); - } + // for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + // printf("Base source region %lu: Volume total %f, Ray tracing cost %f, \n", bsr, volumes[bsr], ray_tracing_cost_[bsr]); + // } } //TODO: Temporary print-outs @@ -766,20 +750,11 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th } // Calculate rank load based on number of source region hits - // uint64_t n_hits_total = 0; double load_total = 0.0; MPI_Allreduce(&load, &load_total, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); load = load / load_total; //TODO: Should load actually be fractional? total_load_ = load_total; - // n_hits_sum_ = load_total; // TODO: needs renaming - // MPI_Allreduce(&n_hits_rank, &n_hits_total, 1, MPI_INT64_T, MPI_SUM, mpi::intracomm); - // double load = (n_hits_rank/static_cast(n_hits_total)); - // n_hits_sum_ = n_hits_total; //TODO: This needs updating - - - - //TODO: Temporary print-outs // if(mpi::master){ // printf("Total hits: %ld \n", n_hits_total); @@ -788,18 +763,6 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th // Communicate load across ranks MPI_Allgather(&load, 1, MPI_DOUBLE, rank_load_.data(), 1, MPI_DOUBLE, mpi::intracomm); - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // double bcast_load = 0.0; - // if (rank == mpi::rank) { - // bcast_load = load; - // } - // MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, rank, mpi::intracomm); - // rank_load_[rank] = bcast_load; - // //TODO: Temporary print-outs - // // if (mpi::master) { - // // printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); - // // } - // } for (int rank = 0; rank < mpi::n_procs; rank++) { // TODO: Temporary print-outs if (mpi::master) { @@ -826,10 +789,13 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain){ //TODO: Th // } double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); - // double avg_load = total_load_/mpi::n_procs; + // double avg_load1 = total_load_/mpi::n_procs; double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; + // if (mpi::master){ + // printf("Total load %f, avg load calc1 %f, avg load calc2 %f \n", total_load_, target_load_, avg_load); + // } max_imbalance_ = (max_load - avg_load) / avg_load; - if (mpi::master){printf("Max load %f, avg load %f \n", max_load, avg_load);} + if (mpi::master){printf("Max load %f, avg load %f \n", max_load, avg_load);} //TODO: can use target_load_ instead! // Reset batch-wise counters fill(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), 0); @@ -1036,7 +1002,7 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_rank int owner = find_closest_rank(centroid, check_all_ranks); // local_hits[owner] += domain->source_regions_.n_hits(sr); double volume_sr = domain->source_regions_.volume_t(sr); - local_load[owner] += C1 * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]; + local_load[owner] += C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]; } // Combine results from different threads diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 7fe84073db1..e2656d9330d 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -909,7 +909,7 @@ void RandomRay::attenuate_flux_linear_source_void( } } -void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux) +void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector& angular_flux) { domain_ = domain; diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index caab307eb56..0803bde53cb 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -604,6 +604,13 @@ void RandomRaySimulation::simulate() // Average number of ray communications between ranks per batch avg_num_comms_ = avg_num_comms_/settings::n_batches; //TODO: should this be double? + + // Exchange intersection data + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, &total_geometric_intersections_, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(&total_geometric_intersections_, nullptr, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + } } domain_->count_external_source_regions(); @@ -736,7 +743,7 @@ void RandomRaySimulation::print_results_random_ray( if (mpi::n_procs > 1){ fmt::print(" MPI Ranks = {}\n", mpi::n_procs); fmt::print(" Avg Number of Subdomain Crossings = {}\n", avg_num_comms); - fmt::print(" Number of load optimzation calls = {}\n", mpi::decomp_map.cnt_optimizations_total_); + fmt::print(" Number of load optimization calls = {}\n", mpi::decomp_map.cnt_optimizations_total_); fmt::print(" unconverged optimizations = {}\n", mpi::decomp_map.cnt_unconverged_optimizations_total_); fmt::print(" Load per MPI Rank = Rank {}: {:.2f}%\n", 0, mpi::decomp_map.rank_load_[0]*100.0); for (int i = 1; i < mpi::n_procs; i++) { diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index b8cbb13f3b7..3b70261046b 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -195,22 +195,24 @@ void RayBank::communicate_rays(){ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ - //TODO: OMP? - - // Temporary vector containing angular flux data for re-initialization of random rays - vector angular_flux_vec; - angular_flux_vec.resize(negroups_); + my_ray_list_.resize(received_ray_data_.size()); // Add re-initialized random ray objects to my_ray_list - for (int i = 0; i < received_ray_data_.size(); i++) { + #pragma omp parallel + { + // Temporary vector containing angular flux data for re-initialization of random rays + vector angular_flux_vec(negroups_); - for (int g = 0; g < negroups_; g++) { - angular_flux_vec[g] = received_angular_flux_data_[i * negroups_ + g]; - } + #pragma omp for + for (int i = 0; i < received_ray_data_.size(); i++) { - // Re-initialize rays with received data - RandomRay ray_received(domain, received_ray_data_[i], angular_flux_vec); - my_ray_list_.push_back(ray_received); + for (int g = 0; g < negroups_; g++) { + angular_flux_vec[g] = received_angular_flux_data_[i * negroups_ + g]; + } + + // Re-initialize rays with received data + my_ray_list_[i] = RandomRay(domain, received_ray_data_[i], angular_flux_vec); + } } // clear received data vectors From ca12f5e498658bad83991b1de5c6a2f8c1963cde Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 28 Oct 2025 10:29:05 +0000 Subject: [PATCH 25/48] Add time prefactors to balance load --- examples/c5g7_no_mesh/trrm.csv | 34 +++++ include/openmc/random_ray/decomposition_map.h | 21 ++- .../openmc/random_ray/random_ray_simulation.h | 2 +- include/openmc/timer.h | 1 + src/random_ray/decomposition_map.cpp | 131 ++++++++++++++---- src/random_ray/random_ray_simulation.cpp | 40 ++++-- src/random_ray/ray_bank.cpp | 1 + src/timer.cpp | 1 + 8 files changed, 190 insertions(+), 41 deletions(-) create mode 100644 examples/c5g7_no_mesh/trrm.csv diff --git a/examples/c5g7_no_mesh/trrm.csv b/examples/c5g7_no_mesh/trrm.csv new file mode 100644 index 00000000000..957004b9979 --- /dev/null +++ b/examples/c5g7_no_mesh/trrm.csv @@ -0,0 +1,34 @@ +2.191247088358690753e+00,2.183037810044411664e+00,2.196537817892335820e+00,2.209203382354891332e+00,2.212565219586464238e+00,2.230372587895537606e+00,2.161540316383826710e+00,2.125706584065855331e+00,2.113575789289852569e+00,2.053052737235776082e+00,1.985714021745168756e+00,1.944721971358328805e+00,1.847265372766942804e+00,1.753509485414951774e+00,1.618938801187395526e+00,1.469498630217219937e+00,1.275691229706575225e+00,1.309087567995126156e+00,1.059237775819073857e+00,9.315206572089261838e-01,8.662652066899705350e-01,8.145255201189558480e-01,7.634058138491180978e-01,7.099012990999500339e-01,6.578789430909585123e-01,6.149497863682612531e-01,5.635883174996001443e-01,5.231380364588641418e-01,4.801680053055608077e-01,4.355363441235307609e-01,3.965338907454876161e-01,3.762727863933839068e-01,4.088255908924357529e-01,6.008333958601349556e-01 +2.187389197105248595e+00,2.208179573699970533e+00,2.227432392020127327e+00,2.263762395719545406e+00,2.307080830238117386e+00,2.360343704135994702e+00,2.238821813452127607e+00,2.200960888595021814e+00,2.241200937753564659e+00,2.118887498318929197e+00,2.061121964495550962e+00,2.069471406679956438e+00,1.913026440378744253e+00,1.770990586404497913e+00,1.635048767374265744e+00,1.474391741777388853e+00,1.275124793600274531e+00,1.292167274053269477e+00,1.338881246564022298e+00,1.175419506913667922e+00,1.093743283475196337e+00,1.046651403761669430e+00,1.040969773026356737e+00,9.200309442726944953e-01,8.400625282710910691e-01,8.313238770108476450e-01,7.237670122394486150e-01,6.672604802563635307e-01,6.473191119476825461e-01,5.592451931665299858e-01,4.979832135287125539e-01,4.686176809098941964e-01,5.182607744015403917e-01,5.940114139990008146e-01 +2.197448044421281832e+00,2.243529919060571309e+00,2.313816386474598197e+00,2.433682620828454102e+00,2.443570433626046423e+00,0.000000000000000000e+00,2.380202891088266881e+00,2.326943484128014550e+00,0.000000000000000000e+00,2.234715856406923606e+00,2.168772604205788657e+00,0.000000000000000000e+00,2.052543919159500962e+00,1.908207562494014242e+00,1.703748729719816168e+00,1.495488656762679058e+00,1.281883789059233614e+00,1.288836262699044388e+00,1.329998531897925940e+00,1.184798053959810638e+00,1.178143136625960263e+00,1.118486722771390163e+00,0.000000000000000000e+00,9.462084564905148820e-01,8.678108924969719640e-01,0.000000000000000000e+00,7.493094900755885579e-01,6.785651849684825043e-01,0.000000000000000000e+00,6.002988830744881987e-01,5.372592011234901266e-01,4.733437976731929564e-01,5.051019483401713028e-01,5.857468968889342209e-01 +2.226501444081867565e+00,2.275610560571992735e+00,2.427507037078852736e+00,0.000000000000000000e+00,2.474295458883274179e+00,2.431472577085453946e+00,2.288608740623471416e+00,2.227903381482966072e+00,2.279530524858763396e+00,2.140746938325002624e+00,2.092230890813752353e+00,2.129486393367493680e+00,2.051767376827057454e+00,0.000000000000000000e+00,1.807336646290496285e+00,1.530735934116578267e+00,1.286117680681753361e+00,1.289420014859783636e+00,1.327102619584999532e+00,1.262340380262139128e+00,0.000000000000000000e+00,1.108945290591634825e+00,1.125335624770032350e+00,9.537537807988630822e-01,8.815574770401419791e-01,8.612369101382135739e-01,7.520510404187301656e-01,6.958164315659516319e-01,7.008951312484703600e-01,5.831082251660727467e-01,0.000000000000000000e+00,5.086201699880906757e-01,5.162584336183845268e-01,5.863596636493298986e-01 +2.218926927657777881e+00,2.299886259571966463e+00,2.456697642262575698e+00,2.499626201679899573e+00,2.391304868593149280e+00,2.414406345857414760e+00,2.256082097478225634e+00,2.210072611407509324e+00,2.264741275130429443e+00,2.117606162345963217e+00,2.066527389788194391e+00,2.118273559083696522e+00,1.995037020043149312e+00,1.956578257193890336e+00,1.824584757311602079e+00,1.549257324318271012e+00,1.296851983389701646e+00,1.284264056478538363e+00,1.350075638334157002e+00,1.284011833600698038e+00,1.175600351778952835e+00,1.146427873686699073e+00,1.076326960968510660e+00,9.229509328990849193e-01,8.522690311351067693e-01,8.483606436100050718e-01,7.303029501002877844e-01,6.728675038158405952e-01,6.738398675857021347e-01,6.056533417080822712e-01,5.344562079427526147e-01,5.169634615293259294e-01,5.200538056877984650e-01,5.842034262206571293e-01 +2.231082909635700773e+00,2.375789520600242621e+00,0.000000000000000000e+00,2.458438786682784816e+00,2.412014841102354090e+00,0.000000000000000000e+00,2.324697423526147499e+00,2.307511663947630520e+00,0.000000000000000000e+00,2.182473766572771812e+00,2.137911116740639716e+00,0.000000000000000000e+00,2.019231885261925541e+00,1.930894390490011769e+00,0.000000000000000000e+00,1.593678826297055151e+00,1.295585776596550165e+00,1.288773309667573086e+00,1.420062389396669733e+00,0.000000000000000000e+00,1.281492230616910533e+00,1.145565439380789696e+00,0.000000000000000000e+00,9.828164956678981934e-01,9.001830850385110772e-01,0.000000000000000000e+00,7.762583233259164883e-01,7.121972695606388903e-01,0.000000000000000000e+00,6.120814770120478476e-01,5.727962386254695781e-01,0.000000000000000000e+00,5.465166072409047837e-01,5.853264484567460846e-01 +2.193333023549111083e+00,2.248154547521326041e+00,2.377595699308919563e+00,2.314371329581254688e+00,2.287984815312760212e+00,2.324040661430613497e+00,2.207607448286067253e+00,2.159232752580644288e+00,2.198640966841652666e+00,2.078276734751812960e+00,2.031524074378713518e+00,2.047267737222503659e+00,1.910742935843156243e+00,1.806482349640972984e+00,1.755589205096524497e+00,1.526644376669864522e+00,1.274794099548210546e+00,1.267028030292862928e+00,1.320456608941520615e+00,1.215037435087375384e+00,1.146985769912143738e+00,1.037459726338711974e+00,1.034976970147732933e+00,8.987373823158448793e-01,8.249820480467460193e-01,8.258375693118994443e-01,7.192426221500023420e-01,6.560511018915371473e-01,6.486489125401101452e-01,5.570852795816151337e-01,5.180952257940212302e-01,4.852817228618145906e-01,5.104054005637053137e-01,5.775760074477510608e-01 +2.129910704725793469e+00,2.212607874940346608e+00,2.340039369117613788e+00,2.241920866594564021e+00,2.220408751380578138e+00,2.284707864496888785e+00,2.169216423973474139e+00,2.132189374681973337e+00,2.170021761231772484e+00,2.058093953778662222e+00,1.994521228884661213e+00,2.003175263835319520e+00,1.866062268526274215e+00,1.770803630750291680e+00,1.721859500159762968e+00,1.504073961297410778e+00,1.256448640070237488e+00,1.253639973683003062e+00,1.316231529095601704e+00,1.191121610731709746e+00,1.113922402340774331e+00,1.011256476511537050e+00,1.014965274884199520e+00,8.861928678038175633e-01,8.188278746156557597e-01,8.102892872283671277e-01,7.065157431112425446e-01,6.495695567973099882e-01,6.383150646417524721e-01,5.494553783935032243e-01,5.129562119808761533e-01,4.810674198775791166e-01,5.080881215560474340e-01,5.703773791118308401e-01 +2.111795255516697445e+00,2.243617810087375819e+00,0.000000000000000000e+00,2.277669480100985577e+00,2.264419849023404652e+00,0.000000000000000000e+00,2.212165054535202735e+00,2.186081915001328646e+00,5.905483372858080321e-05,2.092605917932987669e+00,2.022009508341952255e+00,0.000000000000000000e+00,1.900835292429759349e+00,1.802936391864802701e+00,0.000000000000000000e+00,1.526321189694179514e+00,1.239277137432728049e+00,1.239401673874342524e+00,1.353047071096246334e+00,0.000000000000000000e+00,1.181917043748235585e+00,1.062656252233996401e+00,0.000000000000000000e+00,9.348557763215046279e-01,8.611952289018872664e-01,2.022953124983358227e-05,7.519504536433897490e-01,6.819664371659899249e-01,0.000000000000000000e+00,5.886593862297052615e-01,5.408748848410322996e-01,0.000000000000000000e+00,5.285375131154198547e-01,5.690487163194927200e-01 +2.054337302635711460e+00,2.109956609811427519e+00,2.221160439193332170e+00,2.152302058549536934e+00,2.125715797419949649e+00,2.189784304093460143e+00,2.089919993493440042e+00,2.049081344492106105e+00,2.084853756008507197e+00,1.974025286882006958e+00,1.920356495826909038e+00,1.944157521291036028e+00,1.797758364323612135e+00,1.710748110216061324e+00,1.667913594829847357e+00,1.438133114862460982e+00,1.214003965719606448e+00,1.208895867153015669e+00,1.269186375307888470e+00,1.152072564972867363e+00,1.079690642863499139e+00,9.906023805145405259e-01,9.805509088876559476e-01,8.600759773199186942e-01,7.988089990029161314e-01,7.995450583372136766e-01,6.914182264907056119e-01,6.314393157313016314e-01,6.286111064155717187e-01,5.406484458465800058e-01,5.002943853552010989e-01,4.724244966795246303e-01,4.998876111740644390e-01,5.695898496773728059e-01 +1.986670535203628685e+00,2.054476313994880954e+00,2.181267711313287005e+00,2.093717939432175434e+00,2.076418866386740891e+00,2.137815887766437495e+00,2.023504073786457802e+00,1.988202932241510013e+00,2.031861536673257973e+00,1.918217704930249123e+00,1.861207732707200524e+00,1.889397347310102893e+00,1.760428731100624589e+00,1.674757395907804813e+00,1.631159915290137041e+00,1.427622733820306244e+00,1.184265874694650167e+00,1.188183225214553440e+00,1.241403492753595517e+00,1.139997500674297726e+00,1.073477448951509761e+00,9.770130249952052592e-01,9.710713944060891389e-01,8.461797277265681316e-01,7.840855826775391391e-01,7.909003022867525656e-01,6.875396075525891382e-01,6.230322061725841465e-01,6.210724583067812610e-01,5.359661403792689294e-01,4.964839713359483486e-01,4.635816663744574129e-01,4.936267130715821239e-01,5.600230818713256564e-01 +1.939309693786417599e+00,2.070310737595831618e+00,0.000000000000000000e+00,2.137996425965541736e+00,2.124008701925748976e+00,0.000000000000000000e+00,2.053421732392183507e+00,2.007645696129726876e+00,0.000000000000000000e+00,1.934808165714997585e+00,1.888228361905046171e+00,0.000000000000000000e+00,1.793606677942480188e+00,1.717444695424241052e+00,0.000000000000000000e+00,1.433189564518702275e+00,1.163182094994017257e+00,1.162058685579531847e+00,1.291078908518831669e+00,0.000000000000000000e+00,1.165906548003818211e+00,1.036812168136559409e+00,0.000000000000000000e+00,9.006319678719821864e-01,8.315545851665148147e-01,0.000000000000000000e+00,7.344467792665521078e-01,6.589951810821528255e-01,0.000000000000000000e+00,5.760740174273405456e-01,5.391752865374970227e-01,0.000000000000000000e+00,5.212462790892851139e-01,5.506186815162145143e-01 +1.855411671663253159e+00,1.925151171582305087e+00,2.059994779963877143e+00,2.074145071759399439e+00,1.996318762925073598e+00,2.025099761485353422e+00,1.922365085586858591e+00,1.866929533903046279e+00,1.911412953201373499e+00,1.802722909465994228e+00,1.747958456866825383e+00,1.795798749443410891e+00,1.689705802246291855e+00,1.670683409319676738e+00,1.561287362384530031e+00,1.342710607316113691e+00,1.117661686621025163e+00,1.120165507149075479e+00,1.189314519760101607e+00,1.130394475187382675e+00,1.039978121062117955e+00,1.015063874420505829e+00,9.651515136750324908e-01,8.376551677793997452e-01,7.691552452380430172e-01,7.712073971884916279e-01,6.738517709538572875e-01,6.207386070759011165e-01,6.240197265266085314e-01,5.567623176274234531e-01,4.917193538325891344e-01,4.767493869116664063e-01,4.822988480051001448e-01,5.412887395586843953e-01 +1.759677355446763292e+00,1.794400266911236885e+00,1.927442731709765544e+00,0.000000000000000000e+00,1.970076925967498616e+00,1.934066731312273912e+00,1.823765236346551744e+00,1.775843461571870119e+00,1.820760733661625164e+00,1.713947898680572512e+00,1.676175261510312486e+00,1.720482874665544060e+00,1.671521519562934932e+00,0.000000000000000000e+00,1.475303693592278975e+00,1.264723250973249113e+00,1.073674786260244041e+00,1.084570196257446772e+00,1.126572984018279655e+00,1.074320869628573094e+00,0.000000000000000000e+00,9.582878233902966114e-01,9.801649901186169078e-01,8.432084516669698937e-01,7.746239556324118203e-01,7.791484591145405592e-01,6.746971597329420867e-01,6.299099104630623280e-01,6.321212726567230211e-01,5.293584729707453418e-01,0.000000000000000000e+00,4.660478106241895957e-01,4.645523707121523294e-01,5.264805840853342689e-01 +1.638362707092156034e+00,1.656027693404731327e+00,1.714566681161751260e+00,1.813767122596523285e+00,1.825878682035023459e+00,0.000000000000000000e+00,1.768038472854896792e+00,1.731625845129279861e+00,0.000000000000000000e+00,1.660802876962393704e+00,1.624856872510545447e+00,0.000000000000000000e+00,1.572920140337688677e+00,1.488799175897359328e+00,1.322094626762917891e+00,1.175656183793597709e+00,1.008447804702727435e+00,1.035240212795422998e+00,1.083017321169486902e+00,9.951767294784388262e-01,9.987735758771782990e-01,9.547295235348596254e-01,0.000000000000000000e+00,8.323232782346620118e-01,7.618874625432368042e-01,0.000000000000000000e+00,6.738117084778187937e-01,6.143378379202336648e-01,0.000000000000000000e+00,5.464676925427908172e-01,4.867044085272154708e-01,4.276325699416522741e-01,4.595110836909998553e-01,5.269694003763422119e-01 +1.483664026340598685e+00,1.485928533120761896e+00,1.522092150237713160e+00,1.537623262516716105e+00,1.556041610701640376e+00,1.614558200831128332e+00,1.526476443708170816e+00,1.503273037662012035e+00,1.537698072794241311e+00,1.453937895108954548e+00,1.426435615532985146e+00,1.432124755314073017e+00,1.335884866208434607e+00,1.269121945226295178e+00,1.184239450980220321e+00,1.079512015307677153e+00,9.513101919191917499e-01,1.002022867342769130e+00,1.098957994362292245e+00,9.871033287981917370e-01,9.481624800674134379e-01,9.238563433257078739e-01,9.264653612000229854e-01,8.253417223459025287e-01,7.691212520089578675e-01,7.627961299891509173e-01,6.699940225222736911e-01,6.230481150465755347e-01,6.106000443331772720e-01,5.309279637896315851e-01,4.728521005899636864e-01,4.422733235189713619e-01,4.832545113218360555e-01,5.425712034804132111e-01 +1.282520553935648344e+00,1.274279110088654576e+00,1.282977509566893382e+00,1.288526527599304972e+00,1.297523107201326020e+00,1.303491552713452739e+00,1.269274203088366360e+00,1.253099802627585913e+00,1.241140171644295132e+00,1.209007559240716567e+00,1.179121499250447291e+00,1.168270227528867222e+00,1.112980859452735283e+00,1.060683604007594205e+00,1.018624467799976285e+00,9.597859993975932369e-01,8.811332716673750953e-01,1.015260267107674919e+00,9.058664618496887755e-01,8.504807188522480743e-01,8.196446512186682520e-01,7.895318237519060034e-01,7.641755667733742818e-01,7.138243073906862524e-01,6.719145389772235299e-01,6.360130188177237631e-01,5.871768344832307696e-01,5.480041959380100858e-01,5.064811815124733441e-01,4.607759078459137125e-01,4.220548226516234736e-01,4.022034820535829169e-01,4.270859824671134897e-01,5.769625869141823404e-01 +1.316471726324641711e+00,1.301383534945617759e+00,1.289665337316929783e+00,1.298266666694424032e+00,1.296764268005277776e+00,1.291546581491599177e+00,1.272457264381850361e+00,1.255944218212216912e+00,1.242292671548804073e+00,1.216123210090080731e+00,1.197625844798729133e+00,1.162844065888928302e+00,1.124409956134110988e+00,1.080858328084939979e+00,1.034961464676486642e+00,1.005151905755737429e+00,1.017093772127665163e+00,7.960627971164752070e-01,7.885406176650254784e-01,7.747552518443546754e-01,7.509792786642698337e-01,7.314815042731055428e-01,7.041915110973251402e-01,6.622066894889006017e-01,6.215532082833116201e-01,5.871574258241251121e-01,5.490449216910516794e-01,5.088162914769511769e-01,4.713562267179362553e-01,4.306141899096647685e-01,3.971415581329607036e-01,3.769008778899384793e-01,3.931010407500538095e-01,5.093960863763510316e-01 +1.064000717163514631e+00,1.353635313444590205e+00,1.328279601481909822e+00,1.331329438856757807e+00,1.361594510353077325e+00,1.429308119732483950e+00,1.330294767904400377e+00,1.316818957456696415e+00,1.371582830735758929e+00,1.274989094897337694e+00,1.253509551474411676e+00,1.283463093376297381e+00,1.198517382208715842e+00,1.131995127547667401e+00,1.087777227050225060e+00,1.102854610437833616e+00,9.187571502137118484e-01,7.888795811190919549e-01,8.270448219070298812e-01,8.294309544970086545e-01,8.280437807335848666e-01,8.121549731130274230e-01,8.091142709521912391e-01,7.432067637936660143e-01,6.986500819769629889e-01,6.837234221894817887e-01,6.159512398827160506e-01,5.724131501184384074e-01,5.482130112650641651e-01,4.895315891433671407e-01,4.435101904652545834e-01,4.180671729929731351e-01,4.283521525606124869e-01,5.285448660939552346e-01 +9.421384737787534824e-01,1.184315963786022996e+00,1.192872465536471971e+00,1.255727184359869630e+00,1.285778759185480569e+00,0.000000000000000000e+00,1.223674525602471697e+00,1.199961005803297454e+00,0.000000000000000000e+00,1.163683319289239515e+00,1.148357328126751176e+00,0.000000000000000000e+00,1.136557034604824823e+00,1.081672921104091856e+00,9.883293523392095992e-01,9.904779604705001850e-01,8.555337397767853735e-01,7.754537280875926086e-01,8.259473311220250080e-01,8.670392457710104361e-01,8.987430955634241325e-01,8.915483259352598999e-01,0.000000000000000000e+00,8.077076708131013527e-01,7.573129775106630657e-01,0.000000000000000000e+00,6.659242056013290334e-01,6.196656081818328055e-01,0.000000000000000000e+00,5.408548024389592257e-01,4.941927636914571487e-01,4.435656434886283694e-01,4.418652375097458784e-01,5.373899174561270753e-01 +8.734522999348018901e-01,1.100319907181191770e+00,1.179521249852117926e+00,0.000000000000000000e+00,1.193513281325771391e+00,1.278558816378772445e+00,1.153158956415373027e+00,1.131410565886197706e+00,1.199475215507000536e+00,1.089605692635659207e+00,1.084978605196925905e+00,1.163387655988868508e+00,1.040220332453506202e+00,0.000000000000000000e+00,1.005534304570551596e+00,9.438427719449860032e-01,8.230403187448527280e-01,7.501239553212172284e-01,8.299421975647560679e-01,9.033449176669088310e-01,0.000000000000000000e+00,9.003906531591215900e-01,8.588017001858627708e-01,7.721850290035323638e-01,7.231550874856591538e-01,7.143672838398688052e-01,6.430094320797047347e-01,5.952642187947164709e-01,5.845985998481645352e-01,5.427945535352158846e-01,0.000000000000000000e+00,4.715604823444637939e-01,4.492599828513393900e-01,5.343251971930471633e-01 +8.182380184398414524e-01,1.056134489416050926e+00,1.125410795655496621e+00,1.120365813083079809e+00,1.154093347454119067e+00,1.144589595048006281e+00,1.041390506802172267e+00,1.029350425140714176e+00,1.077218591050897123e+00,9.952903185181630752e-01,9.907798976863729790e-01,1.046681607871178921e+00,1.023456150806645759e+00,9.685615643457549107e-01,9.552112556644626329e-01,9.173162004373885958e-01,7.890162996452245725e-01,7.294849098209817972e-01,8.134144503457534370e-01,8.910220582545809176e-01,8.974666219311479010e-01,8.503930232231756703e-01,8.284768009280699674e-01,7.539378819633139051e-01,7.133650409858925956e-01,6.952889585848834875e-01,6.239621768529399759e-01,5.829499829379772846e-01,5.694063024255178185e-01,5.165082371425814278e-01,4.955995942564136447e-01,4.668099084739451010e-01,4.493394293570446840e-01,5.252833864895075644e-01 +7.737874919028429055e-01,1.045877426674022281e+00,0.000000000000000000e+00,1.130834997228184813e+00,1.081801117539766599e+00,0.000000000000000000e+00,1.026833151133299316e+00,1.012850352962841427e+00,0.000000000000000000e+00,9.996841126078755968e-01,9.740378813663748137e-01,0.000000000000000000e+00,9.700409854985876379e-01,9.812112710218202638e-01,0.000000000000000000e+00,9.269560034582287056e-01,7.636337418624420392e-01,7.012665615391588947e-01,8.103641409218265146e-01,0.000000000000000000e+00,8.503518325140456691e-01,8.271461638751318457e-01,0.000000000000000000e+00,7.593181428772638464e-01,7.136020323941065779e-01,0.000000000000000000e+00,6.328498169927920802e-01,5.840718755235967397e-01,0.000000000000000000e+00,5.131946835021108377e-01,4.815967997851228199e-01,0.000000000000000000e+00,4.518946608006484955e-01,5.133015321174996259e-01 +7.240455549067191798e-01,9.282490759804838953e-01,9.482902430086193046e-01,9.575431034638201000e-01,9.283896460223689528e-01,9.808231478946479731e-01,9.004364528676550572e-01,8.874378712687498449e-01,9.480525752302128017e-01,8.679333260488791835e-01,8.557849217734814218e-01,9.052416037891988232e-01,8.372569497238263603e-01,8.413359145941188277e-01,8.258091923290324932e-01,8.243915109529369456e-01,7.139541587439731662e-01,6.609624609933459904e-01,7.397087919388564137e-01,8.016790784074945275e-01,7.733268989074596478e-01,7.557112793636738823e-01,7.599958279587964993e-01,6.889336292274383933e-01,6.563942627349094172e-01,6.471849113105505591e-01,5.826594934631921241e-01,5.407829535242093533e-01,5.237138290815784858e-01,4.729574696243908360e-01,4.402326234529471694e-01,4.316780102245537099e-01,4.183196271784163645e-01,4.879810978447451930e-01 +6.704295797094608211e-01,8.539191734892210839e-01,8.705582833385407948e-01,8.846977400309432582e-01,8.588851315219306892e-01,9.028191150622755234e-01,8.388150892161027050e-01,8.191260527752426412e-01,8.631045976804209152e-01,8.007908974220390164e-01,7.895039527571818816e-01,8.298180348355850278e-01,7.751003244618606125e-01,7.802373987499040542e-01,7.590244073411180903e-01,7.732785934252642823e-01,6.724822387850472039e-01,6.230994908808976662e-01,6.994830449077992229e-01,7.519710380557811380e-01,7.254750407669064982e-01,7.077595245319724393e-01,7.070736255532449333e-01,6.575749951679532579e-01,6.232832616455081798e-01,6.118599207471168144e-01,5.534535398288059627e-01,5.137736212707584293e-01,4.981017566315768530e-01,4.429968732841544354e-01,4.149283457389875140e-01,4.081033869077403953e-01,3.968142876139097996e-01,4.632635738422015148e-01 +6.271281432260689126e-01,8.498774244096176655e-01,0.000000000000000000e+00,8.792758835133264173e-01,8.511752470027588169e-01,0.000000000000000000e+00,8.331477935928555123e-01,8.262708103672868898e-01,2.020095507363041802e-05,8.030672051972632675e-01,7.948706761837915913e-01,0.000000000000000000e+00,7.733351642816427285e-01,7.737406639071410241e-01,0.000000000000000000e+00,7.636936007676156102e-01,6.356221385957802061e-01,5.884322865117922463e-01,6.816912079968121541e-01,0.000000000000000000e+00,7.127271864019693037e-01,6.949820296271701503e-01,0.000000000000000000e+00,6.492956079417456783e-01,6.137872874585588168e-01,1.610354413196360941e-05,5.431135632137641389e-01,5.067601412063421629e-01,0.000000000000000000e+00,4.362016824508225810e-01,4.050461258678976773e-01,0.000000000000000000e+00,3.894826364759194082e-01,4.447430672504455451e-01 +5.756767568245941824e-01,7.309234417545680262e-01,7.563875094737525506e-01,7.599746310102825086e-01,7.336702802356834807e-01,7.847013879435806860e-01,7.222043750897578773e-01,7.124206569994736560e-01,7.532637750757106287e-01,7.013754774682684490e-01,6.882705639874764358e-01,7.323686689385516813e-01,6.733686088612483855e-01,6.779188099541035850e-01,6.744806169031609677e-01,6.780929248625879868e-01,5.900686970388916430e-01,5.464669286269403514e-01,6.178406369235316387e-01,6.667189993957479688e-01,6.372653425158187890e-01,6.220923597427302498e-01,6.294729181414369101e-01,5.814617189721780210e-01,5.558426458582808038e-01,5.451794401602833018e-01,4.921431746693394893e-01,4.568925106066384356e-01,4.446489673362989947e-01,3.962891158823371174e-01,3.675058814750132852e-01,3.629343452793412084e-01,3.536562027099717787e-01,4.157904601115759435e-01 +5.311885997925630543e-01,6.763838090578581097e-01,6.918733791836048086e-01,7.001779053623733429e-01,6.813264878247622391e-01,7.126131716146361095e-01,6.608537340687946626e-01,6.490562856767130295e-01,6.848752028443435558e-01,6.410458905423291887e-01,6.341727927915881136e-01,6.735321466045661731e-01,6.195619523218262037e-01,6.305609696866814051e-01,6.157013559966822980e-01,6.239442364358775972e-01,5.413054689408103304e-01,5.093170004213958268e-01,5.708405170606464241e-01,6.220991779932963928e-01,5.936287151813736118e-01,5.833178724975647267e-01,5.870565534424708742e-01,5.427354166413274061e-01,5.173108359166580517e-01,5.082595650710257651e-01,4.583758095752694106e-01,4.268366971034435742e-01,4.148919339395080175e-01,3.730303857428991510e-01,3.431375070535752081e-01,3.390058041729259175e-01,3.293959132718906613e-01,3.894651137292612364e-01 +4.880893109204306746e-01,6.637586253238343392e-01,0.000000000000000000e+00,7.085161542995268569e-01,6.774178373038094447e-01,0.000000000000000000e+00,6.517056920734776160e-01,6.456391862294733608e-01,0.000000000000000000e+00,6.366990687146554251e-01,6.269791964692927877e-01,0.000000000000000000e+00,6.253090839121397959e-01,6.368464496189781832e-01,0.000000000000000000e+00,6.159524243874878735e-01,5.070734659190005988e-01,4.739770907533142896e-01,5.492490690742655168e-01,0.000000000000000000e+00,5.856158795049488663e-01,5.640522053239396261e-01,0.000000000000000000e+00,5.229673960565481838e-01,4.996662179298075324e-01,0.000000000000000000e+00,4.477871169417994013e-01,4.153332615739425693e-01,0.000000000000000000e+00,3.615211516804351377e-01,3.360611321676330587e-01,0.000000000000000000e+00,3.180585413425819352e-01,3.597888528736741254e-01 +4.437287164228900238e-01,5.721727074097165966e-01,6.089522039667149000e-01,5.924164366565792816e-01,6.092535178703845089e-01,6.203506338544979570e-01,5.657961734234764339e-01,5.568640561697966174e-01,5.921751074050781716e-01,5.432006489403792271e-01,5.410491077301776697e-01,5.872202795833334488e-01,5.611589330122712660e-01,5.370927682905253242e-01,5.520442015689500659e-01,5.365195239323181653e-01,4.652761676581110284e-01,4.347996223523004078e-01,4.890103508987206360e-01,5.422026421323546952e-01,5.432417285869868273e-01,5.176220112739589041e-01,5.151641341465219570e-01,4.677536117346107192e-01,4.443176504664649862e-01,4.388309429996508637e-01,3.974690252130943513e-01,3.692117409012467544e-01,3.652478967413388955e-01,3.290193833644715071e-01,3.159317206846702364e-01,2.982470720712732670e-01,2.854557115812783596e-01,3.292669094475462743e-01 +4.019776563922255463e-01,5.077750671771877888e-01,5.432981295490509899e-01,0.000000000000000000e+00,5.415030589727736210e-01,5.800845779769169264e-01,5.249208908394225048e-01,5.151917449124574500e-01,5.456672634221780838e-01,5.042650085633416657e-01,5.049791856271410584e-01,5.465336626957661981e-01,4.979750117066176207e-01,0.000000000000000000e+00,4.992149742315453720e-01,4.799094025406466235e-01,4.246458641489704311e-01,3.983898371277103667e-01,4.476925287389251773e-01,4.925700654168500003e-01,0.000000000000000000e+00,4.998931882826454509e-01,4.777005780514578803e-01,4.357826438349560183e-01,4.124922359066469646e-01,4.052755620365040001e-01,3.659778391060351521e-01,3.440594758033663769e-01,3.383110387509301042e-01,3.123935041272363766e-01,0.000000000000000000e+00,2.728106558106904167e-01,2.576937895680694313e-01,3.031817943291972295e-01 +3.778813936891481373e-01,4.724560213931874308e-01,4.793720945788496612e-01,5.172322683653809428e-01,5.191821471119544285e-01,0.000000000000000000e+00,4.889018563617613666e-01,4.836280103412842757e-01,0.000000000000000000e+00,4.771366439954088379e-01,4.723003645055394162e-01,0.000000000000000000e+00,4.849299554389744360e-01,4.737310571989788999e-01,4.373971417624507585e-01,4.481338493724968952e-01,4.041287663894579940e-01,3.796209195006247095e-01,4.166843082973617496e-01,4.453775531928228504e-01,4.680170505100515466e-01,4.683302710991176232e-01,0.000000000000000000e+00,4.286450982440978552e-01,4.086985324622310900e-01,0.000000000000000000e+00,3.639498148165104530e-01,3.402048365674239516e-01,0.000000000000000000e+00,2.988146148041820327e-01,2.729254812354990345e-01,2.424353174765424002e-01,2.384883897694446420e-01,2.787415261655875609e-01 +4.144799417489927196e-01,5.215918580475720212e-01,5.131596570952726699e-01,5.206294278375190876e-01,5.297621171338582347e-01,5.549241182230592040e-01,5.193999002714598801e-01,5.138026545937318668e-01,5.375028708531557342e-01,5.043188588273302964e-01,5.022341209627532166e-01,5.246717645274733277e-01,4.888586129196206831e-01,4.736624288879482947e-01,4.630706681670004321e-01,4.827647670653502088e-01,4.288989597969547485e-01,3.951085892958181023e-01,4.308972810017863142e-01,4.443080226899827623e-01,4.501086201392289210e-01,4.461563627282417732e-01,4.485576226902251995e-01,4.175779661238873675e-01,3.945192070490062819e-01,3.892845851231011012e-01,3.534912691512847593e-01,3.299377237198209967e-01,3.171475102156621761e-01,2.846633817947265555e-01,2.607613698014291659e-01,2.366420060628103561e-01,2.340414672059265289e-01,2.686780863966252153e-01 +6.030034616626710475e-01,5.975897837962456105e-01,5.974816228055220835e-01,5.954931732478212503e-01,5.954289533272330015e-01,5.935459024223447289e-01,5.874087395253896338e-01,5.855659752616900748e-01,5.791846329825856010e-01,5.719845030607473291e-01,5.611202023067951572e-01,5.610589309840724459e-01,5.486154934240742298e-01,5.378133527148274418e-01,5.285363846034256685e-01,5.319276983508409717e-01,5.811667041770416375e-01,5.074114584477388279e-01,5.348246987351746862e-01,5.418482247636255966e-01,5.373628776011537544e-01,5.284781045324750126e-01,5.131010200610383043e-01,4.901844926459114071e-01,4.650876929416942751e-01,4.439932476791162985e-01,4.178521224513318533e-01,3.885319407815574499e-01,3.629205463608465854e-01,3.326481634578376534e-01,3.033931515746035035e-01,2.806606132185862079e-01,2.701508109231260946e-01,2.903057835354830862e-01 diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 5411bf186f0..b65f67fed25 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -43,9 +43,12 @@ class DecompositionMap { // Methods for balancing the load between ranks void balance_load(FlatSourceDomain* domain); - void update_load(FlatSourceDomain* domain, bool check_all_ranks); + void update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& rank_load_combined, vector& load_ratio); void redistribute_source_regions(FlatSourceDomain* domain); - bool load_balanced() const { return max_imbalance_ < imbalance_tolerance_; } + // bool load_balanced() const { return max_imbalance_ < imbalance_tolerance_; } + bool load_balanced() const { return max_load_imbalance_measured_ < imbalance_tolerance_; } + + // Methods to find owner of source region int find_owner(SourceRegionKey sr_key, Position r, @@ -55,7 +58,8 @@ class DecompositionMap { // Method to calculate the load per rank based on the total number of hits in all source regions // of a rank - void calculate_rank_load(FlatSourceDomain* domain); + void calculate_rank_load(FlatSourceDomain* domain, double batch_transport_time); + double calculate_load_ratio(int rank); //---------------------------------------------------------------------------- // Static data members @@ -83,19 +87,26 @@ class DecompositionMap { vector mesh_bins_per_base_sr_; // number of mesh bin ray trace operations per base source region for current batch vector ray_tracing_cost_; vector volume_base_sr_; + vector> load_history_; // stores values of load per rank for last few batches + int history_idx = 0; + int load_history_size_ = 10; + // coefficients for load calculation double C1_ = 1.0; double C2_ = 0.1; double C3_ = 0.1; - vector rank_load_; + vector rank_load_; //TODO: rename in rank_load_calculated_ + vector rank_load_absolute_; //TODO: rename in rank_load_calculated_ + vector rank_load_measured_; // Current measured load per rank vector rank_weights_; double target_load_; //TODO: temporary int cnt_unconverged_optimizations_total_ = 0; int cnt_optimizations_total_ = 0; - double max_imbalance_ = 0.0; //TODO: rename in max_load_imbalance_ + double max_imbalance_ = 0.0; //TODO: rename in max_load_imbalance_calculcated_ + double max_load_imbalance_measured_ = 0.0; uint64_t n_base_sr_ = 0; int negroups_; diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 825097b96a2..24d83cffdf2 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -30,7 +30,7 @@ class RandomRaySimulation { std::unordered_map& forward_source_region_map); void simulate(); - void output_simulation_results() const; + void output_simulation_results(); void instability_check( int64_t n_hits, double k_eff, double& avg_miss_rate) const; void print_results_random_ray(uint64_t total_geometric_intersections, diff --git a/include/openmc/timer.h b/include/openmc/timer.h index d54710daf84..5eaeeb4e35f 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -44,6 +44,7 @@ extern Timer time_add_ray_to_bank; extern Timer time_comms_metadata; extern Timer time_unpack_data; extern Timer time_mpi_imbalance; +// extern Timer time_load_per_batch; // extern Timer time_test; //TODO: remove } // namespace simulation diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index f9842b0be46..3b8425b14e1 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -24,6 +24,8 @@ DecompositionMap::DecompositionMap() {} void DecompositionMap::initialize(){ negroups_ = data::mg.num_energy_groups_; rank_load_.resize(mpi::n_procs, 0.0); + rank_load_measured_.resize(mpi::n_procs, 0.0); + rank_load_absolute_.resize(mpi::n_procs, 0.0); target_load_ = 1.0/mpi::n_procs; rank_weights_.resize(mpi::n_procs, 1.0); @@ -56,6 +58,11 @@ void DecompositionMap::initialize(){ mesh_bins_per_base_sr_.resize(n_base_sr_, 0); // at least 1 mesh bin (no mesh) ray_tracing_cost_.resize(n_base_sr_); volume_base_sr_.resize(n_base_sr_, 0.0); + + load_history_.resize(mpi::n_procs); + for (auto& row : load_history_) { + row.resize(load_history_size_, 0.0); + } } void DecompositionMap::generate_rank_centers(){ @@ -400,8 +407,11 @@ void DecompositionMap::exchange_sr_info(ParallelMap load_average(mpi::n_procs, 0.0); + int n_batches_to_average = load_history_size_; + if (simulation::current_batch < load_history_size_){ + n_batches_to_average = simulation::current_batch; + } + // Save to history + for (int rank = 0; rank < mpi::n_procs; rank++) { + load_history_[rank][history_idx] = rank_load_measured_[rank]; + load_average[rank] = std::accumulate(load_history_[rank].begin(), load_history_[rank].end(), 0.0) / static_cast(n_batches_to_average); + } + + // circular index update + history_idx = (history_idx + 1) % load_history_size_; + + // Calculate measured imbalance + // double max_load_measured = *std::max_element(rank_load_measured_.begin(), rank_load_measured_.end()); + double max_load_measured = *std::max_element(load_average.begin(), load_average.end()); + + + max_load_imbalance_measured_ = (max_load_measured - target_load_) / target_load_; + if (mpi::master) { + auto max_it = std::max_element(rank_load_measured_.begin(), rank_load_measured_.end()); + int max_index = std::distance(rank_load_measured_.begin(), max_it); + printf("Measured max. load imbalance: %.2f%% in rank: %d\n", max_load_imbalance_measured_ * 100.0, max_index); + } + } void DecompositionMap::balance_load(FlatSourceDomain* domain){ @@ -809,7 +861,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ cnt_optimizations_total_ ++; int max_iterations = 200; - double max_imbalance = max_imbalance_; + double max_imbalance; // = max_imbalance_; // double imbalance; int it_outer = 0; @@ -823,13 +875,29 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ double beta = 0.6; // momentum damping bool check_all_ranks = true; + vector weight_change(mpi::n_procs, 0.0); + vector rank_load_combined(mpi::n_procs, 0.0); + vector load_ratio(mpi::n_procs, 0.0); + + for (int rank = 0; rank < mpi::n_procs; rank++) { + load_ratio[rank] = calculate_load_ratio(rank); + rank_load_combined[rank] = load_ratio[rank] * rank_load_absolute_[rank]; + } + + double total_rank_load_combined = std::accumulate(rank_load_combined.begin(), rank_load_combined.end(), 0.0); + + for (int rank = 0; rank < mpi::n_procs; rank++) { + rank_load_combined[rank] = (rank_load_combined[rank]/total_rank_load_combined); + } + double max_load = *std::max_element(rank_load_combined.begin(), rank_load_combined.end()); + max_imbalance = (max_load - target_load_) / target_load_; + // History tracking vector imbalance_history; vector> weight_history; imbalance_history.push_back(max_imbalance); weight_history.push_back(rank_weights_); - vector weight_change(mpi::n_procs, 0.0); // vector old_weights = rank_weights_; // double max_imbalance_old = max_imbalance_; @@ -841,7 +909,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ //TODO: temporary - if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); + // if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); // Optimise rank load rank by rank // for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -853,7 +921,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; // imbalance_per_rank[rank] = (rank_load_[rank] - target_load_) / target_load_; // double corr = imbalance_per_rank[rank] * weight_scale; - double corr = ((rank_load_[rank] - target_load_) / target_load_) * weight_scale; + double corr = ((rank_load_combined[rank] - target_load_) / target_load_) * weight_scale; weight_change[rank] = beta * weight_change[rank] + (1.0 - beta) * corr; // keep some inertia from previous changes to prevent oscillations // double damping = std::min(1.0, max_imbalance / imbalance_tolerance_); // dampening factor based on how far we are from convergence double damping = std::clamp(max_imbalance / prev_imbalance, 0.1, 1.0); // dampening factor based on whether we are getting closer to convergence or not, prevents big jumps, if too big a change, more dampening is applied @@ -865,13 +933,14 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ check_all_ranks = false; } - update_load(domain, check_all_ranks); + update_load(domain, check_all_ranks, rank_load_combined, load_ratio); it_outer ++; - double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); - double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0) / mpi::n_procs; + double max_load = *std::max_element(rank_load_combined.begin(), rank_load_combined.end()); + // double avg_load = std::accumulate(rank_load_combined.begin(), rank_load_combined.end(), 0.0) / mpi::n_procs; //TODO: can use target_load_ instead! // double avg_load = total_load_ / mpi::n_procs; - max_imbalance = (max_load - avg_load) / avg_load; + // max_imbalance = (max_load - avg_load) / avg_load; + max_imbalance = (max_load - target_load_) / target_load_; // imbalance = 0.0; // max_imbalance = 0.0; // for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -984,7 +1053,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // } } -void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks){ +void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& rank_load_combined, vector& load_ratio){ // vector n_hits(mpi::n_procs, 0); vector load(mpi::n_procs, 0); @@ -1002,7 +1071,7 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_rank int owner = find_closest_rank(centroid, check_all_ranks); // local_hits[owner] += domain->source_regions_.n_hits(sr); double volume_sr = domain->source_regions_.volume_t(sr); - local_load[owner] += C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]; + local_load[owner] += load_ratio[owner] * (C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]); } // Combine results from different threads @@ -1035,9 +1104,12 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_rank // MPI_Allreduce(MPI_IN_PLACE, n_hits.data(), mpi::n_procs, MPI_UINT64_T, MPI_SUM, mpi::intracomm); MPI_Allreduce(MPI_IN_PLACE, load.data(), mpi::n_procs, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + double total_rank_load_combined = std::accumulate(load.begin(), load.end(), 0.0); //TODO: Is this constant? Can this be stored somewhere? + for (int rank = 0; rank < mpi::n_procs; rank++){ // rank_load_[rank] = (n_hits[rank]/static_cast(n_hits_sum_)); - rank_load_[rank] = (load[rank]/total_load_); + // rank_load_[rank] = (load[rank]/total_load_); + rank_load_combined[rank] = load[rank]/total_rank_load_combined; } } @@ -1181,4 +1253,13 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { domain->convert_source_regions_to_tallies(start_sr_id); } +double DecompositionMap::calculate_load_ratio(int rank){ + if (rank_load_[rank] > 0.0){ + return rank_load_measured_[rank]/rank_load_[rank]; + } else { + return 1.0; + } +} + + }// namespace openmc \ No newline at end of file diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 0803bde53cb..d98cdff1617 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -599,7 +599,16 @@ void RandomRaySimulation::simulate() finalize_batch(); } // End random ray power iteration loop - // Compute average load per rank based on geometric intersections + domain_->count_external_source_regions(); +} + +void RandomRaySimulation::output_simulation_results() +{ + + // Compute values for diagnostics + int64_t total_n_source_regions = domain_->n_source_regions(); + int64_t total_n_external_source_regions = domain_->n_external_source_regions_; + if (mpi::n_procs > 1){ // Average number of ray communications between ranks per batch @@ -611,18 +620,22 @@ void RandomRaySimulation::simulate() } else { MPI_Reduce(&total_geometric_intersections_, nullptr, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, 0, mpi::intracomm); } - } - domain_->count_external_source_regions(); -} + // Exchange source region data + if (mpi::master){ + MPI_Reduce(MPI_IN_PLACE, &total_n_source_regions, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &total_n_external_source_regions, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(&total_n_source_regions, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&total_n_external_source_regions, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + } + } -void RandomRaySimulation::output_simulation_results() const -{ // Print random ray results if (mpi::master) { print_results_random_ray(total_geometric_intersections_, avg_miss_rate_ / settings::n_batches, negroups_, - domain_->n_source_regions(), domain_->n_external_source_regions_, avg_num_comms_); + total_n_source_regions, total_n_external_source_regions, avg_num_comms_); } if (model::plots.size() > 0) { @@ -745,11 +758,11 @@ void RandomRaySimulation::print_results_random_ray( fmt::print(" Avg Number of Subdomain Crossings = {}\n", avg_num_comms); fmt::print(" Number of load optimization calls = {}\n", mpi::decomp_map.cnt_optimizations_total_); fmt::print(" unconverged optimizations = {}\n", mpi::decomp_map.cnt_unconverged_optimizations_total_); - fmt::print(" Load per MPI Rank = Rank {}: {:.2f}%\n", 0, mpi::decomp_map.rank_load_[0]*100.0); + fmt::print(" Load per MPI Rank = Rank {}: {:.2f}%\n", 0, mpi::decomp_map.rank_load_[0]*100.0); //TODO: show actual load not aclualted? for (int i = 1; i < mpi::n_procs; i++) { fmt::print(" Rank {}: {:.2f}%\n", i, mpi::decomp_map.rank_load_[i]*100.0); } - fmt::print("Maximum Load Imbalance = {:.2f}%\n", mpi::decomp_map.max_imbalance_*100.0); + // fmt::print("Maximum Load Imbalance = {:.2f}%\n", mpi::decomp_map.max_imbalance_*100.0); //TODO: This needs updating! } std::string estimator; @@ -859,6 +872,10 @@ void RandomRaySimulation::transport_sweep() { void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { + double start_time_transport = simulation::time_transport.elapsed(); + double start_time_ray_buffering = simulation::time_ray_buffering.elapsed(); + + // Position sample; // sample.x = 700.533084; @@ -982,7 +999,10 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // } // Calculate load per rank based on number of hits in each source region that a rank owns - mpi::decomp_map.calculate_rank_load(domain_.get()); + double batch_ray_buffering_time = simulation::time_ray_buffering.elapsed() - start_time_ray_buffering; + double batch_transport_time = simulation::time_transport.elapsed() - start_time_transport - batch_ray_buffering_time; + // printf("Batch %d, Rank %d: transport time: %f s\n", simulation::current_batch, mpi::rank, batch_transport_time); + mpi::decomp_map.calculate_rank_load(domain_.get(), batch_transport_time); avg_num_comms_ += num_comms; diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 3b70261046b..214ceb24bb2 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -54,6 +54,7 @@ void RayBank::update(FlatSourceDomain* domain){ // Send and receive rays between MPI ranks simulation::time_ray_comms.start(); communicate_rays(); + MPI_Barrier(mpi::intracomm); //TODO: Should this barrier stay here? simulation::time_ray_comms.stop(); simulation::time_unpack_data.start(); diff --git a/src/timer.cpp b/src/timer.cpp index e1faef21c4b..b94e0bdba6b 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -38,6 +38,7 @@ Timer time_source_region_exchange; Timer time_comms_metadata; Timer time_unpack_data; Timer time_mpi_imbalance; +// Timer time_load_per_batch; // Timer time_test; //TODO: remove } // namespace simulation From 22ecc88f409c7edd65c46b063162e6067510e5f6 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 28 Oct 2025 13:36:17 +0000 Subject: [PATCH 26/48] Correct error in load balancing --- include/openmc/random_ray/decomposition_map.h | 5 ++--- src/random_ray/decomposition_map.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index b65f67fed25..f42dc657547 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -46,8 +46,7 @@ class DecompositionMap { void update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& rank_load_combined, vector& load_ratio); void redistribute_source_regions(FlatSourceDomain* domain); // bool load_balanced() const { return max_imbalance_ < imbalance_tolerance_; } - bool load_balanced() const { return max_load_imbalance_measured_ < imbalance_tolerance_; } - + bool load_balanced() const { return max_load_imbalance_measured_ < imbalance_tolerance_time_; } // Methods to find owner of source region @@ -91,7 +90,6 @@ class DecompositionMap { int history_idx = 0; int load_history_size_ = 10; - // coefficients for load calculation double C1_ = 1.0; double C2_ = 0.1; @@ -123,6 +121,7 @@ class DecompositionMap { double max_domain_length_; bool is_linear_; double imbalance_tolerance_ = 0.01; // 1% imbalance tolerance + double imbalance_tolerance_time_ = 0.1; // 10% imbalance tolerance double optimization_history_factor_ = 1.0; int cnt_unconverged_optimizations_ = 0; }; // class DecompositionMap diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 3b8425b14e1..bf480994bcf 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -861,14 +861,13 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ cnt_optimizations_total_ ++; int max_iterations = 200; - double max_imbalance; // = max_imbalance_; + // double max_imbalance; // = max_imbalance_; // double imbalance; int it_outer = 0; double adaptation_factor = 1; //0.5 //0.1; double min_adaptation_factor = 0.01; double max_adaptation_factor = 2; - double prev_imbalance = max_imbalance; double avg_rank_distance = max_domain_length_/cbrt(mpi::n_procs); // rough estimate of average distance between ranks //TODO: cubic root might not be adaquate for problems that are not box like double weight_scale = avg_rank_distance * avg_rank_distance * optimization_history_factor_; //TODO: maybe adjust dynamically dependent on wether previous batch has converged // double weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; // scale weights based on average load @@ -890,7 +889,8 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ rank_load_combined[rank] = (rank_load_combined[rank]/total_rank_load_combined); } double max_load = *std::max_element(rank_load_combined.begin(), rank_load_combined.end()); - max_imbalance = (max_load - target_load_) / target_load_; + double max_imbalance = (max_load - target_load_) / target_load_; + double prev_imbalance = max_imbalance; // History tracking vector imbalance_history; @@ -909,7 +909,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ //TODO: temporary - // if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); + if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); // Optimise rank load rank by rank // for (int rank = 0; rank < mpi::n_procs; rank++) { From 626f9c3d142dd056203ee1aa49b58320a2f0194b Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 30 Oct 2025 16:32:35 +0000 Subject: [PATCH 27/48] Sample initial Voronoi cells only in geometry --- examples/simple_tokamak/simple_tok.py | 10 ++++---- include/openmc/source.h | 4 ++- src/random_ray/decomposition_map.cpp | 32 ++++++++++++++++++++++-- src/random_ray/random_ray_simulation.cpp | 10 ++++---- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/examples/simple_tokamak/simple_tok.py b/examples/simple_tokamak/simple_tok.py index 9726f3bd213..6470c4fab43 100644 --- a/examples/simple_tokamak/simple_tok.py +++ b/examples/simple_tokamak/simple_tok.py @@ -28,7 +28,7 @@ model.geometry.determine_paths() # Make coarse mesh and tally for random ray void SR subdivision -mesh_cell_size_cm = 100.0 # cm +mesh_cell_size_cm = 50.0 # cm coarse_mesh = openmc.RegularMesh() bbox = model.geometry.bounding_box ll = np.array(bbox.lower_left) @@ -45,7 +45,7 @@ # Make fine mesh and tally for random ray void SR subdivision -mesh_cell_size_cm = 7.5 # cm +mesh_cell_size_cm = 5.0 # cm fine_mesh = openmc.RegularMesh() bbox = model.geometry.bounding_box ll = np.array(bbox.lower_left) @@ -89,9 +89,9 @@ model.settings.random_ray["distance_inactive"] = 1500.0 model.settings.random_ray["distance_active"] = 3000.0 model.settings.random_ray["sample_method"] = 'prng' -model.settings.particles = 40000 -model.settings.batches = 200 -model.settings.inactive = 100 +model.settings.particles = 1000000 +model.settings.batches = 10 +model.settings.inactive = 1 plot = openmc.Plot() box = model.geometry.bounding_box diff --git a/include/openmc/source.h b/include/openmc/source.h index 1fbd319048d..dfa147aef5b 100644 --- a/include/openmc/source.h +++ b/include/openmc/source.h @@ -79,6 +79,8 @@ class Source { static unique_ptr create(pugi::xml_node node); + bool satisfies_spatial_constraints(Position r) const; + protected: // Strategy used for rejecting sites when constraints are applied. KILL means // that sites are always accepted but if they don't satisfy constraints, they @@ -91,7 +93,7 @@ class Source { // Methods for constraints void read_constraints(pugi::xml_node node); - bool satisfies_spatial_constraints(Position r) const; + // bool satisfies_spatial_constraints(Position r) const; bool satisfies_energy_constraints(double E) const; bool satisfies_time_constraints(double time) const; diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index bf480994bcf..ef2ed2b8766 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -237,6 +237,24 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ } } } + + // check if mesh grid points are inside spatial domain, if not erase them + //TODO: maybe random sampling would be better + for (int i = grid_points_.size() - 1; i >= 0; i--){ + Position xi = grid_points_[i]; + + bool is_inside_domain = RandomRay::ray_source_->satisfies_spatial_constraints(xi); + + if (!is_inside_domain){ + grid_points_.erase(grid_points_.begin() + i); + } + } + + if (mpi::master && grid_points_.size() < grid_points_total) { + warning(fmt::format( + "Spatial constraints reduced grid points for Voronoi tesselation from {} to {}.", + grid_points_total, grid_points_.size())); + } } // Places random points in the spatial domain. @@ -245,9 +263,10 @@ void DecompositionMap::initialize_points(){ rank_centers_.resize(mpi::n_procs); uint64_t seed = openmc_get_seed(); + int rank_cnt = 0; // Sample random positions to start with - for (int rank = 0; rank < mpi::n_procs; rank++){ + while(rank_cnt < mpi::n_procs){ double x = prn(&seed); double y = prn(&seed); @@ -262,8 +281,16 @@ void DecompositionMap::initialize_points(){ // make a small shift in position to avoid geometry floating point issues //TODO: necessary? Adopted from halton sampling Position shift {FP_COINCIDENT, FP_COINCIDENT, FP_COINCIDENT}; - rank_centers_[rank] = (spatial_box_->lower_left() + shift) + + xi = (spatial_box_->lower_left() + shift) + xi * ((spatial_box_->upper_right() - shift) - (spatial_box_->lower_left() + shift)); + + bool is_inside_domain = RandomRay::ray_source_->satisfies_spatial_constraints(xi) ; + + if (is_inside_domain){ + rank_centers_[rank_cnt] = xi; + rank_cnt++; + } + } } @@ -1041,6 +1068,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ simulation::time_load_balance_sr_transfer.start(); redistribute_source_regions(domain); + MPI_Barrier(mpi::intracomm); //TODO: Should this barrier stay here? simulation::time_load_balance_sr_transfer.stop(); //TODO: temporary diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index d98cdff1617..f4bc6c043c5 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -550,11 +550,11 @@ void RandomRaySimulation::simulate() // Balance load between ranks by changing weights of Voronoi cells // if (mpi::master){printf("Max imbalance %f", mpi::decomp_map.max_imbalance_);} - if (mpi::n_procs > 1 && mpi::decomp_map.load_balanced() == false){ - simulation::time_load_balance.start(); - mpi::decomp_map.balance_load(domain_.get()); - simulation::time_load_balance.stop(); - } + // if (mpi::n_procs > 1 && mpi::decomp_map.load_balanced() == false){ + // simulation::time_load_balance.start(); + // mpi::decomp_map.balance_load(domain_.get()); + // simulation::time_load_balance.stop(); + // } // Add source to scalar flux, compute number of FSR hits int64_t n_hits = domain_->add_source_to_scalar_flux(); From 0e758f8c29e4f504a88405878e2c27222bef7376 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 30 Oct 2025 16:50:02 +0000 Subject: [PATCH 28/48] Add additional timers for testing --- include/openmc/random_ray/random_ray.h | 6 ++-- include/openmc/timer.h | 9 ++++-- src/random_ray/random_ray.cpp | 6 ++-- src/random_ray/random_ray_simulation.cpp | 38 +++++++++++++++++------- src/random_ray/ray_bank.cpp | 32 +++++++++++++------- src/timer.cpp | 9 ++++-- 6 files changed, 70 insertions(+), 30 deletions(-) diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index b8d1bc2289d..bc1001d854d 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -49,7 +49,8 @@ class RandomRay : public Particle { // Constructors RandomRay(); RandomRay(uint64_t ray_id, FlatSourceDomain* domain); - RandomRay(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux); + RandomRay(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux); //TODO: obsolete + // RandomRay(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux); // RandomRay(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); //---------------------------------------------------------------------------- @@ -68,7 +69,8 @@ class RandomRay : public Particle { SourceRegionHandle& srh, double distance, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); - void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector& angular_flux); + void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux); + // void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector& angular_flux); // void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); uint64_t transport_history_based_single_ray(); SourceSite sample_prng(); diff --git a/include/openmc/timer.h b/include/openmc/timer.h index 5eaeeb4e35f..a0c31008d39 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -44,8 +44,13 @@ extern Timer time_add_ray_to_bank; extern Timer time_comms_metadata; extern Timer time_unpack_data; extern Timer time_mpi_imbalance; -// extern Timer time_load_per_batch; -// extern Timer time_test; //TODO: remove +extern Timer time_all_reduce; +extern Timer time_add_ray_to_bank; +extern Timer time_calculate_rank_load; +extern Timer time_check_status; +extern Timer time_check_new_sr; +extern Timer time_test1; +extern Timer time_test2; } // namespace simulation diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index e2656d9330d..242a2713d59 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -262,7 +262,8 @@ RandomRay::RandomRay(uint64_t ray_id, FlatSourceDomain* domain) : RandomRay() initialize_ray(ray_id, domain); } -RandomRay::RandomRay(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux) : RandomRay() +// RandomRay::RandomRay(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux) : RandomRay() //TODO: obsolete, delete +RandomRay::RandomRay(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux) : RandomRay() { restart_ray(domain, data, angular_flux); } @@ -909,7 +910,8 @@ void RandomRay::attenuate_flux_linear_source_void( } } -void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector& angular_flux) +// void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector& angular_flux) +void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux) { domain_ = domain; diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index f4bc6c043c5..4b49b5cbd8e 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -661,7 +661,7 @@ void RandomRaySimulation::instability_check( if (mpi::n_procs > 1){ // Reduce n_hits and n_source_regions on master rank to compute // global miss rate - simulation::time_decomposition_handling.start(); + simulation::time_all_reduce.start(); if (mpi::master) { MPI_Reduce(MPI_IN_PLACE, &n_hits, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); MPI_Reduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); @@ -669,7 +669,7 @@ void RandomRaySimulation::instability_check( MPI_Reduce(&n_hits, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); MPI_Reduce(&n_source_regions, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); } - simulation::time_decomposition_handling.stop(); + simulation::time_all_reduce.stop(); } // if (mpi::master) { @@ -683,6 +683,9 @@ void RandomRaySimulation::instability_check( 100.0; avg_miss_rate += percent_missed; + printf("Batch %d: FSR Miss Rate = %.3f%%\n", simulation::current_batch, + percent_missed); + if (percent_missed > 10.0) { warning(fmt::format( "Very high FSR miss rate detected ({:.3f}%). Instability may occur. " @@ -716,13 +719,10 @@ void RandomRaySimulation::print_results_random_ray( if (settings::verbosity >= 6) { double total_integrations = total_geometric_intersections * negroups; - double time_per_integration = - (time_transport.elapsed() - time_ray_buffering.elapsed()) - / total_integrations; + double time_transport_total = time_transport.elapsed() - time_ray_buffering.elapsed(); + double time_per_integration = time_transport_total / total_integrations; double time_domain_decomposition = time_decomposition_handling.elapsed() - + time_generate_voronoi_centers.elapsed() + time_ray_buffering.elapsed() + time_load_balance.elapsed() - time_transport.elapsed(); - double time_transport_total = - (time_transport.elapsed() - time_ray_buffering.elapsed()); + + time_generate_voronoi_centers.elapsed() + time_load_balance.elapsed() - time_transport_total + time_all_reduce.elapsed(); double misc_time = time_total.elapsed() - time_update_src.elapsed() - time_transport_total - time_tallies.elapsed() - time_bank_sendrecv.elapsed() - time_domain_decomposition; @@ -820,7 +820,8 @@ void RandomRaySimulation::print_results_random_ray( show_time("Tally conversion only", time_tallies.elapsed(), 1); if (mpi::n_procs > 1){ double time_decomp_misc = time_domain_decomposition - time_source_region_exchange.elapsed() - time_generate_voronoi_centers.elapsed() - - time_ray_comms.elapsed() - time_comms_metadata.elapsed() - time_unpack_data.elapsed() - time_mpi_imbalance.elapsed() - time_load_balance.elapsed(); + - time_ray_comms.elapsed() - time_comms_metadata.elapsed() - time_unpack_data.elapsed() - time_mpi_imbalance.elapsed() - time_load_balance.elapsed() - time_ray_buffering.elapsed() - time_all_reduce.elapsed() - time_calculate_rank_load.elapsed() - time_check_status.elapsed() - time_check_new_sr.elapsed() + - time_test1.elapsed(); // - time_add_ray_to_bank.elapsed() show_time("Decomposition handling", time_domain_decomposition, 1); show_time("Ray communication", time_ray_comms.elapsed(), 2); @@ -832,6 +833,13 @@ void RandomRaySimulation::print_results_random_ray( show_time("Generating Voronoi centers", time_generate_voronoi_centers.elapsed(), 2); show_time("Sending ray metadata", time_comms_metadata.elapsed(), 2); show_time("Unpacking ray data", time_unpack_data.elapsed(), 2); + show_time("Buffering rays", time_ray_buffering.elapsed(), 2); + show_time("All reduce", time_all_reduce.elapsed(), 2); + show_time("Adding rays to bank", time_add_ray_to_bank.elapsed(), 2); + show_time("Calculate rank load", time_calculate_rank_load.elapsed(), 2); + show_time("Check if rays alive", time_check_status.elapsed(), 2); + show_time("Check if new sr discovered", time_check_new_sr.elapsed(), 2); + show_time("Block", time_test1.elapsed(), 2); show_time("Other decomposition routines", time_decomp_misc, 2); // show_time("Testing: ", time_test.elapsed(), 2); //TODO: remove } @@ -915,6 +923,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // int ray_cnt = 0; + simulation::time_test1.start(); + // Create rays and add them to ray bank #pragma omp parallel for schedule(static) for (int i = 0; i < simulation::work_per_rank; i++) { @@ -926,7 +936,9 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { if (!ray.has_left_subdomain()){ #pragma omp critical (raybank) { + simulation::time_add_ray_to_bank.start(); RB.add_ray_to_bank(ray); + simulation::time_add_ray_to_bank.stop(); } } // Put ray if straight into buffer it starts outside my subdomain @@ -940,6 +952,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } } + simulation::time_test1.stop(); + // If no ray is alive at this stage, it means that all of them have been buffered because they were sampled in foregin subdomain. This requires a ray bank update here. if (!RB.is_any_ray_alive()) { RB.update(domain_.get()); @@ -965,13 +979,13 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { // If ray has left my subdomain, buffer ray state if(ray.has_left_subdomain()){ - simulation::time_ray_buffering.start(); #pragma omp critical (raybuffer) { + simulation::time_ray_buffering.start(); num_ray_crossings_ ++; RB.buffer_ray_data_to_send(ray, domain_.get()); + simulation::time_ray_buffering.stop(); } - simulation::time_ray_buffering.stop(); } } simulation::time_transport.stop(); @@ -1002,7 +1016,9 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { double batch_ray_buffering_time = simulation::time_ray_buffering.elapsed() - start_time_ray_buffering; double batch_transport_time = simulation::time_transport.elapsed() - start_time_transport - batch_ray_buffering_time; // printf("Batch %d, Rank %d: transport time: %f s\n", simulation::current_batch, mpi::rank, batch_transport_time); + simulation::time_calculate_rank_load.start(); mpi::decomp_map.calculate_rank_load(domain_.get(), batch_transport_time); + simulation::time_calculate_rank_load.stop(); avg_num_comms_ += num_comms; diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 214ceb24bb2..8be6864cc8e 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -60,6 +60,7 @@ void RayBank::update(FlatSourceDomain* domain){ simulation::time_unpack_data.start(); // Add received rays to ray list of that rank update_my_ray_list(domain); + MPI_Barrier(mpi::intracomm); //TODO: Should this barrier stay here? simulation::time_unpack_data.stop(); } @@ -199,31 +200,38 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ my_ray_list_.resize(received_ray_data_.size()); // Add re-initialized random ray objects to my_ray_list - #pragma omp parallel - { + // #pragma omp parallel + // { // Temporary vector containing angular flux data for re-initialization of random rays - vector angular_flux_vec(negroups_); + // vector angular_flux_vec(negroups_); - #pragma omp for + // #pragma omp for + #pragma omp parallel for for (int i = 0; i < received_ray_data_.size(); i++) { - for (int g = 0; g < negroups_; g++) { - angular_flux_vec[g] = received_angular_flux_data_[i * negroups_ + g]; - } + // for (int g = 0; g < negroups_; g++) { + // angular_flux_vec[g] = received_angular_flux_data_[i * negroups_ + g]; + // } // Re-initialize rays with received data - my_ray_list_[i] = RandomRay(domain, received_ray_data_[i], angular_flux_vec); + // my_ray_list_.emplace_back(domain, received_ray_data_[i], &received_angular_flux_data_[i * negroups_]); + // my_ray_list_[i] = RandomRay(domain, received_ray_data_[i], angular_flux_vec); + // my_ray_list_[i] = RandomRay(domain, received_ray_data_[i], &received_angular_flux_data_[i * negroups_]); + + my_ray_list_[i].restart_ray(domain, received_ray_data_[i], &received_angular_flux_data_[i * negroups_]); } - } + // } // clear received data vectors - received_ray_data_.clear(); - received_angular_flux_data_.clear(); + received_ray_data_.resize(0); + received_angular_flux_data_.resize(0); } bool RayBank::is_any_ray_alive(){ + simulation::time_check_status.start(); + int local_rays_alive = ray_bank_size(); int flag = 0; if (local_rays_alive > 0) { @@ -231,6 +239,8 @@ bool RayBank::is_any_ray_alive(){ } MPI_Allreduce(MPI_IN_PLACE, &flag, 1, MPI_INT, MPI_MAX, mpi::intracomm); + + simulation::time_check_status.stop(); return flag > 0; } diff --git a/src/timer.cpp b/src/timer.cpp index b94e0bdba6b..7532eea353f 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -38,8 +38,13 @@ Timer time_source_region_exchange; Timer time_comms_metadata; Timer time_unpack_data; Timer time_mpi_imbalance; -// Timer time_load_per_batch; -// Timer time_test; //TODO: remove +Timer time_all_reduce; +Timer time_add_ray_to_bank; +Timer time_calculate_rank_load; +Timer time_check_status; +Timer time_check_new_sr; +Timer time_test1; +Timer time_test2; } // namespace simulation From 2b35bcca5d10881687a49add5e05479af8e60436 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 30 Oct 2025 19:43:56 +0000 Subject: [PATCH 29/48] Limit load balancing to first 5 iterations --- src/random_ray/random_ray_simulation.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 4b49b5cbd8e..252f2b884f1 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -550,11 +550,12 @@ void RandomRaySimulation::simulate() // Balance load between ranks by changing weights of Voronoi cells // if (mpi::master){printf("Max imbalance %f", mpi::decomp_map.max_imbalance_);} - // if (mpi::n_procs > 1 && mpi::decomp_map.load_balanced() == false){ - // simulation::time_load_balance.start(); - // mpi::decomp_map.balance_load(domain_.get()); - // simulation::time_load_balance.stop(); - // } + // TODO: limit load calulateion to first 5 batches as well + if (mpi::n_procs > 1 && simulation::current_batch <= 5) {// && mpi::decomp_map.load_balanced() == false){ + simulation::time_load_balance.start(); + mpi::decomp_map.balance_load(domain_.get()); + simulation::time_load_balance.stop(); + } // Add source to scalar flux, compute number of FSR hits int64_t n_hits = domain_->add_source_to_scalar_flux(); From 5cf00a81a4fa4f09dfb20de70f7f3d84ec8077a9 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Fri, 28 Nov 2025 16:31:40 +0000 Subject: [PATCH 30/48] Cleaned and simplified code --- include/openmc/random_ray/decomposition_map.h | 68 ++- .../openmc/random_ray/flat_source_domain.h | 21 - include/openmc/random_ray/random_ray.h | 15 +- .../openmc/random_ray/random_ray_simulation.h | 5 +- include/openmc/random_ray/ray_bank.h | 13 +- include/openmc/timer.h | 9 - src/random_ray/decomposition_map.cpp | 464 +++++------------- src/random_ray/flat_source_domain.cpp | 237 +-------- src/random_ray/random_ray.cpp | 122 +---- src/random_ray/random_ray_simulation.cpp | 264 +++------- src/random_ray/ray_bank.cpp | 110 +---- src/random_ray/source_region.cpp | 18 +- src/timer.cpp | 9 - 13 files changed, 275 insertions(+), 1080 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index f42dc657547..689ee2c8738 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -27,7 +27,7 @@ class DecompositionMap { void initialize(); void generate_rank_centers(); //TODO: put in constructor? void calculate_grid_points(int grid_points_total); - void initialize_points(); + void initialize_voronoi_centers(); void calculate_voronoi(vector& position_sum_per_rank, vector& num_points_per_rank); Position calculate_centroids(const Position position_sum, const int num_points, int rank); @@ -45,9 +45,6 @@ class DecompositionMap { void balance_load(FlatSourceDomain* domain); void update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& rank_load_combined, vector& load_ratio); void redistribute_source_regions(FlatSourceDomain* domain); - // bool load_balanced() const { return max_imbalance_ < imbalance_tolerance_; } - bool load_balanced() const { return max_load_imbalance_measured_ < imbalance_tolerance_time_; } - // Methods to find owner of source region int find_owner(SourceRegionKey sr_key, Position r, @@ -59,11 +56,7 @@ class DecompositionMap { // of a rank void calculate_rank_load(FlatSourceDomain* domain, double batch_transport_time); double calculate_load_ratio(int rank); - - //---------------------------------------------------------------------------- - // Static data members - - + //---------------------------------------------------------------------------- // Public data members @@ -72,58 +65,59 @@ class DecompositionMap { std::unordered_map subdomain_map_; - // Centers of each rank's Voronoi cell - vector rank_centers_; - // Neighbors of each rank's Voronoi cell std::unordered_set my_neighbors; - // vector my_neighbors; + // Data to estimate rank loads vector num_base_source_region_RT_tot_; // total number of base source region ray trace operations per base source region vector num_mesh_bin_RT_tot_; // total number of mesh bin ray trace operations per base source region vector num_base_source_region_RT_batch_; // number of base source region ray trace operations per base source region for current batch vector num_mesh_bin_RT_batch_; // number of mesh bin ray trace operations per base source region for current batch - vector mesh_bins_per_base_sr_; // number of mesh bin ray trace operations per base source region for current batch vector ray_tracing_cost_; vector volume_base_sr_; - vector> load_history_; // stores values of load per rank for last few batches - int history_idx = 0; - int load_history_size_ = 10; + vector measured_rank_load_fractions_; - // coefficients for load calculation - double C1_ = 1.0; - double C2_ = 0.1; - double C3_ = 0.1; - - vector rank_load_; //TODO: rename in rank_load_calculated_ - vector rank_load_absolute_; //TODO: rename in rank_load_calculated_ - vector rank_load_measured_; // Current measured load per rank + // Load optimization vector rank_weights_; double target_load_; - //TODO: temporary + double max_load_imbalance_measured_ = 0.0; int cnt_unconverged_optimizations_total_ = 0; int cnt_optimizations_total_ = 0; - double max_imbalance_ = 0.0; //TODO: rename in max_load_imbalance_calculcated_ - double max_load_imbalance_measured_ = 0.0; - uint64_t n_base_sr_ = 0; - int negroups_; private: //---------------------------------------------------------------------------- // Private data members SpatialBox* spatial_box_ = nullptr; - vector grid_points_; //TODO: This can be local variable when Voronoi centres ae established + + // Voronoi cell calculation + vector grid_points_; //TODO: Should this be only defined in generate_rank_centers? int grid_points_per_rank_{125}; // default 5x5x5 grid points per rank - // int negroups_; - // uint64_t n_hits_sum_; - double total_load_; + vector rank_centers_; // Centers of each rank's Voronoi cell - double max_domain_length_; - bool is_linear_; + // Load calculation + vector estimated_rank_load_fractions_; + vector estimated_rank_load_totals_; + double estimated_load_sum_; + vector> load_history_; // stores values of load per rank for last few batches + int load_history_size_ = 10; + int history_idx = 0; + + // coefficients for load calculation + double C1_ = 1.0; + double C2_ = 0.1; + double C3_ = 0.1; + + // Load optimization double imbalance_tolerance_ = 0.01; // 1% imbalance tolerance - double imbalance_tolerance_time_ = 0.1; // 10% imbalance tolerance double optimization_history_factor_ = 1.0; int cnt_unconverged_optimizations_ = 0; + + // Miscellaneous + uint64_t n_base_sr_ = 0; + int negroups_; + double max_domain_length_; + bool is_linear_; + }; // class DecompositionMap } // namespace openmc diff --git a/include/openmc/random_ray/flat_source_domain.h b/include/openmc/random_ray/flat_source_domain.h index 1a905f9add0..962d562f0ad 100644 --- a/include/openmc/random_ray/flat_source_domain.h +++ b/include/openmc/random_ray/flat_source_domain.h @@ -9,7 +9,6 @@ #include "openmc/source.h" #include #include -// #include "openmc/random_ray/ray_bank.h" namespace openmc { @@ -42,7 +41,6 @@ class FlatSourceDomain { virtual void accumulate_iteration_flux(); void output_to_vtk() const; void output_to_vtk_decomp() const; - // void communicate_plotting_data(); void convert_external_sources(); void count_external_source_regions(); void set_adjoint_sources(const vector& forward_flux); @@ -65,26 +63,12 @@ class FlatSourceDomain { void apply_transport_stabilization(); int64_t n_source_regions() const { - // int64_t n_source_regions = source_regions_.n_source_regions(); //TODO: is this base source regions or does this include msh_bins? - // if (mpi::n_procs > 1){ - // n_source_regions = mpi::decomp_map.n_source_regions(); - // } - - // return n_source_regions; return source_regions_.n_source_regions(); } int64_t n_source_elements() const { return source_regions_.n_source_regions() * negroups_; - - // int64_t n_source_regions = source_regions_.n_source_regions(); //TODO: is this base source regions or does this include msh_bins? - // if (mpi::n_procs > 1){ - // n_source_regions = mpi::decomp_map.n_source_regions(); - // } - - // return n_source_regions * negroups_; } - // void initialize_ray_bank(); //---------------------------------------------------------------------------- // Static Data members @@ -161,8 +145,6 @@ class FlatSourceDomain { // technique. bool is_transport_stabilization_needed_ {false}; - // RayBank RB_; // Ray bank to store rays for each MPI rank - protected: //---------------------------------------------------------------------------- // Methods @@ -193,9 +175,6 @@ class FlatSourceDomain { // SUM and SUM_SQ do not need to be tracked. vector> tally_volumes_; - // Vector that contains the results to be plotted for MPI ranks - // vector vector_out_; - }; // class FlatSourceDomain //============================================================================ diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index bc1001d854d..09b82887a73 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -6,7 +6,6 @@ #include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/moment_matrix.h" #include "openmc/source.h" -// #include "openmc/random_ray/ray_bank.h" namespace openmc { @@ -17,9 +16,6 @@ struct RayBufferContainer { double distance_travelled; vector angular_flux; int surface; - // SourceRegionKey sr_key; - // int sr; - // int receiving_rank; bool is_active; uint64_t ray_id; }; @@ -49,9 +45,6 @@ class RandomRay : public Particle { // Constructors RandomRay(); RandomRay(uint64_t ray_id, FlatSourceDomain* domain); - RandomRay(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux); //TODO: obsolete - // RandomRay(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux); - // RandomRay(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); //---------------------------------------------------------------------------- // Methods @@ -70,15 +63,12 @@ class RandomRay : public Particle { void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux); - // void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector& angular_flux); - // void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain, RayBank RB); uint64_t transport_history_based_single_ray(); SourceSite sample_prng(); SourceSite sample_halton(); bool has_left_subdomain(); - // RayBufferContainer pack_ray(); - void pack_ray_for_buffer(double distance_buffer, Position position_buffer); //, SourceRegionKey sr_key, int sr); + void pack_ray_for_buffer(double distance_buffer, Position position_buffer); int get_energy_groups(); //---------------------------------------------------------------------------- @@ -106,7 +96,6 @@ class RandomRay : public Particle { vector delta_moments_; vector mesh_bins_; vector mesh_fractional_lengths_; - // RayBank RB_; int negroups_; FlatSourceDomain* domain_ {nullptr}; // pointer to domain that has flat source @@ -115,8 +104,6 @@ class RandomRay : public Particle { bool is_active_ {false}; bool is_alive_ {true}; bool is_local_ {true}; - // bool discovered_new_SRK_ {false}; - // bool is_buffered_ {false}; }; // class RandomRay } // namespace openmc diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 24d83cffdf2..3490920bb70 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -35,7 +35,7 @@ class RandomRaySimulation { int64_t n_hits, double k_eff, double& avg_miss_rate) const; void print_results_random_ray(uint64_t total_geometric_intersections, double avg_miss_rate, int negroups, int64_t n_source_regions, - int64_t n_external_source_regions, uint64_t avg_num_comms) const; + int64_t n_external_source_regions, uint64_t avg_num_comms, double max_load_imbalance) const; void transport_sweep(); void transport_sweep_decomp(RayBank& RB); @@ -64,8 +64,7 @@ class RandomRaySimulation { int negroups_; // Average number of ray communications between rank per batch - uint64_t avg_num_comms_ {0}; - uint64_t num_ray_crossings_ {0}; //TODO: temporary + uint64_t avg_num_communication_rounds_ {0}; }; // class RandomRaySimulation diff --git a/include/openmc/random_ray/ray_bank.h b/include/openmc/random_ray/ray_bank.h index 8d10ba15f20..7c0ff84dcd1 100644 --- a/include/openmc/random_ray/ray_bank.h +++ b/include/openmc/random_ray/ray_bank.h @@ -24,42 +24,31 @@ class RayBank { //---------------------------------------------------------------------------- // Methods - void add_ray_to_bank(RandomRay& ray); void buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain); void update(FlatSourceDomain* domain); int ray_bank_size(); - void reset_my_ray_list(); void communicate_rays(); void communicate_message_metadata(); void update_my_ray_list(FlatSourceDomain* domain); bool is_any_ray_alive(); - //---------------------------------------------------------------------------- - // Static data members - - //---------------------------------------------------------------------------- // Public data members vector my_ray_list_; - // // Number of ray communications between ranks - // uint64_t num_comms_total_ {0}; - // uint64_t num_comms_batch_ {0}; - private: //---------------------------------------------------------------------------- // Private data members int total_sending_rays_; int total_receiving_rays_; int negroups_; - // FlatSourceDomain* domain_ {nullptr}; // pointer to domain that has flat source //TODO: maybe include domain in constructor - // // data needed for ray transport // Map that contains the rank to which rays are buffered to be sent std::unordered_map> ray_send_buffer_; // Vector that contains the number of rays to be received from each rank vector num_messages_receiving_; + vector num_messages_sending_; // vectors that received ray data vector received_ray_data_; diff --git a/include/openmc/timer.h b/include/openmc/timer.h index a0c31008d39..e75b8ed42a8 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -35,22 +35,13 @@ extern Timer time_update_src; extern Timer time_ray_comms; extern Timer time_decomposition_handling; extern Timer time_load_balance; -extern Timer time_load_balance_sr_transfer; extern Timer time_ray_buffering; // extern Timer time_ray_buffering2; extern Timer time_generate_voronoi_centers; extern Timer time_source_region_exchange; extern Timer time_add_ray_to_bank; -extern Timer time_comms_metadata; extern Timer time_unpack_data; -extern Timer time_mpi_imbalance; -extern Timer time_all_reduce; -extern Timer time_add_ray_to_bank; extern Timer time_calculate_rank_load; -extern Timer time_check_status; -extern Timer time_check_new_sr; -extern Timer time_test1; -extern Timer time_test2; } // namespace simulation diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index ef2ed2b8766..9d724a5e28b 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -23,9 +23,9 @@ DecompositionMap::DecompositionMap() {} void DecompositionMap::initialize(){ negroups_ = data::mg.num_energy_groups_; - rank_load_.resize(mpi::n_procs, 0.0); - rank_load_measured_.resize(mpi::n_procs, 0.0); - rank_load_absolute_.resize(mpi::n_procs, 0.0); + estimated_rank_load_fractions_.resize(mpi::n_procs, 0.0); + measured_rank_load_fractions_.resize(mpi::n_procs, 0.0); + estimated_rank_load_totals_.resize(mpi::n_procs, 0.0); target_load_ = 1.0/mpi::n_procs; rank_weights_.resize(mpi::n_procs, 1.0); @@ -38,7 +38,7 @@ void DecompositionMap::initialize(){ max_domain_length_ = sqrt(x_length*x_length + y_length*y_length + z_length*z_length); - is_linear_ = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; //TODO: SHould that be decided gloabbly or on sr by sr base? + is_linear_ = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; // Count the number of source regions, compute the cell offset // indices, and store the material type The reason for the offsets is that @@ -55,7 +55,6 @@ void DecompositionMap::initialize(){ num_mesh_bin_RT_tot_.resize(n_base_sr_, 0); num_base_source_region_RT_batch_.resize(n_base_sr_, 0); num_mesh_bin_RT_batch_.resize(n_base_sr_, 0); - mesh_bins_per_base_sr_.resize(n_base_sr_, 0); // at least 1 mesh bin (no mesh) ray_tracing_cost_.resize(n_base_sr_); volume_base_sr_.resize(n_base_sr_, 0.0); @@ -69,11 +68,12 @@ void DecompositionMap::generate_rank_centers(){ // Calculate grid points that are used for Voronoi cells int grid_points_total = grid_points_per_rank_ * mpi::n_procs; - printf("Calculating %d grid points for Voronoi tessellation...\n", grid_points_total); + if (mpi::master) + printf("Calculating %d grid points for Voronoi tessellation...\n", grid_points_total); calculate_grid_points(grid_points_total); // Initialize points with random positions - initialize_points(); + initialize_voronoi_centers(); double err = 1.0; double precision = 1e-3; // 0.001 cm @@ -96,11 +96,6 @@ void DecompositionMap::generate_rank_centers(){ for (int rank = 0; rank < mpi::n_procs; rank++) { - // if (mpi::master){ - // //TODO: temporary - // printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); - // } - // Calculate centroid of the cell Position centroid = calculate_centroids(position_sum_per_rank[rank], num_points_per_rank[rank], rank); @@ -125,10 +120,10 @@ void DecompositionMap::generate_rank_centers(){ } else { printf("Lloyd's algorithm converged in %d iterations.\n", it); } - printf("The following Voronoi centres are being used:\n"); - for (int rank = 0; rank < mpi::n_procs; rank++) { - printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); - } + // printf("The following Voronoi centres are being used:\n"); + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); + // } } } @@ -143,12 +138,9 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ double volume = domain_length[0] * domain_length[1] * domain_length[2]; - //TODO: temporary - // printf("Spatial box volume: %f \n", volume); - // For each dimension, determine grid points along that direction based on aspect ratio: // domain_length / volume^(1/3) = grid_points_dimension / grid_points_total^(1/3). - // Check if any dimension is so distorted that it would only receive minimun of 1 grid + // Check if any dimension is so distorted that it would only receive minimum of 1 grid // point and flag that direction to correct total number of grid points. int excluded_dimension = -1; vector grid_points_per_dimension(3); @@ -184,14 +176,11 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ } } - //TODO: temporary - // printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); - // Adjust grid points in each dimension to match actual total number of grid points to the number of grid points requested double new_total = grid_points_per_dimension[0] * grid_points_per_dimension[1] * grid_points_per_dimension[2]; double adjustment; if (excluded_dimension != -1) { - // When one dimension is fixed at 2, use square root for the other two dimensions + // When one dimension is excluded, use square root for the other two dimensions adjustment = sqrt(grid_points_total / new_total); } else { // When all dimensions are used, use cubic root @@ -204,18 +193,16 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ grid_points_per_dimension[i] = round(grid_points_per_dimension[i] * adjustment); } - //TODO: temporary - // printf("Grid points in x, y, z: %d, %d, %d \n", grid_points_per_dimension[0], grid_points_per_dimension[1], grid_points_per_dimension[2]); - // Calculate spacing between grid points in each dimension vector delta_value(3, 0.0); for (int i = 0; i < 3; i++){ if (grid_points_per_dimension[i] > 1){ - delta_value[i] = domain_length[i] / (grid_points_per_dimension[i] - 1); + delta_value[i] = (domain_length[i] - 2*TINY_BIT) / (grid_points_per_dimension[i] - 1); } } + // Initialize point at center of domain double x = spatial_box_->lower_left().x + domain_length[0] * 0.5; double y = spatial_box_->lower_left().y + domain_length[1] * 0.5; double z = spatial_box_->lower_left().z + domain_length[2] * 0.5; @@ -223,23 +210,24 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ // Generate all grid points for (int i = 0; i < grid_points_per_dimension[0]; i++) { if (grid_points_per_dimension[0] > 1) { - x = spatial_box_->lower_left().x + i * delta_value[0]; + x = spatial_box_->lower_left().x + TINY_BIT + i * delta_value[0]; } for (int j = 0; j < grid_points_per_dimension[1]; j++) { if (grid_points_per_dimension[1] > 1) { - y = spatial_box_->lower_left().y + j * delta_value[1]; + y = spatial_box_->lower_left().y + TINY_BIT + j * delta_value[1]; } for (int k = 0; k < grid_points_per_dimension[2]; k++) { if (grid_points_per_dimension[2] > 1) { - z = spatial_box_->lower_left().z + k * delta_value[2]; + z = spatial_box_->lower_left().z + TINY_BIT + k * delta_value[2]; } + // Add grid point grid_points_.push_back({x, y, z}); } } } - // check if mesh grid points are inside spatial domain, if not erase them - //TODO: maybe random sampling would be better + // Check if mesh grid points are inside spatial domain, if not erase them + //TODO: Maybe all grid points should just be sampled randomly inside the domain to avoid erasing points and decreasing total number of points? for (int i = grid_points_.size() - 1; i >= 0; i--){ Position xi = grid_points_[i]; @@ -259,7 +247,7 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ // Places random points in the spatial domain. // Each point corresponds to the initial center of a rank. -void DecompositionMap::initialize_points(){ +void DecompositionMap::initialize_voronoi_centers(){ rank_centers_.resize(mpi::n_procs); uint64_t seed = openmc_get_seed(); @@ -310,8 +298,8 @@ void DecompositionMap::calculate_voronoi(vector& position_sum_per_rank // Find closest rank center for (int rank = 0; rank < mpi::n_procs; rank++) { double dist = (point - rank_centers_[rank]).norm(); - // Power Voronoi diagram uses sqaured distances - dist *= dist; + // Power Voronoi diagram uses squared distances + dist = dist*dist - rank_weights_[rank]; if (dist < min_distance) { min_distance = dist; @@ -340,9 +328,9 @@ void DecompositionMap::calculate_voronoi(vector& position_sum_per_rank Position DecompositionMap::calculate_centroids(const Position position_sum, const int num_points, int rank){ - // check if any points have been recorded in rank //TODO: Message not precise enough, specify what is meant by "mesh". + // check if any points have been recorded in rank if (num_points == 0){ - fatal_error("Rank " + std::to_string(rank) + " has no Voronoi cell points. Mesh is too coarse."); + fatal_error("Rank " + std::to_string(rank) + " has no Voronoi cell points. This indicates that the number of grid points for the Voronoi tesselation is too coarse. Requires source code modificaiton to fix."); } Position centroid = position_sum; @@ -393,13 +381,13 @@ void DecompositionMap::exchange_sr_info(ParallelMap 0.0) { //TODO: can this check be avoided? + if (pair.second.scalars_.volume_ > 0.0) { bcast_size++; } } } - MPI_Bcast(&bcast_size, 1, MPI_UINT64_T, rank, mpi::intracomm); //TODO: MPI_UINT64_T moght not be available? + MPI_Bcast(&bcast_size, 1, MPI_UINT64_T, rank, mpi::intracomm); if (bcast_size > 0) { @@ -437,8 +425,8 @@ void DecompositionMap::exchange_sr_info(ParallelMap test_ranks; if (test_all_ranks){ @@ -642,51 +629,19 @@ int DecompositionMap::find_closest_rank(Position r, bool test_all_ranks) { void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain, double batch_transport_time){ - // Reset rank load - std::fill(rank_load_.begin(), rank_load_.end(), 0.0); - - // Reset volumes, local volumes of base source regions, which might change when source regions change rank ownership + // Reset local volumes of base source regions, which might change when source regions change rank ownership std::fill(volume_base_sr_.begin(), volume_base_sr_.end(), 0.0); - // Share number of ray tracing scores per base source region across all ranks - // MPI_Allreduce(MPI_IN_PLACE, num_base_source_region_RT_batch_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - // MPI_Allreduce(MPI_IN_PLACE, num_mesh_bin_RT_batch_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - - // if(mpi::master){ - // uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), uint64_t{0}); - // uint64_t sum_bsr_RT_tot = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); - // uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); - // uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), uint64_t{0}); - // uint64_t sum_mb_RT_tot = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); - // printf("Sum of base_source_region_RT_batch_ before: %lu\n", sum_bsr_RT_tot); - // printf("Sum of mesh_bin_RT_batch_ before: %lu\n", sum_mb_RT_tot); - // printf("Sum of base_source_region_RT_batch_ new: %lu\n", sum_bsr_RT); - // printf("Sum of mesh_bin_RT_batch_ new: %lu\n", sum_mb_RT); - // printf("Sum of mesh bins: %lu\n", sum_mesh_bins); - // } - num_base_source_region_RT_tot_ = num_base_source_region_RT_batch_; num_mesh_bin_RT_tot_ = num_mesh_bin_RT_batch_; - // Add to total - // #pragma omp parallel for - // for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { - // num_base_source_region_RT_tot_[bsr] += num_base_source_region_RT_batch_[bsr]; - // num_mesh_bin_RT_tot_[bsr] += num_mesh_bin_RT_batch_[bsr]; - // } - - // // Reset batch-wise counters - // fill(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), 0); - // fill(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), 0); - - // Add mesh_bins per base source region for newly discovered source regions + // Add volumes of newly discovered source regions vector mesh_bins_per_base_sr_local(n_base_sr_, 0); for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { - mesh_bins_per_base_sr_[sr_key.base_source_region_id] ++; //TODO: Remove this, currently still needed for testing volume_base_sr_[sr_key.base_source_region_id] += sr.scalars_.volume_; } - + // Add volumes of known source regions for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { SourceRegionKey sr_key = domain->source_regions_.key(sr); uint64_t base_sr = sr_key.base_source_region_id; @@ -694,228 +649,107 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain, double batc volume_base_sr_[base_sr] += domain->source_regions_.volume(sr); } - // int local_new_sr_discovered = 0; - // if (domain->discovered_source_regions_.size() > 0) { - // local_new_sr_discovered = 1; - // } - // int global_new_sr_discovered = 0; - // // MPI_Allreduce(&local_new_sr_discovered, &global_new_sr_discovered, 1, MPI_INT, MPI_MAX, mpi::intracomm); - // MPI_Allreduce(&local_new_sr_discovered, &global_new_sr_discovered, 1, MPI_INT, MPI_MAX, mpi::intracomm); - - // //TODO: Is that check worth it? - // if (global_new_sr_discovered > 0) { - // // Share mesh_bins_per_base_sr_ across all ranks - // MPI_Allreduce(MPI_IN_PLACE, mesh_bins_per_base_sr_local.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - // // MPI_Allreduce(mesh_bins_per_base_sr_local.data(), mesh_bins_per_base_sr_.data(), n_base_sr_, MPI_UINT64_T, MPI_SUM, mpi::intracomm); - // #pragma omp parallel for - // for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { - // mesh_bins_per_base_sr_[bsr] += mesh_bins_per_base_sr_local[bsr]; - // } - // } - - // if(mpi::master){ - // printf("RANK: %d, Number of base_source_regions: %lu\n", mpi::rank, n_base_sr_); - // // uint64_t sum_bsr_RT = std::accumulate(num_base_source_region_RT_tot_.begin(), num_base_source_region_RT_tot_.end(), uint64_t{0}); - // // uint64_t sum_mb_RT = std::accumulate(num_mesh_bin_RT_tot_.begin(), num_mesh_bin_RT_tot_.end(), uint64_t{0}); - // uint64_t sum_mesh_bins = std::accumulate(mesh_bins_per_base_sr_.begin(), mesh_bins_per_base_sr_.end(), uint64_t{0}); - // // printf("Sum of base_source_region_RT_tot_: %lu\n", sum_bsr_RT); - // // printf("Sum of mesh_bin_RT_tot_: %lu\n", sum_mb_RT); - // printf("Sum of mesh bins: %lu\n", sum_mesh_bins); - // } - - - // calculate ray tracing cost per base source region + // Calculate ray tracing cost per base source region #pragma omp parallel for for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { if (volume_base_sr_[bsr] > 0.0) { - // if (mesh_bins_per_base_sr_[bsr] > 0) { - // ray_tracing_cost_[bsr] = (static_cast(num_base_source_region_RT_tot_[bsr] + num_mesh_bin_RT_tot_[bsr]) / - // mesh_bins_per_base_sr_[bsr]); //TODO: weighted with volume? - // if (mpi::master){ - // printf("Base source region %lu: Volume %f, Mesh bins %lu, bsrRT %lu, mbRT: %lu\n", bsr, volume_base_sr_[bsr], mesh_bins_per_base_sr_[bsr], num_base_source_region_RT_tot_[bsr], num_mesh_bin_RT_tot_[bsr]); - // } - ray_tracing_cost_[bsr] = (C2_ * static_cast(num_base_source_region_RT_tot_[bsr]) + C3_ * static_cast(num_mesh_bin_RT_tot_[bsr]))/volume_base_sr_[bsr]; + ray_tracing_cost_[bsr] = (C2_ * static_cast(num_base_source_region_RT_tot_[bsr]) + C3_ * static_cast(num_mesh_bin_RT_tot_[bsr]))/volume_base_sr_[bsr]; } else { ray_tracing_cost_[bsr] = 0.0; } - // if (mpi::master){ - // printf("Base source region %lu: Mesh bins %lu, bsrRT %lu, mbRT: %lu, RT cost %f\n", bsr, mesh_bins_per_base_sr_[bsr], num_base_source_region_RT_tot_[bsr], num_mesh_bin_RT_tot_[bsr], ray_tracing_cost_[bsr]); - // } } // Accumulate load in known source regions - double load = 0.0; - #pragma omp parallel for reduction(+ : load) + double local_estimated_load = 0.0; + #pragma omp parallel for reduction(+: local_estimated_load) for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { SourceRegionKey sr_key = domain->source_regions_.key(sr); uint64_t base_sr = sr_key.base_source_region_id; - double volume_sr = domain->source_regions_.volume_t(sr); - volume_sr += domain->source_regions_.volume(sr); + double volume_sr = domain->source_regions_.volume_t(sr) + domain->source_regions_.volume(sr); double load_sr = C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; - load += load_sr; + local_estimated_load += load_sr; } - // Add load of newly discovered source regions. + // Add load of newly discovered source regions double load_sr; for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { uint64_t base_sr = sr_key.base_source_region_id; double volume_sr = sr.scalars_.volume_; load_sr = C1_ * (sr.scalars_.n_hits_/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; - load += load_sr; + local_estimated_load += load_sr; } - - if (mpi::master){ - vector volumes(n_base_sr_, 0.0); - - for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { - SourceRegionKey sr_key = domain->source_regions_.key(sr); - uint64_t base_sr = sr_key.base_source_region_id; - volumes[base_sr] += (domain->source_regions_.volume_t(sr)+domain->source_regions_.volume(sr))/volume_base_sr_[base_sr]; - } - for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { - uint64_t base_sr = sr_key.base_source_region_id; - double volume_sr = sr.scalars_.volume_; - volumes[base_sr] += volume_sr/volume_base_sr_[base_sr]; - } - - // for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { - // printf("Base source region %lu: Volume total %f, Ray tracing cost %f, \n", bsr, volumes[bsr], ray_tracing_cost_[bsr]); - // } - } + // Communicate estimated load across ranks + MPI_Allgather(&local_estimated_load, 1, MPI_DOUBLE, estimated_rank_load_totals_.data(), 1, MPI_DOUBLE, mpi::intracomm); + estimated_load_sum_ = std::accumulate(estimated_rank_load_totals_.begin(), estimated_rank_load_totals_.end(), 0.0); - //TODO: Temporary print-outs - if (mpi::master) { - printf("Load distribution: "); - } - - // // Calculate rank load based on number of source region hits - // double load_total = 0.0; - // MPI_Allreduce(&load, &load_total, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); - // total_load_ = load_total; - //TODO: Temporary print-outs - // if(mpi::master){ - // printf("Total hits: %ld \n", n_hits_total); - // } - - // Communicate load across ranks - MPI_Allgather(&load, 1, MPI_DOUBLE, rank_load_absolute_.data(), 1, MPI_DOUBLE, mpi::intracomm); - total_load_ = std::accumulate(rank_load_absolute_.begin(), rank_load_absolute_.end(), 0.0); - - for (int rank = 0; rank < mpi::n_procs; rank++) { - rank_load_[rank] = rank_load_absolute_[rank] / total_load_; //TODO: maybe I do not need fractional at all? - } + // Communicate measured load across ranks + MPI_Allgather(&batch_transport_time, 1, MPI_DOUBLE, measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, mpi::intracomm); + double measured_load_sum = std::accumulate(measured_rank_load_fractions_.begin(), measured_rank_load_fractions_.end(), 0.0); + // Calculate fractions //TODO: maybe I do not need fractions? for (int rank = 0; rank < mpi::n_procs; rank++) { - // TODO: Temporary print-outs - if (mpi::master) { - printf("RANK %d: %.2f%% ", rank, rank_load_[rank]*100.0); - } - } - //TODO: Temporary print-outs - if (mpi::master) { - printf("\n"); + estimated_rank_load_fractions_[rank] = estimated_rank_load_totals_[rank] / estimated_load_sum_; + measured_rank_load_fractions_[rank] = measured_rank_load_fractions_[rank] / measured_load_sum; } - // Calculate imbalance - // double max_imbalance = 0.0; - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // double imbalance = std::abs(rank_load_[rank] - target_load_)/ target_load_; - // if (imbalance > max_imbalance){ - // max_imbalance = imbalance; - // } - // } - - // max_imbalance_ = max_imbalance; - // if (mpi::master){ - // printf("Current max. load imbalance: %.2f%% \n", max_imbalance_ * 100.0); - // } - - double max_load = *std::max_element(rank_load_.begin(), rank_load_.end()); - // double avg_load1 = total_load_/mpi::n_procs; - // double avg_load = std::accumulate(rank_load_.begin(), rank_load_.end(), 0.0)/mpi::n_procs; //TODO: can use target_load_ instead! - // if (mpi::master){ - // printf("Total load %f, avg load calc1 %f, avg load calc2 %f \n", total_load_, target_load_, avg_load); - // } - // max_imbalance_ = (max_load - avg_load) / avg_load; - // max_imbalance_ = (max_load - target_load_) / target_load_; - // if (mpi::master){printf("Max load %f, avg load %f \n", max_load, avg_load);} - - // Reset batch-wise counters + // Reset batch-wise counters fill(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), 0); fill(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), 0); - - // Determine rank load based on transport times - double load_total_time = 0.0; - MPI_Allreduce(&batch_transport_time, &load_total_time, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); - double load_time = batch_transport_time / load_total_time; - - // Communicate load across ranks - MPI_Allgather(&load_time, 1, MPI_DOUBLE, rank_load_measured_.data(), 1, MPI_DOUBLE, mpi::intracomm); - - vector load_average(mpi::n_procs, 0.0); + // Average measured rank load over previous batches + vector averaged_measured_load_fractions(mpi::n_procs, 0.0); int n_batches_to_average = load_history_size_; + //TODO: A lot here can be simplified when load balancing is only done in first 5 batches if (simulation::current_batch < load_history_size_){ n_batches_to_average = simulation::current_batch; } // Save to history for (int rank = 0; rank < mpi::n_procs; rank++) { - load_history_[rank][history_idx] = rank_load_measured_[rank]; - load_average[rank] = std::accumulate(load_history_[rank].begin(), load_history_[rank].end(), 0.0) / static_cast(n_batches_to_average); + load_history_[rank][history_idx] = measured_rank_load_fractions_[rank]; + averaged_measured_load_fractions[rank] = std::accumulate(load_history_[rank].begin(), load_history_[rank].end(), 0.0) / static_cast(n_batches_to_average); } - // circular index update + // Circular index update history_idx = (history_idx + 1) % load_history_size_; // Calculate measured imbalance - // double max_load_measured = *std::max_element(rank_load_measured_.begin(), rank_load_measured_.end()); - double max_load_measured = *std::max_element(load_average.begin(), load_average.end()); - - + double max_load_measured = *std::max_element(averaged_measured_load_fractions.begin(), averaged_measured_load_fractions.end()); + // TODO: Can be removed if load balancing fixed for first 5 batches only max_load_imbalance_measured_ = (max_load_measured - target_load_) / target_load_; - if (mpi::master) { - auto max_it = std::max_element(rank_load_measured_.begin(), rank_load_measured_.end()); - int max_index = std::distance(rank_load_measured_.begin(), max_it); - printf("Measured max. load imbalance: %.2f%% in rank: %d\n", max_load_imbalance_measured_ * 100.0, max_index); - } - } void DecompositionMap::balance_load(FlatSourceDomain* domain){ - //TODO: The optimisation seems really messy + //TODO: The optimisation strategy is messy cnt_optimizations_total_ ++; int max_iterations = 200; - // double max_imbalance; // = max_imbalance_; - // double imbalance; - int it_outer = 0; - double adaptation_factor = 1; //0.5 //0.1; + double adaptation_factor = 1; double min_adaptation_factor = 0.01; double max_adaptation_factor = 2; - double avg_rank_distance = max_domain_length_/cbrt(mpi::n_procs); // rough estimate of average distance between ranks //TODO: cubic root might not be adaquate for problems that are not box like - double weight_scale = avg_rank_distance * avg_rank_distance * optimization_history_factor_; //TODO: maybe adjust dynamically dependent on wether previous batch has converged - // double weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; // scale weights based on average load + double avg_rank_distance = max_domain_length_/cbrt(mpi::n_procs); // rough estimate of average distance between ranks + double weight_scale = avg_rank_distance * avg_rank_distance * optimization_history_factor_; double beta = 0.6; // momentum damping bool check_all_ranks = true; vector weight_change(mpi::n_procs, 0.0); - vector rank_load_combined(mpi::n_procs, 0.0); + vector combined_rank_load(mpi::n_procs, 0.0); vector load_ratio(mpi::n_procs, 0.0); + // Combine estimated load with measured load ratios for (int rank = 0; rank < mpi::n_procs; rank++) { load_ratio[rank] = calculate_load_ratio(rank); - rank_load_combined[rank] = load_ratio[rank] * rank_load_absolute_[rank]; + combined_rank_load[rank] = load_ratio[rank] * estimated_rank_load_totals_[rank]; } - double total_rank_load_combined = std::accumulate(rank_load_combined.begin(), rank_load_combined.end(), 0.0); + double combined_load_sum = std::accumulate(combined_rank_load.begin(), combined_rank_load.end(), 0.0); for (int rank = 0; rank < mpi::n_procs; rank++) { - rank_load_combined[rank] = (rank_load_combined[rank]/total_rank_load_combined); + combined_rank_load[rank] = (combined_rank_load[rank]/combined_load_sum); } - double max_load = *std::max_element(rank_load_combined.begin(), rank_load_combined.end()); + double max_load = *std::max_element(combined_rank_load.begin(), combined_rank_load.end()); double max_imbalance = (max_load - target_load_) / target_load_; double prev_imbalance = max_imbalance; @@ -925,65 +759,27 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ imbalance_history.push_back(max_imbalance); weight_history.push_back(rank_weights_); - // vector old_weights = rank_weights_; - // double max_imbalance_old = max_imbalance_; - - - // vector imbalance_per_rank(mpi::n_procs, 0.0); - - std::unordered_map> sr_send; // contains regions to be send - + // Change weights to equalize load based on combined load estimates while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ - - //TODO: temporary - if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); - - // Optimise rank load rank by rank - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // double correction = adaptation_factor * ((rank_load_[rank] - target_load_) / target_load_); // * weight_scale; - // rank_weights_[rank] -= correction; - // } + // if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); //TODO: Remove + it_outer ++; for (int rank = 0; rank < mpi::n_procs; rank++) { - // weight_scale = std::accumulate(rank_weights_.begin(), rank_weights_.end(), 0.0) / mpi::n_procs; - // imbalance_per_rank[rank] = (rank_load_[rank] - target_load_) / target_load_; - // double corr = imbalance_per_rank[rank] * weight_scale; - double corr = ((rank_load_combined[rank] - target_load_) / target_load_) * weight_scale; + double corr = ((combined_rank_load[rank] - target_load_) / target_load_) * weight_scale; weight_change[rank] = beta * weight_change[rank] + (1.0 - beta) * corr; // keep some inertia from previous changes to prevent oscillations - // double damping = std::min(1.0, max_imbalance / imbalance_tolerance_); // dampening factor based on how far we are from convergence double damping = std::clamp(max_imbalance / prev_imbalance, 0.1, 1.0); // dampening factor based on whether we are getting closer to convergence or not, prevents big jumps, if too big a change, more dampening is applied rank_weights_[rank] -= adaptation_factor * damping * weight_change[rank]; } - // if (it_outer > 0 && simulation::current_batch > 1){ if (simulation::current_batch > 1){ + // Check distances to all ranks only in first batch, otherwise only recorded neighbors check_all_ranks = false; } - update_load(domain, check_all_ranks, rank_load_combined, load_ratio); - it_outer ++; - - double max_load = *std::max_element(rank_load_combined.begin(), rank_load_combined.end()); - // double avg_load = std::accumulate(rank_load_combined.begin(), rank_load_combined.end(), 0.0) / mpi::n_procs; //TODO: can use target_load_ instead! - // double avg_load = total_load_ / mpi::n_procs; - // max_imbalance = (max_load - avg_load) / avg_load; + // Calculate new load after weight update + update_load(domain, check_all_ranks, combined_rank_load, load_ratio); + double max_load = *std::max_element(combined_rank_load.begin(), combined_rank_load.end()); max_imbalance = (max_load - target_load_) / target_load_; - // imbalance = 0.0; - // max_imbalance = 0.0; - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // imbalance = std::abs(rank_load_[rank] - target_load_)/ target_load_; - // if (imbalance > max_imbalance){ - // max_imbalance = imbalance; - // } - // } - - // max_imbalance = 0.0; - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // double imbalance = std::abs(imbalance_per_rank[rank]); - // if (imbalance > max_imbalance) { - // max_imbalance = imbalance; - // } - // } // Store imbalance history imbalance_history.push_back(max_imbalance); @@ -991,12 +787,11 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // Adaptive factor if (max_imbalance > prev_imbalance) - adaptation_factor = std::max(adaptation_factor * 0.5, min_adaptation_factor); // don’t go below min + adaptation_factor = std::max(adaptation_factor * 0.5, min_adaptation_factor); else - adaptation_factor = std::min(adaptation_factor * 1.05, max_adaptation_factor); // stable - accelerate slightly + adaptation_factor = std::min(adaptation_factor * 1.05, max_adaptation_factor); prev_imbalance = max_imbalance; - } // Check convergence and adjust history optimization factor depending on failure mode to enable better convergence in the following batch @@ -1029,7 +824,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ double oscillation_ratio = (double)direction_changes / (imbalance_history.size() - 2); if (oscillation_ratio > 0.4) { - // decrease weight for next batch if oscillating, TODO: SHould this be safeguarded with max/ min value? + // decrease weight for next batch if oscillating, TODO: Should this be safeguarded with separate min/max values? optimization_history_factor_ = std::max(optimization_history_factor_ * 0.5, min_adaptation_factor); } else { // increase weight for faster convergence if too slow. @@ -1043,19 +838,22 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ rank_weights_ = weight_history[best_index]; if (mpi::master){ - printf("Best imbalance during optimization was %.2f%% at iteration %d. New history factor: %.2f \n", - best_imbalance*100.0, best_index, optimization_history_factor_); + printf("Best imbalance during optimization was %.2f%% at iteration %d. \n", + best_imbalance*100.0, best_index); } + //TODO: remove if load balancing only applied to first 5 batches by default if (cnt_unconverged_optimizations_ == 5){ + // relax tolerance if not converging cnt_unconverged_optimizations_ = 0; - imbalance_tolerance_ = best_imbalance; // relax tolerance if not converging + imbalance_tolerance_ = best_imbalance; if (mpi::master){ printf("Relaxing MPI load balancing tolerance to %.2f%% \n", imbalance_tolerance_*100.0); } } if (best_index == 0){ + // if no improvement at all, just keep current decomposition and return return; } } else { @@ -1066,78 +864,44 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ } } - simulation::time_load_balance_sr_transfer.start(); redistribute_source_regions(domain); - MPI_Barrier(mpi::intracomm); //TODO: Should this barrier stay here? - simulation::time_load_balance_sr_transfer.stop(); - - //TODO: temporary - // if (mpi::master){ - // printf("Weights: "); - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // printf("RANK %d: %.2f ", rank, rank_weights_[rank]); - // } - // printf("\n"); - // } + MPI_Barrier(mpi::intracomm); } -void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& rank_load_combined, vector& load_ratio){ +void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& combined_rank_load, vector& load_ratio){ - // vector n_hits(mpi::n_procs, 0); vector load(mpi::n_procs, 0); // Add up source region hits to respective rank depending of position of centroid of each source region #pragma omp parallel { // number of hits per thread - // vector local_hits(mpi::n_procs, 0); - vector local_load(mpi::n_procs, 0); + vector thread_load(mpi::n_procs, 0); #pragma omp for for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { Position centroid = domain->source_regions_.centroid(sr); int owner = find_closest_rank(centroid, check_all_ranks); - // local_hits[owner] += domain->source_regions_.n_hits(sr); double volume_sr = domain->source_regions_.volume_t(sr); - local_load[owner] += load_ratio[owner] * (C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]); + thread_load[owner] += load_ratio[owner] * (C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]); } // Combine results from different threads - #pragma omp critical (combining_hits) + #pragma omp critical (combining_loads) { for (int i = 0; i < mpi::n_procs; i++) { - // n_hits[i] += local_hits[i]; - load[i] += local_load[i]; + load[i] += thread_load[i]; } } } - // // Check if any new neighbors were discovered during this update - // if (check_all_ranks){ - - // // Create a set from current neighbors for faster lookups - // std::unordered_set existing_neighbors( - // mpi::decomp_map.my_neighbors.begin(), - // mpi::decomp_map.my_neighbors.end() - // ); - - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // // add to neighbor list if new neighbour found - // if (n_hits[rank] > 0 && rank != mpi::rank && existing_neighbors.count(rank) == 0){ - // mpi::decomp_map.my_neighbors.push_back(rank); - // } - // } - // } - // Accumulate hits across all ranks - // MPI_Allreduce(MPI_IN_PLACE, n_hits.data(), mpi::n_procs, MPI_UINT64_T, MPI_SUM, mpi::intracomm); + // Communicate new load estimates across ranks MPI_Allreduce(MPI_IN_PLACE, load.data(), mpi::n_procs, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + double load_sum = std::accumulate(load.begin(), load.end(), 0.0); - double total_rank_load_combined = std::accumulate(load.begin(), load.end(), 0.0); //TODO: Is this constant? Can this be stored somewhere? - + // Update new combined rank load fractions for (int rank = 0; rank < mpi::n_procs; rank++){ - // rank_load_[rank] = (n_hits[rank]/static_cast(n_hits_sum_)); - // rank_load_[rank] = (load[rank]/total_load_); - rank_load_combined[rank] = load[rank]/total_rank_load_combined; + combined_rank_load[rank] = load[rank]/load_sum; } } @@ -1164,7 +928,7 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { } } - // Each rank communicates other ranks about ownership changes to update subdomain map + // Each rank informs other ranks about ownership changes to update subdomain map for (int rank = 0; rank < mpi::n_procs; rank++) { // Send size @@ -1240,10 +1004,6 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { } } - // // Update source regions in domain - // domain->source_regions_ = source_regions_new; - - // int64_t start_sr_id = domain->source_regions_.n_source_regions(); int64_t start_sr_id = source_regions_new.n_source_regions(); // Receive source regions @@ -1261,13 +1021,9 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { SourceRegion sr_recv(negroups_, is_linear_); receive_sr_data(sender, sr_recv); //TODO: Use source_regions_.push_back(sr_recv); } } - // // Reinitialise tallies - // domain->convert_source_regions_to_tallies(start_sr_id); - // Update source regions in domain domain->source_regions_ = source_regions_new; @@ -1282,8 +1038,8 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { } double DecompositionMap::calculate_load_ratio(int rank){ - if (rank_load_[rank] > 0.0){ - return rank_load_measured_[rank]/rank_load_[rank]; + if (estimated_rank_load_fractions_[rank] > 0.0){ + return measured_rank_load_fractions_[rank]/estimated_rank_load_fractions_[rank]; } else { return 1.0; } diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index cfc28aef4bb..6002a6e6a5e 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -387,10 +387,6 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const simulation::time_decomposition_handling.stop(); } - // if (mpi::master) { - // printf("Batch %d, RANK %d: keff_old: %f, Fission Rate Old: %f, Fission Rate New: %f \n", simulation::current_batch, mpi::rank, k_eff_old, fission_rate_old, fission_rate_new); - // } - double k_eff_new = k_eff_old * (fission_rate_new / fission_rate_old); double H = 0.0; @@ -410,7 +406,6 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const if (mpi::n_procs > 1) { simulation::time_decomposition_handling.start(); - // MPI_Allreduce(MPI_IN_PLACE, &H, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); if (mpi::master) { MPI_Reduce(MPI_IN_PLACE, &H, 1, MPI_DOUBLE, MPI_SUM, 0, mpi::intracomm); } else { @@ -1013,8 +1008,6 @@ void FlatSourceDomain::output_to_vtk() const // is checked and flipped if necessary. void FlatSourceDomain::output_to_vtk_decomp() const { - // printf("-2 RANK %d: Starting VTK output in random ray mode...\n", mpi::rank); - // MPI_Barrier(mpi::intracomm); if (mpi::master){ // Rename .h5 plot filename(s) to .vtk filenames @@ -1075,7 +1068,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const // Relate voxel spatial locations to random ray source regions vector voxel_indices(Nx * Ny * Nz); - // vector voxel_indices_key(Nx * Ny * Nz); vector voxel_positions(Nx * Ny * Nz); vector weight_windows(Nx * Ny * Nz); vector my_voxel_ids; @@ -1097,7 +1089,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const bool found = exhaustive_find_cell(p); if (!found) { - // voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1,-1}; voxel_indices[z * Ny * Nx + y * Nx + x] = -1; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; weight_windows[z * Ny * Nx + y * Nx + x] = 0.0; @@ -1124,7 +1115,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const } } - // voxel_indices_key[z * Ny * Nx + y * Nx + x] = sr_key; voxel_indices[z * Ny * Nx + y * Nx + x] = sr; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; @@ -1173,9 +1163,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const std::fprintf(plot, "POINT_DATA %d\n", Nx * Ny * Nz); } - // printf("-1 RANK: %d start plotting\n", mpi::rank); - // MPI_Barrier(mpi::intracomm); - int vector_size = Nx * Ny * Nz; vector vector_out_float(vector_size, 0.0); vector vector_out_int(vector_size, 0); @@ -1185,9 +1172,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const float min_flux = 0.0; float max_flux = -1.0e20; - // printf("0 RANK: %d start plotting\n", mpi::rank); - // MPI_Barrier(mpi::intracomm); - // Plot multigroup flux data for (int g = 0; g < negroups_; g++) { @@ -1214,8 +1198,12 @@ void FlatSourceDomain::output_to_vtk_decomp() const if (mpi::master){ MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &num_neg, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &num_samples, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); } else { MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&num_neg, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&num_samples, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); } if (mpi::master){ @@ -1230,13 +1218,10 @@ void FlatSourceDomain::output_to_vtk_decomp() const fill(vector_out_float.begin(), vector_out_float.end(), 0.0); } - // printf("1 RANK: %d finished flux plotting\n", mpi::rank); - // MPI_Barrier(mpi::intracomm); - // Slightly negative fluxes can be normal when sampling corners of linear // source regions. However, very common and high magnitude negative fluxes - // may indicate numerical instability. //TODO: needs changing for MPI ranks - if (num_neg > 0) { + // may indicate numerical instability. + if (mpi::master && num_neg > 0) { warning(fmt::format("{} plot samples ({:.4f}%) contained negative fluxes " "(minumum found = {:.2e} maximum_found = {:.2e})", num_neg, (100.0 * num_neg) / num_samples, min_flux, max_flux)); @@ -1266,9 +1251,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const fill(vector_out_float.begin(), vector_out_float.end(), 0.0); - // printf("2 RANK: %d Completed FSR plotting\n", mpi::rank); - // MPI_Barrier(mpi::intracomm); - // Plot Materials for (int voxel_id : my_voxel_ids) { int mat = -1; @@ -1297,9 +1279,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const fill(vector_out_int.begin(), vector_out_int.end(), 0); - // printf("3 RANK: %d finished material plotting\n", mpi::rank); - // MPI_Barrier(mpi::intracomm); - // Plot rank subdomains for (int voxel_id : my_voxel_ids) { int rank_id = mpi::rank; @@ -1325,40 +1304,9 @@ void FlatSourceDomain::output_to_vtk_decomp() const fill(vector_out_float.begin(), vector_out_float.end(), 0.0); - // Plot calculated load + // Plot measured load based on transport sweep timers for (int voxel_id : my_voxel_ids) { - float value = mpi::decomp_map.rank_load_[mpi::rank]; - vector_out_float[voxel_id] = value; - } - - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - } - - if (mpi::master){ - std::fprintf(plot, "SCALARS calculated_load float\n"); - std::fprintf(plot, "LOOKUP_TABLE default\n"); - - for (float value : vector_out_float) { - float print_value = convert_to_big_endian(value); - std::fwrite(&print_value, sizeof(float), 1, plot); - } - } - - fill(vector_out_float.begin(), vector_out_float.end(), 0.0); - - // Plot actual load - float transport_time = (simulation::time_transport.elapsed() - simulation::time_ray_buffering.elapsed()); - float total_transport_time = 0.0; - - MPI_Allreduce(&transport_time, &total_transport_time, 1, MPI_FLOAT, MPI_SUM, mpi::intracomm); - - // printf("RANK %d: transport_time = %f %f\n", mpi::rank, transport_time, total_transport_time); - - for (int voxel_id : my_voxel_ids) { - float value = transport_time/total_transport_time; + float value = mpi::decomp_map.measured_rank_load_fractions_[mpi::rank]; vector_out_float[voxel_id] = value; } @@ -1380,114 +1328,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const fill(vector_out_float.begin(), vector_out_float.end(), 0.0); - // Plot expensive ray tracing - double sum_bsr_RT = 0; - - for (int i = 0; i < mpi::decomp_map.n_base_sr_; i++) { - sum_bsr_RT += static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[i])/mpi::decomp_map.mesh_bins_per_base_sr_[i]; - } - - // uint64_t sum_bsr_RT = std::accumulate(mpi::decomp_map.num_base_source_region_RT_tot_.begin(), mpi::decomp_map.num_base_source_region_RT_tot_.end(), uint64_t{0}); - - for (int voxel_id : my_voxel_ids) { - int fsr = voxel_indices[voxel_id]; - float value = 0; - if (fsr >= 0) { - SourceRegionKey sr_key = source_regions_.key(fsr); - // value = static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[sr_key.base_source_region_id])/(sum_bsr_RT * mpi::decomp_map.mesh_bins_per_base_sr_[sr_key.base_source_region_id]); - value = static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[sr_key.base_source_region_id])/(mpi::decomp_map.mesh_bins_per_base_sr_[sr_key.base_source_region_id]); - // value = static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[sr_key.base_source_region_id])/(sum_bsr_RT); - // if (mpi::master) printf("num_base_source_region_RT_tot_[1] = %lu\n", mpi::decomp_map.num_base_source_region_RT_tot_[1]); - // if (mpi::master) printf("num_base_source_region_RT_tot_[%lu] = %lu, sum_bsr_RT = %lu, value = %f\n", sr_key.base_source_region_id, mpi::decomp_map.num_base_source_region_RT_tot_[sr_key.base_source_region_id], sum_bsr_RT, value); - } - vector_out_float[voxel_id] = value; // To avoid -1 for void (MPI_SUM) - } - - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - } - - if (mpi::master){ - std::fprintf(plot, "SCALARS ExpensiveRT float\n"); - std::fprintf(plot, "LOOKUP_TABLE default\n"); - - for (float value : vector_out_float) { - float print_value = convert_to_big_endian(value); - std::fwrite(&print_value, sizeof(float), 1, plot); - } - } - - fill(vector_out_float.begin(), vector_out_float.end(), 0.0); - - // Plot cheap ray tracing - double sum_mb_RT = 0.0; - - for (int i = 0; i < mpi::decomp_map.n_base_sr_; i++) { - sum_mb_RT += static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[i])/mpi::decomp_map.mesh_bins_per_base_sr_[i]; - } - - // uint64_t sum_mb_RT = std::accumulate(mpi::decomp_map.num_mesh_bin_RT_tot_.begin(), mpi::decomp_map.num_mesh_bin_RT_tot_.end(), uint64_t{0}); - - for (int voxel_id : my_voxel_ids) { - int fsr = voxel_indices[voxel_id]; - float cheapRT = 0; - if (fsr >= 0) { - SourceRegionKey sr_key = source_regions_.key(fsr); - // cheapRT = static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[sr_key.base_source_region_id])/(sum_mb_RT * mpi::decomp_map.mesh_bins_per_base_sr_[sr_key.base_source_region_id]); - cheapRT = static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[sr_key.base_source_region_id])/(mpi::decomp_map.mesh_bins_per_base_sr_[sr_key.base_source_region_id]); - // cheapRT = static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[sr_key.base_source_region_id])/sum_mb_RT; - } - vector_out_float[voxel_id] = cheapRT; // To avoid -1 for void (MPI_SUM) - } - - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - } - - if (mpi::master){ - std::fprintf(plot, "SCALARS CheapRT float\n"); - std::fprintf(plot, "LOOKUP_TABLE default\n"); - - for (float value : vector_out_float) { - float print_value = convert_to_big_endian(value); - std::fwrite(&print_value, sizeof(float), 1, plot); - } - } - - fill(vector_out_float.begin(), vector_out_float.end(), 0.0); - - // Plot number of hits - for (int voxel_id : my_voxel_ids) { - int fsr = voxel_indices[voxel_id]; - int n_hits = 0; - if (fsr >= 0) { - n_hits = source_regions_.n_hits(fsr); - } - vector_out_int[voxel_id] = n_hits; - } - - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_int.data(), vector_size, MPI_INT, MPI_SUM, 0, mpi::intracomm); - } else { - MPI_Reduce(vector_out_int.data(), nullptr, vector_size, MPI_INT, MPI_SUM, 0, mpi::intracomm); - } - - if (mpi::master){ - std::fprintf(plot, "SCALARS n_hits int\n"); - std::fprintf(plot, "LOOKUP_TABLE default\n"); - - for (int value : vector_out_int) { - int print_value = convert_to_big_endian(value); - std::fwrite(&print_value, sizeof(int), 1, plot); - } - } - - fill(vector_out_int.begin(), vector_out_int.end(), 0); - // Plot fission source if (settings::run_mode == RunMode::EIGENVALUE) { for (int voxel_id : my_voxel_ids) { @@ -1546,9 +1386,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const fill(vector_out_float.begin(), vector_out_float.end(), 0.0); - // printf("4 RANK: %d finished fisison plotting\n", mpi::rank); - // MPI_Barrier(mpi::intracomm); - // Plot weight window data if (variance_reduction::weight_windows.size() == 1) { for (int voxel_id : my_voxel_ids) { @@ -1575,9 +1412,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const } } - // printf("5 RANK: %d finished plotting\n", mpi::rank); - // MPI_Barrier(mpi::intracomm); - if (mpi::master){ std::fclose(plot); } @@ -2244,39 +2078,26 @@ bool FlatSourceDomain::is_geometry_3D() // Get spatial box of ray_source_ SpatialBox* sb = dynamic_cast( dynamic_cast(RandomRay::ray_source_.get())->space()); - - // printf("Test1\n"); - Position shift {FP_COINCIDENT, FP_COINCIDENT, FP_COINCIDENT}; //TODO: necessary? Adopted from halton sampling - double x_length = sb->upper_right().x - sb->lower_left().x; double y_length = sb->upper_right().y - sb->lower_left().y; double z_length = sb->upper_right().z - sb->lower_left().z; - // printf("Test2\n"); - int num_xy_points = 100; int num_z_points = 100; uint64_t seed = openmc_get_seed(); - // printf("Test3\n"); - for (int i = 0; i < num_xy_points; i++) { Position sample; sample.x = sb->lower_left().x + x_length * prn(&seed); sample.y = sb->lower_left().y + y_length * prn(&seed); - // z_point_samples = rhalton(num_z_points, current_seed(), skip = 0); SourceRegionKey sr_key_prev {-1, -1}; bool check_key = false; - // printf("Checking x,y = %1.6f, %1.6f\n", sample.x, sample.y); - - for (int j = 0; j < num_z_points; j++){ //TODO: include uppermost and lowermost position? + for (int j = 0; j < num_z_points; j++){ //TODO: Should uppermost and lowermost position always be checked? sample.z = sb->lower_left().z + z_length * prn(&seed); - // printf(" Checking z = %1.6f\n", sample.z); - Particle p; p.r() = sample; p.r_last() = sample; @@ -2289,23 +2110,13 @@ bool FlatSourceDomain::is_geometry_3D() continue; } - // printf("Test5\n"); - int i_cell = p.lowest_coord().cell(); int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); SourceRegionKey sr_key {sr, 0}; - // printf("Test6\n"); - - if (RandomRay::mesh_subdivision_enabled_) { - - // printf("Test6.1\n"); - int mesh_idx = base_source_regions_.mesh(sr); - // printf("Test6.2\n"); - int mesh_bin; if (mesh_idx == C_NONE) { mesh_bin = 0; @@ -2313,31 +2124,17 @@ bool FlatSourceDomain::is_geometry_3D() mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); } sr_key = {sr, mesh_bin}; - - // printf("Test6.3\n"); - - // printf(" Found source region key = (%ld, %ld)\n", sr_key.base_source_region_id, sr_key.mesh_bin); - - if (check_key && (sr_key.base_source_region_id != sr_key_prev.base_source_region_id || - sr_key.mesh_bin != sr_key_prev.mesh_bin)) { - return true; - } - - // printf("Test6.4\n"); - - sr_key_prev = sr_key; - check_key = true; - //TODO: why is this code checking sr when it is already known? - // auto it = source_region_map_.find(sr_key); - // if (it != source_region_map_.end()) { - // sr = it->second; - // } else { - // sr = -1; - // } } - // printf("Test7\n"); + // Check if sr_key has changed in z-direction + if (check_key && (sr_key.base_source_region_id != sr_key_prev.base_source_region_id || + sr_key.mesh_bin != sr_key_prev.mesh_bin)) { + return true; + } + // Set check_key to true after first sr_key has been loaded + sr_key_prev = sr_key; + check_key = true; } } diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 242a2713d59..957d55ac1c8 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -262,20 +262,11 @@ RandomRay::RandomRay(uint64_t ray_id, FlatSourceDomain* domain) : RandomRay() initialize_ray(ray_id, domain); } -// RandomRay::RandomRay(FlatSourceDomain* domain, RayExchangeData& data, vector angular_flux) : RandomRay() //TODO: obsolete, delete -RandomRay::RandomRay(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux) : RandomRay() -{ - restart_ray(domain, data, angular_flux); -} - // Transports ray until termination criteria are met uint64_t RandomRay::transport_history_based_single_ray() { using namespace openmc; while (alive()) { - // if (id() == 37849){ - // printf("Batch %d, RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d, surface: %d \n", simulation::current_batch, mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_, surface()); - // } event_advance_ray(); if (!alive()) break; @@ -298,16 +289,16 @@ void RandomRay::event_advance_ray() boundary() = distance_to_boundary(*this); double distance = boundary().distance(); - //TODO: Is that good location? if (mpi::n_procs > 1) { - // Determine source region index etc. //TODO: This is repeated in attenuate_flux + // If domain decomposition is being used, update counter for + // ray trace operations in source region for load estimation + //TODO: This is repeated in attenuate_flux, maybe pass in sr index as argument? int i_cell = lowest_coord().cell(); // The base source region is the spatial region index int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); for (int i = 0; i < n_coord(); i++) { - // const auto& coord {coord(i)}; Cell& c {*model::cells[coord(i).cell()]}; - mpi::decomp_map.num_base_source_region_RT_batch_[sr] += c.n_surfaces(); //TODO: Is this correct value for "surfaces" + mpi::decomp_map.num_base_source_region_RT_batch_[sr] += c.n_surfaces(); } } @@ -336,30 +327,15 @@ void RandomRay::event_advance_ray() // first part of the active length) and attenuate each. Otherwise, if the // full length of the segment is within the dead zone, attenuate as normal. if (distance_travelled_ + distance >= distance_inactive_) { - // is_active_ = true; double distance_dead = distance_inactive_ - distance_travelled_; attenuate_flux(distance_dead); is_active_ = true; - - distance_travelled_ = 0.0; //TODO: This is probably not very nice here. - - // if (id() == 1083){ - // printf("RANK %d: Stop between inactive and active \n", mpi::rank); - // } + distance_travelled_ = 0.0; if (has_left_subdomain()) { - // exchange_data_.distance_travelled = 0.0; //TODO: maybe additional flag is better? - // if (simulation::current_batch == 25) { - // printf("RANK %d: distance travelled: %f \n", mpi::rank, exchange_data_.distance_travelled); - // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); - // } return; } - // if (simulation::current_batch == 25){ - // printf("RANK %d: Ray %ld, position: %f, %f, %f, angular flux: %f, distance travelled: %f, owner: %d \n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, owner_rank_); - // } - double distance_alive = distance - distance_dead; // Ensure we haven't travelled past the active phase as well @@ -390,9 +366,8 @@ void RandomRay::attenuate_flux(double distance, double offset) // The base source region is the spatial region index int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - // Initialise values for ray buffering + // Initialize values needed to buffer ray for domain decomposition double mesh_partial_length = 0.0; - int mesh_bin = 0; double tiny_multiplier = 0.0; // Perform ray tracing across mesh @@ -424,13 +399,6 @@ void RandomRay::attenuate_flux(double distance, double offset) mesh_fractional_lengths_.resize(0); mesh->bins_crossed(start, end, u(), mesh_bins_, mesh_fractional_lengths_); - // if (simulation::current_batch == 25) { - // printf("Start: %f, %f, %f \n", start.x, start.y, start.z); - // printf("End: %f, %f, %f \n", end.x, end.y, end.z); - // printf("Distance: %f \n", reduced_distance); - // printf("Mesh bin size: %ld \n", mesh_bins_.size()); - // } - // Loop over all mesh bins and attenuate flux for (int b = 0; b < mesh_bins_.size(); b++) { if (mpi::n_procs > 1) { @@ -440,34 +408,25 @@ void RandomRay::attenuate_flux(double distance, double offset) attenuate_flux_inner( physical_length, sr, mesh_bins_[b], start); - // if (sr == 134 && mesh_bins_[b] == 64056){ - // printf("RANK %d: Start (%f, %f, %f) \n", mpi::rank, start.x, start.y, start.z); - // Position test = start - u() * TINY_BIT; - // printf("RANK %d: Corrected start (%f, %f, %f) \n", mpi::rank, test.x, test.y, test.z); - // } start += physical_length * u(); - // if (id() == 6543){ - // printf("RANK %d: Source region %ld, mesh bin %d, physical length %f\n", mpi::rank, sr, mesh_bins_[b], physical_length); - // } - - // If ray has left my subdomain, stop transport - // and correct position + // If ray has left MPI subdomain, stop transport + // and calculate position if(has_left_subdomain()){ - // for (int i = 0; i <= b; i++) { for (int i = 0; i <= b - 1; i++) { mesh_partial_length += mesh_fractional_lengths_[i]; - // tiny_multiplier = 1.0; } if (b > 0) { + // If ray is stopped within mesh of base source region, + // need to add TINY_BIT to account for deleted length tiny_multiplier = 1.0; - surface() = 0; // Reset last surface crossed to none if ray is stopped within mesh of base source region + // Reset last surface crossed to none if ray is stopped + // within mesh of base source region + surface() = 0; } - // Add TINY_BIT to account for deleted length in first mesh_bin in each base source region mesh_partial_length = tiny_multiplier * TINY_BIT + reduced_distance * mesh_partial_length; - mesh_bin = mesh_bins_[b]; break; } } @@ -475,55 +434,34 @@ void RandomRay::attenuate_flux(double distance, double offset) } else { attenuate_flux_inner(distance, sr, C_NONE, r()); } + // If ray has left my subdomain, buffer ray state - // if(has_left_subdomain() && !is_buffered_) { if(has_left_subdomain()) { - // if (id() == 1083){ - // if (simulation::current_batch == 130) printf("RANK %d: buffering, new owner %d \n", mpi::rank, owner_rank_); - // printf("RANK %d: distance travelled old: %f, offset: %f, mesh_partial_length: %f \n", mpi::rank, distance_travelled_, offset, mesh_partial_length); - // } Position position_buffer = r() + (offset + mesh_partial_length) * u(); double distance_buffer = distance_travelled_ + mesh_partial_length; - // double distance_buffer = distance_travelled_ + offset + mesh_partial_length; - pack_ray_for_buffer(distance_buffer, position_buffer); //, SourceRegionKey(sr, mesh_bin), sr); + pack_ray_for_buffer(distance_buffer, position_buffer); wgt() = 0.0; - // if (id() == 6543){ - // printf("Batch %d, RANK %d: Buffered (%f, %f, %f) at source region %ld, mesh bin %d, mesh_crossed: %f, surface: %d, new owner: %d \n", simulation::current_batch, mpi::rank, position_buffer.x, position_buffer.y, position_buffer.z, sr, mesh_bin, tiny_multiplier, surface(), owner_rank_); - // printf("RANK %d: material %d \n", mpi::rank, this->material()); - // } - - // if (simulation::current_batch == 25) { - // printf("RANK %d: distance travelled new: %f %f \n", mpi::rank, distance_buffer, exchange_data_.distance_travelled); - // } } } void RandomRay::attenuate_flux_inner( double distance, int64_t sr, int mesh_bin, Position r) { - int owner = mpi::rank; - if (mpi::n_procs > 1){ //TODO: is this if condition necessary? + if (mpi::n_procs > 1){ // Check which rank owns the source region at the current position - // simulation::time_find_owner_rank.start(); Position midpoint = r + u() * (distance / 2.0); - owner = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), midpoint, + int owner = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), midpoint, domain_->discovered_source_regions_); - // simulation::time_find_owner_rank.stop(); - } - // If current rank is not the owner return and mark as not local. - if (owner != mpi::rank) { - // if (id() == 6543){ - // printf("RANK %d: Ray %ld leaving subdomain, owner is %d \n", mpi::rank, id(), owner); - // } - is_local_ = false; - owner_rank_ = owner; - return; + // If current rank is not the owner return and mark as not local. + if (owner != mpi::rank) { + is_local_ = false; + owner_rank_ = owner; + return; + } } - // If ray is in subdomain continue as normal - SourceRegionHandle srh; if (mesh_subdivision_enabled_) { srh = domain_->get_subdivided_source_region_handle( @@ -1088,17 +1026,12 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) } pack_ray_for_buffer(0.0, r()); is_local_ = false; - // printf("Batch: %d, RANK %d: Initialized ray %ld, position: %f, %f, %f, surface: %d, owner: %d\n", simulation::current_batch, mpi::rank, id(), r().x, r().y, r().z, surface(), owner_rank_); return; } } srh = domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); - // if (simulation::current_batch == 130){ - // printf("RANK %d: Ray %ld in source region %ld, mesh bin %d \n", mpi::rank, id(), sr, mesh_bin); - // printf("RANK %d: Source = %f \n", mpi::rank, srh.source(0)); - // } } else { srh = domain_->source_regions_.get_source_region_handle(sr); } @@ -1109,7 +1042,6 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) } } - // printf("Batch: %d, RANK %d: Initialized ray %ld, position: %f, %f, %f, surface: %d, owner: %d\n", simulation::current_batch, mpi::rank, id(), r().x, r().y, r().z, surface(), owner_rank_); } SourceSite RandomRay::sample_prng() @@ -1172,16 +1104,8 @@ void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_bu exchange_data_.angular_flux = angular_flux_; exchange_data_.distance_travelled = distance_buffer; exchange_data_.surface = surface(); - // if (id() == 6543){ - // printf("RANK: %d: Surface crossed: %d \n", mpi::rank, surface()); - // } -// exchange_data_.sr_key = sr_key; -// exchange_data_.sr = sr; exchange_data_.is_active = is_active_; exchange_data_.ray_id = id(); -// exchange_data_.receiving_rank = owner_rank_; - -// is_buffered_ = true; } int RandomRay::get_energy_groups() { diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 252f2b884f1..5fab9e0d65f 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -65,9 +65,6 @@ void openmc_run_random_ray() // Initialize fixed sources, if present sim.apply_fixed_sources_and_mesh_domains(); - // // Check if problem is 3D or 2D - // sim.check_geometry_dimensions(); - // Begin main simulation timer simulation::time_total.start(); @@ -96,35 +93,6 @@ void openmc_run_random_ray() // Finalize OpenMC openmc_simulation_finalize(); - // //expensive ray tracing - // double sum_bsr_RT = 0; - // for (int64_t sr = 0; sr < sim.domain()->n_source_regions(); sr++) { - // SourceRegionKey sr_key = sim.domain()->source_regions_.key(sr); - // uint64_t base_sr = sr_key.base_source_region_id; - // sum_bsr_RT += static_cast(mpi::decomp_map.num_base_source_region_RT_tot_[base_sr])/mpi::decomp_map.mesh_bins_per_base_sr_[base_sr]; - // } - - // // cheap ray tracing - // double sum_mb_RT = 0; - // for (int64_t sr = 0; sr < sim.domain()->n_source_regions(); sr++) { - // SourceRegionKey sr_key = sim.domain()->source_regions_.key(sr); - // uint64_t base_sr = sr_key.base_source_region_id; - // sum_mb_RT += static_cast(mpi::decomp_map.num_mesh_bin_RT_tot_[base_sr])/mpi::decomp_map.mesh_bins_per_base_sr_[base_sr]; - // } - - // // number of hits - // uint64_t sum_hits = 0; - // for (int64_t sr = 0; sr < sim.domain()->n_source_regions(); sr++) { - // sum_hits += sim.domain()->source_regions_.n_hits(sr) * mpi::decomp_map.negroups_; - // } - - double time_transport_total = - (simulation::time_transport.elapsed() - simulation::time_ray_buffering.elapsed()); - double time_sum = time_transport_total + simulation::time_mpi_imbalance.elapsed(); - - // printf("RANK%d %f %f %f %f %f %lu\n", mpi::rank, time_transport_total, simulation::time_mpi_imbalance.elapsed(), time_sum, sum_bsr_RT, sum_mb_RT, sum_hits); - printf("RANK%d %f %f %f\n", mpi::rank, time_transport_total, simulation::time_mpi_imbalance.elapsed(), time_sum); - // Output all simulation results sim.output_simulation_results(); } @@ -392,6 +360,7 @@ void openmc_reset_random_ray() FlatSourceDomain::mesh_domain_map_.clear(); RandomRay::ray_source_.reset(); RandomRay::source_shape_ = RandomRaySourceShape::FLAT; + RandomRay::geom_dim_ = RandomRayGeomDim::THREE_DIM; RandomRay::mesh_subdivision_enabled_ = false; RandomRay::sample_method_ = RandomRaySampleMethod::PRNG; } @@ -428,15 +397,6 @@ RandomRaySimulation::RandomRaySimulation() domain_->flatten_xs(); } -// void RandomRaySimulation::check_geometry_dimensions(){ -// // Check if problem is 3D -// if (!domain_->is_geometry_3D()){ -// RandomRay::geom_dim_ = RandomRayGeomDim::TWO_DIM; -// } - -// printf("Geometry is %s\n", (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM) ? "3D" : "2D"); -// } - void RandomRaySimulation::apply_fixed_sources_and_mesh_domains() { domain_->apply_meshes(); @@ -499,20 +459,17 @@ void RandomRaySimulation::simulate() simulation::current_batch == 1 && !FlatSourceDomain::adjoint_) { domain_->prepare_base_source_regions(); - // printf("Geometry is %s\n", (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM) ? "3D" : "2D"); - // Check if problem is 3D if (!domain_->is_geometry_3D()){ RandomRay::geom_dim_ = RandomRayGeomDim::TWO_DIM; } - printf("Geometry is %s\n", (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM) ? "3D" : "2D"); - // Generate Voronoi cells, each of which corresponds to a rank subdomain - simulation::time_generate_voronoi_centers.start(); - mpi::decomp_map.generate_rank_centers(); - simulation::time_generate_voronoi_centers.stop(); - + if (mpi::n_procs > 1){ + simulation::time_generate_voronoi_centers.start(); + mpi::decomp_map.generate_rank_centers(); + simulation::time_generate_voronoi_centers.stop(); + } } // Transport sweep over all random rays for the iteration @@ -539,19 +496,8 @@ void RandomRaySimulation::simulate() domain_->normalize_scalar_flux_and_volumes( settings::n_particles * RandomRay::distance_active_); - // if (mpi::master) { - // printf("Rank %d has %ld neighbors: ", mpi::rank, mpi::decomp_map.my_neighbors.size()); - // for (int rank : mpi::decomp_map.my_neighbors){ - // printf("%d ", rank); - // } - // printf("\n"); - // } - - // Balance load between ranks by changing weights of Voronoi cells - // if (mpi::master){printf("Max imbalance %f", mpi::decomp_map.max_imbalance_);} - - // TODO: limit load calulateion to first 5 batches as well - if (mpi::n_procs > 1 && simulation::current_batch <= 5) {// && mpi::decomp_map.load_balanced() == false){ + if (mpi::n_procs > 1 && simulation::current_batch <= 5) { + // Balance load between MPI ranks by exchanging source regions simulation::time_load_balance.start(); mpi::decomp_map.balance_load(domain_.get()); simulation::time_load_balance.stop(); @@ -609,40 +555,62 @@ void RandomRaySimulation::output_simulation_results() // Compute values for diagnostics int64_t total_n_source_regions = domain_->n_source_regions(); int64_t total_n_external_source_regions = domain_->n_external_source_regions_; + double max_load_imbalance = 0.0; if (mpi::n_procs > 1){ // Average number of ray communications between ranks per batch - avg_num_comms_ = avg_num_comms_/settings::n_batches; //TODO: should this be double? + avg_num_communication_rounds_ = static_cast(std::round(avg_num_communication_rounds_/settings::n_batches)); // Exchange intersection data if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, &total_geometric_intersections_, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &total_geometric_intersections_, 1, MPI_UINT64_T, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(&total_geometric_intersections_, nullptr, 1, MPI_UNSIGNED_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&total_geometric_intersections_, nullptr, 1, MPI_UINT64_T, MPI_SUM, 0, mpi::intracomm); } // Exchange source region data if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, &total_n_source_regions, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(MPI_IN_PLACE, &total_n_external_source_regions, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &total_n_source_regions, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &total_n_external_source_regions, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(&total_n_source_regions, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(&total_n_external_source_regions, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&total_n_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&total_n_external_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + } + + // Determine load imbalance + double time_transport_total = simulation::time_transport.elapsed() - simulation::time_ray_buffering.elapsed(); + MPI_Allgather(&time_transport_total, 1, MPI_DOUBLE, mpi::decomp_map.measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, mpi::intracomm); + double measured_load_sum = std::accumulate(mpi::decomp_map.measured_rank_load_fractions_.begin(), mpi::decomp_map.measured_rank_load_fractions_.end(), 0.0); + for (int rank = 0; rank < mpi::n_procs; rank++) { + mpi::decomp_map.measured_rank_load_fractions_[rank] = mpi::decomp_map.measured_rank_load_fractions_[rank] / measured_load_sum; } + if (mpi::master) { + double max_load_measured = *std::max_element(mpi::decomp_map.measured_rank_load_fractions_.begin(), mpi::decomp_map.measured_rank_load_fractions_.end()); + max_load_imbalance = (max_load_measured - mpi::decomp_map.target_load_) / mpi::decomp_map.target_load_; + } + // if (mpi::master) { + // MPI_Gather(&time_transport_total, 1, MPI_DOUBLE, measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, 0, mpi::intracomm); + // double measured_load_sum = std::accumulate(measured_rank_load_fractions_.begin(), measured_rank_load_fractions_.end(), 0.0); + // for (int rank = 0; rank < mpi::n_procs; rank++) { + // measured_rank_load_fractions_[rank] = measured_rank_load_fractions_[rank] / measured_load_sum; + // } + // double max_load_measured = *std::max_element(measured_rank_load_fractions_.begin(), measured_rank_load_fractions_.end()); + // max_load_imbalance = (max_load_measured - mpi::decomp_map.target_load_) / mpi::decomp_map.target_load_; + // } else { + // MPI_Gather(&time_transport_total, 1, MPI_DOUBLE, nullptr, 1, MPI_DOUBLE, 0, mpi::intracomm); + // } } // Print random ray results if (mpi::master) { print_results_random_ray(total_geometric_intersections_, avg_miss_rate_ / settings::n_batches, negroups_, - total_n_source_regions, total_n_external_source_regions, avg_num_comms_); + total_n_source_regions, total_n_external_source_regions, avg_num_communication_rounds_, max_load_imbalance); } if (model::plots.size() > 0) { if (mpi::n_procs > 1){ - // printf("RANK: %d start vtk decomp output\n", mpi:Co:rank); - // MPI_Barrier(mpi::intracomm); domain_->output_to_vtk_decomp(); } else { domain_->output_to_vtk(); @@ -662,31 +630,23 @@ void RandomRaySimulation::instability_check( if (mpi::n_procs > 1){ // Reduce n_hits and n_source_regions on master rank to compute // global miss rate - simulation::time_all_reduce.start(); + simulation::time_decomposition_handling.start(); if (mpi::master) { - MPI_Reduce(MPI_IN_PLACE, &n_hits, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &n_hits, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(&n_hits, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(&n_source_regions, nullptr, 1, MPI_LONG_LONG, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&n_hits, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&n_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); } - simulation::time_all_reduce.stop(); + simulation::time_decomposition_handling.stop(); } - // if (mpi::master) { - // printf("BATCH %d: n_hits = %ld, n_source_regions = %ld, k_eff = %f\n", - // simulation::current_batch, n_hits, n_source_regions, k_eff); - // } - if (mpi::master) { double percent_missed = ((n_source_regions - n_hits) / static_cast(n_source_regions)) * 100.0; avg_miss_rate += percent_missed; - printf("Batch %d: FSR Miss Rate = %.3f%%\n", simulation::current_batch, - percent_missed); - if (percent_missed > 10.0) { warning(fmt::format( "Very high FSR miss rate detected ({:.3f}%). Instability may occur. " @@ -700,12 +660,7 @@ void RandomRaySimulation::instability_check( percent_missed)); } - // if (simulation::current_batch==56){ - // printf("RANK %d: k_eff = %f\n", mpi::rank, k_eff); - // } - if (k_eff > 10.0 || k_eff < 0.01 || !(std::isfinite(k_eff))) { - // printf("RANK %d: k_eff = %f\n", mpi::rank, k_eff); fatal_error("Instability detected"); } } @@ -714,7 +669,7 @@ void RandomRaySimulation::instability_check( // Print random ray simulation results void RandomRaySimulation::print_results_random_ray( uint64_t total_geometric_intersections, double avg_miss_rate, int negroups, - int64_t n_source_regions, int64_t n_external_source_regions, uint64_t avg_num_comms) const + int64_t n_source_regions, int64_t n_external_source_regions, uint64_t avg_num_communication_rounds, double max_load_imbalance) const { using namespace simulation; @@ -723,7 +678,7 @@ void RandomRaySimulation::print_results_random_ray( double time_transport_total = time_transport.elapsed() - time_ray_buffering.elapsed(); double time_per_integration = time_transport_total / total_integrations; double time_domain_decomposition = time_decomposition_handling.elapsed() - + time_generate_voronoi_centers.elapsed() + time_load_balance.elapsed() - time_transport_total + time_all_reduce.elapsed(); + + time_generate_voronoi_centers.elapsed() + time_load_balance.elapsed() - time_transport_total; double misc_time = time_total.elapsed() - time_update_src.elapsed() - time_transport_total - time_tallies.elapsed() - time_bank_sendrecv.elapsed() - time_domain_decomposition; @@ -756,14 +711,10 @@ void RandomRaySimulation::print_results_random_ray( if (mpi::n_procs > 1){ fmt::print(" MPI Ranks = {}\n", mpi::n_procs); - fmt::print(" Avg Number of Subdomain Crossings = {}\n", avg_num_comms); - fmt::print(" Number of load optimization calls = {}\n", mpi::decomp_map.cnt_optimizations_total_); + fmt::print(" Avg Ray Subdomain Crossings = {}\n", avg_num_communication_rounds); + fmt::print(" Number of load optimization calls = {}\n", mpi::decomp_map.cnt_optimizations_total_); //TODO: can be removed if fixed to 5 fmt::print(" unconverged optimizations = {}\n", mpi::decomp_map.cnt_unconverged_optimizations_total_); - fmt::print(" Load per MPI Rank = Rank {}: {:.2f}%\n", 0, mpi::decomp_map.rank_load_[0]*100.0); //TODO: show actual load not aclualted? - for (int i = 1; i < mpi::n_procs; i++) { - fmt::print(" Rank {}: {:.2f}%\n", i, mpi::decomp_map.rank_load_[i]*100.0); - } - // fmt::print("Maximum Load Imbalance = {:.2f}%\n", mpi::decomp_map.max_imbalance_*100.0); //TODO: This needs updating! + fmt::print(" Maximum Load Imbalance = {:.2f}%\n", max_load_imbalance*100.0); } std::string estimator; @@ -821,28 +772,14 @@ void RandomRaySimulation::print_results_random_ray( show_time("Tally conversion only", time_tallies.elapsed(), 1); if (mpi::n_procs > 1){ double time_decomp_misc = time_domain_decomposition - time_source_region_exchange.elapsed() - time_generate_voronoi_centers.elapsed() - - time_ray_comms.elapsed() - time_comms_metadata.elapsed() - time_unpack_data.elapsed() - time_mpi_imbalance.elapsed() - time_load_balance.elapsed() - time_ray_buffering.elapsed() - time_all_reduce.elapsed() - time_calculate_rank_load.elapsed() - time_check_status.elapsed() - time_check_new_sr.elapsed() - - time_test1.elapsed(); // - time_add_ray_to_bank.elapsed() - + - time_ray_comms.elapsed() - time_unpack_data.elapsed() - time_load_balance.elapsed(); show_time("Decomposition handling", time_domain_decomposition, 1); show_time("Ray communication", time_ray_comms.elapsed(), 2); - show_time("Source region exchange", time_source_region_exchange.elapsed(), 2); + show_time("Exchanging contested SRs", time_source_region_exchange.elapsed(), 2); show_time("Load balancing", time_load_balance.elapsed(), 2); - show_time("Optimization", time_load_balance.elapsed() - time_load_balance_sr_transfer.elapsed(), 3); - show_time("Source region transfer", time_load_balance_sr_transfer.elapsed(), 3); - show_time("Waiting for other ranks", time_mpi_imbalance.elapsed(), 2); show_time("Generating Voronoi centers", time_generate_voronoi_centers.elapsed(), 2); - show_time("Sending ray metadata", time_comms_metadata.elapsed(), 2); - show_time("Unpacking ray data", time_unpack_data.elapsed(), 2); - show_time("Buffering rays", time_ray_buffering.elapsed(), 2); - show_time("All reduce", time_all_reduce.elapsed(), 2); - show_time("Adding rays to bank", time_add_ray_to_bank.elapsed(), 2); - show_time("Calculate rank load", time_calculate_rank_load.elapsed(), 2); - show_time("Check if rays alive", time_check_status.elapsed(), 2); - show_time("Check if new sr discovered", time_check_new_sr.elapsed(), 2); - show_time("Block", time_test1.elapsed(), 2); + show_time("Reinitialising received rays", time_unpack_data.elapsed(), 2); show_time("Other decomposition routines", time_decomp_misc, 2); - // show_time("Testing: ", time_test.elapsed(), 2); //TODO: remove } show_time("Other iteration routines", misc_time, 1); @@ -884,87 +821,36 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { double start_time_transport = simulation::time_transport.elapsed(); double start_time_ray_buffering = simulation::time_ray_buffering.elapsed(); - - - // Position sample; - // sample.x = 700.533084; - // sample.y = -365.175846; - // sample.z = -417.239206; - // Particle p; - // p.r() = sample; - // p.r_last() = sample; - // p.E() = 1.0; - // p.E_last() = 1.0; - // p.u() = {1.0, 0.0, 0.0}; - - // int i_cell = p.lowest_coord().cell(); - // int64_t sr = domain_.get()->source_region_offsets_[i_cell] + p.cell_instance(); - // SourceRegionKey sr_key {sr, 0}; - // if (RandomRay::mesh_subdivision_enabled_) { - // int mesh_idx = domain_.get()->base_source_regions_.mesh(sr); - // int mesh_bin; - // if (mesh_idx == C_NONE) { - // mesh_bin = 0; - // } else { - // mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); - // } - // sr_key = {sr, mesh_bin}; - // auto it = domain_.get()->source_region_map_.find(sr_key); - // if (it != domain_.get()->source_region_map_.end()) { - // sr = it->second; - // } else { - // sr = -1; - // } - // } - - // printf("Rank %d: Sampled source region %ld, meshbin %ld\n", mpi::rank, - // sr_key.base_source_region_id, sr_key.mesh_bin); // Assuming these are the correct member names - simulation::time_decomposition_handling.start(); - // int ray_cnt = 0; - - simulation::time_test1.start(); - // Create rays and add them to ray bank #pragma omp parallel for schedule(static) for (int i = 0; i < simulation::work_per_rank; i++) { uint64_t id = simulation::work_index[mpi::rank] + i; RandomRay ray(id, domain_.get()); - // ray_cnt ++; // Add ray to ray bank if it starts in my subdomain if (!ray.has_left_subdomain()){ #pragma omp critical (raybank) { - simulation::time_add_ray_to_bank.start(); - RB.add_ray_to_bank(ray); - simulation::time_add_ray_to_bank.stop(); + RB.my_ray_list_.push_back(ray); } } - // Put ray if straight into buffer it starts outside my subdomain + // Put ray straight into buffer if it starts outside my subdomain else { #pragma omp critical (raybuffer) { - // simulation::time_ray_buffering2.start(); RB.buffer_ray_data_to_send(ray, domain_.get()); - // simulation::time_ray_buffering2.stop(); } } } - simulation::time_test1.stop(); - // If no ray is alive at this stage, it means that all of them have been buffered because they were sampled in foregin subdomain. This requires a ray bank update here. if (!RB.is_any_ray_alive()) { RB.update(domain_.get()); } - // MPI_Barrier(mpi::intracomm); - // printf("Batch: %d Rank %d: ray cnt %d, RB size %d\n", simulation::current_batch, mpi::rank, ray_cnt, RB.ray_bank_size()); - int num_comms = 0; - - // printf("Rank %d: Starting transport sweep with %d rays\n", mpi::rank, RB.ray_bank_size()); + int num_communication_rounds = 0; // Move rays across ranks until they are terminated while (RB.is_any_ray_alive()) { @@ -983,7 +869,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { #pragma omp critical (raybuffer) { simulation::time_ray_buffering.start(); - num_ray_crossings_ ++; RB.buffer_ray_data_to_send(ray, domain_.get()); simulation::time_ray_buffering.stop(); } @@ -992,47 +877,26 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { simulation::time_transport.stop(); // Update ray bank by communicating rays in buffer to new owner ranks and removing terminated ranks - // if (RB.ray_bank_size() != 0) printf("Rank %d: Communicating %d rays\n", mpi::rank, RB.ray_bank_size()); + simulation::time_ray_comms.start(); RB.update(domain_.get()); + simulation::time_ray_comms.stop(); - // if (mpi::master){ - // printf("Communication round %d\n", num_comms); - // } - - num_comms ++; - } - - //TODO: temporary - if (mpi::master) { - printf("Max subdomain crossings: %d\n", num_comms); - printf("Number of ray crossings: %ld\n", num_ray_crossings_); + num_communication_rounds ++; } - // // Reset neighbors after first batch because first load balance operation will change layout strongly //TODO: However, we want to make sure we capture all possible neighbours, and if ray density is too low, it might actually be good to accumulate niehgbours over whole simulation - // if (simulation::current_batch == 1) { - // mpi::decomp_map.my_neighbors.clear(); - // } - // Calculate load per rank based on number of hits in each source region that a rank owns double batch_ray_buffering_time = simulation::time_ray_buffering.elapsed() - start_time_ray_buffering; double batch_transport_time = simulation::time_transport.elapsed() - start_time_transport - batch_ray_buffering_time; - // printf("Batch %d, Rank %d: transport time: %f s\n", simulation::current_batch, mpi::rank, batch_transport_time); - simulation::time_calculate_rank_load.start(); + + //TODO: only calculate load for first 5 batches mpi::decomp_map.calculate_rank_load(domain_.get(), batch_transport_time); - simulation::time_calculate_rank_load.stop(); - avg_num_comms_ += num_comms; + avg_num_communication_rounds_ += num_communication_rounds; // Reset ray bank list for next batch - RB.reset_my_ray_list(); + RB.my_ray_list_.resize(0); simulation::time_decomposition_handling.stop(); - - // std::this_thread::sleep_for(std::chrono::seconds(1)); - // if (simulation::current_batch == 10){ - // fatal_error( - // "STOP."); - // } } } // namespace openmc diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 8be6864cc8e..83f1ddedc51 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -13,11 +13,7 @@ namespace openmc { RayBank::RayBank() { negroups_ = data::mg.num_energy_groups_; num_messages_receiving_.resize(mpi::n_procs, 0); -} - -// Initialize list of ray bank that each MPI rank will handle //TODO: this does not need to be separate function -void RayBank::add_ray_to_bank(RandomRay& ray){ - my_ray_list_.push_back(ray); + num_messages_sending_.resize(mpi::n_procs, 0); } // Buffer ray that has left my subdomain @@ -41,33 +37,16 @@ void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ void RayBank::update(FlatSourceDomain* domain){ // Empty ray list because rays have either died or are in buffer to be sent to other ranks - reset_my_ray_list(); - - simulation::time_mpi_imbalance.start(); - MPI_Barrier(mpi::intracomm); - simulation::time_mpi_imbalance.stop(); + my_ray_list_.resize(0); - simulation::time_comms_metadata.start(); + // Communicate number of rays to be sent/received between ranks communicate_message_metadata(); - simulation::time_comms_metadata.stop(); - // Send and receive rays between MPI ranks - simulation::time_ray_comms.start(); + // Send and receive ray data between MPI ranks communicate_rays(); - MPI_Barrier(mpi::intracomm); //TODO: Should this barrier stay here? - simulation::time_ray_comms.stop(); - simulation::time_unpack_data.start(); // Add received rays to ray list of that rank update_my_ray_list(domain); - MPI_Barrier(mpi::intracomm); //TODO: Should this barrier stay here? - simulation::time_unpack_data.stop(); - -} - -// Clears my_ray_list, but keeps memory allocation in place //TODO: Does this need to be separate function? -void RayBank::reset_my_ray_list(){ - my_ray_list_.resize(0); } int RayBank::ray_bank_size(){ @@ -78,40 +57,23 @@ int RayBank::ray_bank_size(){ // Tells each rank how many rays to receive from whom void RayBank::communicate_message_metadata() { - // mpi::decomp_map.my_neighbors.resize(0); //TODO: Should this be reset here in each iteration? Maybe only if weight has changed? Maybe it does not need to be reset ever - vector num_messages_sending(mpi::n_procs, 0); - - // Ensure all values are zero + // Ensure all values are zero in vector for receiving counts fill(num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); + fill(num_messages_sending_.begin(), num_messages_sending_.end(), 0); - total_sending_rays_ = 0; - - // Fill the sending counts //TODO: OMP? + // Fill the sending counts for (auto& [rank, rays] : ray_send_buffer_) { - num_messages_sending[rank] = rays.size(); - total_sending_rays_ += num_messages_sending[rank]; - - // if (mpi::rank == 5 || mpi::rank == 47){ - // for (auto& rays : ray_send_buffer_[rank]){ - // printf("Rank %d: Sending ray %ld to rank %d\n", mpi::rank, rays.ray_id, rank); - // } - // } + num_messages_sending_[rank] = rays.size(); } - // printf("Rank %d: Sending a total of %d rays to %lu ranks\n", mpi::rank, total_sending_rays_, ray_send_buffer_.size()); - // if (total_sending_rays_==1){ - // for (auto& [rank, rays] : ray_send_buffer_) { - // for (auto& ray : rays){ - // printf("Rank %d: Sending ray %ld to rank %d\n", mpi::rank, ray.ray_id, rank); - // } - // } - // } - // Exchange message counts with all ranks - MPI_Alltoall(num_messages_sending.data(), 1, MPI_INT, + MPI_Alltoall(num_messages_sending_.data(), 1, MPI_INT, num_messages_receiving_.data(), 1, MPI_INT, mpi::intracomm); + total_sending_rays_ = accumulate(num_messages_sending_.begin(), + num_messages_sending_.end(), 0); + total_receiving_rays_ = accumulate(num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); @@ -121,8 +83,7 @@ void RayBank::communicate_rays(){ // Each ray requires 2 sends (data + angular flux) int num_requests = ray_send_buffer_.size() * 2; - vector requests(num_requests); // heap - // MPI_Request requests[num_requests]; // stack + vector requests(num_requests); int req_idx = 0; // Define one-dimensional arrays to be sent and received and allocate size @@ -143,9 +104,11 @@ void RayBank::communicate_rays(){ // Send ray data to neighbouring ranks for (auto [receiving_rank, rays] : ray_send_buffer_) { - int num_rays_sending = rays.size(); + int num_rays_sending = num_messages_sending_[receiving_rank]; - for (int i = 0; i < num_rays_sending; i++) { //TODO: get rid of this! Entire rayExchangeData should be buffered + for (int i = 0; i < num_rays_sending; i++) { + //TODO: get rid of this! Entire rayExchangeData should be buffered + //TODO: OMP? // Pack slimmed down data container for MPI send RayExchangeData exchange_data; exchange_data.position = rays[i].position; @@ -159,15 +122,13 @@ void RayBank::communicate_rays(){ for (int g = 0; g < negroups_; g++){ angular_flux_data[(vector_send_idx + i) * negroups_ + g] = rays[i].angular_flux[g]; } - - // Check neighbor list and add if not already known (insert does this check automatically). Filter out rays that are sampled elsewhere TODO: Positioning here might be inefficient - // simulation::time_test.start(); //TODO: Remove + // Check neighbor list and add if not already known (insert does this check automatically). + // Only check active rays to filter out rays that are sampled in wrong subdomain. + // TODO: Maybe this is not efficient here. If load balancing constrained to first + // 5 batches, maybe this should be moved elsewhere if (rays[i].distance_travelled > 0.0 || rays[i].is_active) { - // if (mpi::decomp_map.my_neighbors.count(receiving_rank) == 0) { mpi::decomp_map.my_neighbors.insert(receiving_rank); - // } } - // simulation::time_test.stop(); } MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); @@ -178,7 +139,8 @@ void RayBank::communicate_rays(){ } //TODO: Post Irecv before Isend? - // Receive ray data from neighbouring ranks //TODO: OMP? + //TODO: OMP? + // Receive ray data from neighbouring ranks for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { int num_rays_receiving = num_messages_receiving_[sending_rank]; if (num_rays_receiving == 0) continue; @@ -199,39 +161,19 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ my_ray_list_.resize(received_ray_data_.size()); - // Add re-initialized random ray objects to my_ray_list - // #pragma omp parallel - // { - // Temporary vector containing angular flux data for re-initialization of random rays - // vector angular_flux_vec(negroups_); - - // #pragma omp for + // Add rays to ray list by restarting them from received data #pragma omp parallel for for (int i = 0; i < received_ray_data_.size(); i++) { - - // for (int g = 0; g < negroups_; g++) { - // angular_flux_vec[g] = received_angular_flux_data_[i * negroups_ + g]; - // } - - // Re-initialize rays with received data - // my_ray_list_.emplace_back(domain, received_ray_data_[i], &received_angular_flux_data_[i * negroups_]); - // my_ray_list_[i] = RandomRay(domain, received_ray_data_[i], angular_flux_vec); - // my_ray_list_[i] = RandomRay(domain, received_ray_data_[i], &received_angular_flux_data_[i * negroups_]); - my_ray_list_[i].restart_ray(domain, received_ray_data_[i], &received_angular_flux_data_[i * negroups_]); } - // } - // clear received data vectors + // Clear received data vectors received_ray_data_.resize(0); received_angular_flux_data_.resize(0); - } bool RayBank::is_any_ray_alive(){ - simulation::time_check_status.start(); - int local_rays_alive = ray_bank_size(); int flag = 0; if (local_rays_alive > 0) { @@ -239,8 +181,6 @@ bool RayBank::is_any_ray_alive(){ } MPI_Allreduce(MPI_IN_PLACE, &flag, 1, MPI_INT, MPI_MAX, mpi::intracomm); - - simulation::time_check_status.stop(); return flag > 0; } diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index 90c79849622..22684701986 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -130,8 +130,6 @@ SourceRegion::SourceRegion(const SourceRegionHandle& handle) // combine two source regions from different ranks together void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) { - // printf("RANK %d: Test 1\n", mpi::rank); - // scalar fields scalars_.volume_ += sr_add.scalars_.volume_; scalars_.volume_sq_ += sr_add.scalars_.volume_sq_; @@ -140,35 +138,21 @@ void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) { scalars_.external_source_present_ = std::max(scalars_.external_source_present_, sr_add.scalars_.external_source_present_); scalars_.centroid_iteration_ += sr_add.scalars_.centroid_iteration_; if (is_linear) { - // scalars_.centroid_iteration_ += sr_add.scalars_.centroid_iteration_; scalars_.mom_matrix_ += sr_add.scalars_.mom_matrix_; } - // printf("RANK %d: Test 2\n", mpi::rank); - // printf("Size scalar flux new %lu \n", scalar_flux_new_.size()); - // vector fields - // #pragma omp simd //TODO: check if this is safe + #pragma omp simd for (int g = 0; g < scalar_flux_new_.size(); g++) { - // printf("RANK %d: Test 2.1\n", mpi::rank); - // printf("1 Size scalar flux new %lu \n", sr_add.scalar_flux_new_.size()); scalar_flux_new_[g] += sr_add.scalar_flux_new_[g]; - // printf("0 Size scalar flux new %lu \n", scalar_flux_new_.size()); - // printf("1 Size scalar flux new %lu \n", sr_add.scalar_flux_new_.size()); scalar_flux_final_[g] += sr_add.scalar_flux_final_[g]; - // printf("2 Size scalar flux new %lu \n", sr_add.scalar_flux_final_.size()); if (settings::run_mode == RunMode::FIXED_SOURCE) { external_source_[g] += sr_add.external_source_[g]; - // printf("3 Size scalar flux new %lu \n", sr_add.external_source_.size()); } - // printf("is linear %d \n", is_linear); if (is_linear) { flux_moments_new_[g] += sr_add.flux_moments_new_[g]; } } - - // printf("RANK %d: Test 3\n", mpi::rank); - } //============================================================================== diff --git a/src/timer.cpp b/src/timer.cpp index 7532eea353f..9540f9e321a 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -32,19 +32,10 @@ Timer time_ray_buffering; // Timer time_ray_buffering2; Timer time_decomposition_handling; Timer time_load_balance; -Timer time_load_balance_sr_transfer; Timer time_generate_voronoi_centers; Timer time_source_region_exchange; -Timer time_comms_metadata; Timer time_unpack_data; -Timer time_mpi_imbalance; -Timer time_all_reduce; -Timer time_add_ray_to_bank; Timer time_calculate_rank_load; -Timer time_check_status; -Timer time_check_new_sr; -Timer time_test1; -Timer time_test2; } // namespace simulation From fa7e492b2a31b4d9fa0f65dac70b28b94678414d Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 15 Dec 2025 10:19:22 +0000 Subject: [PATCH 31/48] Merge new source region definition --- .github/workflows/ci.yml | 35 +- CMakeLists.txt | 1 + cmake/OpenMCConfig.cmake.in | 11 +- docs/source/capi/index.rst | 29 +- docs/source/conf.py | 2 - docs/source/devguide/policies.rst | 8 +- docs/source/io_formats/collision_track.rst | 46 + docs/source/io_formats/depletion_chain.rst | 21 + docs/source/io_formats/depletion_results.rst | 26 +- docs/source/io_formats/index.rst | 1 + docs/source/io_formats/properties.rst | 3 +- docs/source/io_formats/settings.rst | 89 + docs/source/io_formats/statepoint.rst | 2 + docs/source/io_formats/summary.rst | 3 +- .../methods/charged_particles_physics.rst | 362 + docs/source/methods/index.rst | 3 +- docs/source/methods/neutron_physics.rst | 19 +- docs/source/methods/photon_physics.rst | 338 - docs/source/methods/tallies.rst | 107 +- docs/source/pythonapi/base.rst | 3 + docs/source/pythonapi/deplete.rst | 10 + docs/source/releasenotes/0.15.3.rst | 226 + docs/source/releasenotes/index.rst | 1 + docs/source/usersguide/decay_sources.rst | 211 +- docs/source/usersguide/kinetics.rst | 25 +- docs/source/usersguide/processing.rst | 16 +- docs/source/usersguide/random_ray.rst | 30 +- docs/source/usersguide/settings.rst | 56 + docs/source/usersguide/variance_reduction.rst | 7 +- examples/c5g7_no_mesh/test | 51561 ++++++++++++++++ examples/pincell_pulsed/run_pulse.py | 101 + include/openmc/bank.h | 2 + include/openmc/bank_io.h | 103 + include/openmc/capi.h | 4 + include/openmc/cell.h | 25 + include/openmc/collision_track.h | 23 + include/openmc/constants.h | 12 +- include/openmc/distribution_multi.h | 2 + include/openmc/geometry_aux.h | 6 + include/openmc/hdf5_interface.h | 10 +- include/openmc/ifp.h | 7 +- include/openmc/material.h | 7 + include/openmc/mcpl_interface.h | 15 + include/openmc/mesh.h | 72 +- include/openmc/message_passing.h | 1 + include/openmc/nuclide.h | 4 +- include/openmc/particle_data.h | 35 +- include/openmc/physics.h | 7 - .../openmc/random_ray/flat_source_domain.h | 50 +- .../openmc/random_ray/linear_source_domain.h | 2 +- include/openmc/random_ray/random_ray.h | 13 +- .../openmc/random_ray/random_ray_simulation.h | 9 +- include/openmc/random_ray/source_region.h | 2 +- include/openmc/settings.h | 23 + include/openmc/simulation.h | 1 + include/openmc/tallies/tally.h | 15 + include/openmc/tallies/tally_scoring.h | 10 + include/openmc/urr.h | 8 +- openmc/__init__.py | 2 +- openmc/cell.py | 43 +- openmc/checkvalue.py | 2 +- openmc/dagmc.py | 2 + openmc/data/data.py | 2 +- openmc/data/decay.py | 18 +- openmc/data/neutron.py | 8 +- openmc/deplete/__init__.py | 1 + openmc/deplete/abc.py | 196 +- openmc/deplete/chain.py | 85 +- openmc/deplete/d1s.py | 40 +- openmc/deplete/integrators.py | 86 +- openmc/deplete/microxs.py | 157 +- openmc/deplete/pool.py | 13 + openmc/deplete/r2s.py | 693 + openmc/deplete/results.py | 8 +- openmc/deplete/stepresult.py | 222 +- openmc/deplete/transfer_rates.py | 45 +- openmc/filter.py | 19 +- openmc/lib/cell.py | 46 + openmc/lib/core.py | 55 +- openmc/material.py | 34 +- openmc/mesh.py | 197 +- openmc/mgxs/__init__.py | 208 +- openmc/mgxs/library.py | 25 +- openmc/mgxs/mdgxs.py | 3 +- openmc/mgxs/mgxs.py | 12 +- openmc/mgxs_library.py | 9 +- openmc/model/funcs.py | 9 +- openmc/model/model.py | 559 +- openmc/plots.py | 8 +- openmc/plotter.py | 2 +- openmc/settings.py | 342 +- openmc/source.py | 182 +- openmc/statepoint.py | 73 +- openmc/stats/multivariate.py | 25 +- openmc/stats/univariate.py | 85 +- openmc/tallies.py | 548 +- openmc/tracks.py | 20 +- openmc/utility_funcs.py | 19 + pyproject.toml | 15 +- src/bank.cpp | 16 +- src/cell.cpp | 178 +- src/collision_track.cpp | 238 + src/distribution_multi.cpp | 15 +- src/eigenvalue.cpp | 116 +- src/event.cpp | 13 +- src/finalize.cpp | 11 +- src/geometry.cpp | 6 +- src/geometry_aux.cpp | 29 + src/hdf5_interface.cpp | 19 +- src/ifp.cpp | 4 +- src/initialize.cpp | 40 + src/material.cpp | 4 +- src/mcpl_interface.cpp | 155 + src/mesh.cpp | 477 +- src/message_passing.cpp | 1 + src/mgxs.cpp | 8 +- src/nuclide.cpp | 4 +- src/particle.cpp | 31 +- src/physics.cpp | 40 +- src/physics_mg.cpp | 20 +- src/random_ray/flat_source_domain.cpp | 480 +- src/random_ray/linear_source_domain.cpp | 53 +- src/random_ray/random_ray.cpp | 273 +- src/random_ray/random_ray_simulation.cpp | 188 +- src/random_ray/source_region.cpp | 57 +- src/settings.cpp | 93 +- src/simulation.cpp | 41 +- src/source.cpp | 6 + src/state_point.cpp | 107 +- src/tallies/tally.cpp | 132 +- src/tallies/tally_scoring.cpp | 104 +- src/weight_windows.cpp | 27 +- temp.cpp | 495 + tests/conftest.py | 21 +- tests/cpp_unit_tests/CMakeLists.txt | 1 + tests/cpp_unit_tests/test_mesh.cpp | 257 + .../adj_cell_rotation/results_true.dat | 2 +- .../albedo_box/results_true.dat | 2 +- .../asymmetric_lattice/results_true.dat | 2 +- .../cmfd_feed/results_true.dat | 612 +- .../cmfd_feed_2g/results_true.dat | 538 +- .../results_true.dat | 562 +- .../cmfd_feed_ng/results_true.dat | 680 +- .../cmfd_feed_rectlin/results_true.dat | 778 +- .../cmfd_feed_ref_d/results_true.dat | 562 +- .../cmfd_feed_rolling_window/results_true.dat | 562 +- .../cmfd_nofeed/results_true.dat | 610 +- .../cmfd_restart/results_true.dat | 612 +- .../__init__.py | 0 .../case_1_Reactions/inputs_true.dat | 58 + .../case_1_Reactions/results_true.dat | 2 + .../case_2_Cell_ID/inputs_true.dat | 58 + .../case_2_Cell_ID/results_true.dat | 2 + .../case_3_Material_ID/inputs_true.dat | 58 + .../case_3_Material_ID/results_true.dat | 2 + .../case_4_Nuclide_ID/inputs_true.dat | 58 + .../case_4_Nuclide_ID/results_true.dat | 2 + .../case_5_Universe_ID/inputs_true.dat | 59 + .../case_5_Universe_ID/results_true.dat | 2 + .../inputs_true.dat | 58 + .../results_true.dat | 2 + .../inputs_true.dat | 63 + .../results_true.dat | 2 + .../case_8_2threads/inputs_true.dat | 57 + .../case_8_2threads/results_true.dat | 2 + .../regression_tests/collision_track/test.py | 255 + .../complex_cell/results_true.dat | 16 +- .../confidence_intervals/results_true.dat | 6 +- tests/regression_tests/cpp_driver/driver.cpp | 18 +- .../cpp_driver/results_true.dat | 22 +- .../regression_tests/dagmc/external/main.cpp | 3 + .../dagmc/external/results_true.dat | 6 +- .../dagmc/legacy/results_true.dat | 6 +- .../dagmc/refl/results_true.dat | 6 +- .../dagmc/universes/inputs_true.dat | 8 + .../dagmc/universes/results_true.dat | 18 +- .../regression_tests/dagmc/universes/test.py | 160 +- .../regression_tests/density/results_true.dat | 2 +- .../deplete_no_transport/test.py | 4 + .../test_reference_coupled_days.h5 | Bin 36048 -> 36048 bytes .../test_reference_coupled_hours.h5 | Bin 36048 -> 36048 bytes .../test_reference_coupled_minutes.h5 | Bin 36048 -> 36048 bytes .../test_reference_coupled_months.h5 | Bin 36048 -> 36048 bytes .../test_reference_fission_q.h5 | Bin 36048 -> 36048 bytes .../test_reference_source_rate.h5 | Bin 36048 -> 36048 bytes .../ref_depletion_with_ext_source.h5 | Bin 37328 -> 37328 bytes .../ref_depletion_with_feed.h5 | Bin 37328 -> 37328 bytes .../ref_depletion_with_removal.h5 | Bin 37328 -> 37328 bytes .../ref_depletion_with_transfer.h5 | Bin 37328 -> 37328 bytes .../ref_no_depletion_only_feed.h5 | Bin 37328 -> 37328 bytes .../ref_no_depletion_only_removal.h5 | Bin 37328 -> 37328 bytes .../ref_no_depletion_with_ext_source.h5 | Bin 37328 -> 37328 bytes .../ref_no_depletion_with_transfer.h5 | Bin 37328 -> 37328 bytes .../deplete_with_transfer_rates/test.py | 25 +- .../last_step_reference_materials.xml | 1280 +- .../deplete_with_transport/test.py | 2 + .../deplete_with_transport/test_reference.h5 | Bin 163736 -> 163736 bytes .../diff_tally/results_true.dat | 220 +- .../distribmat/results_true.dat | 2 +- .../eigenvalue_genperbatch/results_true.dat | 6 +- .../eigenvalue_no_inactive/results_true.dat | 2 +- .../electron_heating/__init__.py | 0 .../electron_heating/inputs_true.dat | 32 + .../electron_heating/results_true.dat | 3 + .../regression_tests/electron_heating/test.py | 40 + .../energy_grid/results_true.dat | 2 +- .../energy_laws/results_true.dat | 2 +- .../regression_tests/entropy/results_true.dat | 20 +- .../filter_cellfrom/results_true.dat | 62 +- .../filter_cellinstance/results_true.dat | 162 +- .../case-3/results_true.dat | 2 +- .../case-4/results_true.dat | 6 +- .../filter_energyfun/results_true.dat | 10 +- .../filter_mesh/results_true.dat | 2 +- .../filter_musurface/results_true.dat | 10 +- .../filter_translations/results_true.dat | 674 +- .../ifp/groupwise/__init__.py | 0 .../ifp/groupwise/inputs_true.dat | 43 + .../ifp/groupwise/results_true.dat | 21 + tests/regression_tests/ifp/groupwise/test.py | 40 + tests/regression_tests/ifp/results_true.dat | 9 - tests/regression_tests/ifp/total/__init__.py | 0 .../ifp/{ => total}/inputs_true.dat | 0 .../ifp/total/results_true.dat | 9 + .../regression_tests/ifp/{ => total}/test.py | 1 - .../infinite_cell/results_true.dat | 2 +- .../iso_in_lab/results_true.dat | 2 +- .../regression_tests/lattice/results_true.dat | 2 +- .../lattice_distribmat/False/results_true.dat | 2 +- .../lattice_distribmat/True/results_true.dat | 2 +- .../lattice_distribrho/__init__.py | 0 .../lattice_distribrho/inputs_true.dat | 40 + .../lattice_distribrho/results_true.dat | 2 + .../lattice_distribrho/test.py | 51 + .../lattice_hex/results_true.dat | 2 +- .../lattice_hex_coincident/results_true.dat | 2 +- .../lattice_hex_x/results_true.dat | 2 +- .../lattice_multiple/results_true.dat | 2 +- .../lattice_rotated/results_true.dat | 2 +- .../mg_basic/results_true.dat | 2 +- .../mg_basic_delayed/results_true.dat | 2 +- .../mg_convert/results_true.dat | 24 +- tests/regression_tests/mg_convert/test.py | 6 +- .../mg_legendre/results_true.dat | 2 +- .../mg_max_order/results_true.dat | 2 +- .../mg_survival_biasing/results_true.dat | 2 +- .../mg_tallies/results_true.dat | 2482 +- .../mg_temperature/results_true.dat | 20 +- .../mg_temperature_multi/results_true.dat | 10 +- .../mgxs_library_ce_to_mg/results_true.dat | 2 +- .../mgxs_library_ce_to_mg/test.py | 2 +- .../results_true.dat | 2 +- .../mgxs_library_ce_to_mg_nuclides/test.py | 2 +- .../mgxs_library_condense/results_true.dat | 572 +- .../mgxs_library_condense/test.py | 2 +- .../mgxs_library_correction/results_true.dat | 80 +- .../mgxs_library_correction/test.py | 2 +- .../mgxs_library_distribcell/results_true.dat | 128 +- .../mgxs_library_distribcell/test.py | 2 +- .../mgxs_library_hdf5/results_true.dat | 278 +- .../mgxs_library_hdf5/test.py | 2 +- .../mgxs_library_histogram/results_true.dat | 660 +- .../mgxs_library_histogram/test.py | 2 +- .../mgxs_library_mesh/results_true.dat | 548 +- .../mgxs_library_mesh/test.py | 2 +- .../mgxs_library_no_nuclides/results_true.dat | 782 +- .../mgxs_library_no_nuclides/test.py | 2 +- .../mgxs_library_nuclides/results_true.dat | 2 +- .../mgxs_library_nuclides/test.py | 2 +- .../results_true.dat | 2 +- .../mgxs_library_specific_nuclides/test.py | 2 +- .../test_reference_materials_direct.csv | 8 +- .../microxs/test_reference_materials_flux.csv | 8 +- .../microxs/test_reference_mesh_direct.csv | 8 +- .../microxs/test_reference_mesh_flux.csv | 8 +- .../multipole/results_true.dat | 55 +- .../regression_tests/output/results_true.dat | 2 +- .../particle_restart_eigval/results_true.dat | 10 +- .../particle_restart_eigval/settings.xml | 2 +- .../particle_restart_eigval/test.py | 2 +- .../periodic/results_true.dat | 2 +- .../periodic_6fold/results_true.dat | 2 +- .../periodic_hex/results_true.dat | 2 +- .../results_true.dat | 58 +- .../ptables_off/results_true.dat | 2 +- .../quadric_surfaces/results_true.dat | 2 +- .../inputs_true.dat | 4 +- .../results_true.dat | 2 +- .../random_ray_adjoint_k_eff/inputs_true.dat | 4 +- .../random_ray_adjoint_k_eff/results_true.dat | 244 +- .../infinite_medium/results_true.dat | 2 +- .../material_wise/results_true.dat | 2 +- .../stochastic_slab/results_true.dat | 2 +- .../random_ray_auto_convert/test.py | 2 +- .../__init__.py | 0 .../infinite_medium/model/inputs_true.dat | 61 + .../infinite_medium/model/results_true.dat | 2 + .../infinite_medium/user/inputs_true.dat | 64 + .../infinite_medium/user/results_true.dat | 2 + .../stochastic_slab/model/inputs_true.dat | 61 + .../stochastic_slab/model/results_true.dat | 2 + .../stochastic_slab/user/inputs_true.dat | 64 + .../stochastic_slab/user/results_true.dat | 2 + .../test.py | 66 + .../results_true.dat | 2 +- .../random_ray_diagonal_stabilization/test.py | 2 +- .../cell/inputs_true.dat | 2 +- .../material/inputs_true.dat | 2 +- .../universe/inputs_true.dat | 2 +- .../linear/inputs_true.dat | 2 +- .../linear/results_true.dat | 4 +- .../linear_xy/inputs_true.dat | 2 +- .../flat/inputs_true.dat | 2 +- .../linear/inputs_true.dat | 2 +- .../False/inputs_true.dat | 2 +- .../True/inputs_true.dat | 2 +- .../flat/inputs_true.dat | 2 +- .../flat/results_true.dat | 6 +- .../linear_xy/inputs_true.dat | 2 +- .../linear_xy/results_true.dat | 14 +- .../random_ray_halton_samples/inputs_true.dat | 2 +- .../results_true.dat | 336 +- .../random_ray_k_eff/inputs_true.dat | 2 +- .../random_ray_k_eff/results_true.dat | 338 +- .../random_ray_k_eff_mesh/inputs_true.dat | 2 +- .../random_ray_k_eff_mesh/results_true.dat | 336 +- .../random_ray_linear/linear/inputs_true.dat | 2 +- .../random_ray_linear/linear/results_true.dat | 336 +- .../linear_xy/inputs_true.dat | 2 +- .../linear_xy/results_true.dat | 336 +- .../random_ray_low_density/__init__.py | 0 .../random_ray_low_density/inputs_true.dat | 244 + .../random_ray_low_density/results_true.dat | 9 + .../random_ray_low_density/test.py | 60 + .../inputs_true.dat | 2 +- .../results_true.dat | 8 +- .../random_ray_void/flat/inputs_true.dat | 2 +- .../random_ray_void/linear/inputs_true.dat | 2 +- .../hybrid/inputs_true.dat | 2 +- .../naive/inputs_true.dat | 2 +- .../simulation_averaged/inputs_true.dat | 2 +- .../hybrid/inputs_true.dat | 2 +- .../hybrid/results_true.dat | 4 +- .../naive/inputs_true.dat | 2 +- .../simulation_averaged/inputs_true.dat | 2 +- .../reflective_plane/results_true.dat | 2 +- .../resonance_scattering/results_true.dat | 2 +- .../rotation/results_true.dat | 2 +- .../salphabeta/results_true.dat | 2 +- .../score_current/results_true.dat | 1842 +- tests/regression_tests/seed/results_true.dat | 2 +- tests/regression_tests/source/inputs_true.dat | 2 +- .../regression_tests/source/results_true.dat | 2 +- .../source_file/results_true.dat | 2 +- .../source_mcpl_file/results_true.dat | 2 +- .../sourcepoint_batch/results_true.dat | 4 +- .../sourcepoint_latest/results_true.dat | 2 +- .../sourcepoint_restart/results_true.dat | 856 +- .../statepoint_batch/geometry.xml | 8 - .../statepoint_batch/materials.xml | 9 - .../statepoint_batch/results_true.dat | 2 - .../statepoint_batch/settings.xml | 17 - .../regression_tests/statepoint_batch/test.py | 18 - .../statepoint_restart/results_true.dat | 1166 +- .../statepoint_sourcesep/results_true.dat | 2 +- .../regression_tests/stride/results_true.dat | 2 +- .../surface_source/surface_source_true.h5 | Bin 106144 -> 106144 bytes .../surface_source/surface_source_true.mcpl | Bin 36071 -> 36120 bytes .../case-01/results_true.dat | 2 +- .../case-01/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-02/results_true.dat | 2 +- .../case-02/surface_source_true.h5 | Bin 12752 -> 13896 bytes .../case-03/results_true.dat | 2 +- .../case-03/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-04/results_true.dat | 2 +- .../case-04/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-05/results_true.dat | 2 +- .../case-05/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-06/results_true.dat | 2 +- .../case-06/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-07/results_true.dat | 2 +- .../case-07/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-08/results_true.dat | 2 +- .../case-08/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-09/results_true.dat | 2 +- .../case-09/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-10/results_true.dat | 2 +- .../case-10/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-11/results_true.dat | 2 +- .../case-11/surface_source_true.h5 | Bin 6408 -> 5160 bytes .../case-12/results_true.dat | 2 +- .../case-12/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-13/results_true.dat | 2 +- .../case-13/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-14/results_true.dat | 2 +- .../case-14/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-15/results_true.dat | 2 +- .../case-15/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-16/results_true.dat | 2 +- .../case-16/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-17/results_true.dat | 2 +- .../case-17/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-18/results_true.dat | 2 +- .../case-18/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-19/results_true.dat | 2 +- .../case-19/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-20/results_true.dat | 2 +- .../case-20/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-21/results_true.dat | 2 +- .../case-21/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-a01/results_true.dat | 2 +- .../case-a01/surface_source_true.h5 | Bin 6616 -> 6720 bytes .../case-d01/results_true.dat | 2 +- .../case-d01/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-d02/results_true.dat | 2 +- .../case-d02/surface_source_true.h5 | Bin 31472 -> 33344 bytes .../case-d03/results_true.dat | 2 +- .../case-d03/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-d04/results_true.dat | 2 +- .../case-d04/surface_source_true.h5 | Bin 31472 -> 33344 bytes .../case-d05/results_true.dat | 2 +- .../case-d05/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-d06/results_true.dat | 2 +- .../case-d06/surface_source_true.h5 | Bin 29496 -> 30744 bytes .../case-d07/results_true.dat | 2 +- .../case-d07/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-d08/results_true.dat | 2 +- .../case-d08/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-e01/results_true.dat | 2 +- .../case-e01/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-e02/results_true.dat | 2 +- .../case-e02/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../case-e03/results_true.dat | 2 +- .../case-e03/surface_source_true.h5 | Bin 33344 -> 33344 bytes .../surface_tally/results_true.dat | 82 +- .../survival_biasing/results_true.dat | 34 +- .../regression_tests/tallies/results_true.dat | 2 +- .../tally_aggregation/results_true.dat | 194 +- .../tally_arithmetic/results_true.dat | 98 +- .../tally_assumesep/results_true.dat | 14 +- .../tally_nuclides/results_true.dat | 50 +- .../tally_slice_merge/results_true.dat | 104 +- tests/regression_tests/torus/results_true.dat | 2 +- tests/regression_tests/trace/results_true.dat | 2 +- .../track_output/results_true.dat | 144 +- .../translation/results_true.dat | 2 +- .../trigger_batch_interval/results_true.dat | 50 +- .../results_true.dat | 50 +- .../trigger_no_status/results_true.dat | 50 +- .../inputs_true.dat | 2 +- .../results_true.dat | 6 +- .../trigger_statepoint_restart/test.py | 10 +- .../trigger_tallies/results_true.dat | 50 +- tests/regression_tests/triso/results_true.dat | 2 +- .../uniform_fs/results_true.dat | 2 +- .../universe/results_true.dat | 2 +- .../unstructured_mesh/test.py | 2 +- .../weightwindows_fw_cadis/inputs_true.dat | 2 +- .../flat/inputs_true.dat | 2 +- .../linear/inputs_true.dat | 2 +- .../white_plane/results_true.dat | 2 +- tests/testing_harness.py | 126 +- tests/unit_tests/dagmc/test_lost_particles.py | 4 +- tests/unit_tests/dagmc/test_model.py | 3 +- tests/unit_tests/dagmc/test_plot.py | 5 +- tests/unit_tests/test_cell.py | 23 + tests/unit_tests/test_collision_track.py | 127 + tests/unit_tests/test_d1s.py | 14 + tests/unit_tests/test_deplete_activation.py | 1 + tests/unit_tests/test_deplete_continue.py | 8 +- tests/unit_tests/test_deplete_integrator.py | 93 +- tests/unit_tests/test_deplete_microxs.py | 13 + tests/unit_tests/test_deplete_restart.py | 14 +- tests/unit_tests/test_deplete_resultslist.py | 20 +- .../unit_tests/test_deplete_transfer_rates.py | 32 + tests/unit_tests/test_filter_distribcell.py | 53 + tests/unit_tests/test_ifp.py | 39 + tests/unit_tests/test_lib.py | 31 +- tests/unit_tests/test_material.py | 1 + tests/unit_tests/test_mesh.py | 179 +- tests/unit_tests/test_model.py | 67 +- tests/unit_tests/test_no_reduce.py | 40 + tests/unit_tests/test_pathlike_simple.py | 46 + tests/unit_tests/test_r2s.py | 152 + tests/unit_tests/test_region.py | 4 + tests/unit_tests/test_settings.py | 29 +- tests/unit_tests/test_statepoint.py | 65 + tests/unit_tests/test_statepoint_batches.py | 26 + tests/unit_tests/test_stats.py | 40 + tests/unit_tests/test_tallies.py | 213 + tests/unit_tests/test_universe.py | 4 + .../weightwindows/dagmc/__init__.py | 0 .../dagmc/nested_shell_geometry.h5m | Bin 0 -> 58680 bytes tests/unit_tests/weightwindows/dagmc/test.py | 98 + .../weightwindows/test_wwinp_reader.py | 2 +- tools/ci/gha-script.sh | 5 +- 496 files changed, 73441 insertions(+), 12618 deletions(-) create mode 100644 docs/source/io_formats/collision_track.rst create mode 100644 docs/source/methods/charged_particles_physics.rst create mode 100644 docs/source/releasenotes/0.15.3.rst create mode 100644 examples/c5g7_no_mesh/test create mode 100644 examples/pincell_pulsed/run_pulse.py create mode 100644 include/openmc/bank_io.h create mode 100644 include/openmc/collision_track.h create mode 100644 openmc/deplete/r2s.py create mode 100644 src/collision_track.cpp create mode 100644 temp.cpp create mode 100644 tests/cpp_unit_tests/test_mesh.cpp rename tests/regression_tests/{statepoint_batch => collision_track}/__init__.py (100%) create mode 100644 tests/regression_tests/collision_track/case_1_Reactions/inputs_true.dat create mode 100644 tests/regression_tests/collision_track/case_1_Reactions/results_true.dat create mode 100644 tests/regression_tests/collision_track/case_2_Cell_ID/inputs_true.dat create mode 100644 tests/regression_tests/collision_track/case_2_Cell_ID/results_true.dat create mode 100644 tests/regression_tests/collision_track/case_3_Material_ID/inputs_true.dat create mode 100644 tests/regression_tests/collision_track/case_3_Material_ID/results_true.dat create mode 100644 tests/regression_tests/collision_track/case_4_Nuclide_ID/inputs_true.dat create mode 100644 tests/regression_tests/collision_track/case_4_Nuclide_ID/results_true.dat create mode 100644 tests/regression_tests/collision_track/case_5_Universe_ID/inputs_true.dat create mode 100644 tests/regression_tests/collision_track/case_5_Universe_ID/results_true.dat create mode 100644 tests/regression_tests/collision_track/case_6_deposited_energy_threshold/inputs_true.dat create mode 100644 tests/regression_tests/collision_track/case_6_deposited_energy_threshold/results_true.dat create mode 100644 tests/regression_tests/collision_track/case_7_all_parameters_used_together/inputs_true.dat create mode 100644 tests/regression_tests/collision_track/case_7_all_parameters_used_together/results_true.dat create mode 100644 tests/regression_tests/collision_track/case_8_2threads/inputs_true.dat create mode 100644 tests/regression_tests/collision_track/case_8_2threads/results_true.dat create mode 100644 tests/regression_tests/collision_track/test.py create mode 100644 tests/regression_tests/electron_heating/__init__.py create mode 100644 tests/regression_tests/electron_heating/inputs_true.dat create mode 100644 tests/regression_tests/electron_heating/results_true.dat create mode 100644 tests/regression_tests/electron_heating/test.py create mode 100644 tests/regression_tests/ifp/groupwise/__init__.py create mode 100644 tests/regression_tests/ifp/groupwise/inputs_true.dat create mode 100644 tests/regression_tests/ifp/groupwise/results_true.dat create mode 100644 tests/regression_tests/ifp/groupwise/test.py delete mode 100644 tests/regression_tests/ifp/results_true.dat create mode 100644 tests/regression_tests/ifp/total/__init__.py rename tests/regression_tests/ifp/{ => total}/inputs_true.dat (100%) create mode 100644 tests/regression_tests/ifp/total/results_true.dat rename tests/regression_tests/ifp/{ => total}/test.py (99%) create mode 100644 tests/regression_tests/lattice_distribrho/__init__.py create mode 100644 tests/regression_tests/lattice_distribrho/inputs_true.dat create mode 100644 tests/regression_tests/lattice_distribrho/results_true.dat create mode 100644 tests/regression_tests/lattice_distribrho/test.py create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/__init__.py create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/model/inputs_true.dat create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/model/results_true.dat create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/user/inputs_true.dat create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/user/results_true.dat create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/model/inputs_true.dat create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/model/results_true.dat create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/user/inputs_true.dat create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/user/results_true.dat create mode 100644 tests/regression_tests/random_ray_auto_convert_source_energy/test.py create mode 100644 tests/regression_tests/random_ray_low_density/__init__.py create mode 100644 tests/regression_tests/random_ray_low_density/inputs_true.dat create mode 100644 tests/regression_tests/random_ray_low_density/results_true.dat create mode 100644 tests/regression_tests/random_ray_low_density/test.py delete mode 100644 tests/regression_tests/statepoint_batch/geometry.xml delete mode 100644 tests/regression_tests/statepoint_batch/materials.xml delete mode 100644 tests/regression_tests/statepoint_batch/results_true.dat delete mode 100644 tests/regression_tests/statepoint_batch/settings.xml delete mode 100644 tests/regression_tests/statepoint_batch/test.py create mode 100644 tests/unit_tests/test_collision_track.py create mode 100644 tests/unit_tests/test_filter_distribcell.py create mode 100644 tests/unit_tests/test_no_reduce.py create mode 100644 tests/unit_tests/test_pathlike_simple.py create mode 100644 tests/unit_tests/test_r2s.py create mode 100644 tests/unit_tests/test_statepoint.py create mode 100644 tests/unit_tests/test_statepoint_batches.py create mode 100644 tests/unit_tests/weightwindows/dagmc/__init__.py create mode 100644 tests/unit_tests/weightwindows/dagmc/nested_shell_geometry.h5m create mode 100644 tests/unit_tests/weightwindows/dagmc/test.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 38a49b60219..d75a64d662c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,6 +75,7 @@ jobs: LIBMESH: ${{ matrix.libmesh }} NPY_DISABLE_CPU_FEATURES: "AVX512F AVX512_SKX" OPENBLAS_NUM_THREADS: 1 + PYTEST_ADDOPTS: --cov=openmc --cov-report=lcov:coverage-python.lcov # libfabric complains about fork() as a result of using Python multiprocessing. # We can work around it with RDMAV_FORK_SAFE=1 in libfabric < 1.13 and with # FI_EFA_FORK_SAFE=1 in more recent versions. @@ -171,11 +172,37 @@ jobs: uses: mxschmitt/action-tmate@v3 timeout-minutes: 10 - - name: after_success + - name: Generate C++ coverage (gcovr) shell: bash run: | - cpp-coveralls -i src -i include -e src/external --exclude-pattern "/usr/*" --dump cpp_cov.json - coveralls --merge=cpp_cov.json --service=github + # Produce LCOV directly from gcov data in the build tree + gcovr \ + --root "$GITHUB_WORKSPACE" \ + --object-directory "$GITHUB_WORKSPACE/build" \ + --filter "$GITHUB_WORKSPACE/src" \ + --filter "$GITHUB_WORKSPACE/include" \ + --exclude "$GITHUB_WORKSPACE/src/external/.*" \ + --exclude "$GITHUB_WORKSPACE/src/include/openmc/external/.*" \ + --gcov-ignore-errors source_not_found \ + --gcov-ignore-errors output_error \ + --gcov-ignore-parse-errors suspicious_hits.warn \ + --print-summary \ + --lcov -o coverage-cpp.lcov || true + + - name: Merge C++ and Python coverage + shell: bash + run: | + # Merge C++ and Python LCOV into a single file for upload + cat coverage-cpp.lcov coverage-python.lcov > coverage.lcov + + - name: Upload coverage to Coveralls + if: ${{ hashFiles('coverage.lcov') != '' }} + uses: coverallsapp/github-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel: true + flag-name: C++ and Python + path-to-lcov: coverage.lcov finish: needs: main @@ -184,5 +211,5 @@ jobs: - name: Coveralls Finished uses: coverallsapp/github-action@v2 with: - github-token: ${{ secrets.github_token }} + github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fe428f967b..15d5803059e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -338,6 +338,7 @@ list(APPEND libopenmc_SOURCES src/cell.cpp src/chain.cpp src/cmfd_solver.cpp + src/collision_track.cpp src/cross_sections.cpp src/dagmc.cpp src/distribution.cpp diff --git a/cmake/OpenMCConfig.cmake.in b/cmake/OpenMCConfig.cmake.in index 3fe0c1bcd16..837a39c7833 100644 --- a/cmake/OpenMCConfig.cmake.in +++ b/cmake/OpenMCConfig.cmake.in @@ -1,9 +1,12 @@ get_filename_component(OpenMC_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY) -find_package(fmt REQUIRED HINTS ${OpenMC_CMAKE_DIR}/../fmt) -find_package(pugixml REQUIRED HINTS ${OpenMC_CMAKE_DIR}/../pugixml) -find_package(xtl REQUIRED HINTS ${OpenMC_CMAKE_DIR}/../xtl) -find_package(xtensor REQUIRED HINTS ${OpenMC_CMAKE_DIR}/../xtensor) +# Compute the install prefix from this file's location +get_filename_component(_OPENMC_PREFIX "${OpenMC_CMAKE_DIR}/../../.." ABSOLUTE) + +find_package(fmt CONFIG REQUIRED HINTS ${_OPENMC_PREFIX}) +find_package(pugixml CONFIG REQUIRED HINTS ${_OPENMC_PREFIX}) +find_package(xtl CONFIG REQUIRED HINTS ${_OPENMC_PREFIX}) +find_package(xtensor CONFIG REQUIRED HINTS ${_OPENMC_PREFIX}) if(@OPENMC_USE_DAGMC@) find_package(DAGMC REQUIRED HINTS @DAGMC_DIR@) endif() diff --git a/docs/source/capi/index.rst b/docs/source/capi/index.rst index d9ac0d1e019..2583d51dff2 100644 --- a/docs/source/capi/index.rst +++ b/docs/source/capi/index.rst @@ -84,6 +84,17 @@ Functions :return: Return status (negative if an error occurred) :rtype: int +.. c:function:: int openmc_cell_get_density(int32_t index, const int32_t* instance, double* density) + + Get the density of a cell + + :param int32_t index: Index in the cells array + :param int32_t* instance: Which instance of the cell. If a null pointer is passed, the density + multiplier of the first instance is returned. + :param double* density: Density of the cell in [g/cm3] + :return: Return status (negative if an error occurred) + :rtype: int + .. c:function:: int openmc_cell_set_fill(int32_t index, int type, int32_t n, const int32_t* indices) Set the fill for a cell @@ -113,8 +124,22 @@ Functions :param double T: Temperature in Kelvin :param instance: Which instance of the cell. To set the temperature for all instances, pass a null pointer. - :param set_contained: If the cell is not filled by a material, whether to set the temperatures - of all filled cells + :param bool set_contained: If the cell is not filled by a material, whether + to set the temperatures of all filled cells + :type instance: const int32_t* + :return: Return status (negative if an error occurred) + :rtype: int + +.. c:function:: int openmc_cell_set_density(index index, double density, const int32_t* instance, bool set_contained) + + Set the density of a cell. + + :param int32_t index: Index in the cells array + :param double density: Density of the cell in [g/cm3] + :param instance: Which instance of the cell. To set the density multiplier for all + instances, pass a null pointer. + :param bool set_contained: If the cell is not filled by a material, whether + to set the density multiplier of all filled cells :type instance: const int32_t* :return: Return status (negative if an error occurred) :rtype: int diff --git a/docs/source/conf.py b/docs/source/conf.py index 8aeff5cdc7a..826c20022ae 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -121,9 +121,7 @@ # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages -import sphinx_rtd_theme html_theme = 'sphinx_rtd_theme' -html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] html_baseurl = "https://docs.openmc.org/en/stable/" html_logo = '_images/openmc_logo.png' diff --git a/docs/source/devguide/policies.rst b/docs/source/devguide/policies.rst index 2cf31998764..3644ae82237 100644 --- a/docs/source/devguide/policies.rst +++ b/docs/source/devguide/policies.rst @@ -21,8 +21,8 @@ C++ code in OpenMC must conform to the most recent C++ standard that is fully supported in the `version of the gcc compiler `_ that is distributed with the oldest version of Ubuntu that is still within its `standard support period -`_. Ubuntu 20.04 LTS will be supported -through April 2025 and is distributed with gcc 9.3.0, which fully supports the +`_. Ubuntu 22.04 LTS will be supported +through April 2027 and is distributed with gcc 11.4.0, which fully supports the C++17 standard. -------------------- @@ -31,5 +31,5 @@ CMake Version Policy Similar to the C++ standard policy, the minimum supported version of CMake corresponds to whatever version is distributed with the oldest version of Ubuntu -still within its standard support period. Ubuntu 20.04 LTS is distributed with -CMake 3.16. +still within its standard support period. Ubuntu 22.04 LTS is distributed with +CMake 3.22. diff --git a/docs/source/io_formats/collision_track.rst b/docs/source/io_formats/collision_track.rst new file mode 100644 index 00000000000..a3645975444 --- /dev/null +++ b/docs/source/io_formats/collision_track.rst @@ -0,0 +1,46 @@ +.. _io_collision_track: + +=========================== +Collision Track File Format +=========================== + +When collision tracking is enabled with ``mcpl=false`` (the default), OpenMC +writes binary data to an HDF5 file named ``collision_track.h5``. The same data +may also be written after each batch when multiple files are requested +(``collision_track.N.h5``) or when the run is performed in parallel. The file +contains the information needed to reconstruct each recorded collision. + +The current revision of the collision track file format is 1.0. + +**/** + +:Attributes: + - **filetype** (*char[]*) -- String indicating the type of file. + For collision-track files the value is ``"collision_track"``. + +:Datasets: + + - **collision_track_bank** (Compound type) -- Collision information + for each stored event. Each entry in the dataset corresponds to one + collision and contains the following fields: + + - ``r`` (*double[3]*) -- Position of the collision in [cm]. + - ``u`` (*double[3]*) -- Direction unit vector immediately after the collision. + - ``E`` (*double*) -- Incident particle energy before the collision in [eV]. + - ``dE`` (*double*) -- Energy loss over the collision (:math:`E_\text{before} - E_\text{after}`) in [eV]. + - ``time`` (*double*) -- Time of the collision in [s]. + - ``wgt`` (*double*) -- Particle weight at the collision. + - ``event_mt`` (*int*) -- ENDF MT number identifying the reaction. + - ``delayed_group`` (*int*) -- Delayed neutron group index (non-zero for delayed events). + - ``cell_id`` (*int*) -- ID of the cell in which the collision occurred. + - ``nuclide_id`` (*int*) -- ZA identifier of the nuclide (ZZZAAAM format). + - ``material_id`` (*int*) -- ID of the material containing the collision site. + - ``universe_id`` (*int*) -- ID of the universe containing the collision site. + - ``n_collision`` (*int*) -- Collision counter for the particle history. + - ``particle`` (*int*) -- Particle type (0=neutron, 1=photon, 2=electron, 3=positron). + - ``parent_id`` (*int64*) -- Unique ID of the parent particle. + - ``progeny_id`` (*int64*) -- Progeny ID of the particle. + +In an MPI run, OpenMC writes the combined dataset by gathering collision-track +entries from all ranks before flushing them to disk, so the final file appears +as though it were produced serially. diff --git a/docs/source/io_formats/depletion_chain.rst b/docs/source/io_formats/depletion_chain.rst index 89c76525f89..74413e7b610 100644 --- a/docs/source/io_formats/depletion_chain.rst +++ b/docs/source/io_formats/depletion_chain.rst @@ -56,6 +56,27 @@ attributes: .. _io_chain_reaction: +-------------------- +```` Element +-------------------- + +The ```` element represents photon and electron sources associated with +the decay of a nuclide and contains information to construct an +:class:`openmc.stats.Univariate` object that represents this emission as an +energy distribution. This element has the following attributes: + + :type: + The type of :class:`openmc.stats.Univariate` source term. + + :particle: + The type of particle emitted, e.g., 'photon' or 'electron' + + :parameters: + The parameters of the source term, e.g., for a + :class:`openmc.stats.Discrete` source, the energies (in [eV]) at which the + particles are emitted and their relative intensities in [Bq/atom] (in other + words, decay constants). + ---------------------- ```` Element ---------------------- diff --git a/docs/source/io_formats/depletion_results.rst b/docs/source/io_formats/depletion_results.rst index 7035fc9c9ee..b2a726dad04 100644 --- a/docs/source/io_formats/depletion_results.rst +++ b/docs/source/io_formats/depletion_results.rst @@ -4,7 +4,7 @@ Depletion Results File Format ============================= -The current version of the depletion results file format is 1.1. +The current version of the depletion results file format is 1.2. **/** @@ -12,22 +12,20 @@ The current version of the depletion results file format is 1.1. - **version** (*int[2]*) -- Major and minor version of the statepoint file format. -:Datasets: - **eigenvalues** (*double[][][2]*) -- k-eigenvalues at each - time/stage. This array has shape (number of timesteps, number of - stages, value). The last axis contains the eigenvalue and the - associated uncertainty - - **number** (*double[][][][]*) -- Total number of atoms. This array - has shape (number of timesteps, number of stages, number of +:Datasets: - **eigenvalues** (*double[][2]*) -- k-eigenvalues at each timestep. + This array has shape (number of timesteps, 2). The second axis + contains the eigenvalue and its associated uncertainty. + - **number** (*double[][][]*) -- Total number of atoms at each + timestep. This array has shape (number of timesteps, number of materials, number of nuclides). - - **reaction rates** (*double[][][][][]*) -- Reaction rates used to - build depletion matrices. This array has shape (number of - timesteps, number of stages, number of materials, number of - nuclides, number of reactions). + - **reaction rates** (*double[][][][]*) -- Reaction rates at each + timestep. This array has shape (number of timesteps, number of + materials, number of nuclides, number of reactions). Only stored if + write_rates=True. - **time** (*double[][2]*) -- Time in [s] at beginning/end of each step. - - **source_rate** (*double[][]*) -- Power in [W] or source rate in - [neutron/sec]. This array has shape (number of timesteps, number - of stages). + - **source_rate** (*double[]*) -- Power in [W] or source rate in + [neutron/sec] for each timestep. - **depletion time** (*double[]*) -- Average process time in [s] spent depleting a material across all burnable materials and, if applicable, MPI processes. diff --git a/docs/source/io_formats/index.rst b/docs/source/io_formats/index.rst index 4bbaa961a68..5b4efea669e 100644 --- a/docs/source/io_formats/index.rst +++ b/docs/source/io_formats/index.rst @@ -44,6 +44,7 @@ Output Files statepoint source + collision_track summary properties depletion_results diff --git a/docs/source/io_formats/properties.rst b/docs/source/io_formats/properties.rst index 5030e78f35d..4cc5da379b1 100644 --- a/docs/source/io_formats/properties.rst +++ b/docs/source/io_formats/properties.rst @@ -4,7 +4,7 @@ Properties File Format ====================== -The current version of the properties file format is 1.0. +The current version of the properties file format is 1.1. **/** @@ -25,6 +25,7 @@ The current version of the properties file format is 1.0. **/geometry/cells/cell /** :Datasets: - **temperature** (*double[]*) -- Temperature of the cell in [K]. + - **density** (*double[]*) -- Density of the cell in [g/cm3]. **/materials/** diff --git a/docs/source/io_formats/settings.rst b/docs/source/io_formats/settings.rst index 26673faac2e..b7874fcf2f8 100644 --- a/docs/source/io_formats/settings.rst +++ b/docs/source/io_formats/settings.rst @@ -20,6 +20,85 @@ source neutrons. *Default*: None +----------------------------- +```` Element +----------------------------- + +The ```` element indicates to track information about particle +collisions based on a set of criteria and store these events in a file named +``collision_track.h5``. This file records details such as the position of the +interaction, direction of the incoming particle, incident energy and deposited +energy, weight, time of the interaction, and the delayed neutron group (0 for +prompt neutrons). Additional information such as the cell ID, material ID, +universe ID, nuclide ZAID, particle type, and event MT number are also stored. +Users can specify one or more criterion to filter collisions. If no criteria are +specified, it defaults to tracking all collisions across the model. + +.. warning:: + Storing all collisions can be very memory intensive. For more targeted + tracking, users can employ a variety of parameters such as ``cell_ids``, + ``reactions``, ``universe_ids``, ``material_ids``, ``nuclides``, and + ``deposited_E_threshold`` to refine the selection of particle interactions + to be banked. + +This element can contain one or more of the following attributes or +sub-elements: + + :max_collisions: + An integer indicating the maximum number of collisions to be banked per file. + + *Default*: 1000 + + :max_collision_track_files: + An integer indicating the number of collision_track files to be used. + + *Default*: 1 + + :mcpl: + An optional boolean to enable MCPL_-format instead of the native HDF5-based + format. If activated, the output file name and type is changed to + ``collision_track.mcpl``. + + *Default*: false + + .. _MCPL: https://mctools.github.io/mcpl/mcpl.pdf + + :cell_ids: + A list of integers representing cell IDs to define specific cells in which + collisions are to be banked. + + *Default*: None + + :universe_ids: + A list of integers representing the universe IDs to define specific + universes in which collisions are to be banked. + + *Default*: None + + :material_ids: + A list of integers representing the material IDs to define specific + materials in which collisions are to be banked. + + *Default*: None + + :nuclides: + A list of strings representing the nuclide, to define specific + define specific target nuclide collisions to be banked. + + *Default*: None + + :reactions: + A list of integers representing the ENDF-6 format MT numbers or strings + (e.g. (n,fission)) to define specific reaction types to be banked. + + *Default*: None + + :deposited_E_threshold: + A float defining the minimum deposited energy per collision (in eV) to + trigger banking. + + *Default*: 0.0 + ---------------------------------- ```` Element ---------------------------------- @@ -178,6 +257,16 @@ history-based parallelism. *Default*: false +-------------------------------- +```` Element +-------------------------------- + +The ```` element specifies the energy multiplier, expressed +in units of :math:`kT`, that determines when the free gas scattering approach is +used for elastic scattering. Values must be positive. + + *Default*: 400.0 + ----------------------------------- ```` Element ----------------------------------- diff --git a/docs/source/io_formats/statepoint.rst b/docs/source/io_formats/statepoint.rst index 3b103176965..2309643dc89 100644 --- a/docs/source/io_formats/statepoint.rst +++ b/docs/source/io_formats/statepoint.rst @@ -149,6 +149,8 @@ The current version of the statepoint file format is 18.1. tallies will have a value of 0 unless otherwise instructed. - **multiply_density** (*int*) -- Flag indicating whether reaction rates should be multiplied by atom density (1) or not (0). + - **higher_moments** (*int*) -- Flag indicating whether + higher-order tally moments are enabled (1) or not (0). :Datasets: - **n_realizations** (*int*) -- Number of realizations. - **n_filters** (*int*) -- Number of filters used. diff --git a/docs/source/io_formats/summary.rst b/docs/source/io_formats/summary.rst index 7d3ab94d9f4..64ca68b9c37 100644 --- a/docs/source/io_formats/summary.rst +++ b/docs/source/io_formats/summary.rst @@ -4,7 +4,7 @@ Summary File Format =================== -The current version of the summary file format is 6.0. +The current version of the summary file format is 6.1. **/** @@ -38,6 +38,7 @@ The current version of the summary file format is 6.0. is an array if the cell uses distributed materials, otherwise it is a scalar. - **temperature** (*double[]*) -- Temperature of the cell in Kelvin. + - **density** (*double[]*) -- Density of the cell in [g/cm3]. - **translation** (*double[3]*) -- Translation applied to the fill universe. This dataset is present only if fill_type is set to 'universe'. diff --git a/docs/source/methods/charged_particles_physics.rst b/docs/source/methods/charged_particles_physics.rst new file mode 100644 index 00000000000..5d763074fd8 --- /dev/null +++ b/docs/source/methods/charged_particles_physics.rst @@ -0,0 +1,362 @@ +.. _methods_charged_particle_physics: + +======================== +Charged Particle Physics +======================== + +OpenMC neglects the spatial transport of charged particles (electrons and +positrons), assuming they deposit all their energy locally and produce +bremsstrahlung photons at their birth location. This approximation, called +thick-target bremsstrahlung (TTB) approximation is justified by the fact that +charged particles have much shorter stopping ranges compared to neutrons and +photons, especially in high-density materials. + +----------------------------- +Charged Particle Interactions +----------------------------- + +Bremsstrahlung +-------------- + +When a charged particle is decelerated in the field of an atom, some of its +kinetic energy is converted into electromagnetic radiation known as +bremsstrahlung, or 'braking radiation'. In each event, an electron or positron +with kinetic energy :math:`T` generates a photon with an energy :math:`E` +between :math:`0` and :math:`T`. Bremsstrahlung is described by a cross section +that is differential in photon energy, in the direction of the emitted photon, +and in the final direction of the charged particle. However, in Monte Carlo +simulations it is typical to integrate over the angular variables to obtain a +single differential cross section with respect to photon energy, which is often +expressed in the form + +.. math:: + :label: bremsstrahlung-dcs + + \frac{d\sigma_{\text{br}}}{dE} = \frac{Z^2}{\beta^2} \frac{1}{E} + \chi(Z, T, \kappa), + +where :math:`\kappa = E/T` is the reduced photon energy and :math:`\chi(Z, T, +\kappa)` is the scaled bremsstrahlung cross section, which is experimentally +measured. + +Because electrons are attracted to atomic nuclei whereas positrons are +repulsed, the cross section for positrons is smaller, though it approaches that +of electrons in the high energy limit. To obtain the positron cross section, we +multiply :eq:`bremsstrahlung-dcs` by the :math:`\kappa`-independent factor used +in Salvat_, + +.. math:: + :label: positron-factor + + \begin{aligned} + F_{\text{p}}(Z,T) = + & 1 - \text{exp}(-1.2359\times 10^{-1}t + 6.1274\times 10^{-2}t^2 - 3.1516\times 10^{-2}t^3 \\ + & + 7.7446\times 10^{-3}t^4 - 1.0595\times 10^{-3}t^5 + 7.0568\times 10^{-5}t^6 \\ + & - 1.8080\times 10^{-6}t^7), + \end{aligned} + +where + +.. math:: + :label: positron-factor-t + + t = \ln\left(1 + \frac{10^6}{Z^2}\frac{T}{\text{m}_\text{e}c^2} \right). + +:math:`F_{\text{p}}(Z,T)` is the ratio of the radiative stopping powers for +positrons and electrons. Stopping power describes the average energy loss per +unit path length of a charged particle as it passes through matter: + +.. math:: + :label: stopping-power + + -\frac{dT}{ds} = n \int E \frac{d\sigma}{dE} dE \equiv S(T), + +where :math:`n` is the number density of the material and :math:`d\sigma/dE` is +the cross section differential in energy loss. The total stopping power +:math:`S(T)` can be separated into two components: the radiative stopping +power :math:`S_{\text{rad}}(T)`, which refers to energy loss due to +bremsstrahlung, and the collision stopping power :math:`S_{\text{col}}(T)`, +which refers to the energy loss due to inelastic collisions with bound +electrons in the material that result in ionization and excitation. The +radiative stopping power for electrons is given by + +.. math:: + :label: radiative-stopping-power + + S_{\text{rad}}(T) = n \frac{Z^2}{\beta^2} T \int_0^1 \chi(Z,T,\kappa) + d\kappa. + + +To obtain the radiative stopping power for positrons, +:eq:`radiative-stopping-power` is multiplied by :eq:`positron-factor`. + +While the models for photon interactions with matter described above can safely +assume interactions occur with free atoms, sampling the target atom based on +the macroscopic cross sections, molecular effects cannot necessarily be +disregarded for charged particle treatment. For compounds and mixtures, the +bremsstrahlung cross section is calculated using Bragg's additivity rule as + +.. math:: + :label: material-bremsstrahlung-dcs + + \frac{d\sigma_{\text{br}}}{dE} = \frac{1}{\beta^2 E} \sum_i \gamma_i Z^2_i + \chi(Z_i, T, \kappa), + +where the sum is over the constituent elements and :math:`\gamma_i` is the +atomic fraction of the :math:`i`-th element. Similarly, the radiative stopping +power is calculated using Bragg's additivity rule as + +.. math:: + :label: material-radiative-stopping-power + + S_{\text{rad}}(T) = \sum_i w_i S_{\text{rad},i}(T), + +where :math:`w_i` is the mass fraction of the :math:`i`-th element and +:math:`S_{\text{rad},i}(T)` is found for element :math:`i` using +:eq:`radiative-stopping-power`. The collision stopping power, however, is a +function of certain quantities such as the mean excitation energy :math:`I` and +the density effect correction :math:`\delta_F` that depend on molecular +properties. These quantities cannot simply be summed over constituent elements +in a compound, but should instead be calculated for the material. The Bethe +formula can be used to find the collision stopping power of the material: + +.. math:: + :label: material-collision-stopping-power + + S_{\text{col}}(T) = \frac{2 \pi r_e^2 m_e c^2}{\beta^2} N_A \frac{Z}{A_M} + [\ln(T^2/I^2) + \ln(1 + \tau/2) + F(\tau) - \delta_F(T)], + +where :math:`N_A` is Avogadro's number, :math:`A_M` is the molar mass, +:math:`\tau = T/m_e`, and :math:`F(\tau)` depends on the particle type. For +electrons, + +.. math:: + :label: F-electron + + F_{-}(\tau) = (1 - \beta^2)[1 + \tau^2/8 - (2\tau + 1) \ln2], + +while for positrons + +.. math:: + :label: F-positron + + F_{+}(\tau) = 2\ln2 - (\beta^2/12)[23 + 14/(\tau + 2) + 10/(\tau + 2)^2 + + 4/(\tau + 2)^3]. + +The density effect correction :math:`\delta_F` takes into account the reduction +of the collision stopping power due to the polarization of the material the +charged particle is passing through by the electric field of the particle. +It can be evaluated using the method described by Sternheimer_, where the +equation for :math:`\delta_F` is + +.. math:: + :label: density-effect-correction + + \delta_F(\beta) = \sum_{i=1}^n f_i \ln[(l_i^2 + l^2)/l_i^2] - + l^2(1-\beta^2). + +Here, :math:`f_i` is the oscillator strength of the :math:`i`-th transition, +given by :math:`f_i = n_i/Z`, where :math:`n_i` is the number of electrons in +the :math:`i`-th subshell. The frequency :math:`l` is the solution of the +equation + +.. math:: + :label: density-effect-l + + \frac{1}{\beta^2} - 1 = \sum_{i=1}^{n} \frac{f_i}{\bar{\nu}_i^2 + l^2}, + +where :math:`\bar{v}_i` is defined as + +.. math:: + :label: density-effect-nubar + + \bar{\nu}_i = h\nu_i \rho / h\nu_p. + +The plasma energy :math:`h\nu_p` of the medium is given by + +.. math:: + :label: plasma-frequency + + h\nu_p = \sqrt{\frac{(hc)^2 r_e \rho_m N_A Z}{\pi A}}, + +where :math:`A` is the atomic weight and :math:`\rho_m` is the density of the +material. In :eq:`density-effect-nubar`, :math:`h\nu_i` is the oscillator +energy, and :math:`\rho` is an adjustment factor introduced to give agreement +between the experimental values of the oscillator energies and the mean +excitation energy. The :math:`l_i` in :eq:`density-effect-correction` are +defined as + +.. math:: + :label: density-effect-li + + \begin{aligned} + l_i &= (\bar{\nu}_i^2 + 2/3f_i)^{1/2} ~~~~&\text{for}~~ \bar{\nu}_i > 0 \\ + l_n &= f_n^{1/2} ~~~~&\text{for}~~ \bar{\nu}_n = 0, + \end{aligned} + +where the second case applies to conduction electrons. For a conductor, +:math:`f_n` is given by :math:`n_c/Z`, where :math:`n_c` is the effective +number of conduction electrons, and :math:`v_n = 0`. The adjustment factor +:math:`\rho` is determined using the equation for the mean excitation energy: + +.. math:: + :label: mean-excitation-energy + + \ln I = \sum_{i=1}^{n-1} f_i \ln[(h\nu_i\rho)^2 + 2/3f_i(h\nu_p)^2]^{1/2} + + f_n \ln (h\nu_pf_n^{1/2}). + +.. _ttb: + + +Thick-Target Bremsstrahlung Approximation ++++++++++++++++++++++++++++++++++++++++++ + +Since charged particles lose their energy on a much shorter distance scale than +neutral particles, not much error should be introduced by neglecting to +transport electrons. However, the bremsstrahlung emitted from high energy +electrons and positrons can travel far from the interaction site. Thus, even +without a full electron transport mode it is necessary to model bremsstrahlung. +We use a thick-target bremsstrahlung (TTB) approximation based on the models in +Salvat_ and Kaltiaisenaho_ for generating bremsstrahlung photons, which assumes +the charged particle loses all its energy in a single homogeneous material +region. + +To model bremsstrahlung using the TTB approximation, we need to know the number +of photons emitted by the charged particle and the energy distribution of the +photons. These quantities can be calculated using the continuous slowing down +approximation (CSDA). The CSDA assumes charged particles lose energy +continuously along their trajectory with a rate of energy loss equal to the +total stopping power, ignoring fluctuations in the energy loss. The +approximation is useful for expressing average quantities that describe how +charged particles slow down in matter. For example, the CSDA range approximates +the average path length a charged particle travels as it slows to rest: + +.. math:: + :label: csda-range + + R(T) = \int^T_0 \frac{dT'}{S(T')}. + +Actual path lengths will fluctuate around :math:`R(T)`. The average number of +photons emitted per unit path length is given by the inverse bremsstrahlung +mean free path: + +.. math:: + :label: inverse-bremsstrahlung-mfp + + \lambda_{\text{br}}^{-1}(T,E_{\text{cut}}) + = n\int_{E_{\text{cut}}}^T\frac{d\sigma_{\text{br}}}{dE}dE + = n\frac{Z^2}{\beta^2}\int_{\kappa_{\text{cut}}}^1\frac{1}{\kappa} + \chi(Z,T,\kappa)d\kappa. + +The lower limit of the integral in :eq:`inverse-bremsstrahlung-mfp` is non-zero +because the bremsstrahlung differential cross section diverges for small photon +energies but is finite for photon energies above some cutoff energy +:math:`E_{\text{cut}}`. The mean free path +:math:`\lambda_{\text{br}}^{-1}(T,E_{\text{cut}})` is used to calculate the +photon number yield, defined as the average number of photons emitted with +energy greater than :math:`E_{\text{cut}}` as the charged particle slows down +from energy :math:`T` to :math:`E_{\text{cut}}`. The photon number yield is +given by + +.. math:: + :label: photon-number-yield + + Y(T,E_{\text{cut}}) = \int^{R(T)}_{R(E_{\text{cut}})} + \lambda_{\text{br}}^{-1}(T',E_{\text{cut}})ds = \int_{E_{\text{cut}}}^T + \frac{\lambda_{\text{br}}^{-1}(T',E_{\text{cut}})}{S(T')}dT'. + +:math:`Y(T,E_{\text{cut}})` can be used to construct the energy spectrum of +bremsstrahlung photons: the number of photons created with energy between +:math:`E_1` and :math:`E_2` by a charged particle with initial kinetic energy +:math:`T` as it comes to rest is given by :math:`Y(T,E_1) - Y(T,E_2)`. + +To simulate the emission of bremsstrahlung photons, the total stopping power +and bremsstrahlung differential cross section for positrons and electrons must +be calculated for a given material using :eq:`material-bremsstrahlung-dcs` and +:eq:`material-radiative-stopping-power`. These quantities are used to build the +tabulated bremsstrahlung energy PDF and CDF for that material for each incident +energy :math:`T_k` on the energy grid. The following algorithm is then applied +to sample the photon energies: + +1. For an incident charged particle with energy :math:`T`, sample the number of + emitted photons as + + .. math:: + + N = \lfloor Y(T,E_{\text{cut}}) + \xi_1 \rfloor. + +2. Rather than interpolate the PDF between indices :math:`k` and :math:`k+1` + for which :math:`T_k < T < T_{k+1}`, which is computationally expensive, use + the composition method and sample from the PDF at either :math:`k` or + :math:`k+1`. Using linear interpolation on a logarithmic scale, the PDF can + be expressed as + + .. math:: + + p_{\text{br}}(T,E) = \pi_k p_{\text{br}}(T_k,E) + \pi_{k+1} + p_{\text{br}}(T_{k+1},E), + + where the interpolation weights are + + .. math:: + + \pi_k = \frac{\ln T_{k+1} - \ln T}{\ln T_{k+1} - \ln T_k},~~~ + \pi_{k+1} = \frac{\ln T - \ln T_k}{\ln T_{k+1} - \ln T_k}. + + Sample either the index :math:`i = k` or :math:`i = k+1` according to the + point probabilities :math:`\pi_{k}` and :math:`\pi_{k+1}`. + +3. Determine the maximum value of the CDF :math:`P_{\text{br,max}}`. + +3. Sample the photon energies using the inverse transform method with the + tabulated CDF :math:`P_{\text{br}}(T_i, E)` i.e., + + .. math:: + + E = E_j \left[ (1 + a_j) \frac{\xi_2 P_{\text{br,max}} - + P_{\text{br}}(T_i, E_j)} {E_j p_{\text{br}}(T_i, E_j)} + 1 + \right]^{\frac{1}{1 + a_j}} + + where the interpolation factor :math:`a_j` is given by + + .. math:: + + a_j = \frac{\ln p_{\text{br}}(T_i,E_{j+1}) - \ln p_{\text{br}}(T_i,E_j)} + {\ln E_{j+1} - \ln E_j} + + and :math:`P_{\text{br}}(T_i, E_j) \le \xi_2 P_{\text{br,max}} \le + P_{\text{br}}(T_i, E_{j+1})`. + +We ignore the range of the electron or positron, i.e., the bremsstrahlung +photons are produced in the same location that the charged particle was +created. The direction of the photons is assumed to be the same as the +direction of the incident charged particle, which is a reasonable approximation +at higher energies when the bremsstrahlung radiation is emitted at small +angles. + + +Electron-Positron Annihilation +------------------------------ + +When a positron collides with an electron, both particles are annihilated and +generally two photons with equal energy are created. If the kinetic energy of +the positron is high enough, the two photons can have different energies, and +the higher-energy photon is emitted preferentially in the direction of flight +of the positron. It is also possible to produce a single photon if the +interaction occurs with a bound electron, and in some cases three (or, rarely, +even more) photons can be emitted. However, the annihilation cross section is +largest for low-energy positrons, and as the positron energy decreases, the +angular distribution of the emitted photons becomes isotropic. + +In OpenMC, we assume the most likely case in which a low-energy positron (which +has already lost most of its energy to bremsstrahlung radiation) interacts with +an electron which is free and at rest. Two photons with energy equal to the +electron rest mass energy :math:`m_e c^2 = 0.511` MeV are emitted isotropically +in opposite directions. + + +.. _Kaltiaisenaho: https://aaltodoc.aalto.fi/bitstream/handle/123456789/21004/master_Kaltiaisenaho_Toni_2016.pdf + +.. _Salvat: https://doi.org/10.1787/32da5043-en + +.. _Sternheimer: https://doi.org/10.1103/PhysRevB.26.6067 diff --git a/docs/source/methods/index.rst b/docs/source/methods/index.rst index 75c421c8773..121d04b1ded 100644 --- a/docs/source/methods/index.rst +++ b/docs/source/methods/index.rst @@ -14,6 +14,7 @@ Theory and Methodology random_numbers neutron_physics photon_physics + charged_particles_physics tallies eigenvalue depletion @@ -21,4 +22,4 @@ Theory and Methodology parallelization cmfd variance_reduction - random_ray \ No newline at end of file + random_ray diff --git a/docs/source/methods/neutron_physics.rst b/docs/source/methods/neutron_physics.rst index fe8b8ad8500..2b797e3dbcf 100644 --- a/docs/source/methods/neutron_physics.rst +++ b/docs/source/methods/neutron_physics.rst @@ -290,7 +290,10 @@ create and store fission sites for the following generation. First, the average number of prompt and delayed neutrons must be determined to decide whether the secondary neutrons will be prompt or delayed. This is important because delayed neutrons have a markedly different spectrum from prompt neutrons, one that has a -lower average energy of emission. The total number of neutrons emitted +lower average energy of emission. Furthermore, in simulations where tracking +time of neutrons is important, we need to consider the emission time delay of +the secondary neutrons, which is dependent on the decay constant of the +delayed neutron precursor. The total number of neutrons emitted :math:`\nu_t` is given as a function of incident energy in the ENDF format. Two representations exist for :math:`\nu_t`. The first is a polynomial of order :math:`N` with coefficients :math:`c_0,c_1,\dots,c_N`. If :math:`\nu_t` has this @@ -306,8 +309,8 @@ interpolation law. The number of prompt neutrons released per fission event :math:`\nu_p` is also given as a function of incident energy and can be specified in a polynomial or tabular format. The number of delayed neutrons released per fission event :math:`\nu_d` can only be specified in a tabular -format. In practice, we only need to determine :math:`nu_t` and -:math:`nu_d`. Once these have been determined, we can calculated the delayed +format. In practice, we only need to determine :math:`\nu_t` and +:math:`\nu_d`. Once these have been determined, we can calculate the delayed neutron fraction .. math:: @@ -335,8 +338,14 @@ neutrons. Otherwise, we produce :math:`\lfloor \nu \rfloor + 1` neutrons. Then, for each fission site produced, we sample the outgoing angle and energy according to the algorithms given in :ref:`sample-angle` and :ref:`sample-energy` respectively. If the neutron is to be born delayed, then -there is an extra step of sampling a delayed neutron precursor group since they -each have an associated secondary energy distribution. +there is an extra step of sampling a delayed neutron precursor group to get the +associated secondary energy distribution and the decay constant +:math:`\lambda`, which is needed to sample the emission delay time :math:`t_d`: + +.. math:: + :label: sample-delay-time + + t_d = -\frac{\ln \xi}{\lambda}. The sampled outgoing angle and energy of fission neutrons along with the position of the collision site are stored in an array called the fission diff --git a/docs/source/methods/photon_physics.rst b/docs/source/methods/photon_physics.rst index 22d2c7f26a0..d2bd3ac7609 100644 --- a/docs/source/methods/photon_physics.rst +++ b/docs/source/methods/photon_physics.rst @@ -667,342 +667,6 @@ and Auger electrons: 5. Repeat from step 1 for vacancy left by the transition electron. -Electron-Positron Annihilation ------------------------------- - -When a positron collides with an electron, both particles are annihilated and -generally two photons with equal energy are created. If the kinetic energy of -the positron is high enough, the two photons can have different energies, and -the higher-energy photon is emitted preferentially in the direction of flight -of the positron. It is also possible to produce a single photon if the -interaction occurs with a bound electron, and in some cases three (or, rarely, -even more) photons can be emitted. However, the annihilation cross section is -largest for low-energy positrons, and as the positron energy decreases, the -angular distribution of the emitted photons becomes isotropic. - -In OpenMC, we assume the most likely case in which a low-energy positron (which -has already lost most of its energy to bremsstrahlung radiation) interacts with -an electron which is free and at rest. Two photons with energy equal to the -electron rest mass energy :math:`m_e c^2 = 0.511` MeV are emitted isotropically -in opposite directions. - -Bremsstrahlung --------------- - -When a charged particle is decelerated in the field of an atom, some of its -kinetic energy is converted into electromagnetic radiation known as -bremsstrahlung, or 'braking radiation'. In each event, an electron or positron -with kinetic energy :math:`T` generates a photon with an energy :math:`E` -between :math:`0` and :math:`T`. Bremsstrahlung is described by a cross section -that is differential in photon energy, in the direction of the emitted photon, -and in the final direction of the charged particle. However, in Monte Carlo -simulations it is typical to integrate over the angular variables to obtain a -single differential cross section with respect to photon energy, which is often -expressed in the form - -.. math:: - :label: bremsstrahlung-dcs - - \frac{d\sigma_{\text{br}}}{dE} = \frac{Z^2}{\beta^2} \frac{1}{E} - \chi(Z, T, \kappa), - -where :math:`\kappa = E/T` is the reduced photon energy and :math:`\chi(Z, T, -\kappa)` is the scaled bremsstrahlung cross section, which is experimentally -measured. - -Because electrons are attracted to atomic nuclei whereas positrons are -repulsed, the cross section for positrons is smaller, though it approaches that -of electrons in the high energy limit. To obtain the positron cross section, we -multiply :eq:`bremsstrahlung-dcs` by the :math:`\kappa`-independent factor used -in Salvat_, - -.. math:: - :label: positron-factor - - \begin{aligned} - F_{\text{p}}(Z,T) = - & 1 - \text{exp}(-1.2359\times 10^{-1}t + 6.1274\times 10^{-2}t^2 - 3.1516\times 10^{-2}t^3 \\ - & + 7.7446\times 10^{-3}t^4 - 1.0595\times 10^{-3}t^5 + 7.0568\times 10^{-5}t^6 \\ - & - 1.8080\times 10^{-6}t^7), - \end{aligned} - -where - -.. math:: - :label: positron-factor-t - - t = \ln\left(1 + \frac{10^6}{Z^2}\frac{T}{\text{m}_\text{e}c^2} \right). - -:math:`F_{\text{p}}(Z,T)` is the ratio of the radiative stopping powers for -positrons and electrons. Stopping power describes the average energy loss per -unit path length of a charged particle as it passes through matter: - -.. math:: - :label: stopping-power - - -\frac{dT}{ds} = n \int E \frac{d\sigma}{dE} dE \equiv S(T), - -where :math:`n` is the number density of the material and :math:`d\sigma/dE` is -the cross section differential in energy loss. The total stopping power -:math:`S(T)` can be separated into two components: the radiative stopping -power :math:`S_{\text{rad}}(T)`, which refers to energy loss due to -bremsstrahlung, and the collision stopping power :math:`S_{\text{col}}(T)`, -which refers to the energy loss due to inelastic collisions with bound -electrons in the material that result in ionization and excitation. The -radiative stopping power for electrons is given by - -.. math:: - :label: radiative-stopping-power - - S_{\text{rad}}(T) = n \frac{Z^2}{\beta^2} T \int_0^1 \chi(Z,T,\kappa) - d\kappa. - - -To obtain the radiative stopping power for positrons, -:eq:`radiative-stopping-power` is multiplied by :eq:`positron-factor`. - -While the models for photon interactions with matter described above can safely -assume interactions occur with free atoms, sampling the target atom based on -the macroscopic cross sections, molecular effects cannot necessarily be -disregarded for charged particle treatment. For compounds and mixtures, the -bremsstrahlung cross section is calculated using Bragg's additivity rule as - -.. math:: - :label: material-bremsstrahlung-dcs - - \frac{d\sigma_{\text{br}}}{dE} = \frac{1}{\beta^2 E} \sum_i \gamma_i Z^2_i - \chi(Z_i, T, \kappa), - -where the sum is over the constituent elements and :math:`\gamma_i` is the -atomic fraction of the :math:`i`-th element. Similarly, the radiative stopping -power is calculated using Bragg's additivity rule as - -.. math:: - :label: material-radiative-stopping-power - - S_{\text{rad}}(T) = \sum_i w_i S_{\text{rad},i}(T), - -where :math:`w_i` is the mass fraction of the :math:`i`-th element and -:math:`S_{\text{rad},i}(T)` is found for element :math:`i` using -:eq:`radiative-stopping-power`. The collision stopping power, however, is a -function of certain quantities such as the mean excitation energy :math:`I` and -the density effect correction :math:`\delta_F` that depend on molecular -properties. These quantities cannot simply be summed over constituent elements -in a compound, but should instead be calculated for the material. The Bethe -formula can be used to find the collision stopping power of the material: - -.. math:: - :label: material-collision-stopping-power - - S_{\text{col}}(T) = \frac{2 \pi r_e^2 m_e c^2}{\beta^2} N_A \frac{Z}{A_M} - [\ln(T^2/I^2) + \ln(1 + \tau/2) + F(\tau) - \delta_F(T)], - -where :math:`N_A` is Avogadro's number, :math:`A_M` is the molar mass, -:math:`\tau = T/m_e`, and :math:`F(\tau)` depends on the particle type. For -electrons, - -.. math:: - :label: F-electron - - F_{-}(\tau) = (1 - \beta^2)[1 + \tau^2/8 - (2\tau + 1) \ln2], - -while for positrons - -.. math:: - :label: F-positron - - F_{+}(\tau) = 2\ln2 - (\beta^2/12)[23 + 14/(\tau + 2) + 10/(\tau + 2)^2 + - 4/(\tau + 2)^3]. - -The density effect correction :math:`\delta_F` takes into account the reduction -of the collision stopping power due to the polarization of the material the -charged particle is passing through by the electric field of the particle. -It can be evaluated using the method described by Sternheimer_, where the -equation for :math:`\delta_F` is - -.. math:: - :label: density-effect-correction - - \delta_F(\beta) = \sum_{i=1}^n f_i \ln[(l_i^2 + l^2)/l_i^2] - - l^2(1-\beta^2). - -Here, :math:`f_i` is the oscillator strength of the :math:`i`-th transition, -given by :math:`f_i = n_i/Z`, where :math:`n_i` is the number of electrons in -the :math:`i`-th subshell. The frequency :math:`l` is the solution of the -equation - -.. math:: - :label: density-effect-l - - \frac{1}{\beta^2} - 1 = \sum_{i=1}^{n} \frac{f_i}{\bar{\nu}_i^2 + l^2}, - -where :math:`\bar{v}_i` is defined as - -.. math:: - :label: density-effect-nubar - - \bar{\nu}_i = h\nu_i \rho / h\nu_p. - -The plasma energy :math:`h\nu_p` of the medium is given by - -.. math:: - :label: plasma-frequency - - h\nu_p = \sqrt{\frac{(hc)^2 r_e \rho_m N_A Z}{\pi A}}, - -where :math:`A` is the atomic weight and :math:`\rho_m` is the density of the -material. In :eq:`density-effect-nubar`, :math:`h\nu_i` is the oscillator -energy, and :math:`\rho` is an adjustment factor introduced to give agreement -between the experimental values of the oscillator energies and the mean -excitation energy. The :math:`l_i` in :eq:`density-effect-correction` are -defined as - -.. math:: - :label: density-effect-li - - \begin{aligned} - l_i &= (\bar{\nu}_i^2 + 2/3f_i)^{1/2} ~~~~&\text{for}~~ \bar{\nu}_i > 0 \\ - l_n &= f_n^{1/2} ~~~~&\text{for}~~ \bar{\nu}_n = 0, - \end{aligned} - -where the second case applies to conduction electrons. For a conductor, -:math:`f_n` is given by :math:`n_c/Z`, where :math:`n_c` is the effective -number of conduction electrons, and :math:`v_n = 0`. The adjustment factor -:math:`\rho` is determined using the equation for the mean excitation energy: - -.. math:: - :label: mean-excitation-energy - - \ln I = \sum_{i=1}^{n-1} f_i \ln[(h\nu_i\rho)^2 + 2/3f_i(h\nu_p)^2]^{1/2} + - f_n \ln (h\nu_pf_n^{1/2}). - -.. _ttb: - -Thick-Target Bremsstrahlung Approximation -+++++++++++++++++++++++++++++++++++++++++ - -Since charged particles lose their energy on a much shorter distance scale than -neutral particles, not much error should be introduced by neglecting to -transport electrons. However, the bremsstrahlung emitted from high energy -electrons and positrons can travel far from the interaction site. Thus, even -without a full electron transport mode it is necessary to model bremsstrahlung. -We use a thick-target bremsstrahlung (TTB) approximation based on the models in -Salvat_ and Kaltiaisenaho_ for generating bremsstrahlung photons, which assumes -the charged particle loses all its energy in a single homogeneous material -region. - -To model bremsstrahlung using the TTB approximation, we need to know the number -of photons emitted by the charged particle and the energy distribution of the -photons. These quantities can be calculated using the continuous slowing down -approximation (CSDA). The CSDA assumes charged particles lose energy -continuously along their trajectory with a rate of energy loss equal to the -total stopping power, ignoring fluctuations in the energy loss. The -approximation is useful for expressing average quantities that describe how -charged particles slow down in matter. For example, the CSDA range approximates -the average path length a charged particle travels as it slows to rest: - -.. math:: - :label: csda-range - - R(T) = \int^T_0 \frac{dT'}{S(T')}. - -Actual path lengths will fluctuate around :math:`R(T)`. The average number of -photons emitted per unit path length is given by the inverse bremsstrahlung -mean free path: - -.. math:: - :label: inverse-bremsstrahlung-mfp - - \lambda_{\text{br}}^{-1}(T,E_{\text{cut}}) - = n\int_{E_{\text{cut}}}^T\frac{d\sigma_{\text{br}}}{dE}dE - = n\frac{Z^2}{\beta^2}\int_{\kappa_{\text{cut}}}^1\frac{1}{\kappa} - \chi(Z,T,\kappa)d\kappa. - -The lower limit of the integral in :eq:`inverse-bremsstrahlung-mfp` is non-zero -because the bremsstrahlung differential cross section diverges for small photon -energies but is finite for photon energies above some cutoff energy -:math:`E_{\text{cut}}`. The mean free path -:math:`\lambda_{\text{br}}^{-1}(T,E_{\text{cut}})` is used to calculate the -photon number yield, defined as the average number of photons emitted with -energy greater than :math:`E_{\text{cut}}` as the charged particle slows down -from energy :math:`T` to :math:`E_{\text{cut}}`. The photon number yield is -given by - -.. math:: - :label: photon-number-yield - - Y(T,E_{\text{cut}}) = \int^{R(T)}_{R(E_{\text{cut}})} - \lambda_{\text{br}}^{-1}(T',E_{\text{cut}})ds = \int_{E_{\text{cut}}}^T - \frac{\lambda_{\text{br}}^{-1}(T',E_{\text{cut}})}{S(T')}dT'. - -:math:`Y(T,E_{\text{cut}})` can be used to construct the energy spectrum of -bremsstrahlung photons: the number of photons created with energy between -:math:`E_1` and :math:`E_2` by a charged particle with initial kinetic energy -:math:`T` as it comes to rest is given by :math:`Y(T,E_1) - Y(T,E_2)`. - -To simulate the emission of bremsstrahlung photons, the total stopping power -and bremsstrahlung differential cross section for positrons and electrons must -be calculated for a given material using :eq:`material-bremsstrahlung-dcs` and -:eq:`material-radiative-stopping-power`. These quantities are used to build the -tabulated bremsstrahlung energy PDF and CDF for that material for each incident -energy :math:`T_k` on the energy grid. The following algorithm is then applied -to sample the photon energies: - -1. For an incident charged particle with energy :math:`T`, sample the number of - emitted photons as - - .. math:: - - N = \lfloor Y(T,E_{\text{cut}}) + \xi_1 \rfloor. - -2. Rather than interpolate the PDF between indices :math:`k` and :math:`k+1` - for which :math:`T_k < T < T_{k+1}`, which is computationally expensive, use - the composition method and sample from the PDF at either :math:`k` or - :math:`k+1`. Using linear interpolation on a logarithmic scale, the PDF can - be expressed as - - .. math:: - - p_{\text{br}}(T,E) = \pi_k p_{\text{br}}(T_k,E) + \pi_{k+1} - p_{\text{br}}(T_{k+1},E), - - where the interpolation weights are - - .. math:: - - \pi_k = \frac{\ln T_{k+1} - \ln T}{\ln T_{k+1} - \ln T_k},~~~ - \pi_{k+1} = \frac{\ln T - \ln T_k}{\ln T_{k+1} - \ln T_k}. - - Sample either the index :math:`i = k` or :math:`i = k+1` according to the - point probabilities :math:`\pi_{k}` and :math:`\pi_{k+1}`. - -3. Determine the maximum value of the CDF :math:`P_{\text{br,max}}`. - -3. Sample the photon energies using the inverse transform method with the - tabulated CDF :math:`P_{\text{br}}(T_i, E)` i.e., - - .. math:: - - E = E_j \left[ (1 + a_j) \frac{\xi_2 P_{\text{br,max}} - - P_{\text{br}}(T_i, E_j)} {E_j p_{\text{br}}(T_i, E_j)} + 1 - \right]^{\frac{1}{1 + a_j}} - - where the interpolation factor :math:`a_j` is given by - - .. math:: - - a_j = \frac{\ln p_{\text{br}}(T_i,E_{j+1}) - \ln p_{\text{br}}(T_i,E_j)} - {\ln E_{j+1} - \ln E_j} - - and :math:`P_{\text{br}}(T_i, E_j) \le \xi_2 P_{\text{br,max}} \le - P_{\text{br}}(T_i, E_{j+1})`. - -We ignore the range of the electron or positron, i.e., the bremsstrahlung -photons are produced in the same location that the charged particle was -created. The direction of the photons is assumed to be the same as the -direction of the incident charged particle, which is a reasonable approximation -at higher energies when the bremsstrahlung radiation is emitted at small -angles. .. _photon_production: @@ -1070,5 +734,3 @@ emitted photon. .. _Kaltiaisenaho: https://aaltodoc.aalto.fi/bitstream/handle/123456789/21004/master_Kaltiaisenaho_Toni_2016.pdf .. _Salvat: https://doi.org/10.1787/32da5043-en - -.. _Sternheimer: https://doi.org/10.1103/PhysRevB.26.6067 diff --git a/docs/source/methods/tallies.rst b/docs/source/methods/tallies.rst index 79a63fbdd83..27a3f873ab6 100644 --- a/docs/source/methods/tallies.rst +++ b/docs/source/methods/tallies.rst @@ -387,6 +387,101 @@ of this is that the longer you run a simulation, the better you know your results. Therefore, by running a simulation long enough, it is possible to reduce the stochastic uncertainty to arbitrarily low levels. +Skewness +++++++++ + +The `skewness`_ of a population quantifies the asymmetry of the probability +distribution around its mean. Positive and negative skewness indicate a +longer/heavier right and left tail respectively. Let :math:`x_1,\ldots,x_n` be +the per-realization values for a bin, with sample mean :math:`\bar{x}` and +sample central moments: + +.. math:: + + m_k \;=\; \frac{1}{n}\sum_{i=1}^{n}\bigl(x_i-\bar{x}\bigr)^k. + +OpenMC reports the *adjusted Fisher-Pearson skewness* (defined for :math:`n \ge +3`), which is commonly used in many statistical packages: + +.. math:: + + G_1 \;=\; \frac{\sqrt{n \cdot (n-1)}}{\,n-2\,}\cdot\frac{m_3}{m_2^{3/2}}. + +where :math:`m_2` and :math:`m_3` correspond to the biased sample second and +third central moment respectively. + +Kurtosis +++++++++ + +The `kurtosis`_ of a population quantifies tail weight (also called tailedness) +of the probability distribution relative to a normal distribution. Positive +excess kurtosis indicates *heavier tails* whereas negative excess kurtosis +indicates *lighter tails*. Kurtosis is especially useful for identifying bins +where occasional extreme scores dominate uncertainty. OpenMC reports the +*adjusted excess kurtosis* (defined for :math:`n \ge 4`): + +.. math:: + + G_2 \;=\; \frac{(n-1)}{(n-2)(n-3)} + \left[(n+1)\,\frac{m_4}{m_2^{2}} \;-\; 3(n-1)\right]. + +where :math:`m_2` and :math:`m_4` correspond to the biased sample second and +fourth central moment respectively. For a perfectly normal distribution, the +excess kurtosis is :math:`0`. + +Variance of Variance +++++++++++++++++++++ + +The variance of the variance (also known as the coefficient of variation +squared) measures *stability of the sample variance* :math:`s^2` and, by +extension, the reliability of reported relative errors. High VOV means that +error bars themselves are noisy—often due to heavy tails, skewness, or too few +realizations. + +.. math:: + + VOV = \frac{s^2(s_{\bar{X}}^2)}{s_{\bar{X}}^4 } = \frac{m_4}{m_2^2} - \frac{1}{n} + +where :math:`s_{\bar{X}}^2` is the estimated variance of the mean and +:math:`s^2(s_{\bar{X}}^2)` is the estimated variance in :math:`s_{\bar{X}}^2`. +The MCNP manual suggests a hard threshold such that :math:`VOV < 0.1` to improve +the probability of forming a reliable confidence interval. However, OpenMC does +not enforce an universal cut-off because the suitability of any single threshold +depends strongly on problem specifics (estimator choice, variance-reduction +settings, tally binning, or even effective sample size). + + +Normality Tests (D'Agostino-Pearson) +++++++++++++++++++++++++++++++++++++ + +These normality test verify the hypothesis that fluctuations are *approximately +normal*, a working assumption behind many Monte Carlo diagnostics and +`confidence-interval heuristics`_. Tests are provided for: (i) skewness-only, +(ii) kurtosis-only, and (iii) the *omnibus* combination. OpenMC uses the +finite-sample-adjusted skewness :math:`G_1` and excess kurtosis :math:`G_2` +above to construct standardized normal scores :math:`Z_1` (from :math:`G_1`) and +:math:`Z_2` (from :math:`G_2`) via the D'Agostino-Pearson transformations. The +omnibus statistic is + +.. math:: + + K^2 \;=\; Z_1^{\,2} \;+\; Z_2^{\,2} + \;\sim\; \chi^2_{(2)} \quad \text{under } H_0:\ \text{normality}. + +OpenMC reports :math:`Z_1`, :math:`Z_2`, :math:`K^2`, and their p-values when +prerequisites are met (skewness for :math:`n\ge 3`, kurtosis and omnibus for +:math:`n\ge 4`). Given a user-chosen significance level :math:`\alpha` (default +is :math:`0.05`), reject :math:`H_0` if :math:`\text{p-value}<\alpha`; otherwise +fail to reject. OpenMC leaves the interpretation to the user, who should +consider VOV together with skewness, kurtosis, and normality tests results when +judging whether reported confidence intervals are credible for their application +[#norm-tests]_. + +.. [#norm-tests] + Higher-moments accumulation must be enabled with ``higher_moments = True`` + for running these diagnostics including the skewness, kurtosis, and normality + tests. + Figure of Merit +++++++++++++++ @@ -405,14 +500,16 @@ defined as .. math:: :label: relative_error - r = \frac{s_\bar{X}}{\bar{x}}. + r = \frac{s_{\bar{X}}}{\bar{x}}. Based on this definition, one can see that a higher FOM is desirable. The FOM is useful as a comparative tool. For example, if a variance reduction technique is being applied to a simulation, the FOM with variance reduction can be compared to the FOM without variance reduction to ascertain whether the reduction in variance outweighs the potential increase in execution time (e.g., due to -particle splitting). +particle splitting). It is important to note that MCNP reports the FOM using CPU +time (wall-clock time multiplied by the number of threads/cores), whereas OpenMC +reports the FOM using only the wall-clock time :math:`t`. Confidence Intervals ++++++++++++++++++++ @@ -521,6 +618,8 @@ improve the estimate of the percentile. .. rubric:: References +.. _confidence-interval heuristics: https://doi.org/10.1080/00031305.1990.10475751 + .. _following approximation: https://doi.org/10.1080/03610918708812641 .. _Bessel's correction: https://en.wikipedia.org/wiki/Bessel's_correction @@ -541,6 +640,10 @@ improve the estimate of the percentile. .. _converges in distribution: https://en.wikipedia.org/wiki/Convergence_of_random_variables#Convergence_in_distribution +.. _skewness: https://en.wikipedia.org/wiki/Skewness + +.. _kurtosis: https://en.wikipedia.org/wiki/Kurtosis + .. _confidence intervals: https://en.wikipedia.org/wiki/Confidence_interval .. _Student's t-distribution: https://en.wikipedia.org/wiki/Student%27s_t-distribution diff --git a/docs/source/pythonapi/base.rst b/docs/source/pythonapi/base.rst index 2a9d0876cd2..ce2f6f0f857 100644 --- a/docs/source/pythonapi/base.rst +++ b/docs/source/pythonapi/base.rst @@ -216,6 +216,9 @@ Post-processing :nosignatures: :template: myfunction.rst + openmc.read_collision_track_file + openmc.read_collision_track_hdf5 + openmc.read_collision_track_mcpl openmc.voxel_to_vtk The following classes and functions are used for functional expansion reconstruction. diff --git a/docs/source/pythonapi/deplete.rst b/docs/source/pythonapi/deplete.rst index f112cf8ccff..25fcd898f49 100644 --- a/docs/source/pythonapi/deplete.rst +++ b/docs/source/pythonapi/deplete.rst @@ -287,6 +287,16 @@ the following abstract base classes: abc.SIIntegrator abc.DepSystemSolver +R2S Automation +-------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclass.rst + + R2SManager + D1S Functions ------------- diff --git a/docs/source/releasenotes/0.15.3.rst b/docs/source/releasenotes/0.15.3.rst new file mode 100644 index 00000000000..c5095810474 --- /dev/null +++ b/docs/source/releasenotes/0.15.3.rst @@ -0,0 +1,226 @@ +==================== +What's New in 0.15.3 +==================== + +.. currentmodule:: openmc + +------- +Summary +------- + +This release of OpenMC includes many bug fixes, performance improvements, and +several notable new features. The major highlights of this release include a new +:class:`~openmc.deplete.R2SManager` class that automates the workflow for +rigorous 2-step (R2S) shutdown dose rate calculations, the ability to collect +higher moments for tally results that can be used to test normality, a new +uncertainty-aware criticality search method, a new collision tracking feature +that enables detailed tracking of particle interactions, support for distributed +cell densities, and several new tally filters. The random ray solver also +continues to receive significant updates, including automatic setup +capabilities, improved geometry handling, and better weight window support. +Depletion capabilities have been expanded with thermochemical redox control, +external transfer rates, and improved performance. + +------------------------------------ +Compatibility Notes and Deprecations +------------------------------------ + +MCPL has been changed from a build-time dependency to a runtime optional +dependency, which means OpenMC will attempt to load the MCPL library at +runtime when needed rather than requiring it at build time. + +The ``openmc.mgxs.Library.add_to_tallies_file`` method has been renamed to +:meth:`openmc.mgxs.Library.add_to_tallies`. + +------------ +New Features +------------ + +- A new collision tracking feature enables detailed tracking of particle + interactions (`#3417 `_) +- Added :meth:`~openmc.model.Model.keff_search` method for automated criticality + searches (`#3569 `_) +- Introduced automated workflow for mesh- or cell-based R2S calculations + (`#3508 `_) +- Ability to source electron/positrons directly for charged particle + simulations (`#3404 `_) +- Multi-group capability for kinetics parameter calculations with Iterated + Fission Probability (`#3425 + `_) +- Introduced a new :class:`openmc.MeshMaterialFilter` class (`#3406 + `_) +- Added support for distributed cell densities (`#3546 + `_) +- Implemented a :class:`openmc.WeightWindowsList` class that enables export to + HDF5 (`#3456 `_) +- Added :meth:`openmc.Material.mean_free_path` method (`#3469 + `_) +- Introduced :func:`openmc.lib.TemporarySession` context manager (`#3475 + `_) +- Added material depletion function for tracking individual material depletion + (`#3420 `_) +- Added methods on :class:`~openmc.Material` class for waste disposal rating / + classification (`#3366 `_, + `#3376 `_) +- Support for thermochemical redox control transfer rates in depletion + (`#2783 `_) +- Support for external transfer rates source term in depletion (`#3088 + `_) +- Added combing capability for fission site sampling and delayed neutron + emission time (`#2992 `_) +- Ability to specify reference direction for azimuthal angle in + :class:`~openmc.stats.PolarAzimuthal` distribution (`#3582 + `_) +- Allow spatial constraints on element sources within + :class:`~openmc.MeshSource` (`#3431 + `_) +- Added VTK HDF (.vtkhdf) format support for writing VTK data (`#3252 + `_) +- Implemented filter weight capability (`#3345 + `_) +- Optionally collect higher moments for tallies (`#3363 + `_) +- Several random ray solver enhancements: + + - Random Ray AutoMagic Setup for automatic configuration (`#3351 `_) + - Point source locator for random ray mode (`#3360 `_) + - Support for DAGMC geometries (`#3374 `_) + - Optimized mapping of source regions to tallies (`#3465 `_) + - Base source region refactor (`#3576 `_) + +--------------------------- +Bug Fixes and Small Changes +--------------------------- + +- Add two MPI barriers in R2S workflow (`#3646 `_) +- Fix a few warnings, rename add_to_tallies_file (`#3639 `_) +- Fix typo in DAGMC lost particle test (`#3634 `_) +- Avoid multiprocessing Pool when running depletion tests with MPI (`#3633 `_) +- Support MPI parallelism in R2SManager (`#3632 `_) +- Update documentation for particle tracks (`#3627 `_) +- Adding variance of variance and normality tests for tally statistics (`#3454 `_) +- Avoid divide-by-zero in ``from_multigroup_flux`` when flux is zero (`#3624 `_) +- Write particle states as separate lines in track VTK files (`#3628 `_) +- Reset DAGMC history when reviving from source (`#3601 `_) +- Add energy group structure: SCALE-999 (`#3564 `_) +- Fix bug in normalization of tally results with no_reduce (`#3619 `_) +- Enable nuclide filters with get_decay_photon_energy (`#3614 `_) +- Update ``check_type`` calls to accept both ``str`` and ``os.PathLike`` objects (`#3618 `_) +- Speed up ``apply_time_correction`` by reducing file I/O and deepcopies (`#3617 `_) +- FW-CADIS Disregard Max Realizations Setting (`#3616 `_) +- Random Ray Geometry Debug Mode Fix (`#3615 `_) +- Don't write reaction rates in depletion results by default (`#3609 `_) +- Allow Path objects in MGXSLibrary.export_to_hdf5 (`#3608 `_) +- Clip mixture distributions based on mean times integral (`#3603 `_) +- Allow V0 in atomic_mass function (for ENDF/B-VII.0 data) (`#3607 `_) +- Re-run flaky tests when needed (`#3604 `_) +- Ability to load mesh objects from weight_windows.h5 file (`#3598 `_) +- Switch to using coveralls github action for reporting (`#3594 `_) +- Add user setting for free gas threshold (`#3593 `_) +- Speed up time correction factors (`#3592 `_) +- Fix caching issue when using NCrystal materials (`#3538 `_) +- Fix random ray source region mesh export when using model.export_to_xml() (`#3579 `_) +- Ensure weight_windows_file information is read from XML (`#3587 `_) +- Add missing documentation on in depletion chain file format (`#3590 `_) +- Adding tally filter type option to statepoint get_tally (`#3584 `_) +- Optional separation of mesh-material-volume calc from get_homogenized_materials (`#3581 `_) +- Fix IFP implementation (`#3580 `_) +- Remove several TODOs related to C++17 support (`#3574 `_) +- Fix performance regression in libMesh unstructured mesh tallies (`#3577 `_) +- Update find_package calls in OpenMCConfig.cmake (`#3572 `_) +- Ensure ``n_dimension_`` attribute is set for unstructured meshes (`#3575 `_) +- Allow newer Sphinx version and fix docbuild warnings (`#3571 `_) +- Fixed a bug when combining TimeFilter, MeshFilter, and tracklength estimator (`#3525 `_) +- PowerLaw raises an error if sampling interval contains negative values (`#3542 `_) +- depletion: fix performance of chain matrix construction (`#3567 `_) +- Do not apply boundary conditions when initialized in volume calculation mode (`#3562 `_) +- Bump up tolerance for flaky activation test (`#3560 `_) +- Fixed a bug in plotting cross sections with S(a,b) data (`#3558 `_) +- Change test order to run unit tests first (`#3533 `_) +- adding ecco 33 (`#3556 `_) +- Refactor endf_data to be a fixture (`#3539 `_) +- Revert "fix broken CI" (`#3554 `_) +- fix broken CI (`#3551 `_) +- Leverage particle.move_distance in event advance (`#3544 `_) +- fix tests that accidentaly got broken (`#3543 `_) +- not printing nuclides with 0 percent to terminal (option 2 ) (`#3448 `_) +- Fix a bug in time cutoff behavior (`#3526 `_) +- Avoid duplicate materials written to XML (`#3536 `_) +- Use cached property for openmc.data.Decay.sources (`#3535 `_) +- more helpful error message for dose_coefficients (`#3534 `_) +- Adding 616 group structure (`#3531 `_) +- Remove unused special accessors for tallies (`#3527 `_) +- Consistent XML parsing using functions from _xml module (`#3517 `_) +- Add stat:sum field to MCPL files for proper weight normalization (`#3522 `_) +- Remove reorder_attributes from openmc._xml (`#3519 `_) +- fixed a bug in MeshMaterialFilter.from_volumes (`#3520 `_) +- Fixed a bug in distribcell offsets logic (`#3424 `_) +- Add test for FW-CADIS based WW generation on a DAGMC model (`#3504 `_) +- Fix for Weight Window Scaling Bug (`#3511 `_) +- Fix: ``materials``, ``plots``, and ``tallies`` cannot be passed as lists (`#3513 `_) +- Allow already-initialized openmc.lib in TemporarySession (`#3505 `_) +- Update DAGMC and libMesh precompiler definitions (`#3510 `_) +- Avoid adding ParentNuclideFilter twice when calling prepare_tallies (`#3506 `_) +- Enabling MCPL source files to be read when using surf_source_read (`#3472 `_) +- Boundary info accessors (`#3496 `_) +- automatically finding appropriate dimension when making regular mesh from domain (`#3468 `_) +- Add accessor methods for LocalCoord (`#3494 `_) +- Make MCPL a Runtime Optional Dependency (`#3429 `_) +- Use auto-chunking for StepResult HDF5 writing (`#3498 `_) +- Provide a way to get ID maps from plot parameters on the Model class (`#3481 `_) +- Update OSX install instructions to point to x64 platform (`#3501 `_) +- Update conda install instructions for macOS Apple silicon (`#3488 `_) +- Only show warning if in restart mode (`#3478 `_) +- Add flag to CMakeLists to use submodules instead of searching (`#3480 `_) +- Added citation metadata file (`#3409 `_) +- fix zam parsing (`#3484 `_) +- Support flux collapse method in ``get_microxs_and_flux`` (`#3466 `_) +- Stabilize Adjoint Source (`#3476 `_) +- Refactor and Harden Configuration Management (`#3461 `_) +- Updated Docs to Not Give Specific Python Version Requirement (`#3473 `_) +- Parallelization of Weight Window Update (`#3467 `_) +- Limit Random Ray Weight Window Generation to Final Batch (`#3464 `_) +- Fix Dockerfile DAGMC build (`#3463 `_) +- Fix Weight Window Infinite Loop Bug (`#3457 `_) +- Weight Window Birth Scaling (`#3459 `_) +- Adding checks to geometry.plot to avoid material name overlaps (`#3458 `_) +- Fixing crash when calling Geometry.plot when DAGMCUniverse in geometry (`#3455 `_) +- fixing expansion of elemental Ta bug (`#3443 `_) +- Prevent Adjoint Sources from Trending towards Infinity (`#3449 `_) +- adding plot function to DAGMCUnvierse (`#3451 `_) +- Allow specifying number of equiprobable angles for thermal scattering data generation (`#3346 `_) +- Change Dockerfile from debian:bookworm-slim to ubuntu:24.04 (`#3442 `_) +- Fix Resetting of Auto IDs When Generating MGXS (`#3437 `_) +- Allowing chain_file to be chain object to save reloading time (`#3436 `_) +- update units for flux (`#3441 `_) +- Fix raytrace infinite loop (`#3423 `_) +- Apply Max Number of Events Check to Random Rays (`#3438 `_) +- Add user setting for source rejection fraction (`#3433 `_) +- Adding fix and tests for spherical mesh as spatial distribution (`#3428 `_) +- Random Ray Missed Cell Policy Change for Adjoint Mode (`#3434 `_) +- Random Ray External Source Plotting Fix (`#3430 `_) +- Avoid negative heating values during pair production and bremsstrahlung (`#3426 `_) +- Fix no serialization of periodic_surface_id bug (`#3421 `_) +- Update _get_start_data to always grab the beginning of timestep time (`#3414 `_) +- Fixed a bug in charged particle energy deposition (`#3416 `_) +- Fix bug where the same mesh is written multiple times to settings.xml (`#3418 `_) +- small typo - spelling of Debian (`#3411 `_) +- added test for dagmc geometry plot (`#3375 `_) +- Random Ray Misc Memory Error Fixes (`#3405 `_) +- added type hints to model file (`#3399 `_) +- Apply resolve paths to path values in ``config`` (`#3400 `_) +- Fixing an incorrect computation of CDF of bremsstrahlung photons (`#3396 `_) +- Fix weight modification for uniform source sampling (`#3395 `_) +- Updates to VTK data checks (`#3371 `_) +- Map Compton subshell data to atomic relaxation data (`#3392 `_) +- Skip atomic relaxation if binding energy is larger than photon energy (`#3391 `_) +- Fix extremely large yields from Bremsstrahlung (`#3386 `_) +- corrected tally name in D1S example (`#3383 `_) +- Install MCPL using same build type as OpenMC in CI (`#3388 `_) +- using reduce chain level to remove need for reduce chain (`#3377 `_) +- Fix negative distances from bins_crossed for CylindricalMesh (`#3370 `_) +- Add check for equal value bins in an EnergyFilter (`#3372 `_) +- Fix for Issue Loading MGXS Data Files with LLVM 20 or Newer (`#3368 `_) +- Report plot ID instead of index for unsupported plot types in random ray mode (`#3361 `_) +- Handle Missing Tags in Versioning by Setting Default to 0 (`#3359 `_) +- added kg units to doc string in results class (`#3358 `_) diff --git a/docs/source/releasenotes/index.rst b/docs/source/releasenotes/index.rst index d24b83f9eb0..1292599ba91 100644 --- a/docs/source/releasenotes/index.rst +++ b/docs/source/releasenotes/index.rst @@ -7,6 +7,7 @@ Release Notes .. toctree:: :maxdepth: 1 + 0.15.3 0.15.2 0.15.1 0.15.0 diff --git a/docs/source/usersguide/decay_sources.rst b/docs/source/usersguide/decay_sources.rst index d5a078135ba..398680e7464 100644 --- a/docs/source/usersguide/decay_sources.rst +++ b/docs/source/usersguide/decay_sources.rst @@ -6,42 +6,189 @@ Decay Sources Through the :ref:`depletion ` capabilities in OpenMC, it is possible to simulate radiation emitted from the decay of activated materials. -For fusion energy systems, this is commonly done using what is known as the -`rigorous 2-step `_ (R2S) method. -In this method, a neutron transport calculation is used to determine the neutron -flux and reaction rates over a cell- or mesh-based spatial discretization of the -model. Then, the neutron flux in each discrete region is used to predict the -activated material composition using a depletion solver. Finally, a photon -transport calculation with a source based on the activity and energy spectrum of -the activated materials is used to determine a desired physical response (e.g., -a dose rate) at one or more locations of interest. - -Once a depletion simulation has been completed in OpenMC, the intrinsic decay -source can be determined as follows. First the activated material composition -can be determined using the :class:`openmc.deplete.Results` object. Indexing an -instance of this class with the timestep index returns a -:class:`~openmc.deplete.StepResult` object, which itself has a -:meth:`~openmc.deplete.StepResult.get_material` method. Once the activated -:class:`~openmc.Material` has been obtained, the -:meth:`~openmc.Material.get_decay_photon_energy` method will give the energy -spectrum of the decay photon source. The integral of the spectrum also indicates -the intensity of the source in units of [Bq]. Altogether, the workflow looks as -follows:: - +For fusion energy systems, this is commonly done using either the `rigorous +2-step `_ (R2S) method or the +`direct 1-step `_ (D1S) method. +In the R2S method, a neutron transport calculation is used to determine the +neutron flux and reaction rates over a cell- or mesh-based spatial +discretization of the model. Then, the neutron flux in each discrete region is +used to predict the activated material composition using a depletion solver. +Finally, a photon transport calculation with a source based on the activity and +energy spectrum of the activated materials is used to determine a desired +physical response (e.g., a dose rate) at one or more locations of interest. +OpenMC includes automation for both the R2S and D1S methods as described in the +following sections. + +Rigorous 2-Step (R2S) Calculations +================================== + +OpenMC includes an :class:`openmc.deplete.R2SManager` class that fully automates +cell- and mesh-based R2S calculations. Before we describe this class, it is +useful to understand the basic mechanics of how an R2S calculation works. +Generally, it involves the following steps: + +1. The :meth:`openmc.deplete.get_microxs_and_flux` function is called to run a + neutron transport calculation that determines fluxes and microscopic cross + sections in each activation region. +2. The :class:`openmc.deplete.IndependentOperator` and + :class:`openmc.deplete.PredictorIntegrator` classes are used to carry out a + depletion (activation) calculation in order to determine predicted material + compositions based on a set of timesteps and source rates. +3. The activated material composition is determined using the + :class:`openmc.deplete.Results` class. Indexing an instance of this class + with the timestep index returns a :class:`~openmc.deplete.StepResult` object, + which itself has a :meth:`~openmc.deplete.StepResult.get_material` method + returning an activated material. +4. The :meth:`openmc.Material.get_decay_photon_energy` method is used to obtain + the energy spectrum of the decay photon source. The integral of the spectrum + also indicates the intensity of the source in units of [Bq]. +5. A new photon source is defined using one of OpenMC's source classes with the + energy distribution set equal to the object returned by the + :meth:`openmc.Material.get_decay_photon_energy` method. The source is then + assigned to a photon :class:`~openmc.Model`. +6. A photon transport calculation is run with ``model.run()``. + +Altogether, the workflow looks as follows:: + + # Run neutron transport calculation + fluxes, micros = openmc.deplete.get_microxs_and_flux(model, domains) + + # Run activation calculation + op = openmc.deplete.IndependentOperator(mats, fluxes, micros) + timesteps = ... + source_rates = ... + integrator = openmc.deplete.Integrator(op, timesteps, source_rates) + integrator.integrate() + + # Get decay photon source at last timestep results = openmc.deplete.Results("depletion_results.h5") - - # Get results at last timestep step = results[-1] - - # Get activated material composition for ID=1 activated_mat = step.get_material('1') - - # Determine photon source photon_energy = activated_mat.get_decay_photon_energy() - -By default, the :meth:`~openmc.Material.get_decay_photon_energy` method will -eliminate spectral lines with very low intensity, but this behavior can be -configured with the ``clip_tolerance`` argument. + photon_source = openmc.IndependentSource( + space=..., + energy=photon_energy, + particle='photon', + strength=photon_energy.integral() + ) + + # Run photon transport calculation + model.settings.source = photon_source + model.run() + +Note that by default, the :meth:`~openmc.Material.get_decay_photon_energy` +method will eliminate spectral lines with very low intensity, but this behavior +can be configured with the ``clip_tolerance`` argument. + +Cell-based R2S +-------------- + +In practice, users do not need to manually go through each of the steps in an R2S +calculation described above. The :class:`~openmc.deplete.R2SManager` fully +automates the execution of neutron transport, depletion, decay source +generation, and photon transport. For a cell-based R2S calculation, once you +have a :class:`~openmc.Model` that has been defined, simply create an instance +of :class:`~openmc.deplete.R2SManager` by passing the model and a list of cells +to activate:: + + r2s = openmc.deplete.R2SManager(model, [cell1, cell2, cell3]) + +Note that the ``volume`` attribute must be set for any cell that is to be +activated. The :class:`~openmc.deplete.R2SManager` class allows you to +optionally specify a separate photon model; if not given as an argument, it will +create a shallow copy of the original neutron model (available as the +``neutron_model`` attribute) and store it in the ``photon_model`` attribute. We +can use this to define tallies specific to the photon model:: + + dose_tally = openmc.Tally() + ... + r2s.photon_model.tallies = [dose_tally] + +Next, define the timesteps and source rates for the activation calculation:: + + timesteps = [(3.0, 'd'), (5.0, 'h')] + source_rates = [1e12, 0.0] + +In this case, the model is irradiated for 3 days with a source rate of +:math:`10^{12}` neutron/sec and then the source is turned off and the activated +materials are allowed to decay for 5 hours. These parameters should be passed to +the :meth:`~openmc.deplete.R2SManager.run` method to execute the full R2S +calculation. Before we can do that though, for a cell-based calculation, the one +other piece of information that is needed is bounding boxes of the activated +cells:: + + bounding_boxes = { + cell1.id: cell1.bounding_box, + cell2.id: cell2.bounding_box, + cell3.id: cell3.bounding_box + } + +Note that calling the ``bounding_box`` attribute may not work for all +constructive solid geometry regions (for example, a cell that uses a +non-axis-aligned plane). In these cases, the bounding box will need to be +specified manually. Once you have a set of bounding boxes, the R2S calculation +can be run:: + + r2s.run(timesteps, source_rates, bounding_boxes=bounding_boxes) + +If not specified otherwise, a photon transport calculation is run at each time +in the depletion schedule. That means in the case above, we would see three +photon transport calculations. To specify specific times at which photon +transport calculations should be run, pass the ``photon_time_indices`` argument. +For example, if we wanted to run a photon transport calculation only on the last +time (after the 5 hour decay), we would run:: + + r2s.run(timesteps, source_rates, bounding_boxes=bounding_boxes, + photon_time_indices=[2]) + +After an R2S calculation has been run, the :class:`~openmc.deplete.R2SManager` +instance will have a ``results`` dictionary that allows you to directly access +results from each of the steps. It will also write out all the output files into +a directory that is named "r2s_/". The ``output_dir`` argument to the +:meth:`~openmc.deplete.R2SManager.run` method enables you to override the +default output directory name if desired. + +The :meth:`~openmc.deplete.R2SManager.run` method actually runs three +lower-level methods under the hood:: + + r2s.step1_neutron_transport(...) + r2s.step2_activation(...) + r2s.step3_photon_transport(...) + +For users looking for more control over the calculation, these lower-level +methods can be used in lieu of the :meth:`openmc.deplete.R2SManager.run` method. + +Mesh-based R2S +-------------- + +Executing a mesh-based R2S calculation looks nearly identical to the cell-based +R2S workflow described above. The only difference is that instead of passing a +list of cells to the ``domains`` argument of +:class:`~openmc.deplete.R2SManager`, you need to define a mesh object and pass +that instead. This might look like the following:: + + # Define a regular Cartesian mesh + mesh = openmc.RegularMesh() + mesh.lower_left = (-50., -50., 0.) + mesh.upper_right = (50., 50., 75.) + mesh.dimension = (10, 10, 5) + + r2s = openmc.deplete.R2SManager(model, mesh) + +Executing the R2S calculation is then performed by adding photon tallies and +calling the :meth:`~openmc.deplete.R2SManager.run` method with the appropriate +timesteps and source rates. Note that in this case we do not need to define cell +volumes or bounding boxes as is required for a cell-based R2S calculation. +Instead, during the neutron transport step, OpenMC will run a raytracing +calculation to determine material volume fractions within each mesh element +using the :meth:`openmc.MeshBase.material_volumes` method. Arguments to this +method can be customized via the ``mat_vol_kwargs`` argument to the +:meth:`~openmc.deplete.R2SManager.run` method. Most often, this would involve +customizing the number of rays traced to obtain better estimates of volumes. As +an example, if we wanted to run the raytracing calculation with 10 million rays, +we would run:: + + r2s.run(timesteps, source_rates, mat_vol_kwargs={'n_samples': 10_000_000}) Direct 1-Step (D1S) Calculations ================================ diff --git a/docs/source/usersguide/kinetics.rst b/docs/source/usersguide/kinetics.rst index bdf26d341b5..9024ff8227a 100644 --- a/docs/source/usersguide/kinetics.rst +++ b/docs/source/usersguide/kinetics.rst @@ -67,6 +67,23 @@ are needed to compute kinetics parameters in OpenMC: Obtaining kinetics parameters ----------------------------- +The ``Model`` class can be used to automatically generate all IFP tallies using +the Python API with :attr:`openmc.Settings.ifp_n_generation` greater than 0 and +the :meth:`openmc.Model.add_ifp_kinetics_tallies` method:: + + model = openmc.Model(geometry, settings=settings) + model.add_kinetics_parameters_tallies(num_groups=6) # Add 6 precursor groups + +Alternatively, each of the tallies can be manually defined using group-wise or +total :math:`\beta_{\text{eff}}` specified by providing a 6-group +:class:`openmc.DelayedGroupFilter`:: + + beta_tally = openmc.Tally(name="group-beta-score") + beta_tally.scores = ["ifp-beta-numerator"] + + # Add DelayedGroupFilter to enable group-wise tallies + beta_tally.filters = [openmc.DelayedGroupFilter(list(range(1, 7)))] + Here is an example showing how to declare the three available IFP scores in a single tally:: @@ -95,6 +112,12 @@ for ``ifp-denominator``: \beta_{\text{eff}} = \frac{S_{\text{ifp-beta-numerator}}}{S_{\text{ifp-denominator}}} +The kinetics parameters can be retrieved directly from a statepoint file using +the :meth:`openmc.StatePoint.ifp_results` method:: + + with openmc.StatePoint(output_path) as sp: + generation_time, beta_eff = sp.get_kinetics_parameters() + .. only:: html .. rubric:: References @@ -107,4 +130,4 @@ for ``ifp-denominator``: of the Iterated Fission Probability Method in OpenMC to Compute Adjoint-Weighted Kinetics Parameters", International Conference on Mathematics and Computational Methods Applied to Nuclear Science and Engineering (M&C 2025), Denver, April 27-30, - 2025 (to be presented). + 2025. diff --git a/docs/source/usersguide/processing.rst b/docs/source/usersguide/processing.rst index 8b5ae53fac6..fe6ab0826ff 100644 --- a/docs/source/usersguide/processing.rst +++ b/docs/source/usersguide/processing.rst @@ -68,17 +68,17 @@ generation, and particle number of the desired particle. For example, to create a track file for particle 4 of batch 1 and generation 2:: settings = openmc.Settings() - settings.track = (1, 2, 4) + settings.track = [(1, 2, 4)] -To specify multiple particles, the length of the iterable should be a multiple -of three, e.g., if we wanted particles 3 and 4 from batch 1 and generation 2:: +To specify multiple particles, specify a list of tuples, e.g., if we wanted +particles 3 and 4 from batch 1 and generation 2:: - settings.track = (1, 2, 3, 1, 2, 4) + settings.track = [(1, 2, 3), (1, 2, 4)] -After running OpenMC, the working directory will contain a file of the form -"track_(batch #)_(generation #)_(particle #).h5" for each particle tracked. -These track files can be converted into VTK poly data files with the -:class:`openmc.Tracks` class. +After running OpenMC (now, without the ``-t`` argument), the working directory +will contain a file named `tracks.h5`, which contains a collection of particle +tracks. These track files can be converted into VTK poly data files or +matplotlib plots with the :class:`openmc.Tracks` class. ---------------------- Source Site Processing diff --git a/docs/source/usersguide/random_ray.rst b/docs/source/usersguide/random_ray.rst index 138ae910c9a..881498a0a79 100644 --- a/docs/source/usersguide/random_ray.rst +++ b/docs/source/usersguide/random_ray.rst @@ -644,7 +644,8 @@ model to use these multigroup cross sections. An example is given below:: nparticles=2000, overwrite_mgxs_library=False, mgxs_path="mgxs.h5", - correction=None + correction=None, + source_energy=None ) The most important parameter to set is the ``method`` parameter, which can be @@ -706,6 +707,31 @@ generation and use an existing library file. with a :math:`\rho` default value of 1.0, which can be adjusted with the ``settings.random_ray['diagonal_stabilization_rho']`` parameter. +When generating MGXS data with either the ``stochastic_slab`` or +``infinite_medium`` methods, by default the simulation will use a uniform source +distribution spread evenly over all energy groups. This ensures that all energy +groups receive tallies and therefore produce non-zero total multigroup cross +sections. Additionally, the function will convert any sources in the model into +simplified spatial sources that retain the original energy distributions. If +sources are present, they will be used 99% of the time to sample source energies +during MGXS generation. The other 1% of the time, energies will be sampled +uniformly over all energy groups to ensure that all groups receive some tallies. +However, the user may wish to specify a different source energy spectrum (for +instance, if they are using a FileSource, such that the energy distribution +cannot be extracted from the python source object). This can be done by +providing a :class:`openmc.stats.Univariate` distribution as the +``source_energy`` parameter of the :meth:`openmc.Model.convert_to_multigroup` +method. If provided, it will override any sources present in the model and will +be used 99% of the time to sample source energies during MGXS generation. The +other 1% of the time, energies will be sampled uniformly over all energy groups +to ensure that all groups receive some tallies. + +For instance, a D-D fusion simulation may involve a complex file source. In this +case, the user may wish to provide a discrete 2.45 MeV energy source +distribution for MGXS generation as:: + + source_energy = openmc.stats.delta_function(2.45e6) + Ultimately, the methods described above are all just approximations. Approximations in the generated MGXS data will fundamentally limit the potential accuracy of the random ray solver. However, the methods described above are all @@ -765,7 +791,7 @@ energy decomposition:: # Create a "tallies.xml" file for the MGXS Library tallies = openmc.Tallies() - mgxs_lib.add_to_tallies_file(tallies, merge=True) + mgxs_lib.add_to_tallies(tallies, merge=True) # Export tallies.export_to_xml() diff --git a/docs/source/usersguide/settings.rst b/docs/source/usersguide/settings.rst index 1b2d4bc1a5e..f973f146552 100644 --- a/docs/source/usersguide/settings.rst +++ b/docs/source/usersguide/settings.rst @@ -756,6 +756,62 @@ instance, whereas the :meth:`openmc.Track.filter` method returns a new track_files = [f"tracks_p{rank}.h5" for rank in range(32)] openmc.Tracks.combine(track_files, "tracks.h5") +Collision Track File +--------------------- + +OpenMC can generate a collision track file that contains detailed collision +information (position, direction, energy, deposited energy, time, weight, cell +ID, material ID, universe ID, nuclide ZAID, particle type, particle delayed +group and particle ID) for each particle collision depending on user-defined +parameters. To invoke this feature, set the +:attr:`~openmc.Settings.collision_track` attribute as shown in this example:: + + settings.collision_track = { + "max_collisions": 300, + "reactions": ["(n,fission)", "(n,2n)"], + "material_ids": [1,2], + "nuclides": ["U238", "O16"], + "cell_ids": [5, 12] + } + +In this example, collision track information is written to the +collision_track.h5 file at the end of the simulation. The file contains +300 recorded collisions that occurred in materials with IDs 1 or 2, involving +fission or (n,2n) reactions on the nuclides U-238 or O-16, within cells +with IDs 5 and 12. +The file can be read using :func:`openmc.read_collision_track_file`. +The example below shows how to extract the data from the collision_track +feature and displays the fields stored in the file: + +>>> data = openmc.read_collision_track_file('collision_track.h5') +>>> data.dtype + dtype([('r', [('x', '`. # we used for source region decomposition wwg = openmc.WeightWindowGenerator( method='fw_cadis', - mesh=mesh, - max_realizations=settings.batches + mesh=mesh ) # Add generator to openmc.settings object @@ -162,7 +161,7 @@ solver, the Python input just needs to load the h5 file:: settings.weight_window_checkpoints = {'collision': True, 'surface': True} settings.survival_biasing = False - settings.weight_windows = openmc.WeightWindowsList.from_hdf5('weight_windows.h5') + settings.weight_windows_file = "weight_windows.h5" settings.weight_windows_on = True The :class:`~openmc.WeightWindowGenerator` instance is not needed to load an diff --git a/examples/c5g7_no_mesh/test b/examples/c5g7_no_mesh/test new file mode 100644 index 00000000000..60cd895705a --- /dev/null +++ b/examples/c5g7_no_mesh/test @@ -0,0 +1,51561 @@ + %%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%% + ############### %%%%%%%%%%%%%%%%%%%%%%%% + ################## %%%%%%%%%%%%%%%%%%%%%%% + ################### %%%%%%%%%%%%%%%%%%%%%%% + #################### %%%%%%%%%%%%%%%%%%%%%% + ##################### %%%%%%%%%%%%%%%%%%%%% + ###################### %%%%%%%%%%%%%%%%%%%% + ####################### %%%%%%%%%%%%%%%%%% + ####################### %%%%%%%%%%%%%%%%% + ###################### %%%%%%%%%%%%%%%%% + #################### %%%%%%%%%%%%%%%%% + ################# %%%%%%%%%%%%%%%%% + ############### %%%%%%%%%%%%%%%% + ############ %%%%%%%%%%%%%%% + ######## %%%%%%%%%%%%%% + %%%%%%%%%%% + + | The OpenMC Monte Carlo Code + Copyright | 2011-2025 MIT, UChicago Argonne LLC, and contributors + License | https://docs.openmc.org/en/latest/license.html + Version | 0.15.3-dev136 + Commit Hash | 5cf00a81a4fa4f09dfb20de70f7f3d84ec8077a9 + Date/Time | 2025-12-12 14:31:01 + MPI Processes | 64 + OpenMP Threads | 1 + + Reading settings XML file... + Reading cross sections HDF5 file... + Reading materials XML file... + Reading geometry XML file... + Loading cross section data... + Loading uo2 data... + Loading mox43 data... + Loading mox7 data... + Loading mox87 data... + Loading fiss_chamber data... + Loading guide_tube data... + Loading water data... + Loading control_rod data... + Reading tallies XML file... + Preparing distributed cell instances... + Reading plot XML file... + + ==========> K EIGENVALUE SIMULATION (RANDOM RAY SOLVER) <========== + + Bat./Gen. k Entropy Average k + ========= ======== ======== ==================== +Calculating 8000 grid points for Voronoi tessellation... +Lloyd's algorithm converged in 59 iterations. +Rank 0 broadcasting 3258 source regions to other ranks. +Rank 1 broadcasting 2159 source regions to other ranks. +Rank 2 broadcasting 2153 source regions to other ranks. +Rank 3 broadcasting 1896 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.623960 +SourceRegion.volume = 0.356839 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.019733 +SourceRegion.volume = 0.602918 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.879958 +SourceRegion.volume = 1.142698 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.356519 +SourceRegion.volume = 1.404196 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.001485 +SourceRegion.volume = 3.214951 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.205780 +SourceRegion.volume = 4.282687 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.336774 +SourceRegion.volume = 0.962291 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.708854 +SourceRegion.volume = 0.142973 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.030348 +SourceRegion.volume = 2.825403 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.716313 +SourceRegion.volume = 0.982880 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.222726 +SourceRegion.volume = 2.286352 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.002958 +SourceRegion.volume = 1.860601 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.851059 +SourceRegion.volume = 0.962503 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.657127 +SourceRegion.volume = 0.632736 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.418242 +SourceRegion.volume = 1.632580 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.411682 +SourceRegion.volume = 0.210610 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.495868 +SourceRegion.volume = 1.289803 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.244187 +SourceRegion.volume = 1.819552 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 5.164148 +SourceRegion.volume = 0.398405 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.678614 +SourceRegion.volume = 1.561009 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.225386 +SourceRegion.volume = 1.088352 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.585180 +SourceRegion.volume = 0.439419 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.345049 +SourceRegion.volume = 0.321855 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.582443 +SourceRegion.volume = 1.838141 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.766761 +SourceRegion.volume = 1.057471 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.074589 +SourceRegion.volume = 0.494352 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.229826 +SourceRegion.volume = 0.347353 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.685070 +SourceRegion.volume = 1.010171 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.224850 +SourceRegion.volume = 0.417141 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.626538 +SourceRegion.volume = 0.584880 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.775824 +SourceRegion.volume = 0.109092 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.106599 +SourceRegion.volume = 0.942332 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.312111 +SourceRegion.volume = 2.736205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.700284 +SourceRegion.volume = 1.752772 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.290991 +SourceRegion.volume = 0.647329 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.691248 +SourceRegion.volume = 0.495987 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.992215 +SourceRegion.volume = 3.399701 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.766236 +SourceRegion.volume = 2.649133 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.185934 +SourceRegion.volume = 2.072868 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.747228 +SourceRegion.volume = 0.935308 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.934977 +SourceRegion.volume = 2.272649 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.355008 +SourceRegion.volume = 2.044908 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.746700 +SourceRegion.volume = 1.255679 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.916403 +SourceRegion.volume = 1.818611 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.781907 +SourceRegion.volume = 0.904913 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.849754 +SourceRegion.volume = 0.615945 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.937472 +SourceRegion.volume = 3.439082 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.094235 +SourceRegion.volume = 0.621143 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.829602 +SourceRegion.volume = 1.578612 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.790240 +SourceRegion.volume = 2.050074 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.884146 +SourceRegion.volume = 2.155155 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.760930 +SourceRegion.volume = 1.707972 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.691431 +SourceRegion.volume = 2.521549 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.012122 +SourceRegion.volume = 3.421967 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 4 broadcasting 1908 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.658023 +SourceRegion.volume = 2.308722 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.589545 +SourceRegion.volume = 1.456747 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.135074 +SourceRegion.volume = 2.467322 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.678419 +SourceRegion.volume = 1.337231 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.420032 +SourceRegion.volume = 2.180876 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.728615 +SourceRegion.volume = 1.192665 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.609365 +SourceRegion.volume = 2.021046 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.493932 +SourceRegion.volume = 0.908378 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.285969 +SourceRegion.volume = 0.702209 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.944201 +SourceRegion.volume = 1.182908 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.437748 +SourceRegion.volume = 2.273257 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.682389 +SourceRegion.volume = 1.343909 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.520253 +SourceRegion.volume = 0.252769 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.775991 +SourceRegion.volume = 0.621372 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.631571 +SourceRegion.volume = 0.410933 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.982993 +SourceRegion.volume = 1.311015 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.623673 +SourceRegion.volume = 1.462040 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.161411 +SourceRegion.volume = 0.395817 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.274935 +SourceRegion.volume = 0.594772 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.347742 +SourceRegion.volume = 0.960735 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.007658 +SourceRegion.volume = 0.255219 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.297158 +SourceRegion.volume = 0.997297 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.768425 +SourceRegion.volume = 0.683905 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.091546 +SourceRegion.volume = 1.449747 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.961719 +SourceRegion.volume = 1.011767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.724328 +SourceRegion.volume = 2.839394 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.754555 +SourceRegion.volume = 1.185027 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.860302 +SourceRegion.volume = 0.941106 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.356833 +SourceRegion.volume = 2.679476 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.668806 +SourceRegion.volume = 2.152274 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.683228 +SourceRegion.volume = 2.740481 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.483061 +SourceRegion.volume = 2.360750 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.455984 +SourceRegion.volume = 1.373963 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.115894 +SourceRegion.volume = 1.838730 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.159131 +SourceRegion.volume = 0.677681 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.741752 +SourceRegion.volume = 2.035657 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.110193 +SourceRegion.volume = 1.629762 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.975636 +SourceRegion.volume = 2.909508 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.457871 +SourceRegion.volume = 2.319013 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.784745 +SourceRegion.volume = 3.102515 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.047506 +SourceRegion.volume = 1.989100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.777806 +SourceRegion.volume = 2.780648 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.814614 +SourceRegion.volume = 1.515064 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.129700 +SourceRegion.volume = 1.901993 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.948856 +SourceRegion.volume = 0.595149 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.714236 +SourceRegion.volume = 1.472916 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 5 broadcasting 2889 source regions to other ranks. +Rank 6 broadcasting 253 source regions to other ranks. +Rank 7 broadcasting 3697 source regions to other ranks. +Rank 8 broadcasting 2216 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.938698 +SourceRegion.volume = 0.488355 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.196415 +SourceRegion.volume = 1.923956 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.292947 +SourceRegion.volume = 1.732231 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.013263 +SourceRegion.volume = 0.875110 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.245162 +SourceRegion.volume = 1.730821 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.155781 +SourceRegion.volume = 0.832837 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.092980 +SourceRegion.volume = 3.037786 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.521551 +SourceRegion.volume = 1.863650 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.564337 +SourceRegion.volume = 0.944555 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.669094 +SourceRegion.volume = 2.208903 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.388121 +SourceRegion.volume = 2.230284 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.878513 +SourceRegion.volume = 1.043528 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.008158 +SourceRegion.volume = 0.479462 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.495936 +SourceRegion.volume = 0.856187 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.847500 +SourceRegion.volume = 0.045588 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.387447 +SourceRegion.volume = 0.399232 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.339176 +SourceRegion.volume = 0.801498 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.184349 +SourceRegion.volume = 1.156251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.890602 +SourceRegion.volume = 1.112668 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.713046 +SourceRegion.volume = 1.546100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.763184 +SourceRegion.volume = 1.469867 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.185514 +SourceRegion.volume = 2.312209 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.828463 +SourceRegion.volume = 2.798035 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.386532 +SourceRegion.volume = 1.321441 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.025498 +SourceRegion.volume = 0.938446 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.919644 +SourceRegion.volume = 2.295238 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.767133 +SourceRegion.volume = 2.477963 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.488757 +SourceRegion.volume = 1.606671 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.662290 +SourceRegion.volume = 1.033737 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.517052 +SourceRegion.volume = 1.869501 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.929847 +SourceRegion.volume = 0.841417 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.007676 +SourceRegion.volume = 2.491439 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.019881 +SourceRegion.volume = 0.842858 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.385311 +SourceRegion.volume = 4.724223 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.483870 +SourceRegion.volume = 1.421679 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 9 broadcasting 2419 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.823804 +SourceRegion.volume = 1.224351 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.149190 +SourceRegion.volume = 1.120350 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.982652 +SourceRegion.volume = 0.591583 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.861247 +SourceRegion.volume = 0.922725 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.850461 +SourceRegion.volume = 0.316225 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.262525 +SourceRegion.volume = 0.640497 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.090260 +SourceRegion.volume = 0.742505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.893313 +SourceRegion.volume = 0.500647 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.415333 +SourceRegion.volume = 1.275895 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.181907 +SourceRegion.volume = 1.047893 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.421642 +SourceRegion.volume = 1.090887 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.450413 +SourceRegion.volume = 1.509915 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.334411 +SourceRegion.volume = 0.423860 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.857839 +SourceRegion.volume = 0.085427 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.817939 +SourceRegion.volume = 2.329565 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.124639 +SourceRegion.volume = 1.953572 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.058621 +SourceRegion.volume = 1.428319 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.755304 +SourceRegion.volume = 1.916234 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.378037 +SourceRegion.volume = 0.761737 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.489187 +SourceRegion.volume = 2.674156 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 10 broadcasting 624 source regions to other ranks. +Rank 11 broadcasting 2159 source regions to other ranks. +test1 +SourceRegion_add.volume = 3.093003 +SourceRegion.volume = 0.407553 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.024866 +SourceRegion.volume = 0.939117 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.381353 +SourceRegion.volume = 0.089100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.897439 +SourceRegion.volume = 0.171156 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.163180 +SourceRegion.volume = 0.387100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.905744 +SourceRegion.volume = 1.078292 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.214194 +SourceRegion.volume = 1.250244 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.914698 +SourceRegion.volume = 4.265282 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.824674 +SourceRegion.volume = 1.393901 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.792976 +SourceRegion.volume = 1.085694 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.887257 +SourceRegion.volume = 2.563867 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.416529 +SourceRegion.volume = 0.826254 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.779990 +SourceRegion.volume = 1.266720 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.900898 +SourceRegion.volume = 1.451872 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.042141 +SourceRegion.volume = 1.073919 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.618707 +SourceRegion.volume = 0.728859 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.050306 +SourceRegion.volume = 4.729983 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.667962 +SourceRegion.volume = 0.697791 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.198133 +SourceRegion.volume = 2.377252 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.315804 +SourceRegion.volume = 1.943458 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.291722 +SourceRegion.volume = 0.706756 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.856822 +SourceRegion.volume = 1.193098 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.230793 +SourceRegion.volume = 0.963850 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.806758 +SourceRegion.volume = 2.365349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.719381 +SourceRegion.volume = 0.852396 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.664018 +SourceRegion.volume = 1.563205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.636405 +SourceRegion.volume = 0.276347 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.050418 +SourceRegion.volume = 0.619492 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.289081 +SourceRegion.volume = 1.676738 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.895492 +SourceRegion.volume = 0.792785 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.633484 +SourceRegion.volume = 1.502557 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.024328 +SourceRegion.volume = 1.615679 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.965787 +SourceRegion.volume = 1.619228 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.245464 +SourceRegion.volume = 1.894356 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.072150 +SourceRegion.volume = 1.462185 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.610575 +SourceRegion.volume = 0.286766 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 12 broadcasting 4528 source regions to other ranks. +Rank 13 broadcasting 2060 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.151673 +SourceRegion.volume = 1.485499 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.677005 +SourceRegion.volume = 1.125135 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.135157 +SourceRegion.volume = 0.876423 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.670436 +SourceRegion.volume = 1.564319 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.697619 +SourceRegion.volume = 2.667501 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.703903 +SourceRegion.volume = 0.903262 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.104059 +SourceRegion.volume = 0.584814 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.552719 +SourceRegion.volume = 1.052116 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.239243 +SourceRegion.volume = 2.527882 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.278681 +SourceRegion.volume = 0.861511 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.663264 +SourceRegion.volume = 0.179283 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.500055 +SourceRegion.volume = 0.760288 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.492555 +SourceRegion.volume = 1.162386 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.826654 +SourceRegion.volume = 0.946938 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.278703 +SourceRegion.volume = 1.009827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.429323 +SourceRegion.volume = 1.575016 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.153402 +SourceRegion.volume = 0.461377 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.044401 +SourceRegion.volume = 1.434961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.235766 +SourceRegion.volume = 1.730616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.764968 +SourceRegion.volume = 1.119750 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.857148 +SourceRegion.volume = 2.560440 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.816168 +SourceRegion.volume = 0.950894 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.427022 +SourceRegion.volume = 1.059408 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.582418 +SourceRegion.volume = 1.238578 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.071759 +SourceRegion.volume = 0.810579 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.660155 +SourceRegion.volume = 1.157465 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.752451 +SourceRegion.volume = 1.489081 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.612548 +SourceRegion.volume = 0.585731 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.517283 +SourceRegion.volume = 1.420608 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.692081 +SourceRegion.volume = 0.717282 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.165199 +SourceRegion.volume = 1.310674 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.776837 +SourceRegion.volume = 1.093099 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.868089 +SourceRegion.volume = 0.685898 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 2.392375 +SourceRegion.volume = 0.445402 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.383399 +SourceRegion.volume = 1.950689 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.711313 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.868335 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.047636 +SourceRegion.volume = 2.087426 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.062961 +SourceRegion.volume = 1.013488 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.312614 +SourceRegion.volume = 1.932343 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.291088 +SourceRegion.volume = 1.671200 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.236108 +SourceRegion.volume = 1.299416 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.615809 +SourceRegion.volume = 1.873372 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.022551 +SourceRegion.volume = 1.864199 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.250323 +SourceRegion.volume = 0.870617 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.021158 +SourceRegion.volume = 1.662452 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.231651 +SourceRegion.volume = 0.743888 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.655681 +SourceRegion.volume = 1.684650 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.501701 +SourceRegion.volume = 2.348061 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.154381 +SourceRegion.volume = 2.187823 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.632497 +SourceRegion.volume = 1.968653 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.775292 +SourceRegion.volume = 0.783406 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.551612 +SourceRegion.volume = 1.961569 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.638457 +SourceRegion.volume = 3.682597 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.742057 +SourceRegion.volume = 0.706115 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.717095 +SourceRegion.volume = 0.831262 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.258409 +SourceRegion.volume = 2.585912 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.430511 +SourceRegion.volume = 1.075603 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.432867 +SourceRegion.volume = 0.368781 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.684845 +SourceRegion.volume = 0.848346 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.423811 +SourceRegion.volume = 1.368577 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.524684 +SourceRegion.volume = 1.418288 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.028045 +SourceRegion.volume = 1.428523 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.437781 +SourceRegion.volume = 0.729664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.409396 +SourceRegion.volume = 1.330016 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.292898 +SourceRegion.volume = 1.713983 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.325703 +SourceRegion.volume = 0.944627 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.594094 +SourceRegion.volume = 1.063164 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.003474 +SourceRegion.volume = 2.075301 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.079399 +SourceRegion.volume = 2.372491 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.703133 +SourceRegion.volume = 0.515694 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.741637 +SourceRegion.volume = 0.928025 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.023784 +SourceRegion.volume = 2.756101 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.609417 +SourceRegion.volume = 1.556746 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.881440 +SourceRegion.volume = 1.285242 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.670306 +SourceRegion.volume = 1.495840 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.469738 +SourceRegion.volume = 3.301858 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.466767 +SourceRegion.volume = 3.163325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.111582 +SourceRegion.volume = 1.535405 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.889706 +SourceRegion.volume = 1.265874 +test1 +SourceRegion_add.volume = 1.549394 +SourceRegion.volume = 1.555559 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.541940 +SourceRegion.volume = 0.465875 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.878498 +SourceRegion.volume = 0.890146 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.773248 +SourceRegion.volume = 0.592430 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.987777 +SourceRegion.volume = 1.569680 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.805002 +SourceRegion.volume = 0.367904 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.669216 +SourceRegion.volume = 1.743134 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.756271 +SourceRegion.volume = 0.806618 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.427992 +SourceRegion.volume = 1.128681 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.075967 +SourceRegion.volume = 1.772062 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.031160 +SourceRegion.volume = 2.323289 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.450459 +SourceRegion.volume = 0.622471 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.577758 +SourceRegion.volume = 0.588864 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.864748 +SourceRegion.volume = 0.694612 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 14 broadcasting 3627 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.479208 +SourceRegion.volume = 0.231099 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.199019 +SourceRegion.volume = 0.271742 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.702011 +SourceRegion.volume = 0.668656 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.790545 +SourceRegion.volume = 0.396875 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.970905 +SourceRegion.volume = 0.769826 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.251012 +SourceRegion.volume = 0.680352 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.897225 +SourceRegion.volume = 0.805410 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.656352 +SourceRegion.volume = 1.517651 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.472650 +SourceRegion.volume = 1.104852 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.574343 +SourceRegion.volume = 0.086862 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.312291 +SourceRegion.volume = 0.562717 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.001147 +SourceRegion.volume = 0.208479 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.454382 +SourceRegion.volume = 0.692132 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.037795 +SourceRegion.volume = 0.401147 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.544963 +SourceRegion.volume = 0.783817 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.322814 +SourceRegion.volume = 1.074571 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.694419 +SourceRegion.volume = 1.004911 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.221044 +SourceRegion.volume = 0.796100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.894661 +SourceRegion.volume = 0.914887 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.002289 +SourceRegion.volume = 1.262603 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.833920 +SourceRegion.volume = 0.460160 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.028910 +SourceRegion.volume = 0.043193 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.699267 +SourceRegion.volume = 0.315065 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.589956 +SourceRegion.volume = 1.050926 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.160966 +SourceRegion.volume = 0.949019 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.895939 +SourceRegion.volume = 0.611529 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.846818 +SourceRegion.volume = 1.070224 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.430685 +SourceRegion.volume = 0.347967 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.132502 +SourceRegion.volume = 1.217070 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.588934 +SourceRegion.volume = 0.279656 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.126787 +SourceRegion.volume = 0.576380 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.601734 +SourceRegion.volume = 0.818326 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.438213 +SourceRegion.volume = 0.399671 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.428916 +SourceRegion.volume = 0.236394 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.489053 +SourceRegion.volume = 0.736493 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.268932 +SourceRegion.volume = 0.538711 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.240438 +SourceRegion.volume = 1.193797 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.402963 +SourceRegion.volume = 0.473303 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.687956 +SourceRegion.volume = 0.392932 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.013526 +SourceRegion.volume = 0.219895 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.442461 +SourceRegion.volume = 1.909385 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.177545 +SourceRegion.volume = 0.482024 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.043597 +SourceRegion.volume = 1.120469 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.711278 +SourceRegion.volume = 0.823369 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.505432 +SourceRegion.volume = 0.813797 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 15 broadcasting 2280 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.709945 +SourceRegion.volume = 1.051677 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.222137 +SourceRegion.volume = 1.421112 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.235552 +SourceRegion.volume = 1.891820 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.539220 +SourceRegion.volume = 1.927956 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.567915 +SourceRegion.volume = 3.352178 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.543870 +SourceRegion.volume = 1.654962 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.110501 +SourceRegion.volume = 1.110863 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.386999 +SourceRegion.volume = 0.617002 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.966091 +SourceRegion.volume = 2.275214 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.375813 +SourceRegion.volume = 0.248477 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.119037 +SourceRegion.volume = 1.721038 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.781361 +SourceRegion.volume = 1.510726 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.656988 +SourceRegion.volume = 0.603106 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.188991 +SourceRegion.volume = 0.724179 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.445104 +SourceRegion.volume = 1.797255 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.619437 +SourceRegion.volume = 2.890830 +test1.1 +test1 +SourceRegion_add.volume = 1.602967 +SourceRegion.volume = 2.984254 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.550485 +SourceRegion.volume = 0.803827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.617082 +SourceRegion.volume = 2.073646 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 1.670192 +SourceRegion.volume = 1.003559 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.736420 +SourceRegion.volume = 0.984194 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.949187 +SourceRegion.volume = 0.954689 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.064258 +SourceRegion.volume = 0.695689 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.879304 +SourceRegion.volume = 1.310790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.695013 +SourceRegion.volume = 1.184028 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.559588 +SourceRegion.volume = 0.824562 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.773659 +SourceRegion.volume = 2.585167 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.538781 +SourceRegion.volume = 2.775222 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 1.756723 +SourceRegion.volume = 0.590534 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.804237 +SourceRegion.volume = 1.934966 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.583364 +SourceRegion.volume = 1.094776 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.006241 +SourceRegion.volume = 1.676930 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.475348 +SourceRegion.volume = 0.979497 +test1.1 +test1 +SourceRegion_add.volume = 1.124861 +SourceRegion.volume = 2.488242 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.931789 +SourceRegion.volume = 0.994382 +test1.1 +test1.2 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.145575 +SourceRegion.volume = 1.592667 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.497816 +SourceRegion.volume = 2.701795 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.003194 +SourceRegion.volume = 0.797837 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.569874 +SourceRegion.volume = 1.338557 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.206991 +SourceRegion.volume = 2.230013 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.618755 +SourceRegion.volume = 0.591365 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.004776 +SourceRegion.volume = 1.547097 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.728932 +SourceRegion.volume = 0.289257 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.667276 +SourceRegion.volume = 2.059940 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.019957 +SourceRegion.volume = 1.359062 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.886247 +SourceRegion.volume = 1.671190 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.453884 +SourceRegion.volume = 3.315398 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.155906 +test1 +SourceRegion_add.volume = 0.638043 +SourceRegion.volume = 0.517664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.430117 +SourceRegion.volume = 1.166235 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 3.309017 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.680405 +SourceRegion.volume = 2.257345 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.560004 +SourceRegion.volume = 2.196849 +test1 +SourceRegion_add.volume = 0.888178 +SourceRegion.volume = 1.358682 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.153029 +SourceRegion.volume = 2.188527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.710228 +SourceRegion.volume = 1.421088 +test1.1 +test1 +SourceRegion_add.volume = 1.207431 +SourceRegion.volume = 1.597047 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.461319 +SourceRegion.volume = 1.728588 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.401107 +SourceRegion.volume = 0.403439 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.459324 +SourceRegion.volume = 1.051476 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.536232 +SourceRegion.volume = 1.670063 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.995360 +SourceRegion.volume = 1.195510 +test1.1 +test1 +SourceRegion_add.volume = 2.823858 +SourceRegion.volume = 0.251501 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 2.135899 +SourceRegion.volume = 0.302762 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.508455 +SourceRegion.volume = 0.113449 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.981522 +SourceRegion.volume = 2.382412 +test1.1 +test1.2 +SourceRegion_add.volume = 0.648693 +SourceRegion.volume = 0.478864 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.665702 +SourceRegion.volume = 1.401379 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.469116 +SourceRegion.volume = 2.169897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.972008 +SourceRegion.volume = 1.011434 +test1.1 +test1.2 +test1.3 +test1.4 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.135533 +SourceRegion.volume = 2.030972 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.408457 +SourceRegion.volume = 0.965957 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.221079 +SourceRegion.volume = 0.138013 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.772954 +SourceRegion.volume = 0.625616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.800154 +SourceRegion.volume = 0.213927 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.914520 +SourceRegion.volume = 2.177820 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.765835 +SourceRegion.volume = 1.807634 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.384330 +SourceRegion.volume = 1.982848 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.183918 +SourceRegion.volume = 1.768305 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.277914 +SourceRegion.volume = 1.479903 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.566275 +SourceRegion.volume = 1.278865 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.866849 +SourceRegion.volume = 1.008413 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.136001 +SourceRegion.volume = 2.185931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.975617 +SourceRegion.volume = 1.444621 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.807545 +SourceRegion.volume = 1.060785 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.544085 +SourceRegion.volume = 1.927824 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.904278 +SourceRegion.volume = 0.741399 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.429160 +SourceRegion.volume = 1.624380 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.504054 +SourceRegion.volume = 0.249457 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.758037 +SourceRegion.volume = 1.225307 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.568679 +SourceRegion.volume = 2.142836 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.198089 +SourceRegion.volume = 1.602367 +test1 +SourceRegion_add.volume = 1.728756 +SourceRegion.volume = 1.752326 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.229236 +SourceRegion.volume = 1.467837 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.494875 +SourceRegion.volume = 1.296155 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.197232 +SourceRegion.volume = 0.670103 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.330407 +SourceRegion.volume = 1.656607 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.488186 +SourceRegion.volume = 2.451459 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.685832 +SourceRegion.volume = 1.803841 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.902708 +SourceRegion.volume = 1.389867 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.597505 +SourceRegion.volume = 1.021902 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.473835 +SourceRegion.volume = 0.596647 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.503094 +SourceRegion.volume = 2.866348 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.699391 +SourceRegion.volume = 1.836108 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 1.846070 +SourceRegion.volume = 1.039643 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.419940 +test1 +SourceRegion_add.volume = 3.312785 +SourceRegion.volume = 0.682698 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.220110 +SourceRegion.volume = 1.035523 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.391373 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.949683 +SourceRegion.volume = 1.054992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.435662 +SourceRegion.volume = 3.603983 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 0.150247 +SourceRegion.volume = 3.869695 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.848785 +SourceRegion.volume = 1.246560 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.892714 +test1 +SourceRegion_add.volume = 0.955737 +SourceRegion.volume = 0.711917 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion_add.volume = 1.105029 +SourceRegion.volume = 1.616965 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.817115 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.583764 +SourceRegion.volume = 2.014992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.159247 +SourceRegion.volume = 5.287824 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.492217 +SourceRegion.volume = 0.660496 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.056491 +SourceRegion.volume = 1.950998 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.189871 +SourceRegion.volume = 1.382071 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.245016 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.649673 +SourceRegion.volume = 1.737090 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.373277 +SourceRegion.volume = 1.089020 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.413745 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.809161 +SourceRegion.volume = 0.610561 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.686320 +SourceRegion.volume = 0.656890 +test1 +SourceRegion_add.volume = 3.082976 +SourceRegion.volume = 0.802653 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.761549 +SourceRegion.volume = 1.281934 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.455731 +SourceRegion.volume = 0.275764 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.761630 +SourceRegion.volume = 0.382254 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.697119 +SourceRegion.volume = 0.702284 +test1.1 +test1.2 +test1.3 +test1.4 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.160053 +SourceRegion.volume = 1.477840 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.413649 +SourceRegion.volume = 0.936073 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.042418 +SourceRegion.volume = 1.053961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.406179 +SourceRegion.volume = 5.109535 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.425289 +SourceRegion.volume = 4.240548 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.006800 +SourceRegion.volume = 1.891770 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.554369 +SourceRegion.volume = 0.743477 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.022630 +SourceRegion.volume = 2.553521 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.390694 +SourceRegion.volume = 0.628971 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 16 broadcasting 42 source regions to other ranks. +test1 +SourceRegion_add.volume = 2.910556 +SourceRegion.volume = 0.022292 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.033617 +SourceRegion.volume = 1.126728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 118.204492 +SourceRegion.volume = 68.767732 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 66.259811 +SourceRegion.volume = 28.534582 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 74.433413 +SourceRegion.volume = 94.749950 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 80.464239 +SourceRegion.volume = 64.678656 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 70.359224 +SourceRegion.volume = 2.555395 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 60.171868 +Rank 17 broadcasting 134 source regions to other ranks. +SourceRegion.volume = 67.966021 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 28.001004 +SourceRegion.volume = 112.227894 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 41.008435 +SourceRegion.volume = 74.676768 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 7.898993 +SourceRegion.volume = 108.551284 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 30.632244 +SourceRegion.volume = 69.467398 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 33.567898 +SourceRegion.volume = 118.018141 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 18 broadcasting 4146 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.097136 +SourceRegion.volume = 0.023790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.690777 +SourceRegion.volume = 0.689850 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.326604 +SourceRegion.volume = 0.521449 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.293766 +SourceRegion.volume = 0.315658 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.453207 +SourceRegion.volume = 0.519651 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.991777 +SourceRegion.volume = 0.709920 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.158241 +SourceRegion.volume = 1.235809 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.106233 +SourceRegion.volume = 1.185849 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.852507 +SourceRegion.volume = 0.453289 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.690959 +SourceRegion.volume = 1.203460 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.961785 +SourceRegion.volume = 0.376527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.812400 +SourceRegion.volume = 0.694975 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.798472 +SourceRegion.volume = 0.371279 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.057497 +SourceRegion.volume = 0.422828 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.180310 +SourceRegion.volume = 0.769039 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.581055 +SourceRegion.volume = 0.847092 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.153075 +SourceRegion.volume = 1.731271 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.446382 +SourceRegion.volume = 0.666422 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.126770 +SourceRegion.volume = 0.720701 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.474815 +SourceRegion.volume = 0.456888 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.097451 +SourceRegion.volume = 0.612414 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.726498 +SourceRegion.volume = 0.275692 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.362871 +SourceRegion.volume = 1.133722 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.781315 +SourceRegion.volume = 0.212381 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.385323 +SourceRegion.volume = 0.509105 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.063988 +SourceRegion.volume = 0.043132 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 19 broadcasting 2309 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.324688 +SourceRegion.volume = 1.580258 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.708307 +SourceRegion.volume = 0.769715 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.720724 +SourceRegion.volume = 1.037330 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.832066 +SourceRegion.volume = 0.510453 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.407829 +SourceRegion.volume = 1.180604 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.488018 +SourceRegion.volume = 1.360902 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.188399 +SourceRegion.volume = 0.851353 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.577953 +SourceRegion.volume = 1.913315 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.408995 +SourceRegion.volume = 0.936534 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.517426 +SourceRegion.volume = 0.151695 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.493253 +SourceRegion.volume = 0.513052 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.829192 +SourceRegion.volume = 0.548809 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.912538 +SourceRegion.volume = 0.989896 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.447654 +SourceRegion.volume = 0.688002 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.114984 +SourceRegion.volume = 0.903346 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.014781 +SourceRegion.volume = 0.991553 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.364001 +SourceRegion.volume = 2.131096 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.150284 +SourceRegion.volume = 1.617068 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.104746 +SourceRegion.volume = 1.391251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.647900 +SourceRegion.volume = 0.967756 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.088496 +SourceRegion.volume = 0.187208 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.516821 +SourceRegion.volume = 1.703668 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.031988 +SourceRegion.volume = 2.028466 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.102652 +SourceRegion.volume = 1.709624 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.680238 +SourceRegion.volume = 1.584467 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.728821 +SourceRegion.volume = 0.306798 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.557211 +SourceRegion.volume = 1.047211 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.016703 +SourceRegion.volume = 1.580957 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.481145 +SourceRegion.volume = 0.487708 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.103562 +SourceRegion.volume = 1.468506 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.470116 +SourceRegion.volume = 0.786597 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.631000 +SourceRegion.volume = 0.494080 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.163525 +SourceRegion.volume = 0.813516 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.674878 +SourceRegion.volume = 0.475251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.731097 +SourceRegion.volume = 0.204942 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.265577 +SourceRegion.volume = 0.986578 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.240691 +SourceRegion.volume = 0.020497 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.765682 +SourceRegion.volume = 1.301034 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.730826 +SourceRegion.volume = 0.479021 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.078243 +SourceRegion.volume = 1.151137 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.940627 +SourceRegion.volume = 1.617836 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.644151 +SourceRegion.volume = 0.808415 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.452120 +SourceRegion.volume = 0.830068 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.218778 +SourceRegion.volume = 0.914928 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.321010 +SourceRegion.volume = 1.641047 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.631632 +SourceRegion.volume = 0.502232 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.244753 +SourceRegion.volume = 1.243425 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.351755 +SourceRegion.volume = 0.446955 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.722907 +SourceRegion.volume = 1.924291 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.533656 +SourceRegion.volume = 0.224744 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.309392 +SourceRegion.volume = 1.260741 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.665238 +SourceRegion.volume = 2.183427 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.532476 +SourceRegion.volume = 0.795124 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 20 broadcasting 252 source regions to other ranks. +test1 +SourceRegion_add.volume = 74.106899 +SourceRegion.volume = 73.868307 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.123346 +SourceRegion.volume = 2.358714 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 68.660304 +SourceRegion.volume = 88.549144 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 70.937682 +SourceRegion.volume = 77.154442 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 39.783331 +SourceRegion.volume = 78.285305 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 71.721368 +SourceRegion.volume = 62.391556 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 65.678905 +SourceRegion.volume = 77.995844 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 21 broadcasting 194 source regions to other ranks. +Rank 22 broadcasting 2301 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.838565 +SourceRegion.volume = 2.325159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.233911 +SourceRegion.volume = 2.085770 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.106439 +SourceRegion.volume = 1.836309 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.593503 +SourceRegion.volume = 1.130598 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.128646 +SourceRegion.volume = 1.359777 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.906914 +SourceRegion.volume = 0.311498 +test1.1 +test1 +SourceRegion_add.volume = 1.896048 +SourceRegion.volume = 1.596905 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.701406 +SourceRegion.volume = 1.624710 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.731199 +SourceRegion.volume = 0.820323 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.052849 +SourceRegion.volume = 1.222085 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.028193 +SourceRegion.volume = 0.875239 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.446704 +SourceRegion.volume = 0.606583 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.379129 +SourceRegion.volume = 1.385299 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.496630 +SourceRegion.volume = 1.228113 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.672154 +SourceRegion.volume = 2.336042 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.331549 +SourceRegion.volume = 2.703583 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.002738 +SourceRegion.volume = 1.985404 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 1.015391 +SourceRegion.volume = 1.042778 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 2.550586 +SourceRegion.volume = 0.347763 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.237948 +SourceRegion.volume = 0.973064 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.285083 +SourceRegion.volume = 0.634534 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion_add.volume = 1.538955 +SourceRegion.volume = 0.472809 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.428449 +SourceRegion.volume = 0.617732 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.793616 +SourceRegion.volume = 0.331560 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.549709 +SourceRegion.volume = 1.067334 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.494286 +SourceRegion.volume = 0.877215 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.824785 +SourceRegion.volume = 1.114255 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.788150 +SourceRegion.volume = 0.777877 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.566079 +SourceRegion.volume = 1.886273 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.501258 +SourceRegion.volume = 1.034120 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.351062 +SourceRegion.volume = 0.911171 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.397049 +SourceRegion.volume = 1.400789 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.530527 +SourceRegion.volume = 1.914871 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.023744 +SourceRegion.volume = 1.068801 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.804581 +SourceRegion.volume = 0.841150 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.350916 +SourceRegion.volume = 1.718211 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.618131 +SourceRegion.volume = 1.410361 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.278029 +SourceRegion.volume = 1.745263 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.889234 +SourceRegion.volume = 1.308238 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.357502 +SourceRegion.volume = 1.037980 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.895399 +SourceRegion.volume = 2.053813 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.088087 +SourceRegion.volume = 2.167205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.949332 +SourceRegion.volume = 1.013771 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.540196 +SourceRegion.volume = 1.478729 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.322384 +test1 +SourceRegion_add.volume = 1.772912 +SourceRegion.volume = 1.797109 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.399886 +SourceRegion.volume = 2.080830 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.227366 +SourceRegion.volume = 1.756542 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.953192 +SourceRegion.volume = 3.571094 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.215682 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.509722 +SourceRegion.volume = 2.020464 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.888213 +SourceRegion.volume = 2.265146 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.080354 +SourceRegion.volume = 2.418411 +test1.1 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.564945 +SourceRegion.volume = 0.651813 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.952621 +SourceRegion.volume = 1.869408 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.328998 +SourceRegion.volume = 1.982292 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.911441 +SourceRegion.volume = 1.977591 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.447289 +SourceRegion.volume = 0.471456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.537392 +SourceRegion.volume = 0.958976 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.638491 +SourceRegion.volume = 1.115205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.101400 +SourceRegion.volume = 1.282805 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.610709 +SourceRegion.volume = 1.312456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.535080 +SourceRegion.volume = 1.397079 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.132804 +SourceRegion.volume = 1.162441 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.515070 +SourceRegion.volume = 1.249182 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 1.002581 +SourceRegion.volume = 2.094998 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.955946 +SourceRegion.volume = 1.602821 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.851743 +SourceRegion.volume = 1.893744 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.398352 +SourceRegion.volume = 2.536674 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 0.901604 +SourceRegion.volume = 1.330794 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.403876 +SourceRegion.volume = 0.780947 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.974272 +SourceRegion.volume = 1.712277 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +SourceRegion_add.volume = 1.390126 +SourceRegion.volume = 1.568941 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.121839 +SourceRegion.volume = 0.361239 +test1.1 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.780578 +SourceRegion.volume = 1.763096 +test2 +test3 +test1 +SourceRegion_add.volume = 1.416843 +SourceRegion.volume = 1.948154 +test1.1 +test1.2 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.076339 +SourceRegion.volume = 1.524378 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.881956 +SourceRegion.volume = 0.787935 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.339417 +SourceRegion.volume = 1.797072 +test1.1 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.896578 +SourceRegion.volume = 1.419507 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.557852 +SourceRegion.volume = 0.906622 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.631587 +SourceRegion.volume = 1.480039 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.269211 +SourceRegion.volume = 0.558954 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.782424 +SourceRegion.volume = 1.567616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.750188 +SourceRegion.volume = 0.768847 +test1 +SourceRegion_add.volume = 1.080014 +SourceRegion.volume = 1.709872 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.519164 +SourceRegion.volume = 1.379156 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.220956 +SourceRegion.volume = 2.208565 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.909619 +SourceRegion.volume = 2.733483 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.540625 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 2.294458 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.836656 +SourceRegion.volume = 0.893997 +test1.1 +test1.2 +test1.3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.280781 +SourceRegion.volume = 0.943660 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.004846 +SourceRegion.volume = 1.531894 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.828686 +SourceRegion.volume = 1.301225 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.907528 +SourceRegion.volume = 1.152504 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.757757 +SourceRegion.volume = 1.380044 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.727226 +SourceRegion.volume = 1.530445 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.380022 +SourceRegion.volume = 1.142693 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.788527 +SourceRegion.volume = 2.235496 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.471022 +SourceRegion.volume = 0.840888 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.846062 +SourceRegion.volume = 0.742100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.965963 +SourceRegion.volume = 1.426438 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.642936 +SourceRegion.volume = 1.711290 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.187213 +SourceRegion.volume = 2.543121 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.038578 +SourceRegion.volume = 3.168872 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.825686 +SourceRegion.volume = 1.647890 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.894235 +SourceRegion.volume = 0.725927 +test1.1 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.506945 +SourceRegion.volume = 1.165159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.405907 +SourceRegion.volume = 1.214672 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.325425 +SourceRegion.volume = 1.046096 +test1 +SourceRegion_add.volume = 1.341732 +SourceRegion.volume = 2.331563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.316991 +SourceRegion.volume = 1.144088 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.364567 +SourceRegion.volume = 3.159752 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.608402 +SourceRegion.volume = 0.614676 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.640064 +SourceRegion.volume = 0.214856 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.283809 +SourceRegion.volume = 0.418959 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.772487 +SourceRegion.volume = 0.241992 +test1.1 +test1 +SourceRegion_add.volume = 0.936648 +SourceRegion.volume = 0.908285 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.655342 +SourceRegion.volume = 1.420175 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.547428 +SourceRegion.volume = 0.676490 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.386004 +SourceRegion.volume = 0.878388 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.692352 +SourceRegion.volume = 1.035926 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.767832 +SourceRegion.volume = 3.218396 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.594241 +SourceRegion.volume = 1.152647 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.435696 +SourceRegion.volume = 0.757564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.307486 +SourceRegion.volume = 1.598546 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.665405 +SourceRegion.volume = 2.013904 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.402636 +SourceRegion.volume = 0.650240 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.595475 +SourceRegion.volume = 0.670710 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 23 broadcasting 3586 source regions to other ranks. +Rank 24 broadcasting 172 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.564415 +SourceRegion.volume = 0.406093 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.414496 +SourceRegion.volume = 0.284896 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.082737 +SourceRegion.volume = 1.800092 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.430871 +SourceRegion.volume = 0.273289 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.580431 +SourceRegion.volume = 0.621595 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.394036 +SourceRegion.volume = 1.592767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 50.811575 +SourceRegion.volume = 109.362814 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.507151 +SourceRegion.volume = 0.280859 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 91.730111 +SourceRegion.volume = 16.923504 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 86.718867 +SourceRegion.volume = 57.754506 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.368479 +SourceRegion.volume = 0.901238 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.532247 +SourceRegion.volume = 0.275524 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.252021 +SourceRegion.volume = 0.854143 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.215351 +SourceRegion.volume = 1.516299 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 25 broadcasting 2279 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.312497 +SourceRegion.volume = 0.708737 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.081003 +SourceRegion.volume = 1.174680 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.107456 +SourceRegion.volume = 2.785577 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.271378 +SourceRegion.volume = 1.912818 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.160834 +SourceRegion.volume = 1.407592 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.115937 +SourceRegion.volume = 0.739753 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.792718 +SourceRegion.volume = 1.527573 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.303106 +SourceRegion.volume = 1.041314 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.260879 +SourceRegion.volume = 0.711981 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.689491 +SourceRegion.volume = 1.520978 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.798229 +SourceRegion.volume = 0.530638 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 2.642793 +SourceRegion.volume = 1.781386 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.563960 +SourceRegion.volume = 1.992860 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.601978 +SourceRegion.volume = 2.040006 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.457605 +SourceRegion.volume = 1.561938 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.615969 +SourceRegion.volume = 2.041384 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.442930 +SourceRegion.volume = 0.997155 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.351214 +SourceRegion.volume = 0.945480 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.681543 +SourceRegion.volume = 0.641422 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.134427 +SourceRegion.volume = 1.946250 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 2.300518 +SourceRegion.volume = 0.990959 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.747905 +SourceRegion.volume = 1.786974 +test1.1 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.819648 +SourceRegion.volume = 1.480659 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.878251 +SourceRegion.volume = 1.860400 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.137545 +SourceRegion.volume = 1.677171 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.126745 +SourceRegion.volume = 1.238882 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.252766 +SourceRegion.volume = 1.589986 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.612039 +SourceRegion.volume = 0.972745 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.476741 +SourceRegion.volume = 1.131815 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.274686 +SourceRegion.volume = 1.849765 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.005010 +SourceRegion.volume = 2.291357 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.705882 +SourceRegion.volume = 0.621137 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.062581 +SourceRegion.volume = 2.340977 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.927301 +SourceRegion.volume = 1.430997 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.364811 +SourceRegion.volume = 2.551901 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.044536 +SourceRegion.volume = 1.847840 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.266513 +SourceRegion.volume = 0.716108 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.365940 +SourceRegion.volume = 2.610623 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.690821 +SourceRegion.volume = 1.176015 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.046521 +SourceRegion.volume = 2.160917 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.389801 +SourceRegion.volume = 1.829262 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.778524 +SourceRegion.volume = 1.594148 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.530001 +SourceRegion.volume = 1.018850 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.206595 +SourceRegion.volume = 0.658336 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.199975 +SourceRegion.volume = 1.989437 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.437470 +SourceRegion.volume = 1.089476 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.546573 +SourceRegion.volume = 0.504256 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.434367 +SourceRegion.volume = 1.578626 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.040747 +SourceRegion.volume = 0.625584 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.614201 +SourceRegion.volume = 1.063963 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.548802 +SourceRegion.volume = 0.369567 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.773562 +SourceRegion.volume = 1.042218 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.257302 +SourceRegion.volume = 1.566995 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.615358 +SourceRegion.volume = 1.746654 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.632794 +SourceRegion.volume = 0.875064 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.445698 +SourceRegion.volume = 0.807852 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.141037 +SourceRegion.volume = 1.544076 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.240086 +SourceRegion.volume = 1.059315 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.152328 +SourceRegion.volume = 1.606324 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.329254 +SourceRegion.volume = 0.006160 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.683240 +SourceRegion.volume = 0.086272 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 26 broadcasting 4264 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.249881 +SourceRegion.volume = 0.745612 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.971922 +SourceRegion.volume = 0.025900 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.217222 +SourceRegion.volume = 0.811836 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.985298 +SourceRegion.volume = 0.059116 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.504341 +SourceRegion.volume = 0.409670 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.066816 +SourceRegion.volume = 0.982137 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.835134 +SourceRegion.volume = 0.458066 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.394327 +SourceRegion.volume = 0.144798 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.385702 +SourceRegion.volume = 0.448828 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.813748 +SourceRegion.volume = 1.353178 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.022846 +SourceRegion.volume = 1.368883 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.064559 +SourceRegion.volume = 1.160247 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.271819 +SourceRegion.volume = 0.443466 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.877417 +SourceRegion.volume = 0.755750 +test1.1 +test1 +SourceRegion_add.volume = 0.875896 +SourceRegion.volume = 0.760185 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.538757 +SourceRegion.volume = 0.925924 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.984219 +SourceRegion.volume = 0.948766 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.288181 +SourceRegion.volume = 0.368801 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.151101 +SourceRegion.volume = 0.676055 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.216572 +SourceRegion.volume = 1.015093 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.732623 +SourceRegion.volume = 0.053999 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.990927 +SourceRegion.volume = 1.415656 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 1.136261 +SourceRegion.volume = 0.495662 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.521561 +SourceRegion.volume = 0.377983 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.858028 +SourceRegion.volume = 0.992106 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.013956 +SourceRegion.volume = 1.336473 +test1.1 +test1.2 +test1.3 +test1.4 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.287377 +SourceRegion.volume = 1.160129 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.967360 +SourceRegion.volume = 0.208421 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.957011 +SourceRegion.volume = 0.606942 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.934370 +SourceRegion.volume = 0.336872 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.269831 +SourceRegion.volume = 0.574289 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.131728 +SourceRegion.volume = 0.461708 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.527956 +SourceRegion.volume = 0.550482 +test1.1 +test1 +SourceRegion_add.volume = 1.113379 +SourceRegion.volume = 1.633596 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.337711 +SourceRegion.volume = 0.577886 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.685791 +SourceRegion.volume = 1.095875 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.870328 +SourceRegion.volume = 0.408244 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.726952 +SourceRegion.volume = 0.250899 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.134451 +SourceRegion.volume = 1.147538 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.260960 +SourceRegion.volume = 0.132035 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.630395 +SourceRegion.volume = 1.042606 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.620040 +SourceRegion.volume = 1.181628 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.337986 +SourceRegion.volume = 2.033584 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.441449 +SourceRegion.volume = 1.145755 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.617744 +SourceRegion.volume = 0.290230 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.868793 +SourceRegion.volume = 0.881009 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.739736 +SourceRegion.volume = 0.383162 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.080963 +SourceRegion.volume = 1.426592 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.711999 +SourceRegion.volume = 0.041805 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.570034 +SourceRegion.volume = 0.158987 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.350103 +SourceRegion.volume = 0.643467 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.789343 +SourceRegion.volume = 1.142370 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.385214 +SourceRegion.volume = 1.630243 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.063794 +SourceRegion.volume = 0.607435 +test1.1 +test1 +SourceRegion_add.volume = 0.905322 +SourceRegion.volume = 1.129645 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.302156 +SourceRegion.volume = 0.609473 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.478527 +SourceRegion.volume = 0.329831 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.994231 +SourceRegion.volume = 0.695659 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.452673 +SourceRegion.volume = 0.884364 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.657149 +SourceRegion.volume = 0.572648 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.628762 +SourceRegion.volume = 0.200214 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.206227 +SourceRegion.volume = 0.885180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.762815 +SourceRegion.volume = 1.414607 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.526933 +SourceRegion.volume = 0.303611 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.392046 +SourceRegion.volume = 0.202816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.240067 +SourceRegion.volume = 0.809082 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.398704 +SourceRegion.volume = 0.295227 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.041909 +SourceRegion.volume = 0.324499 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.908254 +SourceRegion.volume = 1.211128 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.517716 +SourceRegion.volume = 1.186192 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 41.769972 +SourceRegion.volume = 133.772133 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.024102 +SourceRegion.volume = 2.067381 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.638395 +SourceRegion.volume = 0.948600 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.667185 +test1 +SourceRegion_add.volume = 0.983585 +SourceRegion.volume = 0.185602 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 65.291842 +SourceRegion.volume = 108.682747 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.623435 +SourceRegion.volume = 1.564767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.562784 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.122706 +SourceRegion.volume = 0.300541 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.258693 +SourceRegion.volume = 0.456446 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.559568 +SourceRegion.volume = 0.444439 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.540876 +SourceRegion.volume = 0.538739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.731386 +SourceRegion.volume = 0.307930 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.695846 +SourceRegion.volume = 0.233869 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 77.963191 +SourceRegion.volume = 10.538113 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.095332 +SourceRegion.volume = 0.326732 +test1.1 +test1 +SourceRegion_add.volume = 0.875553 +SourceRegion.volume = 0.454677 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.907943 +SourceRegion.volume = 0.326401 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.979093 +SourceRegion.volume = 0.948431 +test1.1 +test1.2 +test1.3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.072714 +SourceRegion.volume = 0.946183 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.238118 +SourceRegion.volume = 1.282608 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.368871 +SourceRegion.volume = 1.613790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.220762 +SourceRegion.volume = 0.632159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.537911 +SourceRegion.volume = 1.043057 +test1 +SourceRegion_add.volume = 0.426846 +SourceRegion.volume = 0.889949 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.068570 +SourceRegion.volume = 1.215127 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.550692 +SourceRegion.volume = 0.310362 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.671550 +SourceRegion.volume = 0.012693 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.277757 +SourceRegion.volume = 0.711746 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.266380 +SourceRegion.volume = 0.663856 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.540599 +SourceRegion.volume = 0.973634 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.079735 +SourceRegion.volume = 1.064832 +test1.1 +test1 +SourceRegion_add.volume = 0.449691 +SourceRegion.volume = 0.584769 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.197055 +SourceRegion.volume = 0.154391 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.839488 +SourceRegion.volume = 0.815331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.639115 +SourceRegion.volume = 0.088391 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.842375 +SourceRegion.volume = 0.673183 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.196119 +SourceRegion.volume = 1.053479 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.293669 +SourceRegion.volume = 1.411969 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.684187 +SourceRegion.volume = 0.235774 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.210562 +SourceRegion.volume = 0.236834 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.824237 +SourceRegion.volume = 0.748423 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.790337 +SourceRegion.volume = 0.589508 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.865321 +SourceRegion.volume = 0.245615 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 27 broadcasting 3750 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.645159 +SourceRegion.volume = 0.315248 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 28 broadcasting 47 source regions to other ranks. +test1 +SourceRegion_add.volume = 87.699759 +SourceRegion.volume = 79.301992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 59.892666 +SourceRegion.volume = 107.354261 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 46.122454 +SourceRegion.volume = 74.654336 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 35.775617 +SourceRegion.volume = 113.058239 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 51.078952 +SourceRegion.volume = 95.870934 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 69.338557 +SourceRegion.volume = 81.076761 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 108.622929 +SourceRegion.volume = 59.733924 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 76.377140 +SourceRegion.volume = 86.242413 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 144.917184 +SourceRegion.volume = 33.740092 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 107.418196 +SourceRegion.volume = 45.302723 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 107.410467 +SourceRegion.volume = 72.914618 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 132.978496 +SourceRegion.volume = 71.996377 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 29 broadcasting 2488 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.886630 +SourceRegion.volume = 0.807785 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.011160 +SourceRegion.volume = 1.912911 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.503912 +SourceRegion.volume = 1.906364 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.511963 +SourceRegion.volume = 0.908113 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.329866 +SourceRegion.volume = 0.107359 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.266749 +SourceRegion.volume = 3.433188 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.869928 +SourceRegion.volume = 1.954090 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.540567 +SourceRegion.volume = 0.466918 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.556746 +SourceRegion.volume = 1.911346 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.289727 +SourceRegion.volume = 3.049824 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.000016 +SourceRegion.volume = 2.242385 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.886756 +SourceRegion.volume = 0.609811 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.431073 +SourceRegion.volume = 2.004130 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.538949 +SourceRegion.volume = 2.009100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.572531 +SourceRegion.volume = 0.490613 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.655252 +SourceRegion.volume = 3.174631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.516781 +SourceRegion.volume = 1.298147 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.573532 +SourceRegion.volume = 1.585092 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.956719 +SourceRegion.volume = 0.052360 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.186986 +SourceRegion.volume = 2.390597 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.328550 +SourceRegion.volume = 1.214546 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.549178 +SourceRegion.volume = 0.921195 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.962594 +SourceRegion.volume = 2.317593 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.986370 +SourceRegion.volume = 4.098376 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.448593 +SourceRegion.volume = 2.413905 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.592076 +SourceRegion.volume = 1.950779 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.311663 +SourceRegion.volume = 0.861098 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.327591 +SourceRegion.volume = 1.597587 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.771913 +SourceRegion.volume = 2.007349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.771571 +SourceRegion.volume = 2.069630 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.427602 +SourceRegion.volume = 0.743715 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.807807 +SourceRegion.volume = 1.336406 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.748266 +SourceRegion.volume = 0.354362 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.398368 +SourceRegion.volume = 0.241726 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.532232 +SourceRegion.volume = 2.063658 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.148126 +SourceRegion.volume = 1.752781 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.180858 +SourceRegion.volume = 1.032677 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.063095 +SourceRegion.volume = 2.205502 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.505567 +SourceRegion.volume = 0.452530 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.874518 +SourceRegion.volume = 1.234769 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.343207 +SourceRegion.volume = 3.412004 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.790730 +SourceRegion.volume = 0.027747 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.006097 +SourceRegion.volume = 2.423956 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.663105 +SourceRegion.volume = 1.893104 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.551179 +SourceRegion.volume = 0.544330 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.975864 +SourceRegion.volume = 0.564898 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.130566 +SourceRegion.volume = 1.525838 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.516337 +SourceRegion.volume = 0.904218 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.409299 +SourceRegion.volume = 0.764048 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 30 broadcasting 4034 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.161342 +SourceRegion.volume = 0.265263 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.897268 +SourceRegion.volume = 0.633028 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.480051 +SourceRegion.volume = 0.695232 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.871432 +SourceRegion.volume = 0.692456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.365889 +SourceRegion.volume = 0.601878 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.379583 +SourceRegion.volume = 1.270221 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.963246 +SourceRegion.volume = 0.479591 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.216291 +SourceRegion.volume = 0.953264 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 13.926261 +SourceRegion.volume = 123.421024 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.327621 +SourceRegion.volume = 0.865233 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.302048 +SourceRegion.volume = 1.408422 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.131335 +SourceRegion.volume = 0.898081 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.758957 +SourceRegion.volume = 0.126854 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.596416 +SourceRegion.volume = 1.161726 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.152094 +SourceRegion.volume = 0.852210 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.441480 +SourceRegion.volume = 0.527041 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.572600 +SourceRegion.volume = 0.789268 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.467687 +SourceRegion.volume = 1.414981 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.327252 +SourceRegion.volume = 1.113529 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.823495 +SourceRegion.volume = 0.523212 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.233809 +SourceRegion.volume = 0.389473 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.598171 +SourceRegion.volume = 0.443616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.672014 +SourceRegion.volume = 1.143205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.241005 +SourceRegion.volume = 0.392520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.745308 +SourceRegion.volume = 0.606313 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.749774 +SourceRegion.volume = 0.603275 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.767458 +SourceRegion.volume = 0.570621 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.321093 +SourceRegion.volume = 0.246816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.395744 +SourceRegion.volume = 0.349790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.480746 +SourceRegion.volume = 0.325393 +test1 +SourceRegion_add.volume = 0.055138 +SourceRegion.volume = 1.250129 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.430889 +SourceRegion.volume = 0.543763 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.326435 +SourceRegion.volume = 0.824090 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.848493 +SourceRegion.volume = 0.006929 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.629959 +SourceRegion.volume = 0.050740 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.286066 +SourceRegion.volume = 0.467436 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.378549 +SourceRegion.volume = 0.579690 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.512071 +SourceRegion.volume = 1.753238 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 94.447067 +SourceRegion.volume = 87.853789 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 49.234710 +SourceRegion.volume = 54.288495 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.003293 +test1 +SourceRegion_add.volume = 1.622694 +SourceRegion.volume = 0.677117 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 148.935215 +SourceRegion.volume = 26.798709 +test1.1 +test1.2 +test1.3 +test1.4 +SourceRegion.volume = 1.843816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.740344 +SourceRegion.volume = 1.211955 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.610548 +SourceRegion.volume = 1.108793 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.544329 +SourceRegion.volume = 1.512792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.992314 +SourceRegion.volume = 0.696013 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.730380 +SourceRegion.volume = 0.338057 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 31 broadcasting 3788 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.487300 +SourceRegion.volume = 0.627462 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.274570 +SourceRegion.volume = 0.598720 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.667205 +SourceRegion.volume = 0.336471 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.335693 +SourceRegion.volume = 0.126870 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.031240 +SourceRegion.volume = 0.217662 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.224796 +SourceRegion.volume = 0.613478 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.566887 +SourceRegion.volume = 0.421250 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.549237 +SourceRegion.volume = 0.495185 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.238662 +SourceRegion.volume = 0.426815 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.019568 +SourceRegion.volume = 0.665849 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.406840 +SourceRegion.volume = 1.124704 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.043096 +SourceRegion.volume = 1.162175 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.238193 +SourceRegion.volume = 1.074760 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.141718 +SourceRegion.volume = 0.631789 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.844379 +SourceRegion.volume = 0.935167 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.092573 +SourceRegion.volume = 1.419892 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.075381 +SourceRegion.volume = 0.029478 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.477653 +SourceRegion.volume = 1.020184 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.855156 +SourceRegion.volume = 0.222952 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.145813 +SourceRegion.volume = 1.042925 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.562306 +SourceRegion.volume = 0.658814 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.250314 +SourceRegion.volume = 2.484805 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.487130 +SourceRegion.volume = 0.423348 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.314278 +SourceRegion.volume = 0.526495 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.988022 +SourceRegion.volume = 0.243630 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.389875 +SourceRegion.volume = 1.096589 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.488773 +SourceRegion.volume = 0.655965 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.387846 +SourceRegion.volume = 0.744898 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.354536 +SourceRegion.volume = 0.996531 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.936597 +SourceRegion.volume = 1.093366 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.660393 +SourceRegion.volume = 0.915948 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.346442 +SourceRegion.volume = 0.261514 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.549866 +SourceRegion.volume = 1.115868 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.758633 +SourceRegion.volume = 0.311614 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.788334 +SourceRegion.volume = 0.271777 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.850466 +SourceRegion.volume = 0.774162 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 32 broadcasting 3838 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.705391 +SourceRegion.volume = 0.397928 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.851932 +SourceRegion.volume = 0.330415 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.526298 +SourceRegion.volume = 1.328742 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.326664 +SourceRegion.volume = 0.727217 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.566713 +SourceRegion.volume = 0.659563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.115481 +SourceRegion.volume = 0.737007 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.301330 +SourceRegion.volume = 0.933740 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.681813 +SourceRegion.volume = 0.601023 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.753510 +SourceRegion.volume = 0.712734 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.366247 +SourceRegion.volume = 0.500829 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.927813 +SourceRegion.volume = 0.159481 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.788184 +SourceRegion.volume = 0.751646 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.690835 +SourceRegion.volume = 0.608849 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.062055 +SourceRegion.volume = 1.171833 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.195933 +SourceRegion.volume = 0.405609 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.018303 +SourceRegion.volume = 0.431764 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.386870 +SourceRegion.volume = 1.399562 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.675042 +SourceRegion.volume = 1.069288 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.436881 +SourceRegion.volume = 0.106328 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.345433 +SourceRegion.volume = 0.547505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.075669 +SourceRegion.volume = 1.570024 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.992287 +SourceRegion.volume = 0.014211 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.066385 +SourceRegion.volume = 1.156594 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.402063 +SourceRegion.volume = 0.550728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.962332 +SourceRegion.volume = 0.840860 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.688782 +SourceRegion.volume = 1.221942 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.397971 +SourceRegion.volume = 0.772036 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.416744 +SourceRegion.volume = 1.052217 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.874824 +SourceRegion.volume = 0.801818 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.715788 +SourceRegion.volume = 0.832854 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.024816 +SourceRegion.volume = 0.419967 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.017327 +SourceRegion.volume = 0.320776 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.716294 +SourceRegion.volume = 0.674926 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.839809 +SourceRegion.volume = 0.168407 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.412734 +SourceRegion.volume = 0.156367 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.483864 +SourceRegion.volume = 0.409318 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.222708 +SourceRegion.volume = 0.462549 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.801496 +SourceRegion.volume = 0.623612 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.053859 +SourceRegion.volume = 0.408975 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.269974 +SourceRegion.volume = 0.726500 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.227764 +SourceRegion.volume = 0.654551 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.119940 +SourceRegion.volume = 0.602058 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.382211 +SourceRegion.volume = 0.282934 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.308095 +SourceRegion.volume = 1.634893 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.785974 +SourceRegion.volume = 0.214459 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.221202 +SourceRegion.volume = 0.503046 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.545725 +SourceRegion.volume = 0.704103 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.780339 +SourceRegion.volume = 1.440671 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.982174 +SourceRegion.volume = 0.375436 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.815126 +SourceRegion.volume = 0.665862 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.676942 +SourceRegion.volume = 0.787251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.576844 +SourceRegion.volume = 1.030678 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.147741 +SourceRegion.volume = 0.872310 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.486190 +SourceRegion.volume = 0.294181 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.240559 +test1 +SourceRegion_add.volume = 0.576038 +SourceRegion.volume = 0.773652 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.308600 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.687019 +SourceRegion.volume = 1.030584 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.706583 +SourceRegion.volume = 0.121810 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.429455 +SourceRegion.volume = 0.242829 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 2.045294 +SourceRegion.volume = 0.007180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.923190 +SourceRegion.volume = 0.963813 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.450329 +SourceRegion.volume = 0.654910 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.936608 +SourceRegion.volume = 0.676506 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.209583 +SourceRegion.volume = 0.847524 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.102127 +SourceRegion.volume = 1.272362 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.613573 +SourceRegion.volume = 0.218078 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.059685 +SourceRegion.volume = 0.960407 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.186375 +SourceRegion.volume = 0.617094 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.501231 +SourceRegion.volume = 0.963906 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.386959 +SourceRegion.volume = 2.260595 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.515033 +SourceRegion.volume = 0.093577 +test1.1 +test1 +SourceRegion_add.volume = 0.646756 +SourceRegion.volume = 0.726082 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.035678 +SourceRegion.volume = 0.577412 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.778318 +SourceRegion.volume = 0.119364 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.150922 +SourceRegion.volume = 0.436429 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.479798 +SourceRegion.volume = 0.556684 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.864103 +SourceRegion.volume = 0.094990 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.051248 +SourceRegion.volume = 0.375460 +test1.1 +test1.2 +test1.3 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.917660 +SourceRegion.volume = 0.636741 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.320658 +SourceRegion.volume = 0.197865 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.899893 +SourceRegion.volume = 0.951946 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.232553 +SourceRegion.volume = 0.664402 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.425371 +SourceRegion.volume = 0.412124 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.581837 +SourceRegion.volume = 0.153877 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.674304 +SourceRegion.volume = 0.601298 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.430711 +SourceRegion.volume = 1.214728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.484759 +SourceRegion.volume = 1.078060 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.104928 +SourceRegion.volume = 1.418947 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.945110 +SourceRegion.volume = 0.841756 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.319580 +SourceRegion.volume = 0.789834 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.475846 +SourceRegion.volume = 0.824961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.110763 +SourceRegion.volume = 0.574086 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.882109 +SourceRegion.volume = 0.371043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.717195 +SourceRegion.volume = 1.030100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.454419 +SourceRegion.volume = 0.596962 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.665937 +SourceRegion.volume = 0.086706 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.773294 +SourceRegion.volume = 0.663533 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.521523 +SourceRegion.volume = 0.682009 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.405043 +SourceRegion.volume = 0.978659 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.573385 +SourceRegion.volume = 1.616204 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.256496 +SourceRegion.volume = 0.848086 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.280845 +SourceRegion.volume = 1.591671 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.286676 +SourceRegion.volume = 1.171422 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.146549 +SourceRegion.volume = 0.001104 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.726871 +SourceRegion.volume = 0.199897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.812541 +SourceRegion.volume = 1.269177 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.487739 +SourceRegion.volume = 0.625100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.330832 +SourceRegion.volume = 0.576473 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.653470 +SourceRegion.volume = 0.940365 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.057536 +SourceRegion.volume = 0.159800 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.892514 +SourceRegion.volume = 0.931372 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.386106 +SourceRegion.volume = 0.249101 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.659732 +SourceRegion.volume = 0.202909 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 33 broadcasting 255 source regions to other ranks. +test1 +SourceRegion_add.volume = 62.621104 +SourceRegion.volume = 133.177226 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.553277 +SourceRegion.volume = 0.610086 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 38.859038 +SourceRegion.volume = 140.261775 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.161795 +SourceRegion.volume = 0.861125 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 100.350001 +SourceRegion.volume = 56.380476 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 98.469974 +SourceRegion.volume = 60.482859 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.333631 +SourceRegion.volume = 0.545381 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.558809 +SourceRegion.volume = 0.476748 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.013375 +SourceRegion.volume = 1.566885 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.285847 +SourceRegion.volume = 1.197653 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 58.424045 +SourceRegion.volume = 89.425163 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 40.853966 +SourceRegion.volume = 108.653615 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.280306 +SourceRegion.volume = 1.560192 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.861479 +SourceRegion.volume = 0.283792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.901654 +SourceRegion.volume = 0.932498 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 73.162435 +SourceRegion.volume = 88.171707 +test1.1 +test1 +SourceRegion_add.volume = 73.458751 +SourceRegion.volume = 75.361517 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 81.738115 +SourceRegion.volume = 85.999247 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 67.997313 +SourceRegion.volume = 74.696510 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 71.079393 +SourceRegion.volume = 95.926430 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.087394 +SourceRegion.volume = 0.427141 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 93.710211 +SourceRegion.volume = 36.234375 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.837997 +SourceRegion.volume = 1.149523 +test1.1 +test1.2 +test1.3 +Rank 34 broadcasting 68 source regions to other ranks. +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 29.822182 +SourceRegion.volume = 110.138475 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 67.404992 +SourceRegion.volume = 41.787988 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 17.235927 +SourceRegion.volume = 31.728022 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 44.123189 +SourceRegion.volume = 42.337086 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.336898 +SourceRegion.volume = 0.118298 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 87.416470 +SourceRegion.volume = 75.179070 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 75.416711 +SourceRegion.volume = 79.641031 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.319603 +SourceRegion.volume = 1.617384 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 67.582836 +SourceRegion.volume = 79.264074 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 74.282313 +SourceRegion.volume = 62.304275 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 35 broadcasting 141 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.201528 +SourceRegion.volume = 1.702022 +test1 +SourceRegion_add.volume = 79.110405 +SourceRegion.volume = 52.797513 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.869679 +SourceRegion.volume = 0.126633 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.746101 +SourceRegion.volume = 0.256961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 48.655562 +SourceRegion.volume = 109.650527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.650963 +SourceRegion.volume = 0.906422 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.090474 +SourceRegion.volume = 1.474305 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.665027 +SourceRegion.volume = 0.297382 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.655274 +SourceRegion.volume = 0.644062 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 90.480621 +SourceRegion.volume = 63.743123 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 82.406993 +SourceRegion.volume = 64.144581 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 88.465091 +SourceRegion.volume = 77.081633 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 39.334339 +SourceRegion.volume = 88.501304 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.194539 +SourceRegion.volume = 0.093703 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.940893 +SourceRegion.volume = 1.016499 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.645016 +SourceRegion.volume = 0.667882 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.655311 +SourceRegion.volume = 1.578391 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.722805 +SourceRegion.volume = 0.556734 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 81.606401 +SourceRegion.volume = 64.303253 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +Rank 36 broadcasting 2138 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.778486 +SourceRegion.volume = 0.326874 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.846153 +SourceRegion.volume = 0.665659 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 2.062675 +SourceRegion.volume = 3.557564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 1.841368 +SourceRegion.volume = 1.704141 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.982023 +SourceRegion.volume = 1.081234 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.319993 +SourceRegion.volume = 1.425616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.049592 +SourceRegion.volume = 0.610852 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.829832 +SourceRegion.volume = 1.290373 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.583022 +SourceRegion.volume = 1.121877 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.133042 +SourceRegion.volume = 0.905390 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 1.804002 +SourceRegion.volume = 1.228365 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.988446 +SourceRegion.volume = 1.017616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 1.875542 +SourceRegion.volume = 1.309274 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.152720 +SourceRegion.volume = 1.153234 +test1 +SourceRegion_add.volume = 1.220384 +SourceRegion.volume = 0.942798 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.266977 +SourceRegion.volume = 1.055811 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.847706 +SourceRegion.volume = 1.472310 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.400968 +SourceRegion.volume = 0.302882 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.138677 +SourceRegion.volume = 2.577821 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.496598 +SourceRegion.volume = 0.602203 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.344172 +SourceRegion.volume = 2.181505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.899201 +SourceRegion.volume = 2.991399 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.714142 +SourceRegion.volume = 1.926530 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.025930 +SourceRegion.volume = 0.030813 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.111201 +SourceRegion.volume = 0.874767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.368414 +SourceRegion.volume = 0.179136 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.088674 +SourceRegion.volume = 3.336089 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.989780 +SourceRegion.volume = 2.948465 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.204912 +SourceRegion.volume = 1.157373 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.107667 +SourceRegion.volume = 0.496004 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.574539 +SourceRegion.volume = 1.848445 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.583502 +SourceRegion.volume = 1.095056 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.490236 +SourceRegion.volume = 0.734602 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.946927 +SourceRegion.volume = 1.740942 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.504874 +SourceRegion.volume = 1.283686 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.950596 +SourceRegion.volume = 0.164855 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 2.294185 +SourceRegion.volume = 1.101953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.304344 +SourceRegion.volume = 1.775755 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.208117 +SourceRegion.volume = 0.792816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.489274 +SourceRegion.volume = 0.634533 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.251385 +SourceRegion.volume = 0.223882 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.056108 +SourceRegion.volume = 0.277869 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.899995 +SourceRegion.volume = 0.942983 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.969727 +SourceRegion.volume = 0.060988 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 1.352123 +SourceRegion.volume = 0.252560 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.606588 +SourceRegion.volume = 0.071085 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.153807 +SourceRegion.volume = 0.535230 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.480852 +SourceRegion.volume = 3.161582 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.184654 +SourceRegion.volume = 0.807615 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.093363 +SourceRegion.volume = 0.935949 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.731554 +SourceRegion.volume = 0.392313 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.224606 +SourceRegion.volume = 0.704112 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.236746 +SourceRegion.volume = 0.934317 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.680840 +SourceRegion.volume = 0.421296 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.981544 +SourceRegion.volume = 2.574198 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.546479 +SourceRegion.volume = 1.342827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.589199 +SourceRegion.volume = 0.501177 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.310946 +SourceRegion.volume = 1.088732 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.781457 +SourceRegion.volume = 0.392461 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.257199 +SourceRegion.volume = 2.186260 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.675691 +SourceRegion.volume = 1.404632 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.414062 +SourceRegion.volume = 0.764222 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.135184 +SourceRegion.volume = 1.021330 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.745058 +SourceRegion.volume = 1.962264 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.302402 +SourceRegion.volume = 1.437893 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.379613 +SourceRegion.volume = 0.694393 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.301130 +SourceRegion.volume = 0.454220 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.261154 +SourceRegion.volume = 0.028024 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.106285 +SourceRegion.volume = 1.941397 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.073694 +SourceRegion.volume = 2.584326 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.720763 +SourceRegion.volume = 0.083754 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.870039 +SourceRegion.volume = 0.074314 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.296708 +SourceRegion.volume = 2.863717 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.715717 +SourceRegion.volume = 0.731533 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.610928 +SourceRegion.volume = 0.984785 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.162298 +SourceRegion.volume = 1.031251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.826352 +SourceRegion.volume = 0.305960 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.233341 +SourceRegion.volume = 1.731523 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.925668 +SourceRegion.volume = 1.280604 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.597273 +SourceRegion.volume = 1.208761 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.613739 +SourceRegion.volume = 1.744019 +test1.1 +test1 +SourceRegion_add.volume = 0.765345 +SourceRegion.volume = 0.877934 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.134258 +SourceRegion.volume = 0.318819 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.874372 +SourceRegion.volume = 1.239075 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.500925 +SourceRegion.volume = 1.298889 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.576380 +SourceRegion.volume = 0.795676 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.954764 +SourceRegion.volume = 1.851506 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.527924 +SourceRegion.volume = 1.960597 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.860218 +SourceRegion.volume = 0.080184 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.559978 +SourceRegion.volume = 3.041992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.319071 +SourceRegion.volume = 0.870153 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.443463 +SourceRegion.volume = 1.662372 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.702909 +SourceRegion.volume = 0.897464 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.144232 +SourceRegion.volume = 1.264466 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.884441 +SourceRegion.volume = 1.488045 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.736839 +SourceRegion.volume = 1.772565 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 1.140717 +SourceRegion.volume = 1.356490 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.758089 +SourceRegion.volume = 2.283273 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.136048 +SourceRegion.volume = 0.792294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.817948 +SourceRegion.volume = 1.205443 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.847543 +SourceRegion.volume = 0.448373 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.160775 +SourceRegion.volume = 1.916012 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.065676 +SourceRegion.volume = 0.093836 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.290053 +SourceRegion.volume = 2.291185 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.973864 +SourceRegion.volume = 0.308034 +test1.1 +test1 +SourceRegion_add.volume = 0.598887 +SourceRegion.volume = 1.748468 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.379624 +SourceRegion.volume = 2.747321 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.964142 +SourceRegion.volume = 0.453301 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.342040 +SourceRegion.volume = 0.593116 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.610015 +SourceRegion.volume = 2.029963 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.428820 +SourceRegion.volume = 1.899121 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.227455 +SourceRegion.volume = 1.484496 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.962792 +SourceRegion.volume = 1.714533 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.146265 +SourceRegion.volume = 1.351944 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.389256 +SourceRegion.volume = 0.685176 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.900533 +SourceRegion.volume = 0.625799 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.525540 +SourceRegion.volume = 1.621904 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.046910 +SourceRegion.volume = 2.226817 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.914306 +SourceRegion.volume = 2.452610 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.531176 +SourceRegion.volume = 0.155580 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.009106 +SourceRegion.volume = 0.826616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.161700 +SourceRegion.volume = 1.074541 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.599319 +SourceRegion.volume = 1.101239 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.702363 +SourceRegion.volume = 0.614639 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 1.894016 +SourceRegion.volume = 2.215936 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +Rank 37 broadcasting 3538 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.195996 +SourceRegion.volume = 0.669748 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.357002 +SourceRegion.volume = 0.915428 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.982683 +SourceRegion.volume = 1.006926 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.895176 +SourceRegion.volume = 1.019180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.146936 +SourceRegion.volume = 0.708404 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.254834 +SourceRegion.volume = 0.771812 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.081605 +SourceRegion.volume = 1.003842 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.685303 +SourceRegion.volume = 0.799729 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.780191 +SourceRegion.volume = 0.350151 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.723004 +SourceRegion.volume = 0.437407 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.098555 +SourceRegion.volume = 1.617789 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.277538 +SourceRegion.volume = 1.330902 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.960640 +SourceRegion.volume = 0.686280 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.916127 +SourceRegion.volume = 0.433870 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.512210 +SourceRegion.volume = 0.446775 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.921025 +SourceRegion.volume = 0.143083 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.257019 +SourceRegion.volume = 0.609745 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 65.107662 +SourceRegion.volume = 78.282290 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.888468 +SourceRegion.volume = 0.522588 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.882005 +SourceRegion.volume = 0.307008 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.870941 +SourceRegion.volume = 0.577544 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.285834 +SourceRegion.volume = 0.351790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.981152 +SourceRegion.volume = 1.255256 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.003478 +SourceRegion.volume = 0.943809 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.859219 +SourceRegion.volume = 0.513886 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.673990 +SourceRegion.volume = 0.002202 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.205048 +SourceRegion.volume = 0.870991 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 71.238580 +SourceRegion.volume = 48.963949 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 32.193908 +SourceRegion.volume = 86.460275 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 76.328195 +SourceRegion.volume = 59.642734 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.393423 +SourceRegion.volume = 0.912014 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.022639 +SourceRegion.volume = 1.750236 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.821166 +SourceRegion.volume = 1.753691 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 66.357902 +SourceRegion.volume = 77.868307 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.376656 +SourceRegion.volume = 0.787342 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.197134 +SourceRegion.volume = 0.129126 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.668229 +SourceRegion.volume = 0.717674 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 53.487335 +SourceRegion.volume = 70.677468 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.388180 +SourceRegion.volume = 2.154184 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.271617 +SourceRegion.volume = 1.614704 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.335642 +SourceRegion.volume = 0.259666 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.801468 +SourceRegion.volume = 0.164265 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.174600 +SourceRegion.volume = 1.511516 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.403091 +SourceRegion.volume = 0.718221 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.666438 +SourceRegion.volume = 0.518114 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.395545 +SourceRegion.volume = 0.582535 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.710958 +SourceRegion.volume = 0.761120 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.571628 +SourceRegion.volume = 0.683833 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.714683 +SourceRegion.volume = 0.891941 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.525563 +SourceRegion.volume = 0.348591 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.778586 +SourceRegion.volume = 0.722650 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.282796 +SourceRegion.volume = 0.563003 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.338779 +SourceRegion.volume = 1.182764 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.615873 +SourceRegion.volume = 0.313817 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.286434 +SourceRegion.volume = 0.613220 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.306536 +SourceRegion.volume = 0.475899 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.512555 +SourceRegion.volume = 1.402871 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.999422 +SourceRegion.volume = 0.209541 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.149592 +SourceRegion.volume = 0.090102 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.381661 +SourceRegion.volume = 0.640880 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.671267 +SourceRegion.volume = 1.197351 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.749275 +SourceRegion.volume = 0.724456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.291011 +SourceRegion.volume = 0.588065 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.634794 +SourceRegion.volume = 0.408091 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.082972 +SourceRegion.volume = 1.229197 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.270473 +SourceRegion.volume = 0.037998 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.774596 +SourceRegion.volume = 0.357393 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.619209 +SourceRegion.volume = 0.165810 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.140161 +SourceRegion.volume = 0.864801 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.955211 +SourceRegion.volume = 1.350659 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.674973 +SourceRegion.volume = 0.921703 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.367661 +SourceRegion.volume = 0.151197 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.840944 +SourceRegion.volume = 0.565404 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.266153 +SourceRegion.volume = 0.835601 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.252693 +SourceRegion.volume = 0.102087 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.009077 +SourceRegion.volume = 0.936830 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.769891 +SourceRegion.volume = 0.289061 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.529387 +SourceRegion.volume = 1.278061 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.316773 +SourceRegion.volume = 0.933471 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.362584 +SourceRegion.volume = 0.166152 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.932964 +SourceRegion.volume = 0.533846 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.930484 +SourceRegion.volume = 0.829475 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.649284 +SourceRegion.volume = 0.961346 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.790063 +SourceRegion.volume = 0.620953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.344753 +SourceRegion.volume = 1.084954 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.505688 +SourceRegion.volume = 1.005759 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.236460 +SourceRegion.volume = 1.283209 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.939798 +SourceRegion.volume = 0.020392 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 38 broadcasting 2274 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.547122 +SourceRegion.volume = 1.423544 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.182374 +SourceRegion.volume = 2.025695 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.444162 +SourceRegion.volume = 2.117419 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.585943 +SourceRegion.volume = 0.818204 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.717332 +SourceRegion.volume = 0.501102 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.633337 +SourceRegion.volume = 1.585360 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.455125 +SourceRegion.volume = 1.245026 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.184197 +SourceRegion.volume = 0.484134 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.875850 +SourceRegion.volume = 1.281134 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.451911 +SourceRegion.volume = 1.038960 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.078918 +SourceRegion.volume = 1.520022 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.714125 +SourceRegion.volume = 0.468377 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.290546 +SourceRegion.volume = 1.035941 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.385784 +SourceRegion.volume = 1.836128 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.917770 +SourceRegion.volume = 1.873182 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.880120 +SourceRegion.volume = 3.110882 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.166686 +SourceRegion.volume = 0.346240 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.819340 +SourceRegion.volume = 1.328308 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.149448 +SourceRegion.volume = 1.222648 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.107900 +SourceRegion.volume = 1.674696 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.140755 +SourceRegion.volume = 1.501387 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.356443 +SourceRegion.volume = 2.173266 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.742897 +SourceRegion.volume = 0.992346 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.062729 +SourceRegion.volume = 1.688120 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.695836 +SourceRegion.volume = 0.842623 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.145326 +SourceRegion.volume = 1.776076 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.720851 +SourceRegion.volume = 0.907437 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.195046 +SourceRegion.volume = 1.259826 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.939344 +SourceRegion.volume = 0.609847 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.025871 +SourceRegion.volume = 1.587519 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.160704 +SourceRegion.volume = 2.023090 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.136459 +SourceRegion.volume = 0.239906 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.440017 +SourceRegion.volume = 1.723794 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.896315 +SourceRegion.volume = 0.521919 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.375866 +SourceRegion.volume = 1.448523 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.300851 +SourceRegion.volume = 1.996678 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.662534 +SourceRegion.volume = 1.224055 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.761456 +SourceRegion.volume = 1.033317 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.499721 +SourceRegion.volume = 1.120326 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.908162 +SourceRegion.volume = 3.226731 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.513692 +SourceRegion.volume = 0.044788 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.038913 +SourceRegion.volume = 1.942027 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.135565 +SourceRegion.volume = 1.428247 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.982422 +SourceRegion.volume = 1.361767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.557181 +SourceRegion.volume = 1.005402 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.146407 +SourceRegion.volume = 0.550157 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.222672 +SourceRegion.volume = 1.853564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.756824 +SourceRegion.volume = 1.085258 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.106957 +SourceRegion.volume = 0.747731 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.127164 +SourceRegion.volume = 0.379901 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.013219 +SourceRegion.volume = 1.874407 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.995299 +SourceRegion.volume = 1.409335 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.741296 +SourceRegion.volume = 1.204691 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.006259 +SourceRegion.volume = 1.468302 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.421174 +SourceRegion.volume = 0.416073 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.585741 +SourceRegion.volume = 1.046161 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.879900 +SourceRegion.volume = 1.999356 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.944068 +SourceRegion.volume = 0.698328 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.217989 +SourceRegion.volume = 1.455251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.230004 +SourceRegion.volume = 3.950735 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.606127 +SourceRegion.volume = 2.859698 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.578969 +SourceRegion.volume = 2.657603 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.823803 +SourceRegion.volume = 1.732023 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.780434 +SourceRegion.volume = 2.266334 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.426930 +SourceRegion.volume = 0.946926 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.472090 +SourceRegion.volume = 1.002189 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.777324 +SourceRegion.volume = 0.586301 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.186054 +SourceRegion.volume = 0.409858 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.328497 +SourceRegion.volume = 2.803815 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.072634 +SourceRegion.volume = 1.084481 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.299325 +SourceRegion.volume = 1.882760 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.484112 +SourceRegion.volume = 1.820764 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.746557 +SourceRegion.volume = 2.446129 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.242656 +SourceRegion.volume = 1.133305 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.308718 +SourceRegion.volume = 1.397946 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.515549 +SourceRegion.volume = 0.974897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.239966 +SourceRegion.volume = 1.749340 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.897168 +SourceRegion.volume = 0.045643 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.151620 +SourceRegion.volume = 1.214726 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.642441 +SourceRegion.volume = 1.032958 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.715802 +SourceRegion.volume = 0.098804 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.155921 +SourceRegion.volume = 2.110967 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.710234 +SourceRegion.volume = 1.450836 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.429318 +SourceRegion.volume = 1.418976 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.404122 +SourceRegion.volume = 1.984337 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.603331 +SourceRegion.volume = 1.635066 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.879795 +SourceRegion.volume = 1.120431 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.009231 +SourceRegion.volume = 0.633639 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.508241 +SourceRegion.volume = 2.192562 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.581646 +SourceRegion.volume = 0.167475 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.015055 +SourceRegion.volume = 3.100728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.666619 +SourceRegion.volume = 0.849933 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.291454 +SourceRegion.volume = 0.933739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.645059 +SourceRegion.volume = 0.531673 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.055683 +SourceRegion.volume = 0.758193 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.720847 +SourceRegion.volume = 0.491673 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.254175 +SourceRegion.volume = 0.561774 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.835129 +SourceRegion.volume = 0.373605 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.550994 +SourceRegion.volume = 1.428949 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.480476 +SourceRegion.volume = 2.065285 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.812420 +SourceRegion.volume = 2.003167 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.185895 +SourceRegion.volume = 0.531374 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.474493 +SourceRegion.volume = 1.258926 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.685047 +SourceRegion.volume = 0.664029 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.976989 +SourceRegion.volume = 2.531060 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.625638 +SourceRegion.volume = 1.587177 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.221622 +SourceRegion.volume = 0.672750 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.313967 +SourceRegion.volume = 1.971974 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.887650 +SourceRegion.volume = 1.995790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.003279 +SourceRegion.volume = 1.028650 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 39 broadcasting 2252 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.257579 +SourceRegion.volume = 1.255246 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.076993 +SourceRegion.volume = 1.012765 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.308845 +SourceRegion.volume = 0.917471 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.725560 +SourceRegion.volume = 0.550793 +test1 +SourceRegion_add.volume = 1.652021 +SourceRegion.volume = 0.900266 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.416483 +SourceRegion.volume = 1.899189 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.411063 +SourceRegion.volume = 2.189555 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.311093 +SourceRegion.volume = 1.132957 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.697497 +SourceRegion.volume = 2.949162 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.558918 +SourceRegion.volume = 0.907935 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.679048 +SourceRegion.volume = 0.564069 +test1.1 +test1 +SourceRegion_add.volume = 0.222380 +SourceRegion.volume = 1.414267 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.659789 +SourceRegion.volume = 1.742942 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.886537 +SourceRegion.volume = 1.882153 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 1.059278 +SourceRegion.volume = 1.825845 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.503857 +SourceRegion.volume = 2.873554 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.003149 +SourceRegion.volume = 0.205010 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.049197 +SourceRegion.volume = 2.645294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.033685 +SourceRegion.volume = 2.171206 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.985707 +SourceRegion.volume = 0.928463 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.815956 +SourceRegion.volume = 0.670193 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.289863 +SourceRegion.volume = 1.106114 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.629155 +SourceRegion.volume = 1.429906 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.957153 +SourceRegion.volume = 1.684807 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.563381 +SourceRegion.volume = 1.459513 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.989927 +SourceRegion.volume = 2.340497 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.451481 +SourceRegion.volume = 1.730949 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.280613 +SourceRegion.volume = 0.957234 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.668796 +SourceRegion.volume = 1.361316 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.493685 +SourceRegion.volume = 0.424922 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.905965 +SourceRegion.volume = 0.840685 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 1.006084 +SourceRegion.volume = 0.347149 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.270230 +SourceRegion.volume = 2.320259 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.971981 +SourceRegion.volume = 2.645875 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 1.136060 +SourceRegion.volume = 1.865913 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.740312 +SourceRegion.volume = 4.191855 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.033587 +SourceRegion.volume = 1.884509 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.409410 +SourceRegion.volume = 0.532043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.189156 +SourceRegion.volume = 1.256685 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.610653 +SourceRegion.volume = 3.790711 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.280861 +SourceRegion.volume = 1.298196 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.805120 +SourceRegion.volume = 2.938541 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.708654 +SourceRegion.volume = 1.095944 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.239990 +SourceRegion.volume = 1.222854 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.359610 +SourceRegion.volume = 0.847540 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.371183 +SourceRegion.volume = 0.137000 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.271823 +SourceRegion.volume = 1.326715 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.143231 +SourceRegion.volume = 2.328572 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.858693 +SourceRegion.volume = 0.025870 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.654883 +SourceRegion.volume = 1.800997 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.218002 +SourceRegion.volume = 2.696253 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.663412 +SourceRegion.volume = 0.599720 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.193982 +SourceRegion.volume = 2.878792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.057799 +SourceRegion.volume = 0.486564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.223578 +test1 +SourceRegion_add.volume = 2.412336 +SourceRegion.volume = 2.007162 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.444019 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.214619 +SourceRegion.volume = 1.973334 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.238917 +SourceRegion.volume = 1.087428 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.431894 +SourceRegion.volume = 4.479008 +test1.1 +test1 +SourceRegion_add.volume = 1.181105 +SourceRegion.volume = 1.159653 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.946168 +SourceRegion.volume = 1.524480 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.099904 +SourceRegion.volume = 1.931572 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.166935 +SourceRegion.volume = 1.037014 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.185855 +SourceRegion.volume = 2.000335 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.204524 +SourceRegion.volume = 1.103859 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.759710 +SourceRegion.volume = 0.941906 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.464475 +SourceRegion.volume = 0.778506 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 3.903376 +SourceRegion.volume = 0.253961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.732979 +SourceRegion.volume = 1.102697 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion_add.volume = 1.050974 +SourceRegion.volume = 1.894862 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.030535 +SourceRegion.volume = 2.006719 +test1 +SourceRegion_add.volume = 0.549127 +SourceRegion.volume = 4.503400 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.619943 +SourceRegion.volume = 1.366236 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 1.841721 +SourceRegion.volume = 1.000504 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.201410 +SourceRegion.volume = 2.517433 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.593644 +SourceRegion.volume = 1.138393 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 2.056816 +SourceRegion.volume = 1.516495 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.806016 +SourceRegion.volume = 2.090258 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.515742 +SourceRegion.volume = 1.273324 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.704432 +SourceRegion.volume = 2.606153 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.098297 +SourceRegion.volume = 0.879227 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.976535 +SourceRegion.volume = 0.880363 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.376641 +SourceRegion.volume = 2.602399 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.836887 +SourceRegion.volume = 0.260231 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.468381 +SourceRegion.volume = 1.600977 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.570618 +SourceRegion.volume = 0.071235 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.739865 +SourceRegion.volume = 0.926403 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.163089 +SourceRegion.volume = 1.267804 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.815914 +SourceRegion.volume = 2.320664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.844541 +SourceRegion.volume = 3.649084 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.444131 +SourceRegion.volume = 2.298316 +test1 +SourceRegion_add.volume = 0.518407 +SourceRegion.volume = 1.161037 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.076585 +SourceRegion.volume = 1.237117 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.058781 +SourceRegion.volume = 1.258262 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.356804 +SourceRegion.volume = 1.337135 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.586809 +SourceRegion.volume = 1.398557 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.412792 +SourceRegion.volume = 0.922180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.274662 +SourceRegion.volume = 3.002995 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 2.388781 +SourceRegion.volume = 1.565180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.198988 +SourceRegion.volume = 1.592268 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.656645 +SourceRegion.volume = 1.267604 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.527482 +SourceRegion.volume = 1.895794 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.183646 +SourceRegion.volume = 3.260982 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.141292 +SourceRegion.volume = 1.245202 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.454089 +SourceRegion.volume = 0.623564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.050783 +SourceRegion.volume = 0.780036 +test1.1 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.440964 +SourceRegion.volume = 1.681810 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.465334 +SourceRegion.volume = 0.658363 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.356113 +SourceRegion.volume = 1.891922 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.049626 +SourceRegion.volume = 0.745660 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.241429 +SourceRegion.volume = 1.122042 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.170404 +SourceRegion.volume = 1.801350 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.508742 +SourceRegion.volume = 0.430839 +test1 +SourceRegion_add.volume = 0.696019 +SourceRegion.volume = 1.408792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.944869 +SourceRegion.volume = 2.562324 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.547187 +SourceRegion.volume = 0.815963 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.607451 +SourceRegion.volume = 1.524227 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.055307 +SourceRegion.volume = 0.926112 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.725396 +SourceRegion.volume = 2.871167 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.787667 +SourceRegion.volume = 1.747248 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.712337 +SourceRegion.volume = 1.519347 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.184800 +SourceRegion.volume = 2.057328 +test1 +SourceRegion_add.volume = 4.649237 +SourceRegion.volume = 0.138868 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.749056 +SourceRegion.volume = 0.956602 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.007769 +SourceRegion.volume = 2.298798 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.143584 +SourceRegion.volume = 1.694812 +test1.1 +test1 +SourceRegion_add.volume = 2.344666 +SourceRegion.volume = 0.858955 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.490998 +SourceRegion.volume = 1.214987 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.015974 +SourceRegion.volume = 2.043486 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.628307 +SourceRegion.volume = 1.750388 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.034229 +SourceRegion.volume = 2.363707 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.146013 +SourceRegion.volume = 1.916877 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.390119 +SourceRegion.volume = 0.266773 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.380452 +SourceRegion.volume = 2.388930 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.145445 +SourceRegion.volume = 1.096450 +test1 +SourceRegion_add.volume = 2.971236 +SourceRegion.volume = 1.499687 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.355642 +SourceRegion.volume = 1.847211 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.737279 +SourceRegion.volume = 1.031555 +test1.1 +test1.2 +test1.3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.981164 +SourceRegion.volume = 0.652668 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.709471 +SourceRegion.volume = 0.724880 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.883937 +SourceRegion.volume = 0.511154 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.396735 +SourceRegion.volume = 0.737205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.809607 +SourceRegion.volume = 2.075913 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.596966 +SourceRegion.volume = 1.443714 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.021950 +SourceRegion.volume = 0.736811 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.461740 +SourceRegion.volume = 3.332144 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.315380 +SourceRegion.volume = 0.034134 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.009744 +test1 +SourceRegion_add.volume = 1.150932 +SourceRegion.volume = 0.884553 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.641588 +SourceRegion.volume = 1.237449 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 40 broadcasting 547 source regions to other ranks. +SourceRegion.volume = 0.757743 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.495822 +SourceRegion.volume = 1.045334 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.674448 +SourceRegion.volume = 1.069494 +test1.1 +test1 +SourceRegion_add.volume = 41.335513 +SourceRegion.volume = 81.399457 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.343492 +SourceRegion.volume = 0.754739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 61.866280 +SourceRegion.volume = 84.248714 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.385874 +SourceRegion.volume = 0.649587 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.566205 +SourceRegion.volume = 0.166255 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.105854 +SourceRegion.volume = 0.929044 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.379011 +SourceRegion.volume = 0.605298 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.403919 +SourceRegion.volume = 0.617435 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 48.290272 +SourceRegion.volume = 76.215760 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.994921 +SourceRegion.volume = 0.504405 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.453851 +SourceRegion.volume = 0.342108 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.451269 +SourceRegion.volume = 0.683932 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.135541 +SourceRegion.volume = 0.280037 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.126156 +SourceRegion.volume = 0.625228 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.374631 +SourceRegion.volume = 0.872595 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.325082 +SourceRegion.volume = 0.469719 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.708513 +SourceRegion.volume = 1.041230 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.203599 +SourceRegion.volume = 0.236958 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.979593 +SourceRegion.volume = 0.529039 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.480281 +SourceRegion.volume = 1.744760 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.447011 +SourceRegion.volume = 0.402861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.146615 +SourceRegion.volume = 0.465087 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.969654 +SourceRegion.volume = 0.615359 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.364303 +SourceRegion.volume = 0.591113 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.265066 +SourceRegion.volume = 0.391525 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.140438 +SourceRegion.volume = 0.753748 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.676379 +SourceRegion.volume = 0.774016 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.450003 +SourceRegion.volume = 1.389297 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.716954 +SourceRegion.volume = 1.504813 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.914147 +SourceRegion.volume = 1.002294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 41 broadcasting 4023 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.949608 +SourceRegion.volume = 0.521731 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.570006 +SourceRegion.volume = 1.735387 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.388301 +SourceRegion.volume = 1.114136 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.975340 +SourceRegion.volume = 1.072897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.633061 +SourceRegion.volume = 0.017089 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.364299 +SourceRegion.volume = 0.710052 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.478656 +SourceRegion.volume = 0.786859 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.496264 +test1 +SourceRegion_add.volume = 0.601700 +SourceRegion.volume = 1.463460 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.352890 +SourceRegion.volume = 0.603586 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.006502 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.244327 +SourceRegion.volume = 0.649557 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.721864 +SourceRegion.volume = 0.966469 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.435471 +SourceRegion.volume = 0.910136 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.629370 +SourceRegion.volume = 0.258933 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.909341 +test1 +SourceRegion_add.volume = 1.732136 +SourceRegion.volume = 0.018814 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.583176 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.906604 +SourceRegion.volume = 0.961549 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.444524 +SourceRegion.volume = 0.910058 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.874903 +SourceRegion.volume = 1.448008 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 1.066636 +SourceRegion.volume = 0.724492 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.315041 +SourceRegion.volume = 1.107554 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.537034 +SourceRegion.volume = 0.832513 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.845912 +SourceRegion.volume = 1.717629 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.760136 +SourceRegion.volume = 0.346646 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.728201 +SourceRegion.volume = 1.552984 +test1.1 +test1 +SourceRegion_add.volume = 0.775619 +SourceRegion.volume = 0.552417 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.202143 +SourceRegion.volume = 0.837797 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.469595 +SourceRegion.volume = 0.208606 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.016094 +SourceRegion.volume = 0.316071 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.488374 +SourceRegion.volume = 0.581038 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.459701 +SourceRegion.volume = 0.586207 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.965963 +SourceRegion.volume = 0.049426 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.095815 +SourceRegion.volume = 0.966197 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.001498 +SourceRegion.volume = 1.012873 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.629918 +SourceRegion.volume = 0.239167 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.317605 +SourceRegion.volume = 0.938874 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.587889 +SourceRegion.volume = 1.984069 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.202108 +SourceRegion.volume = 1.144422 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.506542 +SourceRegion.volume = 1.953293 +test1.1 +test1 +SourceRegion_add.volume = 0.544375 +SourceRegion.volume = 1.200846 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.200883 +SourceRegion.volume = 1.100931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.074975 +SourceRegion.volume = 0.617054 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.568060 +SourceRegion.volume = 0.251940 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.901214 +SourceRegion.volume = 1.258550 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.794405 +SourceRegion.volume = 0.262279 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.124248 +SourceRegion.volume = 1.699791 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.685197 +SourceRegion.volume = 0.832826 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.279107 +SourceRegion.volume = 1.442631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.959932 +SourceRegion.volume = 0.383316 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.176461 +SourceRegion.volume = 0.618548 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.943972 +SourceRegion.volume = 1.026147 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 1.068277 +SourceRegion.volume = 0.117109 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.219826 +SourceRegion.volume = 0.335256 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.478107 +SourceRegion.volume = 1.172730 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.262233 +SourceRegion.volume = 1.030195 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.197989 +SourceRegion.volume = 1.145669 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.880337 +SourceRegion.volume = 0.084758 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.834612 +SourceRegion.volume = 0.008847 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.858227 +SourceRegion.volume = 0.589326 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.110419 +SourceRegion.volume = 1.153648 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.485796 +SourceRegion.volume = 0.298729 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.061738 +SourceRegion.volume = 0.511462 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.168028 +SourceRegion.volume = 0.759382 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.274081 +SourceRegion.volume = 0.918309 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.144311 +SourceRegion.volume = 1.141217 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.504714 +SourceRegion.volume = 1.053191 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.908396 +SourceRegion.volume = 0.545361 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.663358 +SourceRegion.volume = 1.081325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.591421 +SourceRegion.volume = 0.643840 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.309856 +SourceRegion.volume = 1.509637 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.093577 +SourceRegion.volume = 1.281255 +test1 +SourceRegion_add.volume = 0.406049 +SourceRegion.volume = 0.888496 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.978415 +SourceRegion.volume = 1.680855 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.673643 +SourceRegion.volume = 0.553041 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.340691 +SourceRegion.volume = 0.554378 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.731619 +SourceRegion.volume = 0.418128 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.551020 +SourceRegion.volume = 1.074766 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.762028 +SourceRegion.volume = 0.591142 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.202527 +SourceRegion.volume = 1.920283 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.493212 +SourceRegion.volume = 1.267470 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.874557 +SourceRegion.volume = 0.844059 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.389749 +SourceRegion.volume = 0.490912 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 1.171889 +SourceRegion.volume = 0.278566 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.719187 +SourceRegion.volume = 0.398531 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.430941 +SourceRegion.volume = 0.366332 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.091928 +SourceRegion.volume = 1.504941 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.134258 +SourceRegion.volume = 1.109002 +test1 +SourceRegion_add.volume = 0.808807 +SourceRegion.volume = 0.299148 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.221613 +SourceRegion.volume = 0.685650 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.330837 +SourceRegion.volume = 1.100816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.253598 +SourceRegion.volume = 0.706346 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.848335 +SourceRegion.volume = 0.353861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.227648 +SourceRegion.volume = 0.677000 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.131193 +SourceRegion.volume = 0.704405 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.349757 +SourceRegion.volume = 0.834650 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.393113 +SourceRegion.volume = 0.585509 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.522937 +SourceRegion.volume = 1.135721 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.495892 +SourceRegion.volume = 1.140087 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.183146 +SourceRegion.volume = 0.130057 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.552727 +SourceRegion.volume = 0.799913 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.445808 +SourceRegion.volume = 0.054243 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.741703 +SourceRegion.volume = 0.413813 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.935763 +SourceRegion.volume = 0.968899 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.871173 +SourceRegion.volume = 0.613809 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.267697 +SourceRegion.volume = 0.597897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.017317 +SourceRegion.volume = 0.889935 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.697082 +SourceRegion.volume = 0.804255 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.858732 +SourceRegion.volume = 0.104766 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.222726 +SourceRegion.volume = 0.464088 +test1 +SourceRegion_add.volume = 1.658631 +SourceRegion.volume = 0.416399 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.530825 +SourceRegion.volume = 0.464198 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.252424 +SourceRegion.volume = 0.477442 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.910126 +SourceRegion.volume = 0.327167 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.306885 +SourceRegion.volume = 0.343139 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.349790 +SourceRegion.volume = 0.315553 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.234302 +SourceRegion.volume = 1.023021 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.570741 +SourceRegion.volume = 0.422506 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.249918 +SourceRegion.volume = 0.169874 +test1 +SourceRegion_add.volume = 0.539562 +SourceRegion.volume = 0.310562 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.747291 +SourceRegion.volume = 0.323157 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.222150 +SourceRegion.volume = 0.240827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.859077 +SourceRegion.volume = 0.079576 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.746396 +SourceRegion.volume = 0.859705 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.682097 +SourceRegion.volume = 0.978389 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.379365 +SourceRegion.volume = 0.244133 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 42 broadcasting 3523 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.499313 +SourceRegion.volume = 0.616349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.214790 +SourceRegion.volume = 0.806609 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.566533 +SourceRegion.volume = 0.384178 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.199240 +SourceRegion.volume = 0.330071 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.299221 +SourceRegion.volume = 0.734735 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.934637 +SourceRegion.volume = 0.494163 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.704459 +SourceRegion.volume = 0.717811 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.372967 +SourceRegion.volume = 1.355192 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.765289 +SourceRegion.volume = 0.287968 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.925955 +SourceRegion.volume = 0.024737 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.304088 +SourceRegion.volume = 0.732694 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.503840 +SourceRegion.volume = 0.022897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.251307 +SourceRegion.volume = 0.924987 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.640316 +SourceRegion.volume = 0.726101 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.439578 +SourceRegion.volume = 0.817261 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.282274 +SourceRegion.volume = 0.698610 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.998085 +SourceRegion.volume = 0.436983 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.380876 +SourceRegion.volume = 0.353895 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.649976 +SourceRegion.volume = 1.133490 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.141838 +SourceRegion.volume = 2.403279 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.998633 +SourceRegion.volume = 0.301520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.478213 +SourceRegion.volume = 1.302864 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.534267 +SourceRegion.volume = 0.413889 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.753654 +SourceRegion.volume = 0.619912 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.347514 +SourceRegion.volume = 0.646541 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.173954 +SourceRegion.volume = 0.346397 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.067825 +SourceRegion.volume = 0.583041 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.465119 +SourceRegion.volume = 1.059236 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.638946 +SourceRegion.volume = 0.579505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.840308 +SourceRegion.volume = 0.521251 +test1.1 +test1 +SourceRegion_add.volume = 0.870255 +SourceRegion.volume = 0.970131 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.225930 +SourceRegion.volume = 0.387571 +test1.1 +test1.2 +test1.3 +test1.4 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.696475 +SourceRegion.volume = 0.355852 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.377207 +SourceRegion.volume = 0.942836 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.145785 +SourceRegion.volume = 1.635239 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.865653 +SourceRegion.volume = 0.158610 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.971904 +SourceRegion.volume = 0.075209 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.365214 +SourceRegion.volume = 0.477255 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.486857 +SourceRegion.volume = 0.675132 +test1.1 +test1 +SourceRegion_add.volume = 2.173650 +SourceRegion.volume = 0.147068 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.885386 +SourceRegion.volume = 0.705617 +test1.1 +test1.2 +test1.3 +test1.4 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.533419 +SourceRegion.volume = 0.648489 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.399268 +SourceRegion.volume = 0.538529 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.585138 +SourceRegion.volume = 0.911091 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.604212 +SourceRegion.volume = 1.150478 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.591088 +SourceRegion.volume = 1.292414 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.492053 +SourceRegion.volume = 0.880832 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.227810 +SourceRegion.volume = 1.060343 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.489374 +SourceRegion.volume = 0.055665 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.671536 +SourceRegion.volume = 0.443138 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.406097 +SourceRegion.volume = 1.357621 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.507196 +SourceRegion.volume = 0.755836 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.659370 +SourceRegion.volume = 0.151299 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.030137 +SourceRegion.volume = 0.276781 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.658331 +SourceRegion.volume = 0.636779 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.248381 +SourceRegion.volume = 0.500051 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.161653 +SourceRegion.volume = 0.990180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.834725 +SourceRegion.volume = 0.787628 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.039922 +SourceRegion.volume = 0.891260 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.218306 +SourceRegion.volume = 1.172009 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.529470 +SourceRegion.volume = 1.216062 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.610980 +SourceRegion.volume = 1.522679 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.295117 +SourceRegion.volume = 0.787869 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.079027 +SourceRegion.volume = 0.528191 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.354845 +SourceRegion.volume = 0.376839 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.473517 +SourceRegion.volume = 0.419172 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.361416 +SourceRegion.volume = 1.132072 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 43 broadcasting 2255 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.960784 +SourceRegion.volume = 0.964280 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.653149 +SourceRegion.volume = 0.226649 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.749891 +SourceRegion.volume = 1.385331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.315369 +SourceRegion.volume = 1.551503 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.425980 +SourceRegion.volume = 1.760047 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.234805 +SourceRegion.volume = 2.659431 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.525942 +SourceRegion.volume = 5.221394 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.768921 +SourceRegion.volume = 0.356886 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.136658 +SourceRegion.volume = 2.040767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.294408 +SourceRegion.volume = 1.073795 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.852958 +SourceRegion.volume = 1.630804 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.983957 +SourceRegion.volume = 1.410267 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.622343 +SourceRegion.volume = 0.719838 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.722663 +SourceRegion.volume = 0.664649 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.727564 +SourceRegion.volume = 1.182410 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.410317 +SourceRegion.volume = 1.568347 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.366744 +SourceRegion.volume = 1.086927 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.856382 +SourceRegion.volume = 2.805367 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.190161 +SourceRegion.volume = 1.422494 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.250768 +SourceRegion.volume = 2.035136 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.070624 +SourceRegion.volume = 1.330042 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.974153 +SourceRegion.volume = 1.160067 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.989130 +SourceRegion.volume = 1.607914 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.476844 +SourceRegion.volume = 2.559841 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.269713 +SourceRegion.volume = 1.879064 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.657970 +SourceRegion.volume = 2.126859 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.612135 +SourceRegion.volume = 2.194926 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.885645 +SourceRegion.volume = 1.943784 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.553065 +SourceRegion.volume = 0.712952 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.431230 +SourceRegion.volume = 0.683909 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.641807 +SourceRegion.volume = 1.510505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.503734 +SourceRegion.volume = 1.267893 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.053418 +SourceRegion.volume = 1.223914 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.664402 +SourceRegion.volume = 0.759083 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.545922 +SourceRegion.volume = 1.954783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.877828 +SourceRegion.volume = 1.362412 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.607572 +SourceRegion.volume = 1.241935 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.805394 +SourceRegion.volume = 1.013447 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.612960 +SourceRegion.volume = 1.246728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.659845 +SourceRegion.volume = 1.838188 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.955609 +SourceRegion.volume = 1.371711 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.437439 +SourceRegion.volume = 3.333252 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.310390 +SourceRegion.volume = 1.420351 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.988498 +SourceRegion.volume = 1.855316 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.151782 +SourceRegion.volume = 3.185363 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.090179 +SourceRegion.volume = 0.903988 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.974690 +SourceRegion.volume = 1.456197 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.626512 +SourceRegion.volume = 1.046792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.402686 +SourceRegion.volume = 1.554063 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.584504 +SourceRegion.volume = 2.759104 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.739066 +SourceRegion.volume = 1.136497 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.119093 +SourceRegion.volume = 1.900536 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.707411 +SourceRegion.volume = 0.702748 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.602906 +SourceRegion.volume = 2.087424 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.071210 +SourceRegion.volume = 3.003455 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.871499 +SourceRegion.volume = 0.559249 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.980863 +SourceRegion.volume = 1.514740 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.228944 +SourceRegion.volume = 1.397021 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.673697 +SourceRegion.volume = 1.467346 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.232340 +SourceRegion.volume = 0.574530 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.963054 +SourceRegion.volume = 2.131577 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 44 broadcasting 3918 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.134451 +SourceRegion.volume = 0.728992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.971648 +SourceRegion.volume = 0.413391 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.318620 +SourceRegion.volume = 0.460299 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.093509 +SourceRegion.volume = 1.494455 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.703034 +SourceRegion.volume = 1.052436 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.376233 +SourceRegion.volume = 0.870507 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.622503 +SourceRegion.volume = 0.929691 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.620572 +SourceRegion.volume = 0.634079 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.964670 +SourceRegion.volume = 0.446817 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.227753 +SourceRegion.volume = 0.638552 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.871375 +SourceRegion.volume = 0.012687 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.047555 +SourceRegion.volume = 0.576969 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.309275 +SourceRegion.volume = 0.460057 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.296156 +SourceRegion.volume = 1.463079 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.522464 +SourceRegion.volume = 0.131571 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.076295 +SourceRegion.volume = 0.184072 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.946005 +SourceRegion.volume = 0.475782 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.850490 +SourceRegion.volume = 0.770354 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.595674 +SourceRegion.volume = 0.541681 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.134875 +SourceRegion.volume = 0.562587 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.951155 +SourceRegion.volume = 0.720091 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.136715 +SourceRegion.volume = 2.278023 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.159959 +SourceRegion.volume = 1.758142 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.446759 +SourceRegion.volume = 0.703794 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.010933 +SourceRegion.volume = 0.912897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.081352 +SourceRegion.volume = 0.856545 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.550471 +SourceRegion.volume = 0.402996 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.898693 +SourceRegion.volume = 0.282050 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.115819 +SourceRegion.volume = 0.834153 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.586892 +SourceRegion.volume = 0.293868 +test1 +SourceRegion_add.volume = 0.535295 +SourceRegion.volume = 1.443074 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.469348 +SourceRegion.volume = 0.356668 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.530179 +SourceRegion.volume = 0.485726 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.525102 +SourceRegion.volume = 0.613939 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.619119 +SourceRegion.volume = 1.261323 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.908494 +SourceRegion.volume = 0.189664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.328804 +SourceRegion.volume = 1.375794 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.170473 +SourceRegion.volume = 0.020415 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.770219 +SourceRegion.volume = 0.124421 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.457601 +SourceRegion.volume = 0.468187 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.318497 +SourceRegion.volume = 0.690534 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.664103 +SourceRegion.volume = 1.013718 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.711042 +SourceRegion.volume = 0.525212 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.151847 +SourceRegion.volume = 2.269206 +test1.1 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.536327 +SourceRegion.volume = 0.531842 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.396138 +SourceRegion.volume = 0.151921 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.676833 +SourceRegion.volume = 0.767141 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.119110 +SourceRegion.volume = 1.457763 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.759324 +SourceRegion.volume = 0.655862 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.204507 +SourceRegion.volume = 1.363946 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.585142 +SourceRegion.volume = 0.329131 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.726429 +SourceRegion.volume = 0.377481 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.891052 +SourceRegion.volume = 0.238160 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.775582 +SourceRegion.volume = 1.425520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.441457 +SourceRegion.volume = 0.969758 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.647289 +SourceRegion.volume = 0.001732 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.339434 +SourceRegion.volume = 0.833934 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.243484 +SourceRegion.volume = 0.814029 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.910651 +SourceRegion.volume = 1.245376 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.877213 +SourceRegion.volume = 0.417901 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.383184 +SourceRegion.volume = 0.963848 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.165716 +SourceRegion.volume = 0.959276 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.861100 +SourceRegion.volume = 0.062831 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.387902 +SourceRegion.volume = 0.907904 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.653684 +SourceRegion.volume = 0.772888 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.210000 +SourceRegion.volume = 1.094541 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.351990 +SourceRegion.volume = 0.775464 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.776142 +SourceRegion.volume = 0.162924 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.140869 +SourceRegion.volume = 1.171654 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.112913 +SourceRegion.volume = 0.112188 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.568520 +SourceRegion.volume = 0.774507 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.949710 +SourceRegion.volume = 1.056270 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.566744 +SourceRegion.volume = 0.069044 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.681578 +SourceRegion.volume = 0.657851 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.634839 +SourceRegion.volume = 0.869897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.283279 +SourceRegion.volume = 0.033359 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.122541 +SourceRegion.volume = 0.091873 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.286110 +SourceRegion.volume = 0.118739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.401306 +SourceRegion.volume = 0.774827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.936610 +SourceRegion.volume = 0.729167 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.171018 +SourceRegion.volume = 1.437249 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.555515 +SourceRegion.volume = 0.149382 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.277673 +test1 +SourceRegion_add.volume = 0.912972 +SourceRegion.volume = 0.808222 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +SourceRegion.volume = 0.871158 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.590137 +SourceRegion.volume = 0.676482 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.851868 +SourceRegion.volume = 1.330931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.326381 +SourceRegion.volume = 1.249874 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.674679 +SourceRegion.volume = 0.571613 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.835057 +SourceRegion.volume = 0.890246 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.033464 +SourceRegion.volume = 0.743630 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.721248 +SourceRegion.volume = 0.297466 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.040355 +SourceRegion.volume = 0.725257 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.189082 +SourceRegion.volume = 0.874722 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.533037 +SourceRegion.volume = 0.814458 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.877309 +SourceRegion.volume = 0.142504 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.162822 +SourceRegion.volume = 0.298762 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.660071 +SourceRegion.volume = 2.128371 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.273374 +SourceRegion.volume = 0.579318 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.106432 +SourceRegion.volume = 1.627216 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.941614 +SourceRegion.volume = 0.146542 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.622017 +SourceRegion.volume = 0.626373 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.082416 +SourceRegion.volume = 0.603330 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.301063 +SourceRegion.volume = 0.907318 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.774528 +SourceRegion.volume = 0.541508 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.709204 +SourceRegion.volume = 0.049612 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.098065 +SourceRegion.volume = 0.454867 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.662792 +SourceRegion.volume = 0.586410 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.579384 +SourceRegion.volume = 0.593950 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.109232 +SourceRegion.volume = 0.161665 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.898454 +SourceRegion.volume = 0.013944 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.411649 +SourceRegion.volume = 0.703286 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.149497 +SourceRegion.volume = 0.913622 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.571493 +SourceRegion.volume = 0.466658 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.235227 +SourceRegion.volume = 0.287732 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.011942 +SourceRegion.volume = 1.147380 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.451153 +SourceRegion.volume = 1.410096 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.450563 +SourceRegion.volume = 0.887520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.775080 +SourceRegion.volume = 0.200000 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.931558 +SourceRegion.volume = 0.131571 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 45 broadcasting 2220 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.289551 +SourceRegion.volume = 1.174272 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.329987 +SourceRegion.volume = 2.342279 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.047258 +SourceRegion.volume = 2.330171 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.612712 +SourceRegion.volume = 1.398463 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.436107 +SourceRegion.volume = 1.672713 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.191057 +SourceRegion.volume = 0.137112 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.157599 +SourceRegion.volume = 0.921134 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.032475 +SourceRegion.volume = 0.980386 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.612568 +SourceRegion.volume = 0.054296 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.989999 +SourceRegion.volume = 3.498527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.938440 +SourceRegion.volume = 0.304011 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.322552 +SourceRegion.volume = 0.464963 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.701666 +SourceRegion.volume = 1.552510 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.535593 +SourceRegion.volume = 1.187927 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.091858 +SourceRegion.volume = 0.166321 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 3.230939 +SourceRegion.volume = 0.580335 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.713583 +SourceRegion.volume = 2.113652 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.781856 +SourceRegion.volume = 0.658956 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.903743 +SourceRegion.volume = 0.858595 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 2.041005 +SourceRegion.volume = 0.738256 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.295407 +SourceRegion.volume = 1.557649 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.879343 +SourceRegion.volume = 0.974566 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.713878 +SourceRegion.volume = 0.818771 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.805451 +SourceRegion.volume = 1.749240 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.747518 +SourceRegion.volume = 1.707125 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.438414 +SourceRegion.volume = 0.329985 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.445266 +SourceRegion.volume = 1.423066 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.386646 +SourceRegion.volume = 2.911520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.774980 +SourceRegion.volume = 1.884034 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.439872 +SourceRegion.volume = 2.566294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.922178 +SourceRegion.volume = 0.626594 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.910024 +SourceRegion.volume = 1.464855 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.252647 +SourceRegion.volume = 0.167583 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.467075 +SourceRegion.volume = 2.112893 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.141148 +SourceRegion.volume = 2.155803 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.078287 +SourceRegion.volume = 2.920633 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.024445 +SourceRegion.volume = 0.613533 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 1.149696 +SourceRegion.volume = 0.772876 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.565809 +SourceRegion.volume = 0.833820 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.999175 +test2 +test3 +SourceRegion.volume = 1.265248 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.117091 +SourceRegion.volume = 0.718868 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.797537 +SourceRegion.volume = 2.366954 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.973290 +SourceRegion.volume = 1.138422 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.892067 +SourceRegion.volume = 1.363976 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.101345 +SourceRegion.volume = 1.988871 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.822459 +SourceRegion.volume = 0.666504 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.108562 +SourceRegion.volume = 0.849343 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 1.110279 +SourceRegion.volume = 0.407706 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 2.345446 +SourceRegion.volume = 0.924089 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.794719 +SourceRegion.volume = 1.295376 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 1.508971 +SourceRegion.volume = 1.078200 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.822051 +SourceRegion.volume = 0.860595 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.915343 +SourceRegion.volume = 0.962385 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.009092 +SourceRegion.volume = 0.169160 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.353533 +SourceRegion.volume = 0.683499 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.322333 +SourceRegion.volume = 1.593767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.557154 +SourceRegion.volume = 1.364783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.887211 +SourceRegion.volume = 0.687501 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.051202 +SourceRegion.volume = 1.883869 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.609740 +SourceRegion.volume = 2.158638 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.473710 +SourceRegion.volume = 1.387202 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.691571 +SourceRegion.volume = 1.664343 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.237960 +SourceRegion.volume = 1.081477 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.224023 +SourceRegion.volume = 1.355710 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.268925 +SourceRegion.volume = 2.176540 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 46 broadcasting 2752 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.087782 +SourceRegion.volume = 2.516771 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.467134 +SourceRegion.volume = 0.060909 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.459285 +SourceRegion.volume = 0.432867 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.547086 +SourceRegion.volume = 1.815549 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.470560 +SourceRegion.volume = 1.176777 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.065587 +SourceRegion.volume = 4.047743 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.626739 +SourceRegion.volume = 0.739077 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.333022 +SourceRegion.volume = 1.060138 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.291100 +SourceRegion.volume = 1.465689 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.879877 +SourceRegion.volume = 1.642366 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.479107 +SourceRegion.volume = 6.208418 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.284609 +SourceRegion.volume = 0.064172 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.522130 +SourceRegion.volume = 2.118017 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.574761 +SourceRegion.volume = 0.227621 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.857149 +SourceRegion.volume = 0.546993 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.982408 +SourceRegion.volume = 0.959569 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.995674 +SourceRegion.volume = 1.999243 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.784391 +SourceRegion.volume = 1.116922 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.760482 +SourceRegion.volume = 3.492891 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.626723 +SourceRegion.volume = 0.677232 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.193007 +SourceRegion.volume = 0.618344 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.855611 +SourceRegion.volume = 2.680336 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.370439 +SourceRegion.volume = 0.427456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.551553 +SourceRegion.volume = 1.211152 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.648378 +SourceRegion.volume = 0.087831 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.751975 +SourceRegion.volume = 0.725287 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.354846 +SourceRegion.volume = 0.191222 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.574235 +SourceRegion.volume = 1.514099 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.415711 +SourceRegion.volume = 2.392921 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.701147 +SourceRegion.volume = 1.188811 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.406993 +test1 +SourceRegion_add.volume = 0.251339 +SourceRegion.volume = 1.376758 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.140654 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.808717 +SourceRegion.volume = 0.778211 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.330476 +SourceRegion.volume = 1.294578 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.263709 +SourceRegion.volume = 1.268729 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.774494 +SourceRegion.volume = 2.364959 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.082738 +SourceRegion.volume = 3.443852 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.881468 +SourceRegion.volume = 2.718244 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 1.054296 +SourceRegion.volume = 0.792548 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.486665 +SourceRegion.volume = 0.455116 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.760093 +SourceRegion.volume = 2.920014 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.230573 +SourceRegion.volume = 0.768627 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.612327 +SourceRegion.volume = 2.396219 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.325899 +SourceRegion.volume = 2.306810 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.089551 +SourceRegion.volume = 0.219654 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.987517 +SourceRegion.volume = 0.771376 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.039846 +SourceRegion.volume = 0.955631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.357444 +SourceRegion.volume = 1.236343 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.418894 +SourceRegion.volume = 0.704473 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.163347 +SourceRegion.volume = 2.994426 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.171871 +SourceRegion.volume = 1.320727 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.721062 +SourceRegion.volume = 0.506349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.478032 +SourceRegion.volume = 0.204442 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.193925 +SourceRegion.volume = 0.718381 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.000425 +SourceRegion.volume = 0.992459 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.794253 +SourceRegion.volume = 0.239102 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.800987 +SourceRegion.volume = 0.674687 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.424754 +SourceRegion.volume = 0.967977 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.277723 +SourceRegion.volume = 1.035924 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.700405 +SourceRegion.volume = 2.570783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.035905 +SourceRegion.volume = 1.436582 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.548767 +SourceRegion.volume = 0.614099 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.552109 +SourceRegion.volume = 0.643229 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.336229 +SourceRegion.volume = 0.382959 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.302331 +SourceRegion.volume = 0.023042 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.457361 +SourceRegion.volume = 1.545241 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.185618 +SourceRegion.volume = 1.745030 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.202013 +SourceRegion.volume = 0.362952 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.952535 +SourceRegion.volume = 0.373613 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.670481 +SourceRegion.volume = 1.699879 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.586125 +SourceRegion.volume = 0.829505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.532237 +SourceRegion.volume = 2.978265 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.018551 +SourceRegion.volume = 2.805698 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.951785 +SourceRegion.volume = 1.212182 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.608322 +SourceRegion.volume = 1.539730 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.598823 +SourceRegion.volume = 0.541735 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.692733 +SourceRegion.volume = 1.052194 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.025570 +SourceRegion.volume = 1.271109 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.501712 +SourceRegion.volume = 1.502312 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.272307 +SourceRegion.volume = 1.361999 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.971697 +SourceRegion.volume = 1.834640 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.817659 +SourceRegion.volume = 1.624276 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.155356 +SourceRegion.volume = 1.206707 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.122999 +SourceRegion.volume = 1.601050 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.528109 +SourceRegion.volume = 0.061974 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.025597 +SourceRegion.volume = 0.605653 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.832892 +SourceRegion.volume = 1.251379 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.513011 +SourceRegion.volume = 0.395168 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.140701 +SourceRegion.volume = 0.428362 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.322205 +SourceRegion.volume = 0.404177 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.769396 +SourceRegion.volume = 2.084987 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.154636 +SourceRegion.volume = 0.498731 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.130645 +SourceRegion.volume = 1.185693 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.272264 +SourceRegion.volume = 0.643101 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.950998 +SourceRegion.volume = 1.079284 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.954050 +SourceRegion.volume = 0.933292 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.563337 +SourceRegion.volume = 0.640795 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.396963 +SourceRegion.volume = 0.330892 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.143964 +SourceRegion.volume = 0.643520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.863975 +SourceRegion.volume = 1.082604 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.280977 +SourceRegion.volume = 2.120519 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.938811 +SourceRegion.volume = 0.831631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.142797 +SourceRegion.volume = 0.254343 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.462741 +SourceRegion.volume = 0.591815 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.727226 +SourceRegion.volume = 0.581792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.586003 +SourceRegion.volume = 0.563117 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.201243 +SourceRegion.volume = 0.942759 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.602767 +SourceRegion.volume = 0.708284 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.579685 +SourceRegion.volume = 0.658557 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.268485 +SourceRegion.volume = 1.114688 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.150375 +SourceRegion.volume = 1.517954 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.824246 +SourceRegion.volume = 0.176554 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.799479 +SourceRegion.volume = 0.334879 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.675687 +SourceRegion.volume = 0.615139 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.435401 +SourceRegion.volume = 0.300159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.430763 +SourceRegion.volume = 0.006861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.755638 +SourceRegion.volume = 2.425579 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.296651 +SourceRegion.volume = 1.142019 +test1 +SourceRegion_add.volume = 0.774582 +SourceRegion.volume = 0.657738 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.301565 +SourceRegion.volume = 0.508651 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.246266 +SourceRegion.volume = 0.208322 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.871713 +SourceRegion.volume = 0.517091 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.334310 +SourceRegion.volume = 0.203194 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.793878 +SourceRegion.volume = 0.957986 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.418111 +SourceRegion.volume = 1.054129 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.869721 +SourceRegion.volume = 1.657903 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.842039 +SourceRegion.volume = 2.131956 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.795123 +SourceRegion.volume = 0.840446 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.232686 +SourceRegion.volume = 0.139968 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.579072 +SourceRegion.volume = 1.123446 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.497304 +SourceRegion.volume = 1.463281 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.890049 +SourceRegion.volume = 0.203654 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.943060 +SourceRegion.volume = 0.467945 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.303419 +SourceRegion.volume = 0.855331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.904793 +SourceRegion.volume = 0.451117 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.356910 +SourceRegion.volume = 1.484139 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.270365 +SourceRegion.volume = 1.388236 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.718372 +SourceRegion.volume = 1.139996 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.528161 +SourceRegion.volume = 0.742043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.471487 +SourceRegion.volume = 0.280295 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.621881 +SourceRegion.volume = 1.517738 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.515324 +SourceRegion.volume = 0.630056 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.577122 +SourceRegion.volume = 0.815345 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.771854 +SourceRegion.volume = 2.269591 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.985730 +SourceRegion.volume = 0.182723 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.801980 +SourceRegion.volume = 2.717052 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 1.540113 +SourceRegion.volume = 0.590013 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 3.707539 +SourceRegion.volume = 0.441571 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.764807 +SourceRegion.volume = 0.302604 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.584702 +SourceRegion.volume = 0.419472 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.041211 +SourceRegion.volume = 1.296509 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.979347 +SourceRegion.volume = 1.255584 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.049933 +SourceRegion.volume = 1.762022 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.636519 +SourceRegion.volume = 0.705723 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.295653 +SourceRegion.volume = 2.832941 +test1.1 +test1 +SourceRegion_add.volume = 0.846610 +SourceRegion.volume = 0.934376 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.133706 +SourceRegion.volume = 0.462403 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.907938 +SourceRegion.volume = 1.381744 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.304261 +SourceRegion.volume = 0.980493 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.853177 +SourceRegion.volume = 1.608472 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.169553 +SourceRegion.volume = 0.037350 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.651098 +SourceRegion.volume = 1.915505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.187288 +SourceRegion.volume = 1.638638 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.853829 +SourceRegion.volume = 0.634796 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.560084 +SourceRegion.volume = 0.968187 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.507839 +SourceRegion.volume = 0.813010 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.199195 +SourceRegion.volume = 0.817943 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.158116 +SourceRegion.volume = 0.743715 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.901383 +SourceRegion.volume = 0.870253 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.738191 +SourceRegion.volume = 1.910446 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.419020 +SourceRegion.volume = 2.044930 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.669641 +SourceRegion.volume = 1.060306 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.263474 +SourceRegion.volume = 2.047875 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.326828 +SourceRegion.volume = 0.015540 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.718534 +SourceRegion.volume = 1.284940 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.663513 +SourceRegion.volume = 1.170005 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.758546 +SourceRegion.volume = 1.401175 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.935904 +SourceRegion.volume = 0.476026 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.498157 +SourceRegion.volume = 0.711760 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.256083 +SourceRegion.volume = 0.357213 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.214994 +SourceRegion.volume = 3.417026 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.156566 +SourceRegion.volume = 0.568939 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.097313 +SourceRegion.volume = 0.500971 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.695119 +SourceRegion.volume = 1.796025 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.642008 +SourceRegion.volume = 0.427883 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.763186 +SourceRegion.volume = 1.184725 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.744599 +SourceRegion.volume = 3.591236 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.699738 +SourceRegion.volume = 0.273076 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 47 broadcasting 3995 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.283699 +SourceRegion.volume = 1.985216 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.822802 +SourceRegion.volume = 0.993144 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.191507 +SourceRegion.volume = 0.375771 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.572907 +SourceRegion.volume = 1.628073 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.812099 +SourceRegion.volume = 1.478143 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.078375 +SourceRegion.volume = 0.000582 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.133713 +SourceRegion.volume = 1.111514 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.870178 +SourceRegion.volume = 0.445595 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.985189 +SourceRegion.volume = 0.804315 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.442273 +SourceRegion.volume = 2.813349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.023118 +SourceRegion.volume = 2.200160 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.205084 +SourceRegion.volume = 0.332451 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.164816 +SourceRegion.volume = 0.424202 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.475159 +SourceRegion.volume = 0.265148 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.979041 +SourceRegion.volume = 1.092739 +test1.1 +test1 +SourceRegion_add.volume = 1.668412 +SourceRegion.volume = 0.572279 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.166810 +SourceRegion.volume = 3.508411 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.372960 +SourceRegion.volume = 0.265251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.016154 +SourceRegion.volume = 0.390904 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.764540 +SourceRegion.volume = 1.021560 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.281373 +SourceRegion.volume = 1.101052 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.143783 +SourceRegion.volume = 0.629201 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.375738 +SourceRegion.volume = 1.094462 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.671888 +SourceRegion.volume = 0.496285 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.453317 +SourceRegion.volume = 0.791750 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.707570 +SourceRegion.volume = 0.857165 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.919007 +SourceRegion.volume = 0.117628 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.347315 +SourceRegion.volume = 0.294642 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.978605 +SourceRegion.volume = 0.162708 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.564128 +SourceRegion.volume = 1.571005 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.292714 +SourceRegion.volume = 0.460777 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.064557 +SourceRegion.volume = 0.076987 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.561415 +SourceRegion.volume = 1.792267 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.216519 +SourceRegion.volume = 0.307587 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.070454 +SourceRegion.volume = 3.329292 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.019097 +SourceRegion.volume = 0.193112 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.230373 +SourceRegion.volume = 1.564354 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.143054 +SourceRegion.volume = 0.567402 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.514186 +SourceRegion.volume = 0.599554 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.444615 +SourceRegion.volume = 0.503549 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.869708 +SourceRegion.volume = 0.687185 +test1 +SourceRegion_add.volume = 0.311958 +SourceRegion.volume = 1.176556 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.297313 +SourceRegion.volume = 0.610734 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.272838 +SourceRegion.volume = 1.144807 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.652205 +SourceRegion.volume = 0.974340 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.612106 +test1 +SourceRegion_add.volume = 1.484850 +SourceRegion.volume = 1.958658 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.073831 +SourceRegion.volume = 2.892855 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.968563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.676188 +SourceRegion.volume = 1.617729 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.752869 +SourceRegion.volume = 0.764921 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.285817 +SourceRegion.volume = 0.338200 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.143714 +SourceRegion.volume = 1.350340 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.194625 +SourceRegion.volume = 1.366754 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.512831 +SourceRegion.volume = 0.283505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.001776 +SourceRegion.volume = 0.522212 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.835632 +SourceRegion.volume = 1.165558 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.803318 +SourceRegion.volume = 1.155058 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.402715 +SourceRegion.volume = 0.699944 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.268529 +SourceRegion.volume = 0.963229 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.117560 +SourceRegion.volume = 0.581945 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.000914 +SourceRegion.volume = 0.941174 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.868080 +SourceRegion.volume = 0.863880 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.719214 +SourceRegion.volume = 1.138818 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.461179 +SourceRegion.volume = 1.076261 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.999084 +SourceRegion.volume = 0.522456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.113075 +SourceRegion.volume = 0.373613 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.077714 +SourceRegion.volume = 1.012634 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.887550 +SourceRegion.volume = 0.795790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.029875 +SourceRegion.volume = 0.499507 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.092033 +SourceRegion.volume = 1.211687 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.106047 +SourceRegion.volume = 0.250514 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.049420 +SourceRegion.volume = 1.690149 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.220699 +SourceRegion.volume = 0.566618 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.422815 +SourceRegion.volume = 1.146366 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.236103 +SourceRegion.volume = 2.156878 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.672739 +SourceRegion.volume = 0.539764 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.099876 +SourceRegion.volume = 1.839948 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.165499 +SourceRegion.volume = 0.257776 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.995190 +SourceRegion.volume = 0.459582 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.032231 +SourceRegion.volume = 0.965831 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.392859 +SourceRegion.volume = 0.937606 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.003541 +SourceRegion.volume = 1.272546 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.193056 +SourceRegion.volume = 1.213563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.139309 +SourceRegion.volume = 1.065622 +test1 +SourceRegion_add.volume = 1.339681 +SourceRegion.volume = 2.402371 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.726712 +SourceRegion.volume = 0.604357 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.336212 +SourceRegion.volume = 1.214199 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.778386 +SourceRegion.volume = 0.968159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.070882 +SourceRegion.volume = 0.917139 +test1 +SourceRegion_add.volume = 0.512005 +SourceRegion.volume = 2.235729 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.220503 +SourceRegion.volume = 1.450479 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.432324 +SourceRegion.volume = 0.722833 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.025792 +SourceRegion.volume = 1.954219 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.151203 +SourceRegion.volume = 0.404143 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.485135 +SourceRegion.volume = 0.512701 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.691892 +SourceRegion.volume = 1.641582 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.192515 +SourceRegion.volume = 2.013424 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.689600 +SourceRegion.volume = 0.079454 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.671336 +SourceRegion.volume = 0.374497 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.230563 +SourceRegion.volume = 0.681853 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.281273 +SourceRegion.volume = 4.032988 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.650525 +SourceRegion.volume = 1.177055 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.286789 +SourceRegion.volume = 2.518628 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.161118 +SourceRegion.volume = 0.169142 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.420012 +SourceRegion.volume = 2.210650 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.228732 +SourceRegion.volume = 1.568797 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.148987 +SourceRegion.volume = 1.274040 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.913715 +SourceRegion.volume = 3.126065 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.229907 +SourceRegion.volume = 0.960153 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.892405 +SourceRegion.volume = 0.518464 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.172195 +SourceRegion.volume = 2.084180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.828638 +SourceRegion.volume = 1.046881 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.870867 +SourceRegion.volume = 0.363162 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.724940 +SourceRegion.volume = 0.216733 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.724354 +SourceRegion.volume = 0.381731 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.238873 +SourceRegion.volume = 1.740229 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.269963 +SourceRegion.volume = 0.583307 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.021643 +SourceRegion.volume = 1.088889 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.199912 +SourceRegion.volume = 1.079508 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.870314 +SourceRegion.volume = 1.629989 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.801995 +SourceRegion.volume = 0.114653 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.167656 +SourceRegion.volume = 1.460230 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.557247 +SourceRegion.volume = 0.088311 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.974680 +SourceRegion.volume = 0.403251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.161780 +SourceRegion.volume = 1.814268 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.427954 +SourceRegion.volume = 4.204683 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.711680 +SourceRegion.volume = 2.687683 +test1.1 +test1 +SourceRegion_add.volume = 0.672934 +SourceRegion.volume = 2.387131 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.995545 +SourceRegion.volume = 0.510018 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.887082 +SourceRegion.volume = 0.715169 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.529197 +SourceRegion.volume = 1.173527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.773397 +SourceRegion.volume = 0.121692 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.144280 +SourceRegion.volume = 0.740967 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.508005 +SourceRegion.volume = 2.499872 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.230574 +SourceRegion.volume = 0.604147 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.065430 +SourceRegion.volume = 0.713516 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.988266 +SourceRegion.volume = 0.134035 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.572756 +SourceRegion.volume = 0.969227 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.460870 +SourceRegion.volume = 1.160548 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.101788 +SourceRegion.volume = 0.484021 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.275658 +SourceRegion.volume = 0.788149 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.305585 +SourceRegion.volume = 2.424559 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.375375 +SourceRegion.volume = 0.658337 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.452553 +SourceRegion.volume = 1.047163 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.475404 +SourceRegion.volume = 0.143911 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.387509 +SourceRegion.volume = 1.014164 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.416628 +SourceRegion.volume = 2.206585 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.354874 +SourceRegion.volume = 1.188835 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.404600 +SourceRegion.volume = 1.350832 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.247055 +SourceRegion.volume = 0.758338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.979747 +SourceRegion.volume = 0.823205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.985586 +SourceRegion.volume = 0.308979 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.632768 +SourceRegion.volume = 0.053698 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.761740 +SourceRegion.volume = 1.535739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.921558 +SourceRegion.volume = 0.807772 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.265807 +SourceRegion.volume = 1.551291 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.384692 +SourceRegion.volume = 0.985608 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.680176 +SourceRegion.volume = 1.334265 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.611925 +SourceRegion.volume = 0.680456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.307468 +SourceRegion.volume = 0.995668 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.824424 +SourceRegion.volume = 0.213875 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.764119 +SourceRegion.volume = 1.934982 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.187652 +SourceRegion.volume = 2.023577 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.652886 +SourceRegion.volume = 1.350476 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.476749 +SourceRegion.volume = 0.932227 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.139765 +SourceRegion.volume = 1.214303 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.134034 +SourceRegion.volume = 0.719984 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.445156 +SourceRegion.volume = 0.711824 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.937975 +SourceRegion.volume = 0.453580 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.981016 +SourceRegion.volume = 1.045293 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.774488 +SourceRegion.volume = 1.016853 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.133564 +SourceRegion.volume = 0.866514 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.140366 +SourceRegion.volume = 1.157520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.293169 +SourceRegion.volume = 1.004351 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.524207 +SourceRegion.volume = 0.671291 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.279470 +SourceRegion.volume = 1.074984 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.200304 +SourceRegion.volume = 0.751394 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.919496 +SourceRegion.volume = 1.898859 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.141733 +SourceRegion.volume = 1.247902 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.335556 +SourceRegion.volume = 0.214196 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.471584 +SourceRegion.volume = 0.650544 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 1.099429 +SourceRegion.volume = 1.027610 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +SourceRegion_add.volume = 1.611309 +SourceRegion.volume = 1.948296 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.677533 +SourceRegion.volume = 0.652256 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 2.391137 +SourceRegion.volume = 0.471277 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.153049 +SourceRegion.volume = 2.666594 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.396184 +SourceRegion.volume = 1.315062 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.232313 +SourceRegion.volume = 0.780253 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.741848 +SourceRegion.volume = 0.934404 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.663247 +SourceRegion.volume = 0.786589 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.935809 +SourceRegion.volume = 2.977105 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.707079 +SourceRegion.volume = 1.077125 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.462694 +SourceRegion.volume = 0.001239 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.096184 +SourceRegion.volume = 1.723631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.348809 +SourceRegion.volume = 0.215581 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.414068 +SourceRegion.volume = 4.363677 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.359392 +SourceRegion.volume = 0.804311 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.506048 +SourceRegion.volume = 0.516861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.569282 +SourceRegion.volume = 0.462807 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.001500 +SourceRegion.volume = 1.154627 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.126521 +SourceRegion.volume = 0.206561 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.126107 +SourceRegion.volume = 1.063453 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.321626 +SourceRegion.volume = 2.233103 +test1.1 +test1 +SourceRegion_add.volume = 1.432779 +SourceRegion.volume = 1.464325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.817201 +SourceRegion.volume = 0.614516 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.000158 +SourceRegion.volume = 0.196783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.649938 +SourceRegion.volume = 0.392827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 48 broadcasting 3548 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.388651 +SourceRegion.volume = 0.412492 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.255915 +SourceRegion.volume = 2.582809 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.099472 +SourceRegion.volume = 0.871572 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.365334 +SourceRegion.volume = 0.870050 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.500739 +SourceRegion.volume = 0.556686 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.252419 +SourceRegion.volume = 0.968527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.745720 +SourceRegion.volume = 0.143462 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.275194 +SourceRegion.volume = 0.946266 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.454024 +SourceRegion.volume = 0.529205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.247583 +SourceRegion.volume = 0.995132 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.329643 +SourceRegion.volume = 0.507668 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.143336 +SourceRegion.volume = 0.933955 +test1.1 +test1 +SourceRegion_add.volume = 0.803017 +SourceRegion.volume = 0.820071 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.490839 +SourceRegion.volume = 0.182641 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.193882 +SourceRegion.volume = 0.993967 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.384047 +SourceRegion.volume = 0.286041 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.901469 +SourceRegion.volume = 0.927440 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.746732 +SourceRegion.volume = 1.215502 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.588669 +SourceRegion.volume = 0.957775 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.197605 +SourceRegion.volume = 0.297015 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.223459 +SourceRegion.volume = 0.554374 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 4.050738 +SourceRegion.volume = 1.215479 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.603841 +SourceRegion.volume = 0.977738 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.525746 +SourceRegion.volume = 0.133824 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.649349 +SourceRegion.volume = 0.754206 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.492144 +SourceRegion.volume = 1.368903 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.015942 +SourceRegion.volume = 0.197245 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.484921 +SourceRegion.volume = 0.392890 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.494908 +SourceRegion.volume = 0.384280 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.168366 +SourceRegion.volume = 0.033063 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.274010 +SourceRegion.volume = 0.582488 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.009575 +SourceRegion.volume = 0.879217 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.447400 +SourceRegion.volume = 2.429519 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.796302 +SourceRegion.volume = 5.520657 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.576227 +SourceRegion.volume = 0.131488 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.933552 +SourceRegion.volume = 2.825134 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.054444 +SourceRegion.volume = 1.446143 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.706601 +SourceRegion.volume = 1.378524 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.254927 +SourceRegion.volume = 0.842294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.211493 +SourceRegion.volume = 0.037790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.180459 +SourceRegion.volume = 0.413575 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.775453 +SourceRegion.volume = 0.342162 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.897200 +SourceRegion.volume = 0.332059 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.271940 +SourceRegion.volume = 0.659192 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.200747 +SourceRegion.volume = 1.277416 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.563529 +SourceRegion.volume = 0.674098 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.000608 +SourceRegion.volume = 2.450621 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.868922 +SourceRegion.volume = 0.703322 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.771814 +SourceRegion.volume = 0.584501 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.334091 +SourceRegion.volume = 1.093811 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.851139 +SourceRegion.volume = 0.923150 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.185143 +SourceRegion.volume = 2.406479 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.364076 +SourceRegion.volume = 1.068834 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.334281 +SourceRegion.volume = 1.187788 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.233474 +SourceRegion.volume = 0.030182 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.529240 +SourceRegion.volume = 0.624711 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.688266 +SourceRegion.volume = 0.577434 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.295577 +SourceRegion.volume = 1.224085 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.613347 +SourceRegion.volume = 0.886624 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.000622 +SourceRegion.volume = 2.329332 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.948011 +SourceRegion.volume = 2.832199 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.711523 +SourceRegion.volume = 0.582302 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.399241 +SourceRegion.volume = 0.321283 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.370250 +SourceRegion.volume = 0.202713 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.104480 +SourceRegion.volume = 0.985712 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.297735 +SourceRegion.volume = 0.101012 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.941829 +SourceRegion.volume = 0.145332 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.717675 +SourceRegion.volume = 0.688377 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.739161 +SourceRegion.volume = 1.317862 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.445610 +SourceRegion.volume = 2.339788 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.070622 +SourceRegion.volume = 0.752372 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.034546 +SourceRegion.volume = 0.639737 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.356419 +SourceRegion.volume = 0.289931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.031359 +SourceRegion.volume = 0.037804 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.590045 +SourceRegion.volume = 3.165190 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.259936 +SourceRegion.volume = 0.302159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.854814 +SourceRegion.volume = 1.312922 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.442515 +SourceRegion.volume = 2.755887 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.904367 +test1 +SourceRegion_add.volume = 0.602019 +SourceRegion.volume = 0.518486 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.456318 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.775236 +SourceRegion.volume = 0.857527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.183495 +SourceRegion.volume = 1.219870 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.799814 +SourceRegion.volume = 0.651233 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.248469 +SourceRegion.volume = 0.355107 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.065904 +SourceRegion.volume = 0.420483 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.946881 +SourceRegion.volume = 0.476564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.946772 +SourceRegion.volume = 0.130473 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.564287 +SourceRegion.volume = 2.342577 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.625542 +SourceRegion.volume = 0.654116 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.181442 +SourceRegion.volume = 0.573373 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.602120 +SourceRegion.volume = 0.853817 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.233404 +SourceRegion.volume = 0.322634 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.134711 +SourceRegion.volume = 1.622341 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.293177 +SourceRegion.volume = 0.417777 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.990923 +SourceRegion.volume = 0.470349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.761544 +SourceRegion.volume = 0.286101 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.217727 +SourceRegion.volume = 0.467816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.047839 +SourceRegion.volume = 1.213010 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.777483 +SourceRegion.volume = 0.190108 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.197554 +SourceRegion.volume = 0.331190 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.182734 +SourceRegion.volume = 0.565824 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.615977 +SourceRegion.volume = 1.244347 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.030444 +SourceRegion.volume = 0.907705 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.240341 +SourceRegion.volume = 1.102766 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.470050 +SourceRegion.volume = 0.031097 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.325095 +SourceRegion.volume = 0.420063 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.194001 +SourceRegion.volume = 1.143941 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.602703 +SourceRegion.volume = 1.227573 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.455699 +SourceRegion.volume = 0.802594 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.175097 +SourceRegion.volume = 0.733732 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.435542 +SourceRegion.volume = 0.395915 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.623370 +SourceRegion.volume = 1.007525 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.253630 +SourceRegion.volume = 0.100848 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.897068 +SourceRegion.volume = 0.363517 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.243701 +SourceRegion.volume = 1.018308 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.569780 +SourceRegion.volume = 0.993913 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.309574 +SourceRegion.volume = 1.133789 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.369398 +SourceRegion.volume = 0.075112 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.507816 +SourceRegion.volume = 1.363847 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.288936 +SourceRegion.volume = 2.500379 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.806782 +SourceRegion.volume = 0.851603 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.422695 +SourceRegion.volume = 0.251576 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.330798 +SourceRegion.volume = 0.158345 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.251069 +SourceRegion.volume = 1.793237 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.346697 +SourceRegion.volume = 0.125153 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.115563 +SourceRegion.volume = 0.618523 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.764529 +SourceRegion.volume = 0.626872 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.125930 +SourceRegion.volume = 1.778492 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.757611 +SourceRegion.volume = 3.025286 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.204356 +SourceRegion.volume = 1.317002 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.392735 +SourceRegion.volume = 0.224840 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.470476 +SourceRegion.volume = 0.341728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.090727 +SourceRegion.volume = 1.521255 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 49 broadcasting 2159 source regions to other ranks. +test1 +SourceRegion_add.volume = 2.441457 +SourceRegion.volume = 0.666645 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.384268 +SourceRegion.volume = 1.696245 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.162263 +SourceRegion.volume = 1.116675 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.341120 +SourceRegion.volume = 0.821893 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.422492 +SourceRegion.volume = 1.589726 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.122481 +SourceRegion.volume = 0.304754 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.215440 +SourceRegion.volume = 1.677999 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.416421 +SourceRegion.volume = 1.628849 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.594415 +SourceRegion.volume = 3.002254 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.306781 +SourceRegion.volume = 0.169924 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.616422 +SourceRegion.volume = 1.480075 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.435392 +SourceRegion.volume = 0.237434 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.867281 +SourceRegion.volume = 1.168765 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.708617 +SourceRegion.volume = 1.636383 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.582300 +SourceRegion.volume = 2.281529 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.909094 +SourceRegion.volume = 0.648681 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.819388 +SourceRegion.volume = 1.499763 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.286371 +SourceRegion.volume = 1.002307 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.230642 +SourceRegion.volume = 0.477314 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.842199 +SourceRegion.volume = 1.366560 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.333950 +SourceRegion.volume = 2.145085 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.338689 +SourceRegion.volume = 2.117316 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.606818 +SourceRegion.volume = 0.837458 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.333980 +SourceRegion.volume = 0.519526 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.653760 +SourceRegion.volume = 0.290154 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.030918 +SourceRegion.volume = 2.342150 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.092001 +SourceRegion.volume = 2.327100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.067962 +SourceRegion.volume = 1.070017 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.231712 +SourceRegion.volume = 2.303498 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.214282 +SourceRegion.volume = 2.287281 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.350130 +SourceRegion.volume = 1.764305 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.094459 +SourceRegion.volume = 2.371433 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.314655 +SourceRegion.volume = 1.231799 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.811037 +SourceRegion.volume = 0.859631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.255389 +SourceRegion.volume = 1.088179 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 1.999962 +SourceRegion.volume = 0.898880 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.424628 +SourceRegion.volume = 3.079776 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.864559 +SourceRegion.volume = 1.308453 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.802173 +SourceRegion.volume = 1.098927 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.330942 +SourceRegion.volume = 2.061914 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.825843 +SourceRegion.volume = 1.811409 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.288699 +SourceRegion.volume = 1.237633 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.561793 +SourceRegion.volume = 1.006388 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.093316 +SourceRegion.volume = 2.051789 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.203123 +SourceRegion.volume = 1.307709 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.050642 +SourceRegion.volume = 1.740580 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.249215 +SourceRegion.volume = 1.145171 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.661969 +SourceRegion.volume = 2.951671 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.196195 +SourceRegion.volume = 0.656963 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.517890 +SourceRegion.volume = 0.712229 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.050639 +SourceRegion.volume = 0.728826 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.121673 +SourceRegion.volume = 4.996567 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.408695 +SourceRegion.volume = 2.502990 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.739753 +SourceRegion.volume = 0.008159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.935527 +SourceRegion.volume = 2.709400 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.888611 +SourceRegion.volume = 1.217956 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.600775 +SourceRegion.volume = 0.622863 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.444006 +SourceRegion.volume = 1.009961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.179402 +SourceRegion.volume = 1.696326 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.189811 +SourceRegion.volume = 1.031749 +test1.1 +test1 +SourceRegion_add.volume = 0.678509 +SourceRegion.volume = 1.490554 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.472688 +SourceRegion.volume = 2.011495 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.501917 +SourceRegion.volume = 0.864086 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.031655 +SourceRegion.volume = 1.418676 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.490473 +SourceRegion.volume = 1.382940 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.205306 +SourceRegion.volume = 1.473754 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.795932 +SourceRegion.volume = 0.659004 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.245418 +SourceRegion.volume = 1.765921 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.011125 +SourceRegion.volume = 0.376464 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.030697 +SourceRegion.volume = 3.007787 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.882715 +SourceRegion.volume = 0.073201 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.957763 +SourceRegion.volume = 0.749102 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.069183 +SourceRegion.volume = 2.694325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.541995 +SourceRegion.volume = 0.108482 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.799673 +SourceRegion.volume = 0.533101 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.272331 +SourceRegion.volume = 2.102300 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.392721 +SourceRegion.volume = 2.305748 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.001999 +SourceRegion.volume = 0.443272 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.024315 +SourceRegion.volume = 2.488521 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.540132 +SourceRegion.volume = 1.357342 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.027871 +SourceRegion.volume = 0.686102 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.997825 +SourceRegion.volume = 2.218014 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.816444 +SourceRegion.volume = 1.134301 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.031065 +SourceRegion.volume = 1.048339 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.569912 +SourceRegion.volume = 0.062874 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.352503 +SourceRegion.volume = 0.803825 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.950240 +SourceRegion.volume = 2.123024 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.611354 +SourceRegion.volume = 1.814697 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.980777 +SourceRegion.volume = 2.539059 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.185425 +SourceRegion.volume = 2.204108 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.966638 +SourceRegion.volume = 0.594662 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.592531 +SourceRegion.volume = 0.746295 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.313370 +SourceRegion.volume = 0.227315 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.506633 +SourceRegion.volume = 1.323755 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.215275 +SourceRegion.volume = 3.065052 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.923205 +SourceRegion.volume = 2.313110 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.936233 +SourceRegion.volume = 0.116567 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.021573 +SourceRegion.volume = 2.009293 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.796127 +SourceRegion.volume = 0.671937 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 2.018202 +SourceRegion.volume = 0.644705 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.126111 +SourceRegion.volume = 1.935156 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.998373 +SourceRegion.volume = 1.461326 +test1.1 +test1 +SourceRegion_add.volume = 1.876142 +SourceRegion.volume = 1.323661 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.065639 +SourceRegion.volume = 2.309667 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.603720 +SourceRegion.volume = 1.249800 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.751952 +SourceRegion.volume = 0.867308 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.674909 +SourceRegion.volume = 0.781633 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.048684 +SourceRegion.volume = 0.414092 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.868154 +SourceRegion.volume = 1.779796 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.148487 +SourceRegion.volume = 1.806245 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.660264 +SourceRegion.volume = 1.784925 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.853800 +SourceRegion.volume = 2.544080 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.063490 +SourceRegion.volume = 0.336362 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 1.610639 +SourceRegion.volume = 1.728200 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.511497 +SourceRegion.volume = 2.059229 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.784407 +SourceRegion.volume = 0.717153 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.584846 +SourceRegion.volume = 0.994440 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.223221 +SourceRegion.volume = 0.724384 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +Rank 50 broadcasting 2512 source regions to other ranks. +test1 +SourceRegion_add.volume = 85.904902 +SourceRegion.volume = 62.873285 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 66.375071 +SourceRegion.volume = 79.467907 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.180535 +SourceRegion.volume = 0.526011 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.355627 +SourceRegion.volume = 1.227122 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.916619 +SourceRegion.volume = 0.069063 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.130747 +SourceRegion.volume = 0.994931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.952445 +SourceRegion.volume = 0.058151 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.465957 +SourceRegion.volume = 1.124846 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 107.960501 +SourceRegion.volume = 37.330115 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 47.069480 +SourceRegion.volume = 122.734970 +test1 +SourceRegion_add.volume = 0.873943 +SourceRegion.volume = 1.134713 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.824101 +SourceRegion.volume = 0.765803 +test1 +SourceRegion_add.volume = 0.500203 +SourceRegion.volume = 1.256634 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.992767 +SourceRegion.volume = 1.834040 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.636081 +SourceRegion.volume = 0.467916 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.397020 +SourceRegion.volume = 0.245807 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.483171 +SourceRegion.volume = 0.076304 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.393795 +SourceRegion.volume = 0.885417 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.281069 +SourceRegion.volume = 1.605519 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.373164 +SourceRegion.volume = 1.137071 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.340423 +SourceRegion.volume = 0.134678 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.624762 +SourceRegion.volume = 0.638735 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.019704 +SourceRegion.volume = 1.294406 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.487203 +SourceRegion.volume = 0.335724 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 74.537531 +SourceRegion.volume = 77.108475 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.793804 +SourceRegion.volume = 0.253339 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.602249 +SourceRegion.volume = 1.257753 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.181092 +SourceRegion.volume = 0.841130 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.353355 +SourceRegion.volume = 0.298527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.771703 +SourceRegion.volume = 0.234344 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.526435 +SourceRegion.volume = 1.251551 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.202306 +SourceRegion.volume = 1.350724 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.319440 +SourceRegion.volume = 1.718986 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.546121 +SourceRegion.volume = 0.434885 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.201547 +SourceRegion.volume = 1.039994 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.267917 +SourceRegion.volume = 0.706315 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.295540 +SourceRegion.volume = 0.942396 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.067426 +SourceRegion.volume = 0.786466 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.802809 +SourceRegion.volume = 0.380869 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.534054 +SourceRegion.volume = 0.236551 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.101740 +SourceRegion.volume = 0.799125 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.399756 +SourceRegion.volume = 1.138708 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.013653 +SourceRegion.volume = 1.234549 +test1 +SourceRegion_add.volume = 0.741913 +SourceRegion.volume = 0.607564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.332483 +SourceRegion.volume = 1.408294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.973323 +SourceRegion.volume = 1.425247 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.727259 +test1 +SourceRegion_add.volume = 99.736385 +SourceRegion.volume = 61.359749 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.245710 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.184663 +SourceRegion.volume = 1.066776 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.116662 +SourceRegion.volume = 0.488042 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.098821 +SourceRegion.volume = 1.202414 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.265217 +SourceRegion.volume = 1.154616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.218020 +SourceRegion.volume = 0.371189 +test1 +SourceRegion_add.volume = 56.686929 +SourceRegion.volume = 66.903457 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.027360 +SourceRegion.volume = 0.340928 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.610207 +SourceRegion.volume = 2.134118 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.049160 +SourceRegion.volume = 0.966973 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 116.328997 +SourceRegion.volume = 64.090043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.059861 +SourceRegion.volume = 1.428269 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 54.287417 +SourceRegion.volume = 99.200496 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.124172 +SourceRegion.volume = 0.052511 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.726020 +SourceRegion.volume = 2.533130 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 41.238039 +SourceRegion.volume = 117.880393 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.802832 +SourceRegion.volume = 0.889736 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.394033 +SourceRegion.volume = 0.507139 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.202949 +SourceRegion.volume = 0.076737 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.927530 +SourceRegion.volume = 0.243589 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.168180 +SourceRegion.volume = 0.459924 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.568145 +SourceRegion.volume = 1.541328 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.538541 +test1 +SourceRegion_add.volume = 0.424833 +SourceRegion.volume = 2.223058 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.792003 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.371759 +SourceRegion.volume = 1.341191 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.241752 +SourceRegion.volume = 0.045917 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.052075 +SourceRegion.volume = 0.439128 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.843880 +SourceRegion.volume = 0.662280 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.280608 +SourceRegion.volume = 1.023343 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.401132 +SourceRegion.volume = 0.314303 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.056007 +SourceRegion.volume = 0.717699 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.645628 +SourceRegion.volume = 0.634948 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.727426 +SourceRegion.volume = 0.270338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.977009 +SourceRegion.volume = 0.217466 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.811784 +test1 +SourceRegion_add.volume = 1.498598 +SourceRegion.volume = 0.471325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.829086 +SourceRegion.volume = 0.807436 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.190783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.849733 +SourceRegion.volume = 0.711131 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.525148 +SourceRegion.volume = 0.977484 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.748572 +SourceRegion.volume = 0.867996 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 91.901099 +SourceRegion.volume = 54.082297 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.631812 +SourceRegion.volume = 0.527282 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.505707 +SourceRegion.volume = 0.591180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.293850 +SourceRegion.volume = 0.465175 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.238398 +SourceRegion.volume = 0.738094 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.817718 +SourceRegion.volume = 0.521654 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.468262 +SourceRegion.volume = 1.197919 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.828698 +SourceRegion.volume = 0.038984 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.285447 +SourceRegion.volume = 0.272394 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.926089 +SourceRegion.volume = 0.693398 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.728837 +SourceRegion.volume = 0.211551 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.710614 +SourceRegion.volume = 1.184610 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.284179 +SourceRegion.volume = 0.040113 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.809329 +SourceRegion.volume = 0.226230 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.148116 +SourceRegion.volume = 1.410839 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.327197 +SourceRegion.volume = 1.214040 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.258170 +SourceRegion.volume = 1.520370 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.681523 +SourceRegion.volume = 0.760151 +test1 +SourceRegion_add.volume = 58.921425 +SourceRegion.volume = 97.889594 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.916706 +SourceRegion.volume = 1.034655 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.256420 +SourceRegion.volume = 0.206174 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.010885 +SourceRegion.volume = 0.690977 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.886201 +SourceRegion.volume = 1.345233 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.337198 +SourceRegion.volume = 0.752881 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.788889 +SourceRegion.volume = 0.953600 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.471619 +SourceRegion.volume = 0.275310 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.460978 +SourceRegion.volume = 1.487893 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.692190 +SourceRegion.volume = 0.715482 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.879000 +SourceRegion.volume = 0.350617 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.697884 +SourceRegion.volume = 0.873969 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.071493 +SourceRegion.volume = 0.911061 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.166641 +SourceRegion.volume = 0.933491 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.146432 +SourceRegion.volume = 0.656603 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 51 broadcasting 2233 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.266953 +SourceRegion.volume = 1.229776 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.275344 +SourceRegion.volume = 1.614271 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.551316 +SourceRegion.volume = 2.456697 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.403782 +SourceRegion.volume = 1.154140 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.700802 +SourceRegion.volume = 1.049325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.898904 +SourceRegion.volume = 0.188986 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.440084 +SourceRegion.volume = 0.566225 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.294076 +SourceRegion.volume = 1.442901 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.139798 +SourceRegion.volume = 1.805060 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.203771 +SourceRegion.volume = 0.056529 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.272240 +SourceRegion.volume = 2.765563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.713386 +SourceRegion.volume = 0.801338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.173757 +SourceRegion.volume = 3.400591 +test1 +SourceRegion_add.volume = 1.106426 +SourceRegion.volume = 3.613130 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.456163 +SourceRegion.volume = 3.785550 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.765728 +SourceRegion.volume = 1.448683 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.986951 +SourceRegion.volume = 2.081991 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.545351 +SourceRegion.volume = 1.828056 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.540488 +SourceRegion.volume = 0.641404 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.839517 +SourceRegion.volume = 1.814814 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.667047 +SourceRegion.volume = 2.430471 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.785529 +SourceRegion.volume = 1.104106 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.832050 +SourceRegion.volume = 1.606045 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.766027 +SourceRegion.volume = 0.587124 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.205348 +SourceRegion.volume = 0.586567 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.171559 +SourceRegion.volume = 0.452441 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.352063 +SourceRegion.volume = 0.686491 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.759735 +SourceRegion.volume = 0.033270 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.402819 +SourceRegion.volume = 3.210932 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.389680 +SourceRegion.volume = 0.910896 +test1.1 +test1.2 +test1.3 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.842089 +SourceRegion.volume = 2.196054 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.422988 +SourceRegion.volume = 1.176949 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.119645 +SourceRegion.volume = 0.114617 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.081462 +SourceRegion.volume = 1.886051 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.532022 +SourceRegion.volume = 3.353596 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.449790 +SourceRegion.volume = 0.694996 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.914294 +SourceRegion.volume = 3.681065 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.632799 +SourceRegion.volume = 1.206861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.382309 +SourceRegion.volume = 1.004416 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.795833 +SourceRegion.volume = 3.102953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.298134 +SourceRegion.volume = 0.325713 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.079681 +SourceRegion.volume = 1.282358 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.887264 +SourceRegion.volume = 2.051848 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.718841 +SourceRegion.volume = 1.738242 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.895028 +SourceRegion.volume = 3.221668 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.451503 +SourceRegion.volume = 1.559907 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.918357 +SourceRegion.volume = 1.141080 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.093049 +SourceRegion.volume = 0.628718 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.283539 +SourceRegion.volume = 1.686311 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.544591 +SourceRegion.volume = 4.374028 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.402021 +SourceRegion.volume = 2.051139 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.137979 +SourceRegion.volume = 0.316341 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.685199 +SourceRegion.volume = 0.987986 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.649591 +SourceRegion.volume = 1.815614 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.929766 +SourceRegion.volume = 1.835158 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.776417 +SourceRegion.volume = 0.021909 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.767452 +SourceRegion.volume = 0.590075 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.785869 +SourceRegion.volume = 0.655966 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 2.346809 +SourceRegion.volume = 1.320651 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.873721 +SourceRegion.volume = 1.517456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.360459 +SourceRegion.volume = 3.595352 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.008654 +SourceRegion.volume = 0.375321 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.539043 +SourceRegion.volume = 1.507760 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.885678 +SourceRegion.volume = 2.516880 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.179823 +SourceRegion.volume = 1.135906 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.805535 +SourceRegion.volume = 0.955806 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.000844 +SourceRegion.volume = 2.954665 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.947117 +SourceRegion.volume = 2.306073 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.651952 +SourceRegion.volume = 0.642555 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.085901 +SourceRegion.volume = 2.079815 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.164155 +SourceRegion.volume = 1.338626 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.107371 +SourceRegion.volume = 1.023512 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.586306 +SourceRegion.volume = 2.077810 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.809836 +SourceRegion.volume = 1.443615 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.600383 +SourceRegion.volume = 1.506860 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.060167 +SourceRegion.volume = 0.330472 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.906868 +test1 +SourceRegion_add.volume = 2.358344 +SourceRegion.volume = 0.258457 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.494469 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.455880 +SourceRegion.volume = 1.622816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.109121 +SourceRegion.volume = 1.196643 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.717083 +SourceRegion.volume = 2.442711 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.225917 +SourceRegion.volume = 0.589164 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.964110 +SourceRegion.volume = 0.509774 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.357870 +SourceRegion.volume = 0.349828 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.685185 +SourceRegion.volume = 1.873637 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.138516 +SourceRegion.volume = 1.436458 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.705918 +SourceRegion.volume = 0.895295 +test1.1 +test1 +SourceRegion_add.volume = 3.105491 +SourceRegion.volume = 1.680819 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.993655 +SourceRegion.volume = 0.634060 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.231479 +SourceRegion.volume = 0.328520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.277282 +SourceRegion.volume = 2.148204 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.541500 +SourceRegion.volume = 0.999783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.061614 +SourceRegion.volume = 2.315086 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.722628 +SourceRegion.volume = 5.784186 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.096073 +SourceRegion.volume = 2.026420 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.175671 +SourceRegion.volume = 1.247979 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.849102 +SourceRegion.volume = 0.592620 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.401871 +SourceRegion.volume = 0.811904 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 2.292135 +test1 +SourceRegion_add.volume = 1.705794 +SourceRegion.volume = 2.028694 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.970331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.375656 +SourceRegion.volume = 1.293121 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.639596 +SourceRegion.volume = 2.359077 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.095239 +SourceRegion.volume = 1.021832 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.316793 +SourceRegion.volume = 1.403994 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.156213 +SourceRegion.volume = 1.487924 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.929405 +SourceRegion.volume = 0.731873 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.802524 +SourceRegion.volume = 1.102816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.794983 +SourceRegion.volume = 0.450315 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.781106 +SourceRegion.volume = 1.700781 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.170306 +SourceRegion.volume = 0.258847 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.952648 +SourceRegion.volume = 1.071976 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.199349 +SourceRegion.volume = 2.280669 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.539126 +SourceRegion.volume = 1.126783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.218531 +SourceRegion.volume = 1.516047 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.650570 +SourceRegion.volume = 1.139485 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.550882 +SourceRegion.volume = 1.437847 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.953747 +SourceRegion.volume = 1.796637 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.726336 +SourceRegion.volume = 0.534378 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.938264 +SourceRegion.volume = 1.039344 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.160269 +SourceRegion.volume = 1.087600 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.659446 +SourceRegion.volume = 1.400674 +test1 +SourceRegion_add.volume = 1.462524 +SourceRegion.volume = 1.015768 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.528451 +SourceRegion.volume = 0.481151 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.194912 +SourceRegion.volume = 2.168859 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 1.847978 +SourceRegion.volume = 0.427221 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.791567 +SourceRegion.volume = 2.441537 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.714109 +SourceRegion.volume = 1.272894 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 1.406766 +SourceRegion.volume = 0.254181 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.524950 +SourceRegion.volume = 1.944676 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 2.039018 +SourceRegion.volume = 1.305900 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.418567 +SourceRegion.volume = 1.165130 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.681182 +SourceRegion.volume = 0.490749 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.923260 +SourceRegion.volume = 1.075118 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.752903 +SourceRegion.volume = 1.789791 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.710621 +SourceRegion.volume = 1.307775 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.090685 +SourceRegion.volume = 1.194451 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.847512 +SourceRegion.volume = 0.666668 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.180259 +SourceRegion.volume = 1.464223 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.903064 +SourceRegion.volume = 2.483714 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.063680 +SourceRegion.volume = 2.655704 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.836124 +SourceRegion.volume = 0.862566 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.724551 +SourceRegion.volume = 1.516758 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.590296 +SourceRegion.volume = 0.572399 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.277343 +SourceRegion.volume = 1.114468 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.218145 +SourceRegion.volume = 0.788585 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.138339 +SourceRegion.volume = 2.968056 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.395376 +SourceRegion.volume = 0.940613 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.589732 +SourceRegion.volume = 2.155433 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 2.004294 +SourceRegion.volume = 0.423025 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.602317 +SourceRegion.volume = 0.656326 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.262338 +SourceRegion.volume = 1.494764 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.899181 +SourceRegion.volume = 2.225344 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.059458 +SourceRegion.volume = 0.939287 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.127427 +SourceRegion.volume = 2.080492 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.522803 +SourceRegion.volume = 1.855041 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.352121 +SourceRegion.volume = 2.409922 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.547112 +SourceRegion.volume = 1.519386 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.092726 +SourceRegion.volume = 1.829014 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.686071 +SourceRegion.volume = 0.876663 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.091095 +SourceRegion.volume = 1.671210 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.192737 +SourceRegion.volume = 1.635321 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.625037 +SourceRegion.volume = 1.878431 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.998279 +SourceRegion.volume = 3.444398 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.092762 +SourceRegion.volume = 1.404863 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.161489 +SourceRegion.volume = 1.439901 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.940272 +SourceRegion.volume = 0.142479 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.412391 +SourceRegion.volume = 0.479332 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.453987 +SourceRegion.volume = 1.624762 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.183262 +SourceRegion.volume = 0.980111 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.379052 +SourceRegion.volume = 0.823921 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.646536 +SourceRegion.volume = 1.806656 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.920759 +SourceRegion.volume = 1.710145 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.646898 +SourceRegion.volume = 2.082746 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.902892 +SourceRegion.volume = 1.701020 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.315662 +SourceRegion.volume = 1.006680 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.431581 +SourceRegion.volume = 1.701800 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.988581 +SourceRegion.volume = 1.089993 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.828847 +SourceRegion.volume = 1.719183 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.468773 +SourceRegion.volume = 0.528593 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.870985 +SourceRegion.volume = 2.133517 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.018846 +SourceRegion.volume = 4.647912 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.828784 +SourceRegion.volume = 2.532036 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.920446 +SourceRegion.volume = 1.605259 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.937655 +SourceRegion.volume = 1.200211 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.930977 +SourceRegion.volume = 0.493887 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.472093 +SourceRegion.volume = 2.305043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.499776 +SourceRegion.volume = 0.229780 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.864507 +SourceRegion.volume = 1.423984 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.193290 +SourceRegion.volume = 1.814586 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.229874 +SourceRegion.volume = 1.218990 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.362739 +SourceRegion.volume = 2.153374 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 1.320123 +SourceRegion.volume = 0.674128 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.619407 +SourceRegion.volume = 0.809526 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.174801 +SourceRegion.volume = 2.164813 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.192937 +SourceRegion.volume = 0.361747 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 1.081029 +SourceRegion.volume = 0.232974 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.982469 +SourceRegion.volume = 0.500338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.165455 +SourceRegion.volume = 1.940584 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.847586 +SourceRegion.volume = 0.925395 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.714214 +SourceRegion.volume = 1.456415 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.528058 +SourceRegion.volume = 3.533501 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.179902 +SourceRegion.volume = 0.162472 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.120280 +SourceRegion.volume = 1.902105 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.488732 +SourceRegion.volume = 0.973078 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.393894 +SourceRegion.volume = 0.962272 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.407940 +SourceRegion.volume = 2.502016 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.654780 +SourceRegion.volume = 2.133030 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 1.614171 +SourceRegion.volume = 1.699518 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.656077 +SourceRegion.volume = 2.423704 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.080042 +SourceRegion.volume = 0.906624 +test1.1 +test1 +SourceRegion_add.volume = 1.585557 +SourceRegion.volume = 0.975317 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.659226 +SourceRegion.volume = 0.928842 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.467170 +SourceRegion.volume = 1.692464 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.205683 +SourceRegion.volume = 0.900311 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.025514 +SourceRegion.volume = 0.852624 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.381310 +SourceRegion.volume = 1.235567 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.835334 +SourceRegion.volume = 2.505109 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.143493 +SourceRegion.volume = 1.643883 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.099858 +SourceRegion.volume = 3.532076 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.646263 +SourceRegion.volume = 0.286916 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.582475 +SourceRegion.volume = 1.358117 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.938844 +SourceRegion.volume = 0.747552 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 52 broadcasting 2216 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.072444 +SourceRegion.volume = 2.174710 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.536435 +SourceRegion.volume = 1.968571 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.857125 +SourceRegion.volume = 2.237659 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.467758 +SourceRegion.volume = 0.930472 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.202209 +SourceRegion.volume = 1.024767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.606280 +SourceRegion.volume = 1.211288 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.169983 +SourceRegion.volume = 3.013705 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.183072 +SourceRegion.volume = 1.450022 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.843883 +SourceRegion.volume = 0.441255 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.055151 +SourceRegion.volume = 1.939199 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.070569 +SourceRegion.volume = 1.763593 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.757826 +SourceRegion.volume = 1.645898 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.605073 +SourceRegion.volume = 1.006992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.859171 +SourceRegion.volume = 1.301144 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.901063 +SourceRegion.volume = 3.514144 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.137824 +SourceRegion.volume = 0.006574 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.925437 +SourceRegion.volume = 0.686235 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.454015 +SourceRegion.volume = 2.466450 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.842026 +SourceRegion.volume = 1.550007 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.105684 +SourceRegion.volume = 1.798284 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.999380 +SourceRegion.volume = 2.087345 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.465316 +SourceRegion.volume = 1.037965 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.386557 +SourceRegion.volume = 2.131196 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.441779 +SourceRegion.volume = 0.610133 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.128659 +SourceRegion.volume = 0.381563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.801864 +SourceRegion.volume = 2.720041 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.095739 +SourceRegion.volume = 2.189638 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.038204 +SourceRegion.volume = 0.007780 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.509740 +SourceRegion.volume = 1.404638 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.079408 +SourceRegion.volume = 2.734616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.114040 +SourceRegion.volume = 1.786950 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.113689 +SourceRegion.volume = 2.042498 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.447447 +SourceRegion.volume = 1.991350 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.523831 +SourceRegion.volume = 0.487306 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.917082 +SourceRegion.volume = 1.283295 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.708580 +SourceRegion.volume = 0.102291 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.684698 +SourceRegion.volume = 2.828356 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.076993 +SourceRegion.volume = 1.522623 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.886779 +SourceRegion.volume = 0.402655 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.817498 +SourceRegion.volume = 1.619459 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.958179 +SourceRegion.volume = 1.903942 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.267074 +SourceRegion.volume = 1.394961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.342665 +SourceRegion.volume = 2.540437 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.050802 +SourceRegion.volume = 1.704197 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.706663 +SourceRegion.volume = 1.904930 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.774205 +SourceRegion.volume = 2.016470 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.814302 +SourceRegion.volume = 1.121764 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.336304 +SourceRegion.volume = 0.024387 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.584700 +SourceRegion.volume = 1.118131 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.726701 +SourceRegion.volume = 1.607349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.204681 +SourceRegion.volume = 0.709877 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.776920 +SourceRegion.volume = 1.682182 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.325596 +SourceRegion.volume = 0.756903 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.514044 +SourceRegion.volume = 0.231897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.746552 +SourceRegion.volume = 1.365931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.451459 +SourceRegion.volume = 1.929866 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.460858 +SourceRegion.volume = 1.497296 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.925853 +SourceRegion.volume = 1.795681 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.686193 +SourceRegion.volume = 0.751585 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.687854 +SourceRegion.volume = 0.407644 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.826985 +SourceRegion.volume = 0.833268 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.218135 +SourceRegion.volume = 1.088644 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.823208 +SourceRegion.volume = 1.644193 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.995483 +SourceRegion.volume = 0.780419 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.077764 +SourceRegion.volume = 1.618113 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.908208 +SourceRegion.volume = 0.889438 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.562390 +SourceRegion.volume = 1.671072 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.856409 +SourceRegion.volume = 0.064182 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.621401 +SourceRegion.volume = 0.975377 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.449817 +SourceRegion.volume = 1.542690 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.422480 +SourceRegion.volume = 1.208012 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.272218 +SourceRegion.volume = 0.369048 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.260061 +SourceRegion.volume = 2.074376 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.661823 +SourceRegion.volume = 1.190598 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.855541 +SourceRegion.volume = 2.209629 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.947173 +SourceRegion.volume = 1.327911 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.998760 +SourceRegion.volume = 2.661378 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.935965 +SourceRegion.volume = 0.672759 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.089296 +SourceRegion.volume = 2.304236 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.814203 +SourceRegion.volume = 0.376582 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.078588 +SourceRegion.volume = 1.708439 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.197081 +SourceRegion.volume = 4.603869 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.472477 +SourceRegion.volume = 2.446589 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.078498 +SourceRegion.volume = 3.175469 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.623560 +SourceRegion.volume = 1.846470 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.955448 +SourceRegion.volume = 1.428492 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.686360 +SourceRegion.volume = 4.218575 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.435857 +SourceRegion.volume = 1.126265 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.474376 +SourceRegion.volume = 1.885582 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.133294 +SourceRegion.volume = 3.801552 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.937711 +SourceRegion.volume = 2.174542 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.678091 +SourceRegion.volume = 0.010187 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.354343 +SourceRegion.volume = 2.372546 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.315215 +SourceRegion.volume = 1.171282 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.612294 +SourceRegion.volume = 3.092047 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.764220 +SourceRegion.volume = 1.874054 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.470836 +SourceRegion.volume = 0.060654 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.021511 +SourceRegion.volume = 0.855885 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.015715 +SourceRegion.volume = 1.674439 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.499095 +SourceRegion.volume = 1.875355 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.731445 +SourceRegion.volume = 1.264876 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.992222 +SourceRegion.volume = 2.256082 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.124817 +SourceRegion.volume = 1.765253 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.214926 +SourceRegion.volume = 1.434554 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.371595 +SourceRegion.volume = 1.048367 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.186509 +SourceRegion.volume = 2.194917 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.582380 +SourceRegion.volume = 1.862637 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.623625 +SourceRegion.volume = 1.071328 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.460222 +SourceRegion.volume = 1.161127 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.766388 +SourceRegion.volume = 1.278258 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.752085 +SourceRegion.volume = 2.180434 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.947229 +SourceRegion.volume = 1.126059 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.008800 +SourceRegion.volume = 1.127232 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.061251 +SourceRegion.volume = 3.670524 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.020176 +SourceRegion.volume = 0.675973 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.957492 +SourceRegion.volume = 0.763834 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.945333 +SourceRegion.volume = 1.943309 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.808578 +SourceRegion.volume = 0.501447 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.887303 +SourceRegion.volume = 0.525409 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.584490 +SourceRegion.volume = 4.580254 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.452674 +SourceRegion.volume = 0.866211 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.685609 +SourceRegion.volume = 0.260397 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.292510 +SourceRegion.volume = 3.896158 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.124352 +SourceRegion.volume = 1.943451 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.985848 +SourceRegion.volume = 1.247393 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.042556 +SourceRegion.volume = 2.129304 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.524218 +SourceRegion.volume = 1.928994 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.089620 +SourceRegion.volume = 1.128378 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.655789 +SourceRegion.volume = 0.847566 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.020378 +SourceRegion.volume = 2.332546 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.952635 +SourceRegion.volume = 1.384458 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.896028 +SourceRegion.volume = 1.292436 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.812889 +SourceRegion.volume = 1.352740 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.432192 +SourceRegion.volume = 2.958190 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.308240 +SourceRegion.volume = 2.113373 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.158253 +SourceRegion.volume = 1.289143 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.079007 +SourceRegion.volume = 2.998930 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.507755 +SourceRegion.volume = 1.931890 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.114871 +SourceRegion.volume = 2.233656 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.681739 +SourceRegion.volume = 1.956910 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.784974 +SourceRegion.volume = 2.018293 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.060129 +SourceRegion.volume = 1.009093 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.531660 +SourceRegion.volume = 2.233828 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.509308 +SourceRegion.volume = 0.791804 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.770195 +SourceRegion.volume = 2.745043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.754248 +SourceRegion.volume = 1.177683 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.780277 +SourceRegion.volume = 2.270603 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.419014 +SourceRegion.volume = 2.008770 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.600994 +SourceRegion.volume = 2.409226 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.753328 +SourceRegion.volume = 1.564851 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.918394 +SourceRegion.volume = 1.708654 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.884669 +SourceRegion.volume = 1.874185 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.664275 +SourceRegion.volume = 1.119818 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.094869 +SourceRegion.volume = 1.076797 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.077592 +SourceRegion.volume = 0.520494 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.485517 +SourceRegion.volume = 0.961708 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.323339 +SourceRegion.volume = 0.102828 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.537476 +SourceRegion.volume = 1.255823 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.544083 +SourceRegion.volume = 0.694316 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.538906 +SourceRegion.volume = 1.649804 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.872425 +SourceRegion.volume = 0.898334 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.665769 +SourceRegion.volume = 1.560977 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.490522 +SourceRegion.volume = 0.994815 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.290111 +SourceRegion.volume = 0.070946 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.311353 +SourceRegion.volume = 1.790069 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.987175 +SourceRegion.volume = 0.780953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.934385 +SourceRegion.volume = 2.087207 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.138465 +SourceRegion.volume = 1.298056 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.639966 +SourceRegion.volume = 1.892776 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.366839 +SourceRegion.volume = 0.298646 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.470112 +SourceRegion.volume = 1.617591 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.267725 +SourceRegion.volume = 1.907045 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.836862 +SourceRegion.volume = 0.832837 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.530981 +SourceRegion.volume = 1.179916 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.835474 +SourceRegion.volume = 1.013894 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 53 broadcasting 2006 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.707527 +SourceRegion.volume = 0.814782 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.017128 +SourceRegion.volume = 1.251717 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.564647 +SourceRegion.volume = 1.584420 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.507290 +SourceRegion.volume = 1.738831 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.868238 +SourceRegion.volume = 0.311935 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.781030 +SourceRegion.volume = 1.722102 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.909570 +SourceRegion.volume = 1.727444 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.685359 +SourceRegion.volume = 1.385414 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.992435 +SourceRegion.volume = 1.132736 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.835117 +SourceRegion.volume = 0.279088 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.909848 +SourceRegion.volume = 0.680996 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.450852 +SourceRegion.volume = 2.709706 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.453682 +SourceRegion.volume = 0.463910 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.958282 +SourceRegion.volume = 1.234424 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.395793 +SourceRegion.volume = 2.712239 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.303097 +SourceRegion.volume = 0.905081 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.885745 +SourceRegion.volume = 0.108739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.701293 +SourceRegion.volume = 1.357595 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.740570 +SourceRegion.volume = 1.241483 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.847810 +SourceRegion.volume = 0.605198 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.390974 +SourceRegion.volume = 1.172189 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.929896 +SourceRegion.volume = 2.074487 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.671441 +SourceRegion.volume = 1.968834 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.093186 +SourceRegion.volume = 2.607282 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.666864 +SourceRegion.volume = 1.316122 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.472430 +SourceRegion.volume = 1.407098 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.506480 +SourceRegion.volume = 0.547594 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.820489 +SourceRegion.volume = 0.730309 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.100089 +SourceRegion.volume = 1.654606 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.437689 +SourceRegion.volume = 2.391614 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.351647 +SourceRegion.volume = 1.276911 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.735904 +SourceRegion.volume = 2.194455 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.261622 +SourceRegion.volume = 1.552861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.813814 +SourceRegion.volume = 0.208057 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.374107 +SourceRegion.volume = 0.700363 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.993941 +SourceRegion.volume = 0.906238 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.278795 +SourceRegion.volume = 0.485055 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.925058 +SourceRegion.volume = 0.972490 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.613590 +SourceRegion.volume = 1.855812 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.419031 +SourceRegion.volume = 1.081554 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.317898 +SourceRegion.volume = 1.609720 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.001740 +SourceRegion.volume = 1.166004 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.471972 +SourceRegion.volume = 0.600357 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.785457 +SourceRegion.volume = 2.020498 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.459384 +SourceRegion.volume = 0.409438 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.143759 +SourceRegion.volume = 1.888932 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.918909 +SourceRegion.volume = 0.475028 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.105320 +SourceRegion.volume = 1.730756 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.546441 +SourceRegion.volume = 2.984995 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.561185 +SourceRegion.volume = 1.499677 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.414292 +SourceRegion.volume = 0.282786 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.603984 +SourceRegion.volume = 1.234525 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.804255 +SourceRegion.volume = 1.397559 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.875564 +SourceRegion.volume = 2.159066 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.524405 +SourceRegion.volume = 2.238713 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.545836 +SourceRegion.volume = 0.653297 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.733443 +SourceRegion.volume = 2.959418 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.516439 +SourceRegion.volume = 2.256510 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.953782 +SourceRegion.volume = 1.122684 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.859049 +SourceRegion.volume = 1.754375 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.368204 +SourceRegion.volume = 1.906425 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.635615 +SourceRegion.volume = 0.975634 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.402040 +SourceRegion.volume = 2.053099 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.998517 +SourceRegion.volume = 0.323687 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.941370 +SourceRegion.volume = 0.510147 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.482114 +SourceRegion.volume = 1.136567 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.434310 +SourceRegion.volume = 0.825580 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.735715 +SourceRegion.volume = 1.373299 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.912330 +SourceRegion.volume = 1.440753 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.737637 +SourceRegion.volume = 0.875515 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.933184 +SourceRegion.volume = 1.715077 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.877482 +SourceRegion.volume = 0.951282 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.553333 +SourceRegion.volume = 1.906638 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.929821 +SourceRegion.volume = 1.231462 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.938990 +SourceRegion.volume = 2.168601 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.447366 +SourceRegion.volume = 1.856571 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.802128 +SourceRegion.volume = 1.325319 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.574409 +SourceRegion.volume = 0.753098 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.145890 +SourceRegion.volume = 2.619609 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.924835 +SourceRegion.volume = 1.227386 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.603725 +SourceRegion.volume = 2.997404 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.849454 +SourceRegion.volume = 1.934257 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.669393 +SourceRegion.volume = 0.900323 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.883579 +SourceRegion.volume = 1.168437 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.654177 +SourceRegion.volume = 2.279502 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.573659 +SourceRegion.volume = 1.261526 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.020984 +SourceRegion.volume = 2.332910 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.771723 +SourceRegion.volume = 1.174877 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.756580 +SourceRegion.volume = 1.939552 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.295446 +SourceRegion.volume = 2.780635 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.955484 +SourceRegion.volume = 0.789048 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.189502 +SourceRegion.volume = 0.230314 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.055121 +SourceRegion.volume = 1.313464 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.524695 +SourceRegion.volume = 2.429722 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.369005 +SourceRegion.volume = 1.310470 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.350785 +SourceRegion.volume = 1.707434 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.133379 +SourceRegion.volume = 1.866718 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.374547 +SourceRegion.volume = 1.585762 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.641040 +SourceRegion.volume = 0.462319 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.443943 +SourceRegion.volume = 1.948764 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.292038 +SourceRegion.volume = 0.755611 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.292336 +SourceRegion.volume = 1.262363 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.309798 +SourceRegion.volume = 0.832010 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.871918 +SourceRegion.volume = 1.496113 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.066277 +SourceRegion.volume = 0.218513 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.387582 +SourceRegion.volume = 2.902359 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.397405 +SourceRegion.volume = 1.789187 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.263968 +SourceRegion.volume = 0.884306 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.453627 +SourceRegion.volume = 1.985302 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.410045 +SourceRegion.volume = 2.025677 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.249541 +SourceRegion.volume = 1.230386 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.889270 +SourceRegion.volume = 1.120435 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.148573 +SourceRegion.volume = 1.018616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.452717 +SourceRegion.volume = 1.865640 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.038253 +SourceRegion.volume = 1.885835 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.907631 +SourceRegion.volume = 0.838338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.396462 +SourceRegion.volume = 0.975366 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.825075 +SourceRegion.volume = 1.985477 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.275793 +SourceRegion.volume = 0.698769 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.408430 +SourceRegion.volume = 0.601480 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.492881 +SourceRegion.volume = 1.602399 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.584989 +SourceRegion.volume = 2.644020 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.418172 +SourceRegion.volume = 1.518206 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.233881 +SourceRegion.volume = 0.903338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.883145 +SourceRegion.volume = 1.903843 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.753523 +SourceRegion.volume = 1.607954 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.509662 +SourceRegion.volume = 1.079953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.211006 +SourceRegion.volume = 1.701547 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.226907 +SourceRegion.volume = 0.679783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.067652 +SourceRegion.volume = 1.290975 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.025187 +SourceRegion.volume = 2.488126 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.178252 +SourceRegion.volume = 1.301258 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.857990 +SourceRegion.volume = 0.477003 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.227501 +SourceRegion.volume = 2.365198 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.896557 +SourceRegion.volume = 0.104311 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.553109 +SourceRegion.volume = 1.374953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.527671 +SourceRegion.volume = 1.917063 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.083287 +SourceRegion.volume = 0.536474 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.753600 +SourceRegion.volume = 1.183410 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.663201 +SourceRegion.volume = 0.101636 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.824616 +SourceRegion.volume = 2.707509 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.124517 +SourceRegion.volume = 0.765165 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.852267 +SourceRegion.volume = 1.505468 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.375306 +SourceRegion.volume = 1.230445 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.298586 +SourceRegion.volume = 0.778797 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.515219 +SourceRegion.volume = 1.521425 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.575696 +SourceRegion.volume = 0.494369 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.874956 +SourceRegion.volume = 1.306324 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.143243 +SourceRegion.volume = 1.662325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.329277 +SourceRegion.volume = 0.135457 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.843990 +SourceRegion.volume = 3.855629 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.904044 +SourceRegion.volume = 1.148427 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.137476 +SourceRegion.volume = 1.165747 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.349490 +SourceRegion.volume = 2.479156 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.282839 +SourceRegion.volume = 1.436998 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.151980 +SourceRegion.volume = 1.330235 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.564716 +SourceRegion.volume = 0.932225 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.406586 +SourceRegion.volume = 0.890231 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.781803 +SourceRegion.volume = 0.571173 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.808471 +SourceRegion.volume = 0.078822 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.971274 +SourceRegion.volume = 1.154975 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.853121 +SourceRegion.volume = 0.921669 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.104086 +SourceRegion.volume = 1.064746 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.216214 +SourceRegion.volume = 1.476689 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.014893 +SourceRegion.volume = 4.638989 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 54 broadcasting 2162 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.623685 +SourceRegion.volume = 1.138175 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.004606 +SourceRegion.volume = 2.466590 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.619247 +SourceRegion.volume = 1.209579 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.967876 +SourceRegion.volume = 1.643884 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.329840 +SourceRegion.volume = 2.285821 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.364073 +SourceRegion.volume = 1.231504 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.861592 +SourceRegion.volume = 1.228200 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.508953 +SourceRegion.volume = 1.724264 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.070937 +SourceRegion.volume = 1.932858 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.450249 +SourceRegion.volume = 0.709116 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.631683 +SourceRegion.volume = 0.998078 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.331767 +SourceRegion.volume = 0.785022 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.947216 +SourceRegion.volume = 1.020573 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.316651 +SourceRegion.volume = 0.822318 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.205898 +SourceRegion.volume = 0.966153 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.969771 +SourceRegion.volume = 1.937258 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.513068 +SourceRegion.volume = 1.806507 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.286499 +SourceRegion.volume = 0.911237 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.852348 +SourceRegion.volume = 0.974362 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.262096 +SourceRegion.volume = 1.716346 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.533951 +SourceRegion.volume = 0.643975 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.650724 +SourceRegion.volume = 0.334928 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.904051 +SourceRegion.volume = 2.058547 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.217088 +SourceRegion.volume = 1.332210 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.186685 +SourceRegion.volume = 1.317598 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.398059 +SourceRegion.volume = 1.730631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.451104 +SourceRegion.volume = 1.163203 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.005497 +SourceRegion.volume = 1.295912 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.356472 +SourceRegion.volume = 1.420597 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.245980 +SourceRegion.volume = 1.775817 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.267471 +SourceRegion.volume = 0.752509 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.582743 +SourceRegion.volume = 0.719775 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.386200 +SourceRegion.volume = 1.878879 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.570751 +SourceRegion.volume = 0.659050 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.481944 +SourceRegion.volume = 1.176548 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.555433 +SourceRegion.volume = 1.252043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.402149 +SourceRegion.volume = 0.343325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.962910 +SourceRegion.volume = 0.337531 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.178560 +SourceRegion.volume = 0.783166 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.942327 +SourceRegion.volume = 2.565757 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.888557 +SourceRegion.volume = 0.982239 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.647531 +SourceRegion.volume = 1.406481 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.830324 +SourceRegion.volume = 1.241777 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.780587 +SourceRegion.volume = 0.879719 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.571562 +SourceRegion.volume = 0.425419 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.456350 +SourceRegion.volume = 3.628616 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.040549 +SourceRegion.volume = 1.388544 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 55 broadcasting 2185 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.751698 +SourceRegion.volume = 2.280958 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.167825 +SourceRegion.volume = 0.733054 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.380326 +SourceRegion.volume = 0.744717 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.822964 +SourceRegion.volume = 1.202407 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.406022 +SourceRegion.volume = 1.318339 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.792738 +SourceRegion.volume = 0.293671 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.863139 +SourceRegion.volume = 1.881659 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.722087 +SourceRegion.volume = 1.333374 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.250699 +SourceRegion.volume = 1.307154 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.554051 +SourceRegion.volume = 2.208583 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.572807 +SourceRegion.volume = 2.615710 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.811051 +SourceRegion.volume = 1.367979 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.942668 +SourceRegion.volume = 1.069713 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 8.368812 +SourceRegion.volume = 0.521122 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.949052 +SourceRegion.volume = 2.925314 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.358941 +SourceRegion.volume = 0.180872 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.461897 +SourceRegion.volume = 1.112850 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.826836 +SourceRegion.volume = 0.026147 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.927880 +SourceRegion.volume = 0.655816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.357991 +SourceRegion.volume = 1.994221 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.507399 +SourceRegion.volume = 0.788997 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.343054 +SourceRegion.volume = 2.955689 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.889023 +SourceRegion.volume = 2.630358 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.155724 +SourceRegion.volume = 0.624757 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.034395 +SourceRegion.volume = 1.646815 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.882696 +SourceRegion.volume = 0.415200 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.892527 +SourceRegion.volume = 1.258475 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.327079 +SourceRegion.volume = 0.653527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.361955 +SourceRegion.volume = 2.284537 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.518960 +SourceRegion.volume = 2.229620 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.715607 +SourceRegion.volume = 1.680673 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.404890 +SourceRegion.volume = 1.822382 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.185934 +SourceRegion.volume = 0.919943 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.229368 +SourceRegion.volume = 1.214361 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.116951 +SourceRegion.volume = 2.899166 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.183971 +SourceRegion.volume = 1.190262 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.758704 +SourceRegion.volume = 0.534663 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.201933 +SourceRegion.volume = 0.845304 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.807822 +SourceRegion.volume = 2.026795 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.055579 +SourceRegion.volume = 1.780755 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.776761 +SourceRegion.volume = 2.300958 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.242134 +SourceRegion.volume = 2.567530 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 5.609560 +SourceRegion.volume = 1.100829 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.225421 +SourceRegion.volume = 3.944542 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.823954 +SourceRegion.volume = 1.152015 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.578022 +SourceRegion.volume = 1.600110 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.075345 +SourceRegion.volume = 1.292098 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.086693 +SourceRegion.volume = 1.384669 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.081468 +SourceRegion.volume = 0.477974 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.402587 +SourceRegion.volume = 0.617758 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.167878 +SourceRegion.volume = 0.777748 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.418309 +SourceRegion.volume = 1.902696 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.524918 +SourceRegion.volume = 1.509238 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.419000 +SourceRegion.volume = 1.389067 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.567409 +SourceRegion.volume = 1.859742 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.452220 +SourceRegion.volume = 1.376178 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.316984 +SourceRegion.volume = 0.544074 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.515389 +SourceRegion.volume = 1.960600 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.966581 +SourceRegion.volume = 0.003806 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.737028 +SourceRegion.volume = 0.585978 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.900977 +SourceRegion.volume = 0.922521 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.536393 +SourceRegion.volume = 1.037443 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.596227 +SourceRegion.volume = 2.530245 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.144027 +SourceRegion.volume = 0.601991 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.870032 +SourceRegion.volume = 1.366996 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.298862 +SourceRegion.volume = 2.125191 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.763809 +SourceRegion.volume = 1.692653 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.401877 +SourceRegion.volume = 1.680593 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.252810 +SourceRegion.volume = 1.171267 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.776105 +SourceRegion.volume = 1.721063 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.991757 +SourceRegion.volume = 0.365885 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.180755 +SourceRegion.volume = 1.408718 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.512710 +SourceRegion.volume = 1.114534 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.011310 +SourceRegion.volume = 3.185786 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.505859 +SourceRegion.volume = 0.867331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.339305 +SourceRegion.volume = 2.907424 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.562879 +SourceRegion.volume = 4.909015 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.708914 +SourceRegion.volume = 1.427506 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.200749 +SourceRegion.volume = 1.748726 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.461458 +SourceRegion.volume = 0.460591 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.593565 +SourceRegion.volume = 3.609149 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.168488 +SourceRegion.volume = 1.272547 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.356921 +SourceRegion.volume = 1.475823 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.035784 +SourceRegion.volume = 1.963395 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.974955 +SourceRegion.volume = 1.261841 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.837070 +SourceRegion.volume = 1.241437 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.486346 +SourceRegion.volume = 2.156331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.272808 +SourceRegion.volume = 0.990741 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.482210 +SourceRegion.volume = 2.568919 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.715387 +SourceRegion.volume = 0.842519 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.882864 +SourceRegion.volume = 3.373802 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.882195 +SourceRegion.volume = 0.087500 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.460090 +SourceRegion.volume = 0.851931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.492070 +SourceRegion.volume = 2.757222 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.821475 +SourceRegion.volume = 2.116463 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.195215 +SourceRegion.volume = 2.263690 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.028085 +SourceRegion.volume = 1.114601 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.025963 +SourceRegion.volume = 2.374356 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.350750 +SourceRegion.volume = 1.300074 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.132983 +SourceRegion.volume = 1.335793 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.337252 +SourceRegion.volume = 2.567484 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.160116 +SourceRegion.volume = 1.735193 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.493333 +SourceRegion.volume = 1.767848 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.466849 +SourceRegion.volume = 1.326435 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.390706 +SourceRegion.volume = 1.747928 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.093921 +SourceRegion.volume = 2.035936 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.094907 +SourceRegion.volume = 2.471145 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.456538 +SourceRegion.volume = 1.412806 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.875985 +SourceRegion.volume = 2.198508 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.568356 +SourceRegion.volume = 2.617241 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.653223 +SourceRegion.volume = 2.324146 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.937444 +SourceRegion.volume = 2.605052 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.338506 +SourceRegion.volume = 2.024133 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.812024 +SourceRegion.volume = 1.714337 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.516582 +SourceRegion.volume = 1.488585 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.681362 +SourceRegion.volume = 2.185456 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.407109 +SourceRegion.volume = 2.570588 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.011163 +SourceRegion.volume = 2.244443 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.072411 +SourceRegion.volume = 0.245076 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.875563 +SourceRegion.volume = 0.670623 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.696514 +SourceRegion.volume = 0.485345 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.939614 +SourceRegion.volume = 1.576371 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.167941 +SourceRegion.volume = 1.975663 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.308299 +SourceRegion.volume = 2.550192 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.494160 +SourceRegion.volume = 2.590705 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.314648 +SourceRegion.volume = 0.640739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.364716 +SourceRegion.volume = 1.730560 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.541743 +SourceRegion.volume = 2.264600 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.391997 +SourceRegion.volume = 1.005830 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.594642 +SourceRegion.volume = 3.337236 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.536685 +SourceRegion.volume = 0.917333 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.956351 +SourceRegion.volume = 0.834731 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.717141 +SourceRegion.volume = 3.332989 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.664623 +SourceRegion.volume = 1.913761 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.681905 +SourceRegion.volume = 2.266367 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.647028 +SourceRegion.volume = 0.656859 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.387706 +SourceRegion.volume = 0.633246 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.388123 +SourceRegion.volume = 1.231599 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.497474 +SourceRegion.volume = 2.074300 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.805614 +SourceRegion.volume = 1.693780 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.539177 +SourceRegion.volume = 1.138625 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.848665 +SourceRegion.volume = 1.275001 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.573006 +SourceRegion.volume = 1.072621 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.873286 +SourceRegion.volume = 1.652453 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.610935 +SourceRegion.volume = 0.482011 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.657448 +SourceRegion.volume = 1.027282 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.831847 +SourceRegion.volume = 0.421422 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.386864 +SourceRegion.volume = 0.307033 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.181316 +SourceRegion.volume = 0.902966 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 56 broadcasting 3743 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.764832 +SourceRegion.volume = 0.343235 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.446451 +SourceRegion.volume = 0.450975 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.486762 +SourceRegion.volume = 1.095442 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.393455 +SourceRegion.volume = 0.699719 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.571193 +SourceRegion.volume = 0.250112 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.105369 +SourceRegion.volume = 1.054067 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.665931 +SourceRegion.volume = 0.415641 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.437813 +SourceRegion.volume = 0.748761 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.786391 +SourceRegion.volume = 0.696075 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.529523 +SourceRegion.volume = 1.370003 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.002121 +SourceRegion.volume = 1.608440 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.293698 +SourceRegion.volume = 0.055960 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.919677 +SourceRegion.volume = 0.816188 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.393326 +SourceRegion.volume = 0.291652 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.219229 +SourceRegion.volume = 0.774294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.836885 +SourceRegion.volume = 0.256916 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.519502 +SourceRegion.volume = 1.017554 +test1.1 +test1 +SourceRegion_add.volume = 1.363317 +SourceRegion.volume = 0.505318 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.167094 +SourceRegion.volume = 0.493522 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.854359 +SourceRegion.volume = 0.630252 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.523643 +SourceRegion.volume = 0.192512 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.189041 +SourceRegion.volume = 0.293738 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.592894 +SourceRegion.volume = 0.547753 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.569189 +SourceRegion.volume = 0.610778 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.681939 +SourceRegion.volume = 0.809157 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.385310 +SourceRegion.volume = 1.234478 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.956346 +SourceRegion.volume = 1.083757 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.402119 +SourceRegion.volume = 1.141837 +test1 +SourceRegion_add.volume = 1.038333 +SourceRegion.volume = 0.149349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.731231 +SourceRegion.volume = 0.584315 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.110782 +SourceRegion.volume = 1.334749 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.894141 +SourceRegion.volume = 0.638721 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.041175 +SourceRegion.volume = 1.866494 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.169134 +SourceRegion.volume = 0.142198 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.432313 +SourceRegion.volume = 1.493327 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.629011 +SourceRegion.volume = 0.783290 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.429454 +SourceRegion.volume = 0.907659 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.308435 +SourceRegion.volume = 0.864545 +test1.1 +test1 +SourceRegion_add.volume = 0.521182 +SourceRegion.volume = 0.433596 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.550806 +SourceRegion.volume = 0.848180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.051748 +SourceRegion.volume = 0.059301 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.766909 +SourceRegion.volume = 0.873171 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.658141 +SourceRegion.volume = 0.492307 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.520448 +SourceRegion.volume = 1.252811 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.703789 +SourceRegion.volume = 0.245670 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.525695 +SourceRegion.volume = 0.388106 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.304038 +SourceRegion.volume = 0.277454 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.517422 +SourceRegion.volume = 0.297501 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.064203 +SourceRegion.volume = 0.029767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.482052 +SourceRegion.volume = 1.437736 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 89.480745 +SourceRegion.volume = 57.071008 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.121456 +SourceRegion.volume = 0.720535 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.556438 +SourceRegion.volume = 0.331058 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.435834 +SourceRegion.volume = 2.042739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 61.332912 +SourceRegion.volume = 88.539899 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.808097 +SourceRegion.volume = 0.365011 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.140157 +SourceRegion.volume = 0.520830 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.758046 +SourceRegion.volume = 0.154005 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.136498 +SourceRegion.volume = 0.678196 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 14.572132 +SourceRegion.volume = 100.099642 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.601605 +SourceRegion.volume = 1.650328 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.246995 +SourceRegion.volume = 0.983169 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 74.882450 +SourceRegion.volume = 59.257176 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.210926 +SourceRegion.volume = 0.150942 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.548983 +SourceRegion.volume = 0.763236 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 1.960047 +SourceRegion.volume = 0.090996 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.203603 +SourceRegion.volume = 0.673140 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 1.161213 +SourceRegion.volume = 0.424961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.308236 +SourceRegion.volume = 1.082908 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.602555 +SourceRegion.volume = 0.571855 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.498532 +SourceRegion.volume = 0.551929 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 107.937744 +SourceRegion.volume = 15.543452 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.457486 +SourceRegion.volume = 0.927679 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.977482 +SourceRegion.volume = 0.819100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.875556 +SourceRegion.volume = 0.165689 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.533085 +SourceRegion.volume = 0.255695 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.357970 +SourceRegion.volume = 0.570176 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.584596 +SourceRegion.volume = 0.301014 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.656805 +SourceRegion.volume = 1.210899 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.518597 +SourceRegion.volume = 0.386571 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.095103 +SourceRegion.volume = 1.994722 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.050898 +SourceRegion.volume = 0.066992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.488427 +SourceRegion.volume = 0.430272 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.057401 +SourceRegion.volume = 0.595024 +test1.1 +test1 +SourceRegion_add.volume = 44.739589 +SourceRegion.volume = 92.558461 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.803953 +SourceRegion.volume = 1.659617 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.340906 +SourceRegion.volume = 0.940826 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.027032 +SourceRegion.volume = 1.803512 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.671042 +SourceRegion.volume = 0.568419 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.452988 +SourceRegion.volume = 0.865568 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.517995 +SourceRegion.volume = 0.986428 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.513338 +SourceRegion.volume = 1.302018 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.156229 +SourceRegion.volume = 1.439950 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.477780 +SourceRegion.volume = 0.497067 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.714438 +SourceRegion.volume = 1.321942 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.300318 +SourceRegion.volume = 0.003611 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.309094 +SourceRegion.volume = 0.016261 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.942731 +SourceRegion.volume = 0.453827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.066109 +SourceRegion.volume = 1.461613 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.433524 +SourceRegion.volume = 0.528135 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.699187 +SourceRegion.volume = 0.717663 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.685049 +SourceRegion.volume = 1.284823 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.447250 +SourceRegion.volume = 1.506182 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.634084 +SourceRegion.volume = 0.717881 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.688883 +SourceRegion.volume = 0.259960 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.621307 +SourceRegion.volume = 0.992487 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.515353 +SourceRegion.volume = 0.316054 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.724625 +SourceRegion.volume = 1.330349 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.606042 +SourceRegion.volume = 1.970090 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.016683 +SourceRegion.volume = 0.504710 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.544096 +SourceRegion.volume = 0.427299 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.205696 +SourceRegion.volume = 0.226769 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.758983 +SourceRegion.volume = 0.706455 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.986306 +SourceRegion.volume = 0.334497 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 57 broadcasting 732 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.103778 +SourceRegion.volume = 0.696367 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.755271 +SourceRegion.volume = 0.337136 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.009922 +SourceRegion.volume = 1.305728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.388217 +SourceRegion.volume = 1.222363 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.293254 +SourceRegion.volume = 0.817589 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.802906 +SourceRegion.volume = 0.527264 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.690847 +SourceRegion.volume = 0.235387 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.203596 +SourceRegion.volume = 0.218640 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.158880 +SourceRegion.volume = 0.706925 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.632892 +SourceRegion.volume = 0.210760 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.223858 +SourceRegion.volume = 0.478995 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 37.158806 +SourceRegion.volume = 104.811841 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.525059 +SourceRegion.volume = 0.322691 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.631841 +SourceRegion.volume = 0.083667 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.348447 +SourceRegion.volume = 0.062188 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.458943 +SourceRegion.volume = 0.522815 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.919743 +SourceRegion.volume = 0.504292 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.687891 +SourceRegion.volume = 0.971660 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.406982 +SourceRegion.volume = 0.396301 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 108.556410 +SourceRegion.volume = 60.669845 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.614453 +SourceRegion.volume = 0.252596 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.626901 +SourceRegion.volume = 0.369552 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.656495 +SourceRegion.volume = 0.310725 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.031228 +SourceRegion.volume = 0.314951 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 59.403223 +SourceRegion.volume = 73.293911 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.312188 +SourceRegion.volume = 0.516714 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.087140 +SourceRegion.volume = 1.270102 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.377699 +SourceRegion.volume = 0.365873 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.315023 +SourceRegion.volume = 0.623847 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.112132 +SourceRegion.volume = 1.379836 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 69.324276 +SourceRegion.volume = 65.810192 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.307593 +SourceRegion.volume = 0.668805 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.551013 +SourceRegion.volume = 0.531154 +test1 +SourceRegion_add.volume = 10.788561 +SourceRegion.volume = 90.118829 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 51.786800 +SourceRegion.volume = 87.868682 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.530139 +SourceRegion.volume = 0.957131 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 84.410887 +SourceRegion.volume = 63.859058 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.700058 +SourceRegion.volume = 0.731578 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.266602 +SourceRegion.volume = 1.736190 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.407655 +SourceRegion.volume = 1.184325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 61.353164 +SourceRegion.volume = 92.516965 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.290677 +SourceRegion.volume = 1.600597 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.566437 +SourceRegion.volume = 0.188992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.350533 +SourceRegion.volume = 0.873732 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.873257 +SourceRegion.volume = 0.642922 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.874572 +SourceRegion.volume = 0.280337 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 52.840827 +SourceRegion.volume = 94.794393 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 79.271372 +SourceRegion.volume = 48.400962 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.426526 +SourceRegion.volume = 0.646710 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.356389 +SourceRegion.volume = 0.131982 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.453517 +SourceRegion.volume = 0.297310 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.135353 +SourceRegion.volume = 1.567509 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.790959 +SourceRegion.volume = 1.064739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.662766 +SourceRegion.volume = 0.160660 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.977594 +SourceRegion.volume = 0.858922 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.462237 +SourceRegion.volume = 0.145234 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.750955 +SourceRegion.volume = 0.682765 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.303624 +SourceRegion.volume = 0.982392 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.727248 +SourceRegion.volume = 1.201987 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 67.143656 +SourceRegion.volume = 105.085159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.784580 +SourceRegion.volume = 0.807734 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.711660 +SourceRegion.volume = 0.969615 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.849563 +SourceRegion.volume = 0.475338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.086728 +SourceRegion.volume = 0.710463 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.455005 +SourceRegion.volume = 1.137335 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.971247 +SourceRegion.volume = 0.762518 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.360543 +SourceRegion.volume = 1.300305 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.826889 +SourceRegion.volume = 0.476827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 58 broadcasting 4349 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.595739 +SourceRegion.volume = 0.131801 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.972228 +SourceRegion.volume = 2.931541 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.504312 +SourceRegion.volume = 1.779863 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.425613 +SourceRegion.volume = 1.114861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.684836 +SourceRegion.volume = 0.325091 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.274024 +SourceRegion.volume = 0.820837 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.388213 +SourceRegion.volume = 0.743189 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.918301 +SourceRegion.volume = 0.261059 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 1.027592 +SourceRegion.volume = 1.368737 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.503171 +SourceRegion.volume = 0.461218 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.475119 +SourceRegion.volume = 1.316089 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.963513 +SourceRegion.volume = 0.843784 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.432154 +SourceRegion.volume = 0.479129 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.152938 +SourceRegion.volume = 0.520469 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.088841 +SourceRegion.volume = 0.609792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.863047 +SourceRegion.volume = 0.577806 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.271354 +SourceRegion.volume = 0.919446 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.552667 +SourceRegion.volume = 0.979217 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.086659 +SourceRegion.volume = 1.824625 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.788795 +SourceRegion.volume = 2.232211 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.048925 +SourceRegion.volume = 1.259714 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.136342 +SourceRegion.volume = 0.426594 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.050625 +SourceRegion.volume = 0.943962 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.466003 +SourceRegion.volume = 0.506556 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.254382 +SourceRegion.volume = 0.909023 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.752463 +SourceRegion.volume = 0.769664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.491749 +SourceRegion.volume = 0.934929 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.318526 +SourceRegion.volume = 0.724608 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.094809 +SourceRegion.volume = 0.161498 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.090677 +SourceRegion.volume = 0.697724 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.807408 +SourceRegion.volume = 1.827119 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.069470 +SourceRegion.volume = 1.068728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.090001 +SourceRegion.volume = 1.141561 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.988546 +SourceRegion.volume = 0.944763 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.365883 +SourceRegion.volume = 1.982883 +test1 +SourceRegion_add.volume = 0.252822 +SourceRegion.volume = 0.979431 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.451853 +SourceRegion.volume = 0.935558 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.625094 +SourceRegion.volume = 1.308044 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.835538 +SourceRegion.volume = 0.515844 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.459972 +SourceRegion.volume = 0.247806 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.790874 +SourceRegion.volume = 2.110848 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.376238 +SourceRegion.volume = 1.374467 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.757376 +SourceRegion.volume = 0.776453 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.499803 +SourceRegion.volume = 0.447361 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.321592 +SourceRegion.volume = 1.172368 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.803121 +SourceRegion.volume = 0.792637 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.399267 +SourceRegion.volume = 0.339619 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.645144 +SourceRegion.volume = 0.654805 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.304587 +SourceRegion.volume = 0.532680 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.446639 +SourceRegion.volume = 1.306986 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.737318 +SourceRegion.volume = 0.465208 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 0.623848 +SourceRegion.volume = 0.193922 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.522433 +SourceRegion.volume = 1.219292 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.835490 +SourceRegion.volume = 0.516258 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.406010 +SourceRegion.volume = 0.202370 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.435665 +SourceRegion.volume = 0.792407 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.022040 +SourceRegion.volume = 1.702189 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.637573 +SourceRegion.volume = 0.258195 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 1.198460 +SourceRegion.volume = 2.080976 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.294135 +SourceRegion.volume = 0.407075 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test3 +test1 +SourceRegion_add.volume = 1.412176 +SourceRegion.volume = 0.435410 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.110267 +SourceRegion.volume = 1.012068 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.919502 +SourceRegion.volume = 0.295014 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 0.215574 +SourceRegion.volume = 1.894201 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.003711 +SourceRegion.volume = 1.398686 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.732557 +SourceRegion.volume = 0.438702 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion_add.volume = 0.182139 +SourceRegion.volume = 0.292334 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.842981 +SourceRegion.volume = 0.187176 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.717178 +SourceRegion.volume = 1.219810 +test1.1 +test1.2 +test1.3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.726769 +SourceRegion.volume = 2.338078 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.516785 +SourceRegion.volume = 1.133748 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.663486 +SourceRegion.volume = 0.373820 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.328419 +SourceRegion.volume = 1.121829 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.237219 +SourceRegion.volume = 0.848208 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.208775 +SourceRegion.volume = 0.658642 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.759258 +SourceRegion.volume = 0.199594 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 2.391632 +SourceRegion.volume = 1.318798 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.206402 +SourceRegion.volume = 0.783958 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.045386 +SourceRegion.volume = 3.971250 +test1 +SourceRegion_add.volume = 0.308568 +SourceRegion.volume = 0.349755 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.477776 +SourceRegion.volume = 0.308639 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.852567 +SourceRegion.volume = 0.602340 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.633600 +SourceRegion.volume = 1.986557 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.387998 +SourceRegion.volume = 0.478389 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.260232 +SourceRegion.volume = 1.677732 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.054833 +SourceRegion.volume = 1.325003 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.612421 +SourceRegion.volume = 0.568267 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.306676 +SourceRegion.volume = 1.049081 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.133268 +SourceRegion.volume = 0.783558 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.297462 +SourceRegion.volume = 1.231023 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.844250 +SourceRegion.volume = 1.359759 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.580867 +SourceRegion.volume = 1.907865 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.802635 +SourceRegion.volume = 0.289580 +test1 +SourceRegion_add.volume = 0.147135 +SourceRegion.volume = 1.433637 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.650788 +SourceRegion.volume = 0.136251 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.987057 +SourceRegion.volume = 0.663338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.756801 +SourceRegion.volume = 0.133920 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.006492 +SourceRegion.volume = 2.098861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.424149 +SourceRegion.volume = 0.740393 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.582638 +SourceRegion.volume = 0.089534 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.434695 +SourceRegion.volume = 1.680401 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.439506 +SourceRegion.volume = 0.941794 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.220194 +SourceRegion.volume = 1.495615 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.060727 +SourceRegion.volume = 0.357626 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.943248 +SourceRegion.volume = 0.098327 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.986440 +SourceRegion.volume = 0.000274 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.806660 +SourceRegion.volume = 1.080398 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.599354 +SourceRegion.volume = 1.371968 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.293409 +SourceRegion.volume = 0.053490 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.598321 +SourceRegion.volume = 0.143471 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.616299 +SourceRegion.volume = 0.312321 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.037676 +SourceRegion.volume = 1.173934 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.847380 +SourceRegion.volume = 0.171430 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.808876 +SourceRegion.volume = 0.516489 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.074978 +SourceRegion.volume = 0.026897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.657219 +SourceRegion.volume = 1.224600 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.833177 +SourceRegion.volume = 0.863454 +test1 +SourceRegion_add.volume = 2.950703 +SourceRegion.volume = 0.539374 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.442746 +SourceRegion.volume = 1.014637 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.811359 +test1 +SourceRegion_add.volume = 2.055672 +SourceRegion.volume = 0.406708 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.785168 +SourceRegion.volume = 0.142895 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.176094 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.459209 +SourceRegion.volume = 1.017494 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.363825 +SourceRegion.volume = 0.646865 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.941037 +SourceRegion.volume = 0.564664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.452005 +SourceRegion.volume = 1.966311 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.787783 +SourceRegion.volume = 3.294817 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.305044 +SourceRegion.volume = 1.266619 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.442596 +SourceRegion.volume = 0.532047 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.815391 +SourceRegion.volume = 0.108684 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.493207 +SourceRegion.volume = 0.202584 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.807501 +SourceRegion.volume = 0.599564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.427293 +SourceRegion.volume = 0.407006 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.825551 +SourceRegion.volume = 0.376354 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.635674 +SourceRegion.volume = 2.017475 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.282386 +SourceRegion.volume = 1.165591 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.800375 +SourceRegion.volume = 0.648474 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.576492 +SourceRegion.volume = 0.075564 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.698734 +SourceRegion.volume = 1.031593 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.966138 +SourceRegion.volume = 0.992407 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.507385 +SourceRegion.volume = 0.000928 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.627565 +SourceRegion.volume = 0.170077 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.889611 +SourceRegion.volume = 0.886068 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.649140 +SourceRegion.volume = 0.165015 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.428436 +SourceRegion.volume = 1.269675 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.720197 +SourceRegion.volume = 1.176474 +test1.1 +test1 +SourceRegion_add.volume = 1.260556 +SourceRegion.volume = 3.224383 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.308122 +SourceRegion.volume = 0.674813 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.260342 +SourceRegion.volume = 1.955467 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.349395 +SourceRegion.volume = 0.164041 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.516246 +SourceRegion.volume = 0.268084 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.011165 +SourceRegion.volume = 0.352897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.462765 +SourceRegion.volume = 0.243074 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.246659 +SourceRegion.volume = 1.171937 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 59 broadcasting 4438 source regions to other ranks. +test1 +SourceRegion_add.volume = 1.436900 +SourceRegion.volume = 0.320658 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.685837 +SourceRegion.volume = 0.146953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.682095 +SourceRegion.volume = 0.232408 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.865313 +SourceRegion.volume = 0.678608 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.136451 +SourceRegion.volume = 3.835333 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.711718 +SourceRegion.volume = 0.192696 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.711970 +SourceRegion.volume = 0.527737 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.205230 +SourceRegion.volume = 0.394039 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.001599 +SourceRegion.volume = 0.674293 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.763366 +SourceRegion.volume = 0.408331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.341762 +SourceRegion.volume = 0.320131 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.366564 +SourceRegion.volume = 1.108838 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.847177 +SourceRegion.volume = 0.837364 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.430150 +SourceRegion.volume = 0.672639 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.461709 +test1 +SourceRegion_add.volume = 0.933150 +SourceRegion.volume = 0.674399 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 1.220130 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.460682 +SourceRegion.volume = 0.558343 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.038146 +SourceRegion.volume = 0.448232 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.703698 +SourceRegion.volume = 0.813808 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.431952 +SourceRegion.volume = 1.555865 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.448893 +SourceRegion.volume = 0.106563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.545749 +SourceRegion.volume = 0.693079 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.814439 +SourceRegion.volume = 0.364874 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.798581 +SourceRegion.volume = 1.556843 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.085999 +SourceRegion.volume = 0.144022 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.771374 +SourceRegion.volume = 0.800047 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 0.254287 +SourceRegion.volume = 1.288904 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.855702 +SourceRegion.volume = 0.072953 +test1.1 +SourceRegion_add.volume = 0.783681 +SourceRegion.volume = 0.704622 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.677191 +SourceRegion.volume = 0.835367 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.604100 +SourceRegion.volume = 0.667223 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.269634 +SourceRegion.volume = 0.110130 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.706950 +SourceRegion.volume = 0.813932 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.728984 +SourceRegion.volume = 0.374053 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.394099 +SourceRegion.volume = 1.188719 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.251362 +SourceRegion.volume = 1.287241 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.100176 +SourceRegion.volume = 1.460074 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.749420 +SourceRegion.volume = 0.158154 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.758268 +SourceRegion.volume = 0.655944 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.001531 +SourceRegion.volume = 1.829299 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.374494 +SourceRegion.volume = 0.139423 +test1 +SourceRegion_add.volume = 0.733036 +SourceRegion.volume = 0.658444 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.192421 +SourceRegion.volume = 0.840961 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.450152 +SourceRegion.volume = 0.381734 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.873203 +SourceRegion.volume = 0.360907 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.331102 +SourceRegion.volume = 2.267280 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.277479 +SourceRegion.volume = 0.729254 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.962933 +SourceRegion.volume = 0.260903 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.069838 +SourceRegion.volume = 1.164241 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.212602 +SourceRegion.volume = 0.196726 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.216736 +SourceRegion.volume = 1.442897 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.667660 +SourceRegion.volume = 1.476466 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.817770 +SourceRegion.volume = 0.144159 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.414809 +SourceRegion.volume = 0.583632 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.738385 +SourceRegion.volume = 1.180405 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.637100 +SourceRegion.volume = 1.889310 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.292388 +SourceRegion.volume = 0.411886 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.163426 +SourceRegion.volume = 2.387605 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.060190 +SourceRegion.volume = 0.364243 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.320825 +SourceRegion.volume = 0.758400 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.190964 +SourceRegion.volume = 0.385120 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.366486 +SourceRegion.volume = 0.464822 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.544168 +SourceRegion.volume = 0.226292 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.240031 +SourceRegion.volume = 0.790536 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.359606 +SourceRegion.volume = 1.532279 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.984598 +SourceRegion.volume = 0.063453 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.289460 +SourceRegion.volume = 0.988655 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.988777 +SourceRegion.volume = 0.591480 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.299747 +SourceRegion.volume = 0.884570 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.279247 +SourceRegion.volume = 0.919157 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.157182 +SourceRegion.volume = 0.561318 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.357871 +SourceRegion.volume = 0.608792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.398299 +SourceRegion.volume = 0.459000 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.299902 +SourceRegion.volume = 0.780064 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.676283 +SourceRegion.volume = 0.504506 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.973178 +SourceRegion.volume = 0.669470 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.273654 +SourceRegion.volume = 1.554522 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.336609 +SourceRegion.volume = 0.125943 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.605404 +SourceRegion.volume = 0.016573 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.851919 +SourceRegion.volume = 0.314499 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.237922 +SourceRegion.volume = 1.601078 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.403547 +SourceRegion.volume = 1.125427 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.416800 +SourceRegion.volume = 0.737117 +test1 +SourceRegion_add.volume = 0.806273 +SourceRegion.volume = 0.942714 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.135143 +SourceRegion.volume = 0.498870 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.816269 +SourceRegion.volume = 0.482590 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.689440 +SourceRegion.volume = 0.349934 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.322282 +SourceRegion.volume = 0.841243 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.882262 +SourceRegion.volume = 1.080193 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.044780 +SourceRegion.volume = 0.757472 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.134253 +SourceRegion.volume = 0.818035 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.367085 +SourceRegion.volume = 1.177716 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.794814 +SourceRegion.volume = 0.762728 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.179358 +SourceRegion.volume = 1.274417 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.982281 +SourceRegion.volume = 0.013103 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.935710 +SourceRegion.volume = 0.135152 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.908799 +SourceRegion.volume = 0.990493 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.810593 +SourceRegion.volume = 0.349280 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.504865 +SourceRegion.volume = 0.724674 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.552033 +SourceRegion.volume = 0.016579 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.720889 +SourceRegion.volume = 0.106621 +test1 +SourceRegion_add.volume = 0.752390 +SourceRegion.volume = 0.403329 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.327914 +SourceRegion.volume = 1.807858 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.505495 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.538144 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.932012 +SourceRegion.volume = 0.192208 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.526549 +SourceRegion.volume = 0.880628 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.244095 +SourceRegion.volume = 0.748936 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.315966 +SourceRegion.volume = 0.356767 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.402498 +SourceRegion.volume = 0.933025 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.210991 +SourceRegion.volume = 0.893655 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.840846 +SourceRegion.volume = 0.818114 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.684549 +SourceRegion.volume = 0.891818 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.565591 +SourceRegion.volume = 0.481662 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.621048 +SourceRegion.volume = 0.458690 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.335544 +SourceRegion.volume = 1.620397 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.097232 +SourceRegion.volume = 0.685631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.602469 +SourceRegion.volume = 0.279431 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.372609 +SourceRegion.volume = 1.067210 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.783355 +SourceRegion.volume = 0.520057 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.077174 +SourceRegion.volume = 0.937978 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.686661 +SourceRegion.volume = 0.557188 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.111831 +SourceRegion.volume = 1.031142 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.130449 +SourceRegion.volume = 0.856634 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.509222 +SourceRegion.volume = 0.738425 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.737417 +SourceRegion.volume = 0.860026 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.998912 +SourceRegion.volume = 0.604864 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.151095 +SourceRegion.volume = 1.195363 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.264303 +SourceRegion.volume = 0.778931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.979522 +SourceRegion.volume = 0.411788 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.138864 +SourceRegion.volume = 0.233294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.295173 +SourceRegion.volume = 0.264861 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.536406 +SourceRegion.volume = 0.524664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.648116 +SourceRegion.volume = 0.709715 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.759886 +SourceRegion.volume = 0.371043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.986172 +SourceRegion.volume = 0.496257 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.201035 +SourceRegion.volume = 0.621214 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.940224 +SourceRegion.volume = 1.180529 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.855284 +SourceRegion.volume = 0.681248 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.170692 +SourceRegion.volume = 1.069509 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.761478 +SourceRegion.volume = 1.174196 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.676628 +SourceRegion.volume = 0.835156 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.089350 +SourceRegion.volume = 0.697046 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 1.135931 +SourceRegion.volume = 0.143337 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.154775 +SourceRegion.volume = 0.607488 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.269418 +SourceRegion.volume = 0.245519 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.430426 +SourceRegion.volume = 2.571852 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.241470 +SourceRegion.volume = 0.020468 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.223055 +SourceRegion.volume = 1.179163 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.149222 +SourceRegion.volume = 1.068305 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.690206 +SourceRegion.volume = 0.279128 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.602875 +SourceRegion.volume = 0.595002 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.050256 +SourceRegion.volume = 0.724164 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.461500 +SourceRegion.volume = 1.294441 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.977472 +test1 +SourceRegion_add.volume = 0.650563 +SourceRegion.volume = 0.696773 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.430191 +SourceRegion.volume = 0.825130 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.468809 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.317248 +SourceRegion.volume = 1.714465 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.777708 +SourceRegion.volume = 0.937065 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.483781 +SourceRegion.volume = 0.351309 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.294099 +SourceRegion.volume = 0.286331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.294659 +SourceRegion.volume = 0.410401 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.252322 +SourceRegion.volume = 0.225028 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.639741 +SourceRegion.volume = 1.004486 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.333237 +SourceRegion.volume = 1.113838 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.853172 +SourceRegion.volume = 0.963822 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.900015 +SourceRegion.volume = 0.095718 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.784413 +SourceRegion.volume = 0.588514 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.540071 +SourceRegion.volume = 0.526953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.181054 +SourceRegion.volume = 1.346957 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.661634 +SourceRegion.volume = 0.528590 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.653294 +SourceRegion.volume = 0.442282 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.512427 +SourceRegion.volume = 0.388981 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.273919 +SourceRegion.volume = 0.701739 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.960201 +SourceRegion.volume = 0.002202 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.401047 +SourceRegion.volume = 0.962634 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.515372 +SourceRegion.volume = 0.302388 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.264845 +SourceRegion.volume = 1.705342 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.601005 +SourceRegion.volume = 0.188022 +test1.1 +test1 +SourceRegion_add.volume = 37.615391 +SourceRegion.volume = 118.068636 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.530268 +SourceRegion.volume = 0.882664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.328949 +SourceRegion.volume = 0.605407 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.131577 +SourceRegion.volume = 0.970715 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.514419 +SourceRegion.volume = 1.647144 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.197924 +SourceRegion.volume = 0.360125 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.168036 +SourceRegion.volume = 0.746786 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.775691 +SourceRegion.volume = 0.716232 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 28.866138 +SourceRegion.volume = 129.116179 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.351652 +SourceRegion.volume = 1.478480 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 60 broadcasting 46 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.770230 +SourceRegion.volume = 0.528466 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.524428 +SourceRegion.volume = 0.285724 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 90.350614 +SourceRegion.volume = 54.684516 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.400755 +SourceRegion.volume = 0.081688 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 42.554867 +SourceRegion.volume = 109.192980 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 82.797148 +SourceRegion.volume = 81.586789 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 74.257362 +SourceRegion.volume = 67.977661 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 70.697421 +SourceRegion.volume = 60.888179 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 74.443797 +SourceRegion.volume = 55.909342 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 87.883464 +SourceRegion.volume = 73.067331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 68.939895 +SourceRegion.volume = 77.683605 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test1 +SourceRegion_add.volume = 0.884380 +SourceRegion.volume = 0.372173 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.757021 +SourceRegion.volume = 0.678669 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test3 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.770544 +SourceRegion.volume = 0.885902 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.021652 +SourceRegion.volume = 0.290341 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.349449 +SourceRegion.volume = 0.635180 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 78.536032 +SourceRegion.volume = 80.059533 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 72.819980 +SourceRegion.volume = 83.936199 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 69.205174 +SourceRegion.volume = 76.668139 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 85.690269 +SourceRegion.volume = 42.613144 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 54.095500 +SourceRegion.volume = 101.183043 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 140.754380 +SourceRegion.volume = 0.398158 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 66.861115 +SourceRegion.volume = 56.974891 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 111.128424 +SourceRegion.volume = 48.120140 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 51.943500 +SourceRegion.volume = 119.236487 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 61 broadcasting 2376 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.050766 +SourceRegion.volume = 3.116607 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.143456 +SourceRegion.volume = 3.317938 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 3.119592 +SourceRegion.volume = 0.448085 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.551668 +SourceRegion.volume = 0.764324 +test1.1 +test1.2 +test1.3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.006245 +SourceRegion.volume = 4.151865 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.583542 +SourceRegion.volume = 1.012792 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.136673 +SourceRegion.volume = 1.731311 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.164540 +SourceRegion.volume = 1.745793 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.371549 +SourceRegion.volume = 3.535086 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.871884 +SourceRegion.volume = 0.699237 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.964119 +SourceRegion.volume = 1.583173 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.967227 +SourceRegion.volume = 2.896173 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 4.417538 +SourceRegion.volume = 1.351505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.386926 +SourceRegion.volume = 1.031646 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.560597 +SourceRegion.volume = 1.633786 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.881881 +SourceRegion.volume = 1.140294 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.264016 +SourceRegion.volume = 2.147565 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.977662 +SourceRegion.volume = 2.722272 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.272776 +SourceRegion.volume = 2.231196 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.242074 +SourceRegion.volume = 1.086091 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.836920 +SourceRegion.volume = 0.785459 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.789263 +SourceRegion.volume = 1.403747 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.662725 +SourceRegion.volume = 0.977163 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.473496 +SourceRegion.volume = 0.530173 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.128489 +SourceRegion.volume = 1.411372 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.005819 +SourceRegion.volume = 0.685537 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.970552 +SourceRegion.volume = 1.080603 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.437232 +SourceRegion.volume = 1.536331 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.582232 +SourceRegion.volume = 1.129213 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.966036 +SourceRegion.volume = 0.860694 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.241745 +SourceRegion.volume = 2.945693 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.842405 +SourceRegion.volume = 1.457979 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.043087 +SourceRegion.volume = 2.316171 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.753206 +SourceRegion.volume = 2.060421 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.364026 +SourceRegion.volume = 2.546569 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.077554 +SourceRegion.volume = 0.833405 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.035038 +SourceRegion.volume = 1.624793 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.032123 +SourceRegion.volume = 3.789652 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.764428 +SourceRegion.volume = 0.798604 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.739815 +SourceRegion.volume = 0.727120 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.867701 +SourceRegion.volume = 0.062601 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.734571 +SourceRegion.volume = 1.822149 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.083878 +SourceRegion.volume = 2.739303 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.968229 +SourceRegion.volume = 1.938397 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.251188 +SourceRegion.volume = 1.718931 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.776005 +SourceRegion.volume = 2.261320 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.685606 +SourceRegion.volume = 4.272185 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.845376 +SourceRegion.volume = 1.989971 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 5.106063 +SourceRegion.volume = 0.179079 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion_add.volume = 0.372863 +SourceRegion.volume = 1.532040 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.091536 +SourceRegion.volume = 0.910626 +test1.1 +test1 +SourceRegion_add.volume = 1.126494 +SourceRegion.volume = 1.873216 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.973054 +SourceRegion.volume = 2.626337 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.598981 +SourceRegion.volume = 0.990846 +test1.1 +test1.2 +test1.3 +test1.4 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.358075 +SourceRegion.volume = 1.418664 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.070483 +SourceRegion.volume = 2.093079 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.208631 +SourceRegion.volume = 1.215902 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.137961 +SourceRegion.volume = 1.262639 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.633447 +SourceRegion.volume = 1.361766 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.832775 +SourceRegion.volume = 1.695240 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.986410 +SourceRegion.volume = 1.710614 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.450197 +SourceRegion.volume = 2.068927 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.519324 +SourceRegion.volume = 0.328100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.041497 +SourceRegion.volume = 0.981423 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.692243 +SourceRegion.volume = 1.138013 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.787398 +SourceRegion.volume = 0.996133 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.520587 +SourceRegion.volume = 0.502984 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 0.146797 +SourceRegion.volume = 2.808268 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.296652 +SourceRegion.volume = 1.748058 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.109265 +SourceRegion.volume = 0.725196 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.586244 +SourceRegion.volume = 2.678321 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.847603 +SourceRegion.volume = 1.474915 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.775000 +SourceRegion.volume = 1.265966 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.126187 +SourceRegion.volume = 1.493092 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.963177 +SourceRegion.volume = 1.846891 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.163981 +SourceRegion.volume = 2.002556 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.351657 +SourceRegion.volume = 1.819676 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.589933 +SourceRegion.volume = 2.063667 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.330296 +SourceRegion.volume = 2.033523 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.767491 +SourceRegion.volume = 0.290008 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.682850 +SourceRegion.volume = 1.289632 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.323746 +SourceRegion.volume = 2.691455 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.425086 +SourceRegion.volume = 0.598498 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.763813 +SourceRegion.volume = 1.406890 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.568640 +SourceRegion.volume = 3.211411 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.656311 +SourceRegion.volume = 0.043574 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.862372 +SourceRegion.volume = 0.383264 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.067985 +SourceRegion.volume = 0.887418 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.258325 +SourceRegion.volume = 4.075597 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.488436 +SourceRegion.volume = 0.612895 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.126212 +SourceRegion.volume = 1.363253 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.000105 +SourceRegion.volume = 3.507175 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.740336 +SourceRegion.volume = 1.046297 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.874499 +SourceRegion.volume = 1.185347 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.889022 +SourceRegion.volume = 2.680650 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.829798 +SourceRegion.volume = 1.894868 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.032605 +SourceRegion.volume = 1.887530 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.447750 +SourceRegion.volume = 1.927494 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.374286 +SourceRegion.volume = 0.827505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test1 +SourceRegion_add.volume = 0.730683 +SourceRegion.volume = 0.963746 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 0.835000 +SourceRegion.volume = 4.852439 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.004365 +SourceRegion.volume = 1.447921 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.027006 +SourceRegion.volume = 2.288513 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.053816 +SourceRegion.volume = 1.777585 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.953318 +SourceRegion.volume = 1.815298 +test1.1 +test1 +SourceRegion_add.volume = 1.235244 +SourceRegion.volume = 1.015638 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.915051 +SourceRegion.volume = 0.012319 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.621098 +SourceRegion.volume = 1.693459 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.396632 +SourceRegion.volume = 0.877785 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.207017 +SourceRegion.volume = 2.140439 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.489589 +SourceRegion.volume = 0.192967 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.572707 +SourceRegion.volume = 2.253730 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.248363 +SourceRegion.volume = 1.032863 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.828614 +SourceRegion.volume = 3.263711 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.016103 +SourceRegion.volume = 1.114179 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.320005 +SourceRegion.volume = 1.704855 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.546716 +SourceRegion.volume = 1.289641 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.136936 +SourceRegion.volume = 1.651211 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.728662 +SourceRegion.volume = 2.081789 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.391277 +SourceRegion.volume = 1.588162 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.543335 +SourceRegion.volume = 1.936056 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.336923 +SourceRegion.volume = 0.959338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.194987 +SourceRegion.volume = 0.110144 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.866383 +SourceRegion.volume = 1.697038 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.446837 +SourceRegion.volume = 1.502667 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.413928 +SourceRegion.volume = 2.588565 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.909199 +SourceRegion.volume = 1.937889 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.498516 +SourceRegion.volume = 1.604405 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.089242 +SourceRegion.volume = 1.198810 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.246647 +SourceRegion.volume = 0.780058 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.205826 +SourceRegion.volume = 1.651092 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.385991 +SourceRegion.volume = 0.732572 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.162009 +SourceRegion.volume = 0.401752 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.046096 +SourceRegion.volume = 0.763576 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.419740 +SourceRegion.volume = 1.215734 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 2.850579 +SourceRegion.volume = 0.339841 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.955574 +SourceRegion.volume = 1.509213 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.575383 +SourceRegion.volume = 0.224065 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.740364 +SourceRegion.volume = 1.262332 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.651630 +SourceRegion.volume = 1.207910 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.489993 +SourceRegion.volume = 0.879239 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.726520 +SourceRegion.volume = 0.805392 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.223408 +SourceRegion.volume = 0.973397 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.414513 +SourceRegion.volume = 3.103708 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.377438 +SourceRegion.volume = 3.204951 +test1 +SourceRegion_add.volume = 1.330608 +SourceRegion.volume = 0.668505 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.484949 +SourceRegion.volume = 1.346305 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.790512 +SourceRegion.volume = 1.730021 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.182438 +SourceRegion.volume = 1.687977 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.629610 +SourceRegion.volume = 1.222039 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.861496 +SourceRegion.volume = 1.851909 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.591657 +SourceRegion.volume = 2.527736 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.446330 +SourceRegion.volume = 1.422299 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.457679 +SourceRegion.volume = 2.470752 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.214499 +SourceRegion.volume = 1.150755 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.372568 +SourceRegion.volume = 1.114733 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.594299 +SourceRegion.volume = 0.942081 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.904760 +SourceRegion.volume = 0.156500 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.295934 +SourceRegion.volume = 0.644476 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.633920 +SourceRegion.volume = 0.705508 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.146393 +SourceRegion.volume = 0.081871 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.298614 +SourceRegion.volume = 2.302926 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.777069 +SourceRegion.volume = 0.362694 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.291566 +SourceRegion.volume = 1.033580 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.770845 +SourceRegion.volume = 2.360338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.319973 +SourceRegion.volume = 1.533934 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.711312 +SourceRegion.volume = 3.330641 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.355436 +SourceRegion.volume = 0.949749 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.378025 +SourceRegion.volume = 2.151773 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.921940 +SourceRegion.volume = 1.747823 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.584783 +SourceRegion.volume = 1.595384 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.232623 +SourceRegion.volume = 2.130480 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.446058 +SourceRegion.volume = 0.649898 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.638395 +SourceRegion.volume = 1.680156 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.819434 +SourceRegion.volume = 0.726137 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.066589 +SourceRegion.volume = 1.498074 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.254957 +SourceRegion.volume = 2.652068 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.327614 +SourceRegion.volume = 2.236004 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 4.497542 +SourceRegion.volume = 0.073525 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.871644 +SourceRegion.volume = 0.261632 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.403744 +SourceRegion.volume = 1.234518 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.472847 +SourceRegion.volume = 1.905339 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.870909 +SourceRegion.volume = 2.382304 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.555063 +SourceRegion.volume = 3.461854 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.641982 +SourceRegion.volume = 1.722520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.840111 +SourceRegion.volume = 1.813882 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.723766 +SourceRegion.volume = 2.531246 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.729577 +SourceRegion.volume = 2.166265 +test1 +SourceRegion_add.volume = 1.233707 +SourceRegion.volume = 0.855513 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.753522 +SourceRegion.volume = 2.196109 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.758973 +SourceRegion.volume = 0.924563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.588633 +SourceRegion.volume = 0.413428 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.163622 +SourceRegion.volume = 1.926577 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.854830 +SourceRegion.volume = 1.136008 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.275681 +SourceRegion.volume = 2.090477 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.502096 +SourceRegion.volume = 1.736666 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.532113 +SourceRegion.volume = 1.318706 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.193166 +SourceRegion.volume = 3.016889 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.210368 +SourceRegion.volume = 1.187655 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.937376 +SourceRegion.volume = 1.822827 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.364848 +SourceRegion.volume = 1.181121 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.756018 +SourceRegion.volume = 1.394383 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.099492 +SourceRegion.volume = 1.928471 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.596769 +SourceRegion.volume = 0.737442 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.152571 +SourceRegion.volume = 2.958216 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.617107 +SourceRegion.volume = 1.278009 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.823597 +SourceRegion.volume = 1.180793 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.021079 +SourceRegion.volume = 1.428106 +test1.1 +test1.2 +test1.3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.315350 +SourceRegion.volume = 2.301112 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.102205 +SourceRegion.volume = 0.980399 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.662273 +SourceRegion.volume = 2.209415 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.552514 +SourceRegion.volume = 1.269300 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.128982 +SourceRegion.volume = 1.793563 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.893259 +SourceRegion.volume = 1.396263 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.067455 +SourceRegion.volume = 1.430248 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.184981 +SourceRegion.volume = 0.901666 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.718869 +SourceRegion.volume = 2.567764 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.058135 +SourceRegion.volume = 2.451999 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.280039 +SourceRegion.volume = 0.817678 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.773377 +SourceRegion.volume = 3.320800 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.497348 +SourceRegion.volume = 1.166963 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.326563 +SourceRegion.volume = 0.380209 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.910232 +SourceRegion.volume = 3.670419 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.795352 +SourceRegion.volume = 1.245606 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.886592 +SourceRegion.volume = 2.312496 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.628819 +SourceRegion.volume = 2.166020 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.139473 +SourceRegion.volume = 0.388811 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.904488 +SourceRegion.volume = 1.208734 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.665971 +SourceRegion.volume = 1.818212 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.661404 +SourceRegion.volume = 1.155851 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.831169 +SourceRegion.volume = 1.901448 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.100832 +SourceRegion.volume = 3.188526 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.364097 +SourceRegion.volume = 1.237318 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.928673 +SourceRegion.volume = 1.189267 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.725433 +SourceRegion.volume = 0.681363 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.873497 +SourceRegion.volume = 0.762516 +test1 +SourceRegion_add.volume = 1.872648 +SourceRegion.volume = 1.524101 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.108752 +SourceRegion.volume = 0.613805 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.996980 +SourceRegion.volume = 0.205295 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.506924 +SourceRegion.volume = 1.063203 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.421887 +SourceRegion.volume = 1.165027 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.923271 +test1 +SourceRegion_add.volume = 1.757301 +SourceRegion.volume = 1.465806 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.633480 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.325892 +SourceRegion.volume = 2.123253 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +Rank 62 broadcasting 109 source regions to other ranks. +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.386881 +SourceRegion.volume = 1.006069 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.602450 +SourceRegion.volume = 3.729436 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.351055 +SourceRegion.volume = 0.855811 +test1.1 +test1 +SourceRegion_add.volume = 2.079598 +SourceRegion.volume = 0.669906 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.055698 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.560259 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.748786 +SourceRegion.volume = 1.431051 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.214395 +SourceRegion.volume = 0.764329 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 87.350148 +SourceRegion.volume = 58.313607 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 53.414222 +SourceRegion.volume = 96.837631 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.425431 +SourceRegion.volume = 1.351489 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.921430 +SourceRegion.volume = 0.637302 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 93.861408 +SourceRegion.volume = 55.848100 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 59.699999 +SourceRegion.volume = 99.840527 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.806483 +SourceRegion.volume = 0.261766 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 5.346079 +SourceRegion.volume = 118.996237 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 37.632393 +SourceRegion.volume = 144.057042 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 86.195853 +SourceRegion.volume = 53.877577 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.683378 +SourceRegion.volume = 1.199450 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 56.884104 +SourceRegion.volume = 63.716798 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 46.761535 +test1 +SourceRegion_add.volume = 49.448308 +SourceRegion.volume = 114.139075 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 103.528302 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 42.150800 +SourceRegion.volume = 93.725359 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.129207 +SourceRegion.volume = 0.746258 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.296799 +SourceRegion.volume = 0.122145 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.487974 +SourceRegion.volume = 0.850540 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 92.290991 +SourceRegion.volume = 40.269802 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.029513 +SourceRegion.volume = 0.694918 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.043237 +SourceRegion.volume = 0.434299 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 50.519111 +SourceRegion.volume = 120.776790 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.677248 +SourceRegion.volume = 0.750838 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.187248 +SourceRegion.volume = 1.755442 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.249795 +SourceRegion.volume = 0.343820 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.195455 +SourceRegion.volume = 0.701079 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 46.050525 +SourceRegion.volume = 91.307999 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 73.174649 +SourceRegion.volume = 76.596856 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 34.524215 +SourceRegion.volume = 103.523204 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.047709 +SourceRegion.volume = 1.557403 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.660175 +SourceRegion.volume = 0.800430 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 37.329416 +SourceRegion.volume = 92.311426 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.719341 +SourceRegion.volume = 0.091682 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.021922 +SourceRegion.volume = 0.192825 +test1.1 +test1.2 +test1.3 +test1 +SourceRegion_add.volume = 51.985467 +SourceRegion.volume = 81.253841 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 59.653541 +SourceRegion.volume = 106.169338 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +Rank 63 broadcasting 3175 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.757860 +SourceRegion.volume = 1.497526 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.617532 +SourceRegion.volume = 1.580661 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.285960 +SourceRegion.volume = 4.520385 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.971043 +SourceRegion.volume = 0.271702 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.261632 +SourceRegion.volume = 1.562991 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.945719 +SourceRegion.volume = 1.605435 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.001790 +SourceRegion.volume = 1.393778 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.968866 +SourceRegion.volume = 0.004337 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.972194 +SourceRegion.volume = 0.104348 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.821020 +SourceRegion.volume = 0.981636 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.624094 +SourceRegion.volume = 1.153845 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.762231 +SourceRegion.volume = 0.399833 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.045684 +SourceRegion.volume = 0.850081 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.623077 +SourceRegion.volume = 0.698173 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.371372 +SourceRegion.volume = 0.739962 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.366014 +SourceRegion.volume = 0.774149 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.635881 +SourceRegion.volume = 1.161017 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.455527 +SourceRegion.volume = 1.963706 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.554885 +SourceRegion.volume = 0.001423 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.509945 +SourceRegion.volume = 0.952878 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.661043 +SourceRegion.volume = 0.902397 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.273430 +SourceRegion.volume = 0.576692 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.889053 +SourceRegion.volume = 1.078871 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.274098 +SourceRegion.volume = 0.674205 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.420822 +SourceRegion.volume = 0.439000 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.658247 +SourceRegion.volume = 0.748060 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.041794 +SourceRegion.volume = 3.251208 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.494875 +SourceRegion.volume = 1.106778 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.892630 +SourceRegion.volume = 0.441365 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.359117 +SourceRegion.volume = 1.450693 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.406567 +SourceRegion.volume = 1.978118 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.549152 +SourceRegion.volume = 2.285087 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.520870 +SourceRegion.volume = 2.189590 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.213276 +SourceRegion.volume = 3.087907 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.530601 +SourceRegion.volume = 0.368056 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 1.710551 +SourceRegion.volume = 0.166611 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.218398 +SourceRegion.volume = 0.848281 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.274453 +SourceRegion.volume = 1.596915 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.090954 +SourceRegion.volume = 1.016521 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.517763 +SourceRegion.volume = 0.375362 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.637785 +SourceRegion.volume = 0.087082 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.445399 +SourceRegion.volume = 0.361604 +test1 +SourceRegion_add.volume = 0.184710 +SourceRegion.volume = 0.934881 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.476313 +SourceRegion.volume = 2.921743 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.413042 +SourceRegion.volume = 3.489783 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.413315 +SourceRegion.volume = 0.652029 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.343767 +SourceRegion.volume = 0.589203 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.692613 +SourceRegion.volume = 0.694772 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.041893 +SourceRegion.volume = 2.168603 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.176604 +SourceRegion.volume = 0.817643 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.123738 +SourceRegion.volume = 0.924316 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.536938 +SourceRegion.volume = 1.438015 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.193962 +SourceRegion.volume = 1.242122 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.413299 +SourceRegion.volume = 0.672225 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.386315 +SourceRegion.volume = 0.389899 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.653048 +test1 +SourceRegion_add.volume = 0.051785 +SourceRegion.volume = 2.364503 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.015451 +SourceRegion.volume = 0.983721 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +SourceRegion.volume = 0.113960 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.249737 +SourceRegion.volume = 0.523512 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.470855 +SourceRegion.volume = 2.375143 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.453652 +SourceRegion.volume = 0.430013 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.007540 +SourceRegion.volume = 0.142681 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.190894 +SourceRegion.volume = 1.171325 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.722079 +SourceRegion.volume = 1.019215 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.434304 +SourceRegion.volume = 1.414525 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.516533 +SourceRegion.volume = 2.259007 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.433587 +SourceRegion.volume = 1.552945 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.251240 +SourceRegion.volume = 0.368936 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.557610 +SourceRegion.volume = 1.519319 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.724183 +SourceRegion.volume = 1.096733 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.153690 +SourceRegion.volume = 0.158006 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.302314 +SourceRegion.volume = 2.516185 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.797771 +SourceRegion.volume = 3.522394 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.321863 +SourceRegion.volume = 0.474510 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.904447 +SourceRegion.volume = 1.688929 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.717431 +SourceRegion.volume = 0.816774 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.495481 +SourceRegion.volume = 1.303709 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.495447 +SourceRegion.volume = 1.018885 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.094909 +SourceRegion.volume = 0.959866 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.900093 +SourceRegion.volume = 0.318284 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.569370 +SourceRegion.volume = 0.722234 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.580297 +SourceRegion.volume = 2.303424 +test1.1 +test1.2 +test1.3 +test1.4 +test1 +SourceRegion_add.volume = 0.243367 +SourceRegion.volume = 1.559080 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.487511 +SourceRegion.volume = 2.516215 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.186026 +SourceRegion.volume = 0.972108 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.128233 +SourceRegion.volume = 1.649403 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.026889 +SourceRegion.volume = 0.130162 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.546488 +SourceRegion.volume = 2.051669 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.691337 +SourceRegion.volume = 0.474160 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.670737 +SourceRegion.volume = 1.069102 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.977449 +SourceRegion.volume = 0.584753 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.635922 +SourceRegion.volume = 2.506023 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.075694 +SourceRegion.volume = 0.420220 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.851811 +SourceRegion.volume = 1.385797 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.803080 +SourceRegion.volume = 0.799380 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.264828 +SourceRegion.volume = 1.569171 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.703836 +SourceRegion.volume = 0.924218 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.121554 +SourceRegion.volume = 0.302717 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.241850 +SourceRegion.volume = 0.718608 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.112526 +SourceRegion.volume = 0.843146 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.118269 +SourceRegion.volume = 0.873839 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.885991 +SourceRegion.volume = 0.682893 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.236707 +SourceRegion.volume = 0.111206 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.122956 +SourceRegion.volume = 0.567534 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.863538 +SourceRegion.volume = 1.969275 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.930631 +SourceRegion.volume = 2.349240 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.964255 +SourceRegion.volume = 2.290839 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.948329 +SourceRegion.volume = 0.228533 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.241975 +SourceRegion.volume = 0.255956 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.472824 +SourceRegion.volume = 0.894530 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.345933 +SourceRegion.volume = 0.330295 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.028901 +SourceRegion.volume = 2.378145 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.329397 +SourceRegion.volume = 1.256968 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.183794 +SourceRegion.volume = 2.247690 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.310868 +SourceRegion.volume = 2.357826 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.521491 +SourceRegion.volume = 0.902362 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.401905 +SourceRegion.volume = 0.841917 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.346324 +SourceRegion.volume = 2.389098 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.490190 +SourceRegion.volume = 0.531712 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.300665 +SourceRegion.volume = 1.574645 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.859425 +SourceRegion.volume = 1.170643 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.242316 +SourceRegion.volume = 2.256816 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.540504 +SourceRegion.volume = 0.176969 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.298797 +SourceRegion.volume = 2.716607 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.636657 +SourceRegion.volume = 0.989303 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.266771 +SourceRegion.volume = 0.709376 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.347109 +SourceRegion.volume = 0.692138 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.796207 +SourceRegion.volume = 0.405204 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.712852 +SourceRegion.volume = 1.217781 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.390636 +SourceRegion.volume = 3.073202 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.836196 +SourceRegion.volume = 0.409793 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1 +SourceRegion_add.volume = 0.812185 +SourceRegion.volume = 0.181462 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.202643 +SourceRegion.volume = 0.362707 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.069720 +test1 +SourceRegion_add.volume = 1.671936 +SourceRegion.volume = 0.032139 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.6 +test2 +test3 +SourceRegion.volume = 0.554568 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.662244 +SourceRegion.volume = 1.524707 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.701121 +SourceRegion.volume = 0.454953 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.201871 +SourceRegion.volume = 0.685003 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.421545 +SourceRegion.volume = 0.678520 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.746949 +SourceRegion.volume = 0.280340 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.973905 +SourceRegion.volume = 2.183630 +test1.1 +test1 +SourceRegion_add.volume = 2.600425 +SourceRegion.volume = 0.883775 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +test1 +SourceRegion_add.volume = 0.759817 +SourceRegion.volume = 1.552938 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.058212 +SourceRegion.volume = 0.047225 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +SourceRegion_add.volume = 1.654178 +SourceRegion.volume = 2.059160 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.173647 +SourceRegion.volume = 1.495880 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test2 +test3 +test1 +SourceRegion_add.volume = 2.218161 +SourceRegion.volume = 1.661176 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.515949 +SourceRegion.volume = 0.701385 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.186103 +SourceRegion.volume = 0.186517 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.469583 +SourceRegion.volume = 0.930644 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.640264 +SourceRegion.volume = 1.172307 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.013802 +SourceRegion.volume = 3.000473 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.663864 +SourceRegion.volume = 1.833734 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.616874 +SourceRegion.volume = 0.664139 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.555970 +SourceRegion.volume = 2.541713 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.008631 +SourceRegion.volume = 0.988809 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.721892 +SourceRegion.volume = 0.367480 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.947577 +SourceRegion.volume = 2.022651 +test1.1 +test1.2 +test1 +SourceRegion_add.volume = 0.836406 +SourceRegion.volume = 0.710992 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.206894 +SourceRegion.volume = 0.092308 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.326161 +SourceRegion.volume = 1.608543 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.431331 +SourceRegion.volume = 0.332551 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.871114 +SourceRegion.volume = 0.447340 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.724751 +SourceRegion.volume = 0.480044 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.535558 +SourceRegion.volume = 1.772712 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.022630 +SourceRegion.volume = 3.680405 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.335361 +SourceRegion.volume = 1.995734 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.207038 +SourceRegion.volume = 2.028011 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.714372 +SourceRegion.volume = 0.784463 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.451467 +SourceRegion.volume = 1.239030 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.960580 +SourceRegion.volume = 0.341492 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.470916 +SourceRegion.volume = 0.673629 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.299474 +SourceRegion.volume = 0.197202 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 5.905580 +SourceRegion.volume = 0.233591 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.663478 +SourceRegion.volume = 0.065165 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.021863 +SourceRegion.volume = 1.503241 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.439616 +SourceRegion.volume = 1.125576 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 0.013291 +SourceRegion.volume = 1.489723 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 2.132740 +SourceRegion.volume = 1.097207 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 3.454470 +SourceRegion.volume = 1.132376 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +test1 +SourceRegion_add.volume = 1.123504 +SourceRegion.volume = 0.870971 +test1.1 +test1.2 +test1.3 +test1.4 +test1.5 +test1.6 +test2 +test3 +MPI load balancing converged after 60 iterations. Max. imbalance: 0.98% + 1/1 0.81615 0.32005 +Rank 0 broadcasting 3092 source regions to other ranks. +test1 +SourceRegion_add.volume = 0.394214 diff --git a/examples/pincell_pulsed/run_pulse.py b/examples/pincell_pulsed/run_pulse.py new file mode 100644 index 00000000000..b6a61ad3d81 --- /dev/null +++ b/examples/pincell_pulsed/run_pulse.py @@ -0,0 +1,101 @@ +import matplotlib.pyplot as plt +import numpy as np +import openmc + +############################################################################### +# Create materials for the problem + +uo2 = openmc.Material(name="UO2 fuel at 2.4% wt enrichment") +uo2.set_density("g/cm3", 10.29769) +uo2.add_element("U", 1.0, enrichment=2.4) +uo2.add_element("O", 2.0) + +helium = openmc.Material(name="Helium for gap") +helium.set_density("g/cm3", 0.001598) +helium.add_element("He", 2.4044e-4) + +zircaloy = openmc.Material(name="Zircaloy 4") +zircaloy.set_density("g/cm3", 6.55) +zircaloy.add_element("Sn", 0.014, "wo") +zircaloy.add_element("Fe", 0.00165, "wo") +zircaloy.add_element("Cr", 0.001, "wo") +zircaloy.add_element("Zr", 0.98335, "wo") + +borated_water = openmc.Material(name="Borated water") +borated_water.set_density("g/cm3", 0.740582) +borated_water.add_element("B", 2.0e-4) # 3x the original pincell +borated_water.add_element("H", 5.0e-2) +borated_water.add_element("O", 2.4e-2) +borated_water.add_s_alpha_beta("c_H_in_H2O") + +############################################################################### +# Define problem geometry + +# Create cylindrical surfaces +fuel_or = openmc.ZCylinder(r=0.39218, name="Fuel OR") +clad_ir = openmc.ZCylinder(r=0.40005, name="Clad IR") +clad_or = openmc.ZCylinder(r=0.45720, name="Clad OR") + +# Create a region represented as the inside of a rectangular prism +pitch = 1.25984 +box = openmc.model.RectangularPrism(pitch, pitch, boundary_type="reflective") + +# Create cells, mapping materials to regions +fuel = openmc.Cell(fill=uo2, region=-fuel_or) +gap = openmc.Cell(fill=helium, region=+fuel_or & -clad_ir) +clad = openmc.Cell(fill=zircaloy, region=+clad_ir & -clad_or) +water = openmc.Cell(fill=borated_water, region=+clad_or & -box) + +# Create a model and assign geometry +model = openmc.Model() +model.geometry = openmc.Geometry([fuel, gap, clad, water]) + +############################################################################### +# Define problem settings + +# Set the mode +model.settings.run_mode = "fixed source" + +# Indicate how many batches and particles to run +model.settings.batches = 10 +model.settings.particles = 10000 + +# Set time cutoff (we only care about t < 100 seconds, see tally below) +model.settings.cutoff = {"time_neutron": 100} + +# Create the neutron pulse source (by default, isotropic direction, t=0) +space = openmc.stats.Point() # At the origin (0, 0, 0) +energy = openmc.stats.delta_function(14.1e6) # At 14.1 MeV +model.settings.source = openmc.IndependentSource(space=space, energy=energy) + +############################################################################### +# Define tallies + +# Create time filter +t_grid = np.insert(np.logspace(-6, 2, 100), 0, 0.0) +time_filter = openmc.TimeFilter(t_grid) + +# Tally for total neutron density in time +density_tally = openmc.Tally(name="Density") +density_tally.filters = [time_filter] +density_tally.scores = ["inverse-velocity"] + +# Add tallies to model +model.tallies = openmc.Tallies([density_tally]) + + +# Run the model +model.run(apply_tally_results=True) + +# Bin-averaged result +density_mean = density_tally.mean.ravel() / np.diff(t_grid) + +# Plot particle density versus time +fig, ax = plt.subplots() +ax.stairs(density_mean, t_grid) +ax.set_xscale("log") +ax.set_yscale("log") +ax.set_xlabel("Time [s]") +ax.set_ylabel("Total density") +ax.grid() +plt.show() diff --git a/include/openmc/bank.h b/include/openmc/bank.h index fd8fbd73ee5..c4e940bc877 100644 --- a/include/openmc/bank.h +++ b/include/openmc/bank.h @@ -20,6 +20,8 @@ extern vector source_bank; extern SharedArray surf_source_bank; +extern SharedArray collision_track_bank; + extern SharedArray fission_bank; extern vector> ifp_source_delayed_group_bank; diff --git a/include/openmc/bank_io.h b/include/openmc/bank_io.h new file mode 100644 index 00000000000..90ffd820fad --- /dev/null +++ b/include/openmc/bank_io.h @@ -0,0 +1,103 @@ +#ifndef OPENMC_BANK_IO_H +#define OPENMC_BANK_IO_H + +#include "hdf5.h" + +#include "openmc/message_passing.h" +#include "openmc/span.h" +#include "openmc/vector.h" + +#include + +#ifdef OPENMC_MPI +#include +#endif + +namespace openmc { + +template +void write_bank_dataset(const char* dataset_name, hid_t group_id, + span bank, const vector& bank_index, hid_t banktype +#ifdef OPENMC_MPI + , + MPI_Datatype mpi_dtype +#endif +) +{ + int64_t dims_size = bank_index.back(); + int64_t count_size = bank_index[mpi::rank + 1] - bank_index[mpi::rank]; + +#ifdef PHDF5 + hsize_t dims[] {static_cast(dims_size)}; + hid_t dspace = H5Screate_simple(1, dims, nullptr); + hid_t dset = H5Dcreate(group_id, dataset_name, banktype, dspace, H5P_DEFAULT, + H5P_DEFAULT, H5P_DEFAULT); + + hsize_t count[] {static_cast(count_size)}; + hid_t memspace = H5Screate_simple(1, count, nullptr); + + hsize_t start[] {static_cast(bank_index[mpi::rank])}; + H5Sselect_hyperslab(dspace, H5S_SELECT_SET, start, nullptr, count, nullptr); + + hid_t plist = H5Pcreate(H5P_DATASET_XFER); + H5Pset_dxpl_mpio(plist, H5FD_MPIO_COLLECTIVE); + + H5Dwrite(dset, banktype, memspace, dspace, plist, bank.data()); + + H5Sclose(dspace); + H5Sclose(memspace); + H5Dclose(dset); + H5Pclose(plist); +#else + if (mpi::master) { + hsize_t dims[] {static_cast(dims_size)}; + hid_t dspace = H5Screate_simple(1, dims, nullptr); + hid_t dset = H5Dcreate(group_id, dataset_name, banktype, dspace, + H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + +#ifdef OPENMC_MPI + vector temp_bank {bank.begin(), bank.end()}; +#endif + + for (int i = 0; i < mpi::n_procs; ++i) { + hsize_t count[] {static_cast(bank_index[i + 1] - bank_index[i])}; + hid_t memspace = H5Screate_simple(1, count, nullptr); + +#ifdef OPENMC_MPI + if (i > 0) { + MPI_Recv(bank.data(), count[0], mpi_dtype, i, i, mpi::intracomm, + MPI_STATUS_IGNORE); + } +#endif + + hid_t dspace_rank = H5Dget_space(dset); + hsize_t start[] {static_cast(bank_index[i])}; + H5Sselect_hyperslab( + dspace_rank, H5S_SELECT_SET, start, nullptr, count, nullptr); + + H5Dwrite(dset, banktype, memspace, dspace_rank, H5P_DEFAULT, bank.data()); + + H5Sclose(memspace); + H5Sclose(dspace_rank); + } + + H5Dclose(dset); + +#ifdef OPENMC_MPI + std::copy(temp_bank.begin(), temp_bank.end(), bank.begin()); +#endif + } +#ifdef OPENMC_MPI + else { + if (!bank.empty()) { + MPI_Send( + bank.data(), bank.size(), mpi_dtype, 0, mpi::rank, mpi::intracomm); + } + } +#endif +#endif +} + +} // namespace openmc + +#endif // OPENMC_BANK_IO_H diff --git a/include/openmc/capi.h b/include/openmc/capi.h index 54257d09385..d8041ef4149 100644 --- a/include/openmc/capi.h +++ b/include/openmc/capi.h @@ -17,6 +17,8 @@ int openmc_cell_get_fill( int openmc_cell_get_id(int32_t index, int32_t* id); int openmc_cell_get_temperature( int32_t index, const int32_t* instance, double* T); +int openmc_cell_get_density( + int32_t index, const int32_t* instance, double* rho); int openmc_cell_get_translation(int32_t index, double xyz[]); int openmc_cell_get_rotation(int32_t index, double rot[], size_t* n); int openmc_cell_get_name(int32_t index, const char** name); @@ -27,6 +29,8 @@ int openmc_cell_set_fill( int openmc_cell_set_id(int32_t index, int32_t id); int openmc_cell_set_temperature( int32_t index, double T, const int32_t* instance, bool set_contained = false); +int openmc_cell_set_density(int32_t index, double rho, const int32_t* instance, + bool set_contained = false); int openmc_cell_set_translation(int32_t index, const double xyz[]); int openmc_cell_set_rotation(int32_t index, const double rot[], size_t rot_len); int openmc_dagmc_universe_get_cell_ids( diff --git a/include/openmc/cell.h b/include/openmc/cell.h index 243ffdb863f..7b9dce9972e 100644 --- a/include/openmc/cell.h +++ b/include/openmc/cell.h @@ -223,6 +223,18 @@ class Cell { //! \return Temperature in [K] double temperature(int32_t instance = -1) const; + //! Get the density multiplier of a cell instance + //! \param[in] instance Instance index. If -1 is given, the density multiplier + //! for the first instance is returned. + //! \return Density multiplier + double density_mult(int32_t instance = -1) const; + + //! Get the density of a cell instance in g/cm3 + //! \param[in] instance Instance index. If -1 is given, the density + //! for the first instance is returned. + //! \return Density in [g/cm3] + double density(int32_t instance = -1) const; + //! Set the temperature of a cell instance //! \param[in] T Temperature in [K] //! \param[in] instance Instance index. If -1 is given, the temperature for @@ -233,6 +245,16 @@ class Cell { void set_temperature( double T, int32_t instance = -1, bool set_contained = false); + //! Set the density of a cell instance + //! \param[in] density Density [g/cm3] + //! \param[in] instance Instance index. If -1 is given, the density + //! for all instances is set. + //! \param[in] set_contained If this cell is not filled with a material, + //! collect all contained cells with material fills and set their + //! densities. + void set_density( + double density, int32_t instance = -1, bool set_contained = false); + int32_t n_instances() const; //! Set the rotation matrix of a cell instance @@ -341,6 +363,9 @@ class Cell { //! T. The units are sqrt(eV). vector sqrtkT_; + //! \brief Unitless density multiplier(s) within this cell. + vector density_mult_; + //! \brief Neighboring cells in the same universe. NeighborList neighbors_; diff --git a/include/openmc/collision_track.h b/include/openmc/collision_track.h new file mode 100644 index 00000000000..208b8f6e1f7 --- /dev/null +++ b/include/openmc/collision_track.h @@ -0,0 +1,23 @@ +#ifndef OPENMC_COLLISION_TRACK_H +#define OPENMC_COLLISION_TRACK_H + +#include + +namespace openmc { + +class Particle; + +//! Reserve space in the collision track bank according to user settings. +void collision_track_reserve_bank(); + +//! Write collision track data to disk when the bank is full or the batch ends. +void collision_track_flush_bank(); + +//! Record the current particle as a collision-track entry when applicable. +//! +//! \param particle Particle whose collision should be recorded if eligible +void collision_track_record(Particle& particle); + +} // namespace openmc + +#endif // OPENMC_COLLISION_TRACK_H diff --git a/include/openmc/constants.h b/include/openmc/constants.h index d783cc5e80e..1de8b0d1cd8 100644 --- a/include/openmc/constants.h +++ b/include/openmc/constants.h @@ -28,12 +28,13 @@ constexpr int HDF5_VERSION[] {3, 0}; constexpr array VERSION_STATEPOINT {18, 1}; constexpr array VERSION_PARTICLE_RESTART {2, 0}; constexpr array VERSION_TRACK {3, 0}; -constexpr array VERSION_SUMMARY {6, 0}; +constexpr array VERSION_SUMMARY {6, 1}; constexpr array VERSION_VOLUME {1, 0}; constexpr array VERSION_VOXEL {2, 0}; constexpr array VERSION_MGXS_LIBRARY {1, 0}; -constexpr array VERSION_PROPERTIES {1, 0}; +constexpr array VERSION_PROPERTIES {1, 1}; constexpr array VERSION_WEIGHT_WINDOWS {1, 0}; +constexpr array VERSION_COLLISION_TRACK {1, 0}; // ============================================================================ // ADJUSTABLE PARAMETERS @@ -68,6 +69,11 @@ constexpr double MIN_HITS_PER_BATCH {1.5}; // prevent extremely large adjoint source terms from being generated. constexpr double ZERO_FLUX_CUTOFF {1e-22}; +// The minimum macroscopic cross section value considered non-void for the +// random ray solver. Materials with any group with a cross section below this +// value will be converted to pure void. +constexpr double MINIMUM_MACRO_XS {1e-6}; + // ============================================================================ // MATH AND PHYSICAL CONSTANTS @@ -286,7 +292,7 @@ enum class MgxsType { // ============================================================================ // TALLY-RELATED CONSTANTS -enum class TallyResult { VALUE, SUM, SUM_SQ, SIZE }; +enum class TallyResult { VALUE, SUM, SUM_SQ, SUM_THIRD, SUM_FOURTH }; enum class TallyType { VOLUME, MESH_SURFACE, SURFACE, PULSE_HEIGHT }; diff --git a/include/openmc/distribution_multi.h b/include/openmc/distribution_multi.h index 9e84d03d57f..75126593f7d 100644 --- a/include/openmc/distribution_multi.h +++ b/include/openmc/distribution_multi.h @@ -51,6 +51,8 @@ class PolarAzimuthal : public UnitSphereDistribution { Distribution* phi() const { return phi_.get(); } private: + Direction v_ref_ {1.0, 0.0, 0.0}; //!< reference direction + Direction w_ref_; UPtrDist mu_; //!< Distribution of polar angle UPtrDist phi_; //!< Distribution of azimuthal angle }; diff --git a/include/openmc/geometry_aux.h b/include/openmc/geometry_aux.h index f60f2d649ee..4dafdea5c2c 100644 --- a/include/openmc/geometry_aux.h +++ b/include/openmc/geometry_aux.h @@ -37,6 +37,12 @@ void adjust_indices(); void assign_temperatures(); +//============================================================================== +//! Finalize densities (compute density multipliers). +//============================================================================== + +void finalize_cell_densities(); + //============================================================================== //! \brief Obtain a list of temperatures that each nuclide/thermal scattering //! table appears at in the model. Later, this list is used to determine the diff --git a/include/openmc/hdf5_interface.h b/include/openmc/hdf5_interface.h index 0092c08f8df..28b0d2b113d 100644 --- a/include/openmc/hdf5_interface.h +++ b/include/openmc/hdf5_interface.h @@ -100,8 +100,8 @@ void read_llong(hid_t obj_id, const char* name, long long* buffer, bool indep); void read_string( hid_t obj_id, const char* name, size_t slen, char* buffer, bool indep); -void read_tally_results( - hid_t group_id, hsize_t n_filter, hsize_t n_score, double* results); +void read_tally_results(hid_t group_id, hsize_t n_filter, hsize_t n_score, + hsize_t n_results, double* results); void write_attr_double(hid_t obj_id, int ndim, const hsize_t* dims, const char* name, const double* buffer); void write_attr_int(hid_t obj_id, int ndim, const hsize_t* dims, @@ -114,9 +114,9 @@ void write_int(hid_t group_id, int ndim, const hsize_t* dims, const char* name, void write_llong(hid_t group_id, int ndim, const hsize_t* dims, const char* name, const long long* buffer, bool indep); void write_string(hid_t group_id, int ndim, const hsize_t* dims, size_t slen, - const char* name, char const* buffer, bool indep); -void write_tally_results( - hid_t group_id, hsize_t n_filter, hsize_t n_score, const double* results); + const char* name, const char* buffer, bool indep); +void write_tally_results(hid_t group_id, hsize_t n_filter, hsize_t n_score, + hsize_t n_results, const double* results); } // extern "C" //============================================================================== diff --git a/include/openmc/ifp.h b/include/openmc/ifp.h index 633a262d5f9..01904d13c94 100644 --- a/include/openmc/ifp.h +++ b/include/openmc/ifp.h @@ -68,15 +68,14 @@ vector _ifp(const T& value, const vector& data) //! //! Add the IFP information in the IFP banks using the same index //! as the one used to append the fission site to the fission bank. +//! The information stored are the delayed group number and lifetime +//! of the neutron that created the fission event. //! Multithreading protection is guaranteed by the index returned by the //! thread_safe_append call in physics.cpp. //! -//! Needs to be done after the delayed group is found. -//! //! \param[in] p Particle -//! \param[in] site Fission site //! \param[in] idx Bank index from the thread_safe_append call in physics.cpp -void ifp(const Particle& p, const SourceSite& site, int64_t idx); +void ifp(const Particle& p, int64_t idx); //! Resize the IFP banks used in the simulation void resize_simulation_ifp_banks(); diff --git a/include/openmc/material.h b/include/openmc/material.h index fe587a86f9e..e36946c71b6 100644 --- a/include/openmc/material.h +++ b/include/openmc/material.h @@ -99,6 +99,13 @@ class Material { //---------------------------------------------------------------------------- // Accessors + //! Get the atom density in [atom/b-cm] + //! \return Density in [atom/b-cm] + double atom_density(int32_t i, double rho_multiplier = 1.0) const + { + return atom_density_(i) * rho_multiplier; + } + //! Get density in [atom/b-cm] //! \return Density in [atom/b-cm] double density() const { return density_; } diff --git a/include/openmc/mcpl_interface.h b/include/openmc/mcpl_interface.h index a76d72e6494..a9cce3e69af 100644 --- a/include/openmc/mcpl_interface.h +++ b/include/openmc/mcpl_interface.h @@ -38,6 +38,21 @@ vector mcpl_source_sites(std::string path); void write_mcpl_source_point(const char* filename, span source_bank, const vector& bank_index); +//! Write an MCPL collision track file +//! +//! This function writes collision track data to an MCPL file. Additional +//! collision-specific metadata (such as energy deposition, material info, etc.) +//! is stored in the file header as blob data. +//! +//! \param[in] filename Path to MCPL file +//! \param[in] collision_track_bank Vector of CollisionTrackSites to write to +//! file for this MPI rank. +//! \param[in] bank_index Pointer to vector of site index ranges over all +//! MPI ranks. +void write_mcpl_collision_track(const char* filename, + span collision_track_bank, + const vector& bank_index); + //! Check if MCPL functionality is available bool is_mcpl_interface_available(); diff --git a/include/openmc/mesh.h b/include/openmc/mesh.h index c15e2569777..5c9272e93b9 100644 --- a/include/openmc/mesh.h +++ b/include/openmc/mesh.h @@ -132,8 +132,14 @@ class Mesh { // Constructors and destructor Mesh() = default; Mesh(pugi::xml_node node); + Mesh(hid_t group); virtual ~Mesh() = default; + // Factory method for creating meshes from either an XML node or HDF5 group + template + static const std::unique_ptr& create( + T dataset, const std::string& mesh_type, const std::string& mesh_library); + // Methods //! Perform any preparation needed to support point location within the mesh virtual void prepare_for_point_location() {}; @@ -258,6 +264,7 @@ class StructuredMesh : public Mesh { public: StructuredMesh() = default; StructuredMesh(pugi::xml_node node) : Mesh {node} {}; + StructuredMesh(hid_t group) : Mesh {group} {}; virtual ~StructuredMesh() = default; using MeshIndex = std::array; @@ -423,6 +430,7 @@ class PeriodicStructuredMesh : public StructuredMesh { public: PeriodicStructuredMesh() = default; PeriodicStructuredMesh(pugi::xml_node node) : StructuredMesh {node} {}; + PeriodicStructuredMesh(hid_t group) : StructuredMesh {group} {}; Position local_coords(const Position& r) const override { @@ -442,6 +450,7 @@ class RegularMesh : public StructuredMesh { // Constructors RegularMesh() = default; RegularMesh(pugi::xml_node node); + RegularMesh(hid_t group); // Overridden methods int get_index_in_direction(double r, int i) const override; @@ -481,6 +490,8 @@ class RegularMesh : public StructuredMesh { //! Return the volume for a given mesh index double volume(const MeshIndex& ijk) const override; + int set_grid(); + // Data members double volume_frac_; //!< Volume fraction of each mesh element double element_volume_; //!< Volume of each mesh element @@ -492,6 +503,7 @@ class RectilinearMesh : public StructuredMesh { // Constructors RectilinearMesh() = default; RectilinearMesh(pugi::xml_node node); + RectilinearMesh(hid_t group); // Overridden methods int get_index_in_direction(double r, int i) const override; @@ -534,6 +546,7 @@ class CylindricalMesh : public PeriodicStructuredMesh { // Constructors CylindricalMesh() = default; CylindricalMesh(pugi::xml_node node); + CylindricalMesh(hid_t group); // Overridden methods virtual MeshIndex get_indices(Position r, bool& in_mesh) const override; @@ -598,6 +611,7 @@ class SphericalMesh : public PeriodicStructuredMesh { // Constructors SphericalMesh() = default; SphericalMesh(pugi::xml_node node); + SphericalMesh(hid_t group); // Overridden methods virtual MeshIndex get_indices(Position r, bool& in_mesh) const override; @@ -666,9 +680,9 @@ class UnstructuredMesh : public Mesh { public: // Constructors - UnstructuredMesh() {}; + UnstructuredMesh() { n_dimension_ = 3; }; UnstructuredMesh(pugi::xml_node node); - UnstructuredMesh(const std::string& filename); + UnstructuredMesh(hid_t group); static const std::string mesh_type; virtual std::string get_mesh_type() const override; @@ -775,6 +789,7 @@ class MOABMesh : public UnstructuredMesh { // Constructors MOABMesh() = default; MOABMesh(pugi::xml_node); + MOABMesh(hid_t group); MOABMesh(const std::string& filename, double length_multiplier = 1.0); MOABMesh(std::shared_ptr external_mbi); @@ -944,6 +959,7 @@ class LibMesh : public UnstructuredMesh { public: // Constructors LibMesh(pugi::xml_node node); + LibMesh(hid_t group); LibMesh(const std::string& filename, double length_multiplier = 1.0); LibMesh(libMesh::MeshBase& input_mesh, double length_multiplier = 1.0); @@ -991,25 +1007,26 @@ class LibMesh : public UnstructuredMesh { libMesh::MeshBase* mesh_ptr() const { return m_; }; -private: - void initialize() override; - void set_mesh_pointer_from_filename(const std::string& filename); - void build_eqn_sys(); - +protected: // Methods //! Translate a bin value to an element reference - const libMesh::Elem& get_element_from_bin(int bin) const; + virtual const libMesh::Elem& get_element_from_bin(int bin) const; //! Translate an element pointer to a bin index - int get_bin_from_element(const libMesh::Elem* elem) const; + virtual int get_bin_from_element(const libMesh::Elem* elem) const; + + libMesh::MeshBase* m_; //!< pointer to libMesh MeshBase instance, always set + //!< during intialization +private: + void initialize() override; + void set_mesh_pointer_from_filename(const std::string& filename); + void build_eqn_sys(); // Data members unique_ptr unique_m_ = nullptr; //!< pointer to the libMesh MeshBase instance, only used if mesh is //!< created inside OpenMC - libMesh::MeshBase* m_; //!< pointer to libMesh MeshBase instance, always set - //!< during intialization vector> pl_; //!< per-thread point locators unique_ptr @@ -1023,8 +1040,34 @@ class LibMesh : public UnstructuredMesh { libMesh::BoundingBox bbox_; //!< bounding box of the mesh libMesh::dof_id_type first_element_id_; //!< id of the first element in the mesh +}; + +class AdaptiveLibMesh : public LibMesh { +public: + // Constructor + AdaptiveLibMesh( + libMesh::MeshBase& input_mesh, double length_multiplier = 1.0); + + // Overridden methods + int n_bins() const override; + + void add_score(const std::string& var_name) override; + + void set_score_data(const std::string& var_name, const vector& values, + const vector& std_dev) override; + + void write(const std::string& filename) const override; + +protected: + // Overridden methods + int get_bin_from_element(const libMesh::Elem* elem) const override; + + const libMesh::Elem& get_element_from_bin(int bin) const override; + +private: + // Data members + const libMesh::dof_id_type num_active_; //!< cached number of active elements - const bool adaptive_; //!< whether this mesh has adaptivity enabled or not std::vector bin_to_elem_map_; //!< mapping bin indices to dof indices for active //!< elements @@ -1043,6 +1086,11 @@ class LibMesh : public UnstructuredMesh { //! \param[in] root XML node void read_meshes(pugi::xml_node root); +//! Read meshes from an HDF5 file +// +//! \param[in] group HDF5 group ("meshes" group) +void read_meshes(hid_t group); + //! Write mesh data to an HDF5 group // //! \param[in] group HDF5 group diff --git a/include/openmc/message_passing.h b/include/openmc/message_passing.h index a1641a9069e..ce993776b7b 100644 --- a/include/openmc/message_passing.h +++ b/include/openmc/message_passing.h @@ -18,6 +18,7 @@ extern bool master; #ifdef OPENMC_MPI extern MPI_Datatype source_site; +extern MPI_Datatype collision_track_site; extern MPI_Comm intracomm; #endif diff --git a/include/openmc/nuclide.h b/include/openmc/nuclide.h index 329c776d032..60b88a153bc 100644 --- a/include/openmc/nuclide.h +++ b/include/openmc/nuclide.h @@ -164,8 +164,8 @@ namespace data { // Minimum/maximum transport energy for each particle type. Order corresponds to // that of the ParticleType enum -extern array energy_min; -extern array energy_max; +extern array energy_min; +extern array energy_max; //! Minimum temperature in [K] that nuclide data is available at extern double temperature_min; diff --git a/include/openmc/particle_data.h b/include/openmc/particle_data.h index ec393845f81..fdacfa765b3 100644 --- a/include/openmc/particle_data.h +++ b/include/openmc/particle_data.h @@ -56,6 +56,25 @@ struct SourceSite { int64_t progeny_id; }; +struct CollisionTrackSite { + Position r; + Direction u; + double E; + double dE; + double time {0.0}; + double wgt {1.0}; + int event_mt {0}; + int delayed_group {0}; + int cell_id {0}; + int nuclide_id; + int material_id {0}; + int universe_id {0}; + int n_collision {0}; + ParticleType particle; + int64_t parent_id; + int64_t progeny_id; +}; + //! State of a particle used for particle track files struct TrackState { Position r; //!< Position in [cm] @@ -154,9 +173,10 @@ struct NuclideMicroXS { // Energy and temperature last used to evaluate these cross sections. If // these values have changed, then the cross sections must be re-evaluated. - double last_E {0.0}; //!< Last evaluated energy - double last_sqrtkT {0.0}; //!< Last temperature in sqrt(Boltzmann constant - //!< * temperature (eV)) + double last_E {0.0}; //!< Last evaluated energy + double last_sqrtkT {0.0}; //!< Last temperature in sqrt(Boltzmann constant + //!< * temperature (eV)) + double ncrystal_xs {-1.0}; //!< NCrystal cross section }; //============================================================================== @@ -389,6 +409,11 @@ class GeometryState { const double& sqrtkT() const { return sqrtkT_; } double& sqrtkT_last() { return sqrtkT_last_; } + // density multiplier of the current and last cell + double& density_mult() { return density_mult_; } + const double& density_mult() const { return density_mult_; } + double& density_mult_last() { return density_mult_last_; } + private: int64_t id_ {-1}; //!< Unique ID @@ -417,6 +442,9 @@ class GeometryState { double sqrtkT_ {-1.0}; //!< sqrt(k_Boltzmann * temperature) in eV double sqrtkT_last_ {0.0}; //!< last temperature + double density_mult_ {1.0}; //!< density multiplier + double density_mult_last_ {1.0}; //!< last density multiplier + #ifdef OPENMC_DAGMC_ENABLED moab::DagMC::RayHistory history_; Direction last_dir_; @@ -623,6 +651,7 @@ class ParticleData : public GeometryState { int& event_mt() { return event_mt_; } // MT number of collision const int& event_mt() const { return event_mt_; } int& delayed_group() { return delayed_group_; } // delayed group + const int& delayed_group() const { return delayed_group_; } const int& parent_nuclide() const { return parent_nuclide_; } int& parent_nuclide() { return parent_nuclide_; } // Parent nuclide diff --git a/include/openmc/physics.h b/include/openmc/physics.h index f62f43a02f2..2472d979939 100644 --- a/include/openmc/physics.h +++ b/include/openmc/physics.h @@ -10,13 +10,6 @@ namespace openmc { -//============================================================================== -// Constants -//============================================================================== - -// Monoatomic ideal-gas scattering treatment threshold -constexpr double FREE_GAS_THRESHOLD {400.0}; - //============================================================================== // Non-member functions //============================================================================== diff --git a/include/openmc/random_ray/flat_source_domain.h b/include/openmc/random_ray/flat_source_domain.h index 962d562f0ad..e6267f40380 100644 --- a/include/openmc/random_ray/flat_source_domain.h +++ b/include/openmc/random_ray/flat_source_domain.h @@ -27,8 +27,9 @@ class FlatSourceDomain { //---------------------------------------------------------------------------- // Methods - virtual void update_neutron_source(double k_eff); - double compute_k_eff(double k_eff_old) const; + virtual void update_single_neutron_source(SourceRegionHandle& srh); + virtual void update_all_neutron_sources(); + void compute_k_eff(); virtual void normalize_scalar_flux_and_volumes( double total_active_distance_per_iteration); bool is_geometry_3D(); @@ -43,7 +44,7 @@ class FlatSourceDomain { void output_to_vtk_decomp() const; void convert_external_sources(); void count_external_source_regions(); - void set_adjoint_sources(const vector& forward_flux); + void set_adjoint_sources(); void flux_swap(); virtual double evaluate_flux_at_point(Position r, int64_t sr, int g) const; double compute_fixed_source_normalization_factor() const; @@ -56,9 +57,8 @@ class FlatSourceDomain { bool is_target_void); void apply_mesh_to_cell_and_children(int32_t i_cell, int32_t mesh_idx, int32_t target_material_id, bool is_target_void); - void prepare_base_source_regions(); SourceRegionHandle get_subdivided_source_region_handle( - int64_t sr, int mesh_bin, Position r, Direction u); + SourceRegionKey sr_key, Position r, Direction u); void finalize_discovered_source_regions(); void apply_transport_stabilization(); int64_t n_source_regions() const @@ -69,6 +69,10 @@ class FlatSourceDomain { { return source_regions_.n_source_regions() * negroups_; } + int64_t lookup_base_source_region_idx(const GeometryState& p) const; + SourceRegionKey lookup_source_region_key(const GeometryState& p) const; + int64_t lookup_mesh_bin(int64_t sr, Position r) const; + int lookup_mesh_idx(int64_t sr) const; //---------------------------------------------------------------------------- // Static Data members @@ -88,6 +92,7 @@ class FlatSourceDomain { //---------------------------------------------------------------------------- // Public Data members + double k_eff_ {1.0}; // Eigenvalue bool mapped_all_tallies_ {false}; // If all source regions have been visited int64_t n_external_source_regions_ {0}; // Total number of source regions with @@ -112,14 +117,6 @@ class FlatSourceDomain { // The abstract container holding all source region-specific data SourceRegionContainer source_regions_; - // Base source region container. When source region subdivision via mesh - // is in use, this container holds the original (non-subdivided) material - // filled cell instance source regions. These are useful as they can be - // initialized with external source and mesh domain information ahead of time. - // Then, dynamically discovered source regions can be initialized by cloning - // their base region. - SourceRegionContainer base_source_regions_; - // Parallel hash map holding all source regions discovered during // a single iteration. This is a threadsafe data structure that is cleaned // out after each iteration and stored in the "source_regions_" container. @@ -136,8 +133,17 @@ class FlatSourceDomain { // Map that relates a SourceRegionKey to the external source index. This map // is used to check if there are any point sources within a subdivided source // region at the time it is discovered. - std::unordered_map - point_source_map_; + std::unordered_map, SourceRegionKey::HashFunctor> + external_point_source_map_; + + // Map that relates a base source region index to the external source index. + // This map is used to check if there are any volumetric sources within a + // subdivided source region at the time it is discovered. + std::unordered_map> external_volumetric_source_map_; + + // Map that relates a base source region index to a mesh index. This map + // is used to check which subdivision mesh is present in a source region. + std::unordered_map mesh_map_; // If transport corrected MGXS data is being used, there may be negative // in-group scattering cross sections that can result in instability in MOC @@ -149,12 +155,11 @@ class FlatSourceDomain { //---------------------------------------------------------------------------- // Methods void apply_external_source_to_source_region( - Discrete* discrete, double strength_factor, SourceRegionHandle& srh); - void apply_external_source_to_cell_instances(int32_t i_cell, - Discrete* discrete, double strength_factor, int target_material_id, - const vector& instances); - void apply_external_source_to_cell_and_children(int32_t i_cell, - Discrete* discrete, double strength_factor, int32_t target_material_id); + int src_idx, SourceRegionHandle& srh); + void apply_external_source_to_cell_instances(int32_t i_cell, int src_idx, + int target_material_id, const vector& instances); + void apply_external_source_to_cell_and_children( + int32_t i_cell, int src_idx, int32_t target_material_id); virtual void set_flux_to_flux_plus_source(int64_t sr, double volume, int g); void set_flux_to_source(int64_t sr, int g); virtual void set_flux_to_old_flux(int64_t sr, int g); @@ -167,6 +172,9 @@ class FlatSourceDomain { simulation_volume_; // Total physical volume of the simulation domain, as // defined by the 3D box of the random ray source + double + fission_rate_; // The system's fission rate (per cm^3), in eigenvalue mode + // Volumes for each tally and bin/score combination. This intermediate data // structure is used when tallying quantities that must be normalized by // volume (i.e., flux). The vector is index by tally index, while the inner 2D diff --git a/include/openmc/random_ray/linear_source_domain.h b/include/openmc/random_ray/linear_source_domain.h index 67fdd99f880..0098c782001 100644 --- a/include/openmc/random_ray/linear_source_domain.h +++ b/include/openmc/random_ray/linear_source_domain.h @@ -20,7 +20,7 @@ class LinearSourceDomain : public FlatSourceDomain { public: //---------------------------------------------------------------------------- // Methods - void update_neutron_source(double k_eff) override; + void update_single_neutron_source(SourceRegionHandle& srh) override; void normalize_scalar_flux_and_volumes( double total_active_distance_per_iteration) override; diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index 09b82887a73..2661d2443d0 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -49,17 +49,17 @@ class RandomRay : public Particle { //---------------------------------------------------------------------------- // Methods void event_advance_ray(); - void attenuate_flux(double distance, double offset = 0.0); + void attenuate_flux(double distance, bool is_active, double offset = 0.0); void attenuate_flux_inner( - double distance, int64_t sr, int mesh_bin, Position r); + double distance, bool is_active, int64_t sr, int mesh_bin, Position r); void attenuate_flux_flat_source( - SourceRegionHandle& srh, double distance, Position r); + SourceRegionHandle& srh, double distance, bool is_active, Position r); void attenuate_flux_flat_source_void( - SourceRegionHandle& srh, double distance, Position r); + SourceRegionHandle& srh, double distance, bool is_active, Position r); void attenuate_flux_linear_source( - SourceRegionHandle& srh, double distance, Position r); + SourceRegionHandle& srh, double distance, bool is_active, Position r); void attenuate_flux_linear_source_void( - SourceRegionHandle& srh, double distance, Position r); + SourceRegionHandle& srh, double distance, bool is_active, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux); @@ -77,7 +77,6 @@ class RandomRay : public Particle { static double distance_active_; // Active ray length static unique_ptr ray_source_; // Starting source for ray sampling static RandomRaySourceShape source_shape_; // Flag for linear source - static bool mesh_subdivision_enabled_; // Flag for mesh subdivision static RandomRayGeomDim geom_dim_; // Flag for 2D vs 3D geometry static RandomRaySampleMethod sample_method_; // Flag for sampling method diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 3490920bb70..8a1aa759375 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -24,11 +24,7 @@ class RandomRaySimulation { void compute_segment_correction_factors(); // void check_geometry_dimensions(); void apply_fixed_sources_and_mesh_domains(); - void prepare_fixed_sources_adjoint(vector& forward_flux, - SourceRegionContainer& forward_source_regions, - SourceRegionContainer& forward_base_source_regions, - std::unordered_map& - forward_source_region_map); + void prepare_fixed_sources_adjoint(); void simulate(); void output_simulation_results(); void instability_check( @@ -50,9 +46,6 @@ class RandomRaySimulation { // Contains all flat source region data unique_ptr domain_; - // Random ray eigenvalue - double k_eff_ {1.0}; - // Tracks the average FSR miss rate for analysis and reporting double avg_miss_rate_ {0.0}; diff --git a/include/openmc/random_ray/source_region.h b/include/openmc/random_ray/source_region.h index 01f7dcb3849..0a0b5e51c4e 100644 --- a/include/openmc/random_ray/source_region.h +++ b/include/openmc/random_ray/source_region.h @@ -344,7 +344,7 @@ class SourceRegion { //---------------------------------------------------------------------------- // Constructors SourceRegion(int negroups, bool is_linear); - SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr); + // SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr); SourceRegion(const SourceRegionHandle& handle); SourceRegion() = default; diff --git a/include/openmc/settings.h b/include/openmc/settings.h index 069d94c3b28..b369c99fef8 100644 --- a/include/openmc/settings.h +++ b/include/openmc/settings.h @@ -32,6 +32,24 @@ enum class IFPParameter { GenerationTime, }; +struct CollisionTrackConfig { + bool mcpl_write {false}; //!< Write collision tracks using MCPL? + std::unordered_set + cell_ids; //!< Cell ids where collisions will be written + std::unordered_set + mt_numbers; //!< MT Numbers where collisions will be written + std::unordered_set + universe_ids; //!< Universe IDs where collisions will be written + std::unordered_set + material_ids; //!< Material IDs where collisions will be written + std::unordered_set + nuclides; //!< Nuclides where collisions will be written + double deposited_energy_threshold {0.0}; //!< Minimum deposited energy [eV] + int64_t max_collisions { + 1000}; //!< Maximum events recorded per collision track file + int64_t max_files {1}; //!< Maximum number of collision track files +}; + //============================================================================== // Global variable declarations //============================================================================== @@ -41,6 +59,7 @@ namespace settings { // Boolean flags extern bool assume_separate; //!< assume tallies are spatially separate? extern bool check_overlaps; //!< check overlaps in geometry? +extern bool collision_track; //!< flag to use collision track feature? extern bool confidence_intervals; //!< use confidence intervals for results? extern bool create_fission_neutrons; //!< create fission neutrons (fixed source)? @@ -145,11 +164,15 @@ extern std::unordered_set statepoint_batch; //!< Batches when state should be written extern std::unordered_set source_write_surf_id; //!< Surface ids where sources will be written +extern CollisionTrackConfig collision_track_config; extern double source_rejection_fraction; //!< Minimum fraction of source sites //!< that must be accepted +extern double free_gas_threshold; //!< Threshold multiplier for free gas + //!< scattering treatment extern int max_history_splits; //!< maximum number of particle splits for weight windows +extern int max_secondaries; //!< maximum number of secondaries in the bank extern int64_t ssw_max_particles; //!< maximum number of particles to be //!< banked on surfaces per process extern int64_t ssw_max_files; //!< maximum number of surface source files diff --git a/include/openmc/simulation.h b/include/openmc/simulation.h index 3e4e24e1d06..9a6cf1b2131 100644 --- a/include/openmc/simulation.h +++ b/include/openmc/simulation.h @@ -22,6 +22,7 @@ constexpr int STATUS_EXIT_ON_TRIGGER {2}; namespace simulation { +extern int ct_current_file; //!< current collision track file index extern "C" int current_batch; //!< current batch extern "C" int current_gen; //!< current fission generation extern "C" bool initialized; //!< has simulation been initialized? diff --git a/include/openmc/tallies/tally.h b/include/openmc/tallies/tally.h index 8c088c46089..374daff92a0 100644 --- a/include/openmc/tallies/tally.h +++ b/include/openmc/tallies/tally.h @@ -106,6 +106,8 @@ class Tally { bool writable() const { return writable_; } + bool higher_moments() const { return higher_moments_; } + //---------------------------------------------------------------------------- // Other methods. @@ -190,6 +192,9 @@ class Tally { //! Whether to multiply by atom density for reaction rates bool multiply_density_ {true}; + //! Whether to accumulate higher moments (third and fourth) + bool higher_moments_ {false}; + int64_t index_; }; @@ -203,11 +208,14 @@ extern vector> tallies; extern vector active_tallies; extern vector active_analog_tallies; extern vector active_tracklength_tallies; +extern vector active_timed_tracklength_tallies; extern vector active_collision_tallies; extern vector active_meshsurf_tallies; extern vector active_surface_tallies; extern vector active_pulse_height_tallies; extern vector pulse_height_cells; +extern vector time_grid; + } // namespace model namespace simulation { @@ -239,6 +247,13 @@ void read_tallies_xml(pugi::xml_node root); //! batch to a new random variable void accumulate_tallies(); +//! Determine distance to next time boundary +// +//! \param time Current time of particle +//! \param speed Speed of particle +//! \return Distance to next time boundary (or INFTY if none) +double distance_to_time_boundary(double time, double speed); + //! Determine which tallies should be active void setup_active_tallies(); diff --git a/include/openmc/tallies/tally_scoring.h b/include/openmc/tallies/tally_scoring.h index 28f1f16223d..c3ab779e6a1 100644 --- a/include/openmc/tallies/tally_scoring.h +++ b/include/openmc/tallies/tally_scoring.h @@ -91,6 +91,16 @@ void score_analog_tally_mg(Particle& p); //! \param distance The distance in [cm] traveled by the particle void score_tracklength_tally(Particle& p, double distance); +//! Score time filtered tallies using a tracklength estimate of the flux. +// +//! This is triggered at every event (surface crossing, lattice crossing, or +//! collision) and thus cannot be done for tallies that require post-collision +//! information. +// +//! \param p The particle being tracked +//! \param total_distance The distance in [cm] traveled by the particle +void score_timed_tracklength_tally(Particle& p, double total_distance); + //! Score surface or mesh-surface tallies for particle currents. // //! \param p The particle being tracked diff --git a/include/openmc/urr.h b/include/openmc/urr.h index 3978c7b86a2..1e603715847 100644 --- a/include/openmc/urr.h +++ b/include/openmc/urr.h @@ -27,10 +27,10 @@ class UrrData { double heating; }; - Interpolation interp_; //!< interpolation type - int inelastic_flag_; //!< inelastic competition flag - int absorption_flag_; //!< other absorption flag - bool multiply_smooth_; //!< multiply by smooth cross section? + Interpolation interp_; //!< interpolation type + int inelastic_flag_; //!< inelastic competition flag + int absorption_flag_; //!< other absorption flag + bool multiply_smooth_; //!< multiply by smooth cross section? vector energy_; //!< incident energies auto n_energy() const { return energy_.size(); } diff --git a/openmc/__init__.py b/openmc/__init__.py index bb972b4e6ad..c204929c840 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -37,7 +37,7 @@ from .config import * # Import a few names from the model module -from openmc.model import Model +from openmc.model import Model, SearchResult from . import examples diff --git a/openmc/cell.py b/openmc/cell.py index 88aaebc8f27..82a034b1c8c 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -72,6 +72,10 @@ class Cell(IDManagerMixin): temperature : float or iterable of float Temperature of the cell in Kelvin. Multiple temperatures can be given to give each distributed cell instance a unique temperature. + density : float or iterable of float + Density of the cell in [g/cm3]. Multiple densities can be given to give + each distributed cell instance a unique density. Densities set here will + override the density set on materials used to fill the cell. translation : Iterable of float If the cell is filled with a universe, this array specifies a vector that is used to translate (shift) the universe. @@ -109,6 +113,7 @@ def __init__(self, cell_id=None, name='', fill=None, region=None): self._rotation = None self._rotation_matrix = None self._temperature = None + self._density = None self._translation = None self._paths = None self._num_instances = None @@ -141,6 +146,7 @@ def __repr__(self): if self.fill_type == 'material': string += '\t{0: <15}=\t{1}\n'.format('Temperature', self.temperature) + string += '\t{0: <15}=\t{1}\n'.format('Density', self.density) string += '{: <16}=\t{}\n'.format('\tTranslation', self.translation) string += '{: <16}=\t{}\n'.format('\tVolume', self.volume) @@ -257,6 +263,30 @@ def temperature(self, temperature): else: self._temperature = temperature + @property + def density(self): + return self._density + + @density.setter + def density(self, density): + # Make sure densities are greater than zero + cv.check_type('cell density', density, (Iterable, Real), none_ok=True) + if isinstance(density, Iterable): + cv.check_type('cell density', density, Iterable, Real) + for rho in density: + cv.check_greater_than('cell density', rho, 0.0, True) + elif isinstance(density, Real): + cv.check_greater_than('cell density', density, 0.0, True) + + # If this cell is filled with a universe or lattice, propagate + # densities to all cells contained. Otherwise, simply assign it. + if self.fill_type in ('universe', 'lattice'): + for c in self.get_all_cells().values(): + if c.fill_type == 'material': + c._density = density + else: + self._density = density + @property def translation(self): return self._translation @@ -525,6 +555,8 @@ def clone(self, clone_materials=True, clone_regions=True, memo=None): clone.volume = self.volume if self.temperature is not None: clone.temperature = self.temperature + if self.density is not None: + clone.density = self.density if self.translation is not None: clone.translation = self.translation if self.rotation is not None: @@ -650,6 +682,12 @@ def create_surface_elements(node, element, memo=None): else: element.set("temperature", str(self.temperature)) + if self.density is not None: + if isinstance(self.density, Iterable): + element.set("density", ' '.join(str(t) for t in self.density)) + else: + element.set("density", str(self.density)) + if self.translation is not None: element.set("translation", ' '.join(map(str, self.translation))) @@ -711,10 +749,13 @@ def from_xml_element(cls, elem, surfaces, materials, get_universe): c.temperature = temperature else: c.temperature = temperature[0] + density = get_elem_list(elem, 'density', float) + if density is not None: + c.density = density if len(density) > 1 else density[0] v = get_text(elem, 'volume') if v is not None: c.volume = float(v) - for key in ('temperature', 'rotation', 'translation'): + for key in ('temperature', 'density', 'rotation', 'translation'): values = get_elem_list(elem, key, float) if values is not None: if key == 'rotation' and len(values) == 9: diff --git a/openmc/checkvalue.py b/openmc/checkvalue.py index 4fa205b14f7..5ff2cf9ac5a 100644 --- a/openmc/checkvalue.py +++ b/openmc/checkvalue.py @@ -37,7 +37,7 @@ def check_type(name, value, expected_type, expected_iter_type=None, *, none_ok=F [t.__name__ for t in expected_type])) else: msg = (f'Unable to set "{name}" to "{value}" which is not of type "' - f'{expected_type.__name__}"') + f'{expected_type}"') raise TypeError(msg) if expected_iter_type: diff --git a/openmc/dagmc.py b/openmc/dagmc.py index d1265be2687..3cb48ddf176 100644 --- a/openmc/dagmc.py +++ b/openmc/dagmc.py @@ -302,6 +302,8 @@ def create_xml_subelement(self, xml_element, memo=None): dagmc_element = ET.Element('dagmc_universe') dagmc_element.set('id', str(self.id)) + if self.name: + dagmc_element.set('name', self.name) if self.auto_geom_ids: dagmc_element.set('auto_geom_ids', 'true') if self.auto_mat_ids: diff --git a/openmc/data/data.py b/openmc/data/data.py index 2142a5dc905..5ecadd37be0 100644 --- a/openmc/data/data.py +++ b/openmc/data/data.py @@ -324,7 +324,7 @@ def atomic_mass(isotope): # isotopes of their element (e.g. C0), calculate the atomic mass as # the sum of the atomic mass times the natural abundance of the isotopes # that make up the element. - for element in ['C', 'Zn', 'Pt', 'Os', 'Tl']: + for element in ['C', 'Zn', 'Pt', 'Os', 'Tl', 'V']: isotope_zero = element.lower() + '0' _ATOMIC_MASS[isotope_zero] = 0. for iso, abundance in isotopes(element): diff --git a/openmc/data/decay.py b/openmc/data/decay.py index 1a11d3614fe..7cd4bf43d41 100644 --- a/openmc/data/decay.py +++ b/openmc/data/decay.py @@ -13,7 +13,7 @@ from openmc.exceptions import DataError from openmc.mixin import EqualityMixin from openmc.stats import Discrete, Tabular, Univariate, combine_distributions -from .data import ATOMIC_SYMBOL, ATOMIC_NUMBER +from .data import ATOMIC_NUMBER, gnds_name from .function import INTERPOLATION_SCHEME from .endf import Evaluation, get_head_record, get_list_record, get_tab1_record @@ -126,9 +126,7 @@ def get_yields(file_obj): for j in range(n_products): Z, A = divmod(int(values[4*j]), 1000) isomeric_state = int(values[4*j + 1]) - name = ATOMIC_SYMBOL[Z] + str(A) - if isomeric_state > 0: - name += f'_m{isomeric_state}' + name = gnds_name(Z, A, isomeric_state) yield_j = ufloat(values[4*j + 2], values[4*j + 3]) yields[name] = yield_j @@ -256,10 +254,7 @@ def daughter(self): A += delta_A Z += delta_Z - if self._daughter_state > 0: - return f'{ATOMIC_SYMBOL[Z]}{A}_m{self._daughter_state}' - else: - return f'{ATOMIC_SYMBOL[Z]}{A}' + return gnds_name(Z, A, self._daughter_state) @property def parent(self): @@ -348,10 +343,7 @@ def __init__(self, ev_or_filename): self.nuclide['atomic_number'] = Z self.nuclide['mass_number'] = A self.nuclide['isomeric_state'] = metastable - if metastable > 0: - self.nuclide['name'] = f'{ATOMIC_SYMBOL[Z]}{A}_m{metastable}' - else: - self.nuclide['name'] = f'{ATOMIC_SYMBOL[Z]}{A}' + self.nuclide['name'] = gnds_name(Z, A, metastable) self.nuclide['mass'] = items[1] # AWR self.nuclide['excited_state'] = items[2] # State of the original nuclide self.nuclide['stable'] = (items[4] == 1) # Nucleus stability flag @@ -591,7 +583,7 @@ def decay_photon_energy(nuclide: str) -> Univariate | None: openmc.stats.Univariate or None Distribution of energies in [eV] of photons emitted from decay, or None if no photon source exists. Note that the probabilities represent - intensities, given as [Bq]. + intensities, given as [Bq/atom] (in other words, decay constants). """ if not _DECAY_PHOTON_ENERGY: chain_file = openmc.config.get('chain_file') diff --git a/openmc/data/neutron.py b/openmc/data/neutron.py index 95a3424ea4d..628801e5e9b 100644 --- a/openmc/data/neutron.py +++ b/openmc/data/neutron.py @@ -11,7 +11,7 @@ from . import HDF5_VERSION, HDF5_VERSION_MAJOR from .ace import Library, Table, get_table, get_metadata -from .data import ATOMIC_SYMBOL, K_BOLTZMANN, EV_PER_MEV +from .data import ATOMIC_SYMBOL, K_BOLTZMANN, EV_PER_MEV, gnds_name from .endf import ( Evaluation, SUM_RULES, get_head_record, get_tab1_record, get_evaluations) from .fission_energy import FissionEnergyRelease @@ -678,11 +678,7 @@ def from_endf(cls, ev_or_filename, covariance=False): temperature = ev.target['temperature'] # Determine name - element = ATOMIC_SYMBOL[atomic_number] - if metastable > 0: - name = f'{element}{mass_number}_m{metastable}' - else: - name = f'{element}{mass_number}' + name = gnds_name(atomic_number, mass_number, metastable) # Instantiate incident neutron data data = cls(name, atomic_number, mass_number, metastable, diff --git a/openmc/deplete/__init__.py b/openmc/deplete/__init__.py index 8a9509e9009..052e2245963 100644 --- a/openmc/deplete/__init__.py +++ b/openmc/deplete/__init__.py @@ -17,6 +17,7 @@ from .results import * from .integrators import * from .transfer_rates import * +from .r2s import * from . import abc from . import cram from . import helpers diff --git a/openmc/deplete/abc.py b/openmc/deplete/abc.py index e6d4c151273..32f468306db 100644 --- a/openmc/deplete/abc.py +++ b/openmc/deplete/abc.py @@ -12,6 +12,7 @@ from inspect import signature from numbers import Real, Integral from pathlib import Path +from textwrap import dedent import time from typing import Optional, Union, Sequence from warnings import warn @@ -526,7 +527,7 @@ class Integrator(ABC): r"""Abstract class for solving the time-integration for depletion """ - _params = r""" + _params = dedent(r""" Parameters ---------- operator : openmc.deplete.abc.TransportOperator @@ -617,7 +618,7 @@ class Integrator(ABC): .. versionadded:: 0.15.3 - """ + """) def __init__( self, @@ -630,17 +631,7 @@ def __init__( solver: str = "cram48", continue_timesteps: bool = False, ): - # Check number of stages previously used - if operator.prev_res is not None: - res = operator.prev_res[-1] - if res.data.shape[0] != self._num_stages: - raise ValueError( - "{} incompatible with previous restart calculation. " - "Previous scheme used {} intermediate solutions, while " - "this uses {}".format( - self.__class__.__name__, res.data.shape[0], - self._num_stages)) - elif continue_timesteps: + if continue_timesteps and operator.prev_res is None: raise ValueError("Continuation run requires passing prev_results.") self.operator = operator self.chain = operator.chain @@ -774,12 +765,8 @@ def __call__( ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_list : list of list of numpy.ndarray - Concentrations at each of the intermediate points with - the final concentration as the last element - op_results : list of openmc.deplete.OperatorResult - Eigenvalue and reaction rates from intermediate transport - simulations + n_end : list of numpy.ndarray + Concentrations at end of timestep """ @property @@ -810,9 +797,9 @@ def _get_bos_data_from_restart(self, source_rate, bos_conc): """Get beginning of step concentrations, reaction rates from restart""" res = self.operator.prev_res[-1] # Depletion methods expect list of arrays - bos_conc = list(res.data[0]) - rates = res.rates[0] - k = ufloat(res.k[0, 0], res.k[0, 1]) + bos_conc = list(res.data) + rates = res.rates + k = ufloat(res.k[0], res.k[1]) if res.source_rate != 0.0: # Scale reaction rates by ratio of source rates @@ -854,7 +841,8 @@ def integrate( self, final_step: bool = True, output: bool = True, - path: PathLike = 'depletion_results.h5' + path: PathLike = 'depletion_results.h5', + write_rates: bool = False ): """Perform the entire depletion process across all steps @@ -873,6 +861,11 @@ def integrate( Path to file to write. Defaults to 'depletion_results.h5'. .. versionadded:: 0.15.0 + write_rates : bool, optional + Whether reaction rates should be written to the results file for + each step. Defaults to ``False`` to reduce file size. + + .. versionadded:: 0.15.3 """ with change_directory(self.operator.output_dir): n = self.operator.initial_condition() @@ -889,18 +882,22 @@ def integrate( n, res = self._get_bos_data_from_restart(source_rate, n) # Solve Bateman equations over time interval - proc_time, n_list, res_list = self(n, res.rates, dt, source_rate, i) - - # Insert BOS concentration, transport results - n_list.insert(0, n) - res_list.insert(0, res) - - # Remove actual EOS concentration for next step - n = n_list.pop() - - StepResult.save(self.operator, n_list, res_list, [t, t + dt], - source_rate, self._i_res + i, proc_time, path) + proc_time, n_end = self(n, res.rates, dt, source_rate, i) + + StepResult.save( + self.operator, + n, + res, + [t, t + dt], + source_rate, + self._i_res + i, + proc_time, + write_rates=write_rates, + path=path + ) + # Update for next step + n = n_end t += dt # Final simulation -- in the case that final_step is False, a zero @@ -909,9 +906,18 @@ def integrate( # solve) if output and final_step and comm.rank == 0: print(f"[openmc.deplete] t={t} (final operator evaluation)") - res_list = [self.operator(n, source_rate if final_step else 0.0)] - StepResult.save(self.operator, [n], res_list, [t, t], - source_rate, self._i_res + len(self), proc_time, path) + res_final = self.operator(n, source_rate if final_step else 0.0) + StepResult.save( + self.operator, + n, + res_final, + [t, t], + source_rate, + self._i_res + len(self), + proc_time, + write_rates=write_rates, + path=path + ) self.operator.write_bos_data(len(self) + self._i_res) self.operator.finalize() @@ -1012,6 +1018,36 @@ def add_external_source_rate( material, composition, rate, rate_units, timesteps) + def add_redox(self, material, buffer, oxidation_states, timesteps=None): + """Add redox control to depletable material. + + Parameters + ---------- + material : openmc.Material or str or int + Depletable material + buffer : dict + Dictionary of buffer nuclides used to maintain redox balance. Keys + are nuclide names (strings) and values are their respective + fractions (float) that collectively sum to 1. + oxidation_states : dict + User-defined oxidation states for elements. Keys are element symbols + (e.g., 'H', 'He'), and values are their corresponding oxidation + states as integers (e.g., +1, 0). + timesteps : list of int, optional + List of timestep indices where to set external source rates. + Defaults to None, which means the external source rate is set for + all timesteps. + """ + if self.transfer_rates is None: + if hasattr(self.operator, 'model'): + materials = self.operator.model.materials + elif hasattr(self.operator, 'materials'): + materials = self.operator.materials + self.transfer_rates = TransferRates( + self.operator, materials, len(self.timesteps)) + + self.transfer_rates.set_redox(material, buffer, oxidation_states, timesteps) + @add_params class SIIntegrator(Integrator): r"""Abstract class for the Stochastic Implicit Euler integrators @@ -1020,7 +1056,7 @@ class SIIntegrator(Integrator): the number of particles used in initial transport calculation """ - _params = r""" + _params = dedent(r""" Parameters ---------- operator : openmc.deplete.abc.TransportOperator @@ -1108,7 +1144,7 @@ class SIIntegrator(Integrator): .. versionadded:: 0.12 - """ + """) def __init__( self, @@ -1140,10 +1176,40 @@ def _get_bos_data_from_operator(self, step_index, step_power, n_bos): self.operator.settings.particles //= self.n_steps return inherited + @abstractmethod + def __call__(self, n, rates, dt, source_rate, i): + """Perform the integration across one time step + + Parameters + ---------- + n : list of numpy.ndarray + List of atom number arrays for each material. Each array has + shape ``(n_nucs,)`` where ``n_nucs`` is the number of nuclides + rates : openmc.deplete.ReactionRates + Reaction rates (from transport operator) + dt : float + Time step in [s] + source_rate : float + Power in [W] or source rate in [neutron/sec] + i : int + Current time step index + + Returns + ------- + proc_time : float + Time spent in transport simulation + n_end : list of numpy.ndarray + Updated atom number densities for each material + op_result : OperatorResult + Eigenvalue and reaction rates resulting from transport simulation + + """ + def integrate( self, output: bool = True, - path: PathLike = "depletion_results.h5" + path: PathLike = "depletion_results.h5", + write_rates: bool = False ): """Perform the entire depletion process across all steps @@ -1155,11 +1221,17 @@ def integrate( Path to file to write. Defaults to 'depletion_results.h5'. .. versionadded:: 0.15.0 + write_rates : bool, optional + Whether reaction rates should be written to the results file for + each step. Defaults to ``False`` to reduce file size. + + .. versionadded:: 0.15.3 """ with change_directory(self.operator.output_dir): n = self.operator.initial_condition() t, self._i_res = self._get_start_data() + res_end = None # Will be set in first iteration for i, (dt, p) in enumerate(self): if output: print(f"[openmc.deplete] t={t} s, dt={dt} s, source={p}") @@ -1169,28 +1241,38 @@ def integrate( n, res = self._get_bos_data_from_operator(i, p, n) else: n, res = self._get_bos_data_from_restart(p, n) - else: - # Pull rates, k from previous iteration w/o - # re-running transport - res = res_list[-1] # defined in previous i iteration - - proc_time, n_list, res_list = self(n, res.rates, dt, p, i) - # Insert BOS concentration, transport results - n_list.insert(0, n) - res_list.insert(0, res) - - # Remove actual EOS concentration for next step - n = n_list.pop() - - StepResult.save(self.operator, n_list, res_list, [t, t + dt], - p, self._i_res + i, proc_time, path) + proc_time, n_end, res_end = self(n, res.rates, dt, p, i) + + StepResult.save( + self.operator, + n, + res, + [t, t + dt], + p, + self._i_res + i, + proc_time, + write_rates=write_rates, + path=path + ) + # Update for next step + n = n_end + res = res_end t += dt # No final simulation for SIE, use last iteration results - StepResult.save(self.operator, [n], [res_list[-1]], [t, t], - p, self._i_res + len(self), proc_time, path) + StepResult.save( + self.operator, + n, + res_end, + [t, t], + p, + self._i_res + len(self), + proc_time, + write_rates=write_rates, + path=path + ) self.operator.write_bos_data(self._i_res + len(self)) self.operator.finalize() diff --git a/openmc/deplete/chain.py b/openmc/deplete/chain.py index f1a23317fb9..873d7ca8921 100644 --- a/openmc/deplete/chain.py +++ b/openmc/deplete/chain.py @@ -7,6 +7,7 @@ from io import StringIO from itertools import chain import math +import numpy as np import re from collections import defaultdict, namedtuple from collections.abc import Mapping, Iterable @@ -627,9 +628,15 @@ def form_matrix(self, rates, fission_yields=None): """ reactions = set() - # Use DOK matrix as intermediate representation for matrix n = len(self) - matrix = sp.dok_matrix((n, n)) + + # we accumulate indices and value entries for everything and create the matrix + # in one step at the end to avoid expensive index checks scipy otherwise does. + rows, cols, vals = [], [], [] + def setval(i, j, val): + rows.append(i) + cols.append(j) + vals.append(val) if fission_yields is None: fission_yields = self.get_default_fission_yields() @@ -639,7 +646,7 @@ def form_matrix(self, rates, fission_yields=None): if nuc.half_life is not None: decay_constant = math.log(2) / nuc.half_life if decay_constant != 0.0: - matrix[i, i] -= decay_constant + setval(i, i, -decay_constant) # Gain from radioactive decay if nuc.n_decay_modes != 0: @@ -650,19 +657,19 @@ def form_matrix(self, rates, fission_yields=None): if branch_val != 0.0: if target is not None: k = self.nuclide_dict[target] - matrix[k, i] += branch_val + setval(k, i, branch_val) # Produce alphas and protons from decay if 'alpha' in decay_type: k = self.nuclide_dict.get('He4') if k is not None: count = decay_type.count('alpha') - matrix[k, i] += count * branch_val + setval(k, i, count * branch_val) elif 'p' in decay_type: k = self.nuclide_dict.get('H1') if k is not None: count = decay_type.count('p') - matrix[k, i] += count * branch_val + setval(k, i, count * branch_val) if nuc.name in rates.index_nuc: # Extract all reactions for this nuclide in this cell @@ -679,13 +686,13 @@ def form_matrix(self, rates, fission_yields=None): if r_type not in reactions: reactions.add(r_type) if path_rate != 0.0: - matrix[i, i] -= path_rate + setval(i, i, -path_rate) # Gain term; allow for total annihilation for debug purposes if r_type != 'fission': if target is not None and path_rate != 0.0: k = self.nuclide_dict[target] - matrix[k, i] += path_rate * br + setval(k, i, path_rate * br) # Determine light nuclide production, e.g., (n,d) should # produce H2 @@ -693,20 +700,76 @@ def form_matrix(self, rates, fission_yields=None): for light_nuc in light_nucs: k = self.nuclide_dict.get(light_nuc) if k is not None: - matrix[k, i] += path_rate * br + setval(k, i, path_rate * br) else: for product, y in fission_yields[nuc.name].items(): yield_val = y * path_rate if yield_val != 0.0: k = self.nuclide_dict[product] - matrix[k, i] += yield_val + setval(k, i, yield_val) # Clear set of reactions reactions.clear() # Return CSC representation instead of DOK - return matrix.tocsc() + return sp.csc_matrix((vals, (rows, cols)), shape=(n, n)) + + def add_redox_term(self, matrix, buffer, oxidation_states): + r"""Adds a redox term to the depletion matrix from data contained in + the matrix itself and a few user-inputs. + + The redox term to add to the buffer nuclide :math:`N_j` can be written + as: + + .. math:: + \frac{dN_j(t)}{dt} = \cdots - \frac{1}{OS_j}\sum_i N_i a_{ij} + \cdot OS_i + + where :math:`OS` is the oxidation states vector and :math:`a_{ij}` the + corresponding term in the Bateman matrix. + + Parameters + ---------- + matrix : scipy.sparse.csc_matrix + Sparse matrix representing depletion + buffer : dict + Dictionary of buffer nuclides used to maintain anoins net balance. + Keys are nuclide names (strings) and values are their respective + fractions (float) that collectively sum to 1. + oxidation_states : dict + User-defined oxidation states for elements. Keys are element symbols + (e.g., 'H', 'He'), and values are their corresponding oxidation + states as integers (e.g., +1, 0). + Returns + ------- + matrix : scipy.sparse.csc_matrix + Sparse matrix with redox term added + """ + # Elements list with the same size as self.nuclides + elements = [re.split(r'\d+', nuc.name)[0] for nuc in self.nuclides] + + # Match oxidation states with all elements and add 0 if not data + os = np.array([oxidation_states[elm] if elm in oxidation_states else 0 + for elm in elements]) + + # Buffer idx with nuclide index as value + buffer_idx = {nuc: self.nuclide_dict[nuc] for nuc in buffer} + array = matrix.toarray() + redox_change = np.array([]) + + # calculate the redox array + for i in range(len(self)): + # Net redox impact of reaction: multiply the i-th column of the + # depletion matrix by the oxidation states + redox_change = np.append(redox_change, sum(array[:, i]*os)) + + # Subtract redox vector to the buffer nuclides in the matrix scaling by + # their respective oxidation states + for nuc, idx in buffer_idx.items(): + array[idx] -= redox_change * buffer[nuc] / os[idx] + + return sp.csc_matrix(array) def form_rr_term(self, tr_rates, current_timestep, mats): """Function to form the transfer rate term matrices. diff --git a/openmc/deplete/d1s.py b/openmc/deplete/d1s.py index 311bc2d69cd..bc99fc42dba 100644 --- a/openmc/deplete/d1s.py +++ b/openmc/deplete/d1s.py @@ -5,7 +5,7 @@ """ -from copy import deepcopy +from copy import copy from typing import Sequence from math import log, prod @@ -108,14 +108,15 @@ def time_correction_factors( # Create a 2D array for the time correction factors h = np.zeros((n_timesteps, n_nuclides)) - for i, (dt, rate) in enumerate(zip(timesteps, source_rates)): - # Precompute the exponential terms. Since (1 - exp(-x)) is susceptible to - # roundoff error, use expm1 instead (which computes exp(x) - 1) - g = np.exp(-decay_rate*dt) - one_minus_g = -np.expm1(-decay_rate*dt) + # Precompute all exponential terms with same shape as h + decay_dt = decay_rate[np.newaxis, :] * timesteps[:, np.newaxis] + g = np.exp(-decay_dt) + one_minus_g = -np.expm1(-decay_dt) + # Apply recurrence relation step by step + for i in range(len(timesteps)): # Eq. (4) in doi:10.1016/j.fusengdes.2019.111399 - h[i + 1] = rate*one_minus_g + h[i]*g + h[i + 1] = source_rates[i] * one_minus_g[i] + h[i] * g[i] return {nuclides[i]: h[:, i] for i in range(n_nuclides)} @@ -163,8 +164,12 @@ def apply_time_correction( radionuclides = [str(x) for x in tally.filters[i_filter].bins] tcf = np.array([time_correction_factors[x][index] for x in radionuclides]) - # Create copy of tally - new_tally = deepcopy(tally) + # Force tally results to be read and std_dev to be computed + tally.std_dev + + # Create shallow copy of tally + new_tally = copy(tally) + new_tally._filters = copy(tally._filters) # Determine number of bins in other filters n_bins_before = prod([f.num_bins for f in tally.filters[:i_filter]]) @@ -176,32 +181,33 @@ def apply_time_correction( shape = (n_bins_before, n_radionuclides, n_bins_after, n_nuclides, n_scores) tally_sum = new_tally.sum.reshape(shape) tally_sum_sq = new_tally.sum_sq.reshape(shape) + tally_mean = new_tally.mean.reshape(shape) + tally_std_dev = new_tally.std_dev.reshape(shape) # Apply TCF, broadcasting to the correct dimensions tcf.shape = (1, -1, 1, 1, 1) new_tally._sum = tally_sum * tcf new_tally._sum_sq = tally_sum_sq * (tcf*tcf) - new_tally._mean = None - new_tally._std_dev = None + new_tally._mean = tally_mean * tcf + new_tally._std_dev = tally_std_dev * tcf shape = (-1, n_nuclides, n_scores) if sum_nuclides: - # Query the mean and standard deviation - mean = new_tally.mean - std_dev = new_tally.std_dev - # Sum over parent nuclides (note that when combining different bins for # parent nuclide, we can't work directly on sum_sq) - new_tally._mean = mean.sum(axis=1).reshape(shape) - new_tally._std_dev = np.linalg.norm(std_dev, axis=1).reshape(shape) + new_tally._mean = new_tally.mean.sum(axis=1).reshape(shape) + new_tally._std_dev = np.linalg.norm(new_tally.std_dev, axis=1).reshape(shape) new_tally._derived = True # Remove ParentNuclideFilter new_tally.filters.pop(i_filter) else: + # Change shape back to (filter combinations, nuclides, scores) new_tally._sum.shape = shape new_tally._sum_sq.shape = shape + new_tally._mean.shape = shape + new_tally._std_dev.shape = shape return new_tally diff --git a/openmc/deplete/integrators.py b/openmc/deplete/integrators.py index 000cb2c41c0..25e64cb2ef8 100644 --- a/openmc/deplete/integrators.py +++ b/openmc/deplete/integrators.py @@ -22,7 +22,6 @@ class PredictorIntegrator(Integrator): .. math:: \mathbf{n}_{i+1} = \exp\left(h\mathbf{A}(\mathbf{n}_i) \right) \mathbf{n}_i - """ _num_stages = 1 @@ -47,15 +46,12 @@ def __call__(self, n, rates, dt, source_rate, _i=None): ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_list : list of list of numpy.ndarray + n_end : list of numpy.ndarray Concentrations at end of interval - op_results : empty list - Kept for consistency with API. No intermediate calls to operator - with predictor """ proc_time, n_end = self._timed_deplete(n, rates, dt, _i) - return proc_time, [n_end], [] + return proc_time, n_end @add_params @@ -99,11 +95,8 @@ def __call__(self, n, rates, dt, source_rate, _i=None): ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_list : list of list of numpy.ndarray - Concentrations at each of the intermediate points with - the final concentration as the last element - op_results : list of openmc.deplete.OperatorResult - Eigenvalue and reaction rates from transport simulations + n_end : list of numpy.ndarray + Concentrations at end of interval """ # deplete across first half of interval time0, n_middle = self._timed_deplete(n, rates, dt / 2, _i) @@ -113,7 +106,7 @@ def __call__(self, n, rates, dt, source_rate, _i=None): # MOS reaction rates time1, n_end = self._timed_deplete(n, res_middle.rates, dt, _i) - return time0 + time1, [n_middle, n_end], [res_middle] + return time0 + time1, n_end @add_params @@ -163,12 +156,8 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, _i=None): ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_list : list of numpy.ndarray - Concentrations at each of the intermediate points with - the final concentration as the last element - op_results : list of openmc.deplete.OperatorResult - Eigenvalue and reaction rates from intermediate transport - simulations + n_end : list of numpy.ndarray + Concentrations at end of interval """ # Step 1: deplete with matrix 1/2*A(y0) time1, n_eos1 = self._timed_deplete( @@ -193,9 +182,7 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, _i=None): time5, n_eos5 = self._timed_deplete( n_inter, list_rates, dt, _i, matrix_func=cf4_f4) - return (time1 + time2 + time3 + time4 + time5, - [n_eos1, n_eos2, n_eos3, n_eos5], - [res1, res2, res3]) + return time1 + time2 + time3 + time4 + time5, n_eos5 @add_params @@ -241,12 +228,8 @@ def __call__(self, n_bos, rates, dt, source_rate, _i=None): ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_list : list of list of numpy.ndarray - Concentrations at each of the intermediate points with - the final concentration as the last element - op_results : list of openmc.deplete.OperatorResult - Eigenvalue and reaction rates from intermediate transport - simulation + n_end : list of numpy.ndarray + Concentrations at end of interval """ # deplete to end using BOS rates proc_time, n_ce = self._timed_deplete(n_bos, rates, dt, _i) @@ -261,7 +244,7 @@ def __call__(self, n_bos, rates, dt, source_rate, _i=None): time_le2, n_end = self._timed_deplete( n_inter, list_rates, dt, _i, matrix_func=celi_f2) - return proc_time + time_le1 + time_le1, [n_ce, n_end], [res_ce] + return proc_time + time_le1 + time_le2, n_end @add_params @@ -307,12 +290,8 @@ def __call__(self, n, rates, dt, source_rate, _i=None): ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_list : list of list of numpy.ndarray - Concentrations at each of the intermediate points with - the final concentration as the last element - op_results : list of openmc.deplete.OperatorResult - Eigenvalue and reaction rates from intermediate transport - simulations + n_end : list of numpy.ndarray + Concentrations at end of interval """ # Step 1: deplete with matrix A(y0) / 2 @@ -331,7 +310,7 @@ def __call__(self, n, rates, dt, source_rate, _i=None): list_rates = list(zip(rates, res1.rates, res2.rates, res3.rates)) time4, n4 = self._timed_deplete(n, list_rates, dt, _i, matrix_func=rk4_f4) - return (time1 + time2 + time3 + time4, [n1, n2, n3, n4], [res1, res2, res3]) + return time1 + time2 + time3 + time4, n4 @add_params @@ -389,12 +368,8 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, i): ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_list : list of list of numpy.ndarray - Concentrations at each of the intermediate points with - the final concentration as the last element - op_results : list of openmc.deplete.OperatorResult - Eigenvalue and reaction rates from intermediate transport - simulation + n_end : list of numpy.ndarray + Concentrations at end of interval """ if i == 0: if self._i_res < 1: # need at least previous transport solution @@ -403,7 +378,7 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, i): self, n_bos, bos_rates, dt, source_rate, i) prev_res = self.operator.prev_res[-2] prev_dt = self.timesteps[i] - prev_res.time[0] - self._prev_rates = prev_res.rates[0] + self._prev_rates = prev_res.rates else: prev_dt = self.timesteps[i - 1] @@ -432,9 +407,7 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, i): # store updated rates self._prev_rates = copy.deepcopy(bos_res.rates) - return ( - time1 + time2 + time3 + time4, [n_eos0, n_eos1], - [bos_res, res_inter]) + return time1 + time2 + time3 + time4, n_eos1 @add_params @@ -471,10 +444,9 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, _i=None): ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_bos_list : list of list of numpy.ndarray - Concentrations at each of the intermediate points with - the final concentration as the last element - op_results : list of openmc.deplete.OperatorResult + n_end : list of numpy.ndarray + Concentrations at end of interval + op_result : openmc.deplete.OperatorResult Eigenvalue and reaction rates from intermediate transport simulations """ @@ -500,7 +472,7 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, _i=None): proc_time += time1 + time2 # end iteration - return proc_time, [n_eos, n_inter], [res_bar] + return proc_time, n_inter, res_bar @add_params @@ -537,10 +509,9 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, i): ------- proc_time : float Time spent in CRAM routines for all materials in [s] - n_list : list of list of numpy.ndarray - Concentrations at each of the intermediate points with - the final concentration as the last element - op_results : list of openmc.deplete.OperatorResult + n_end : list of numpy.ndarray + Concentrations at end of interval + op_result : openmc.deplete.OperatorResult Eigenvalue and reaction rates from intermediate transport simulation """ @@ -552,7 +523,7 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, i): self, n_bos, bos_rates, dt, source_rate, i) prev_res = self.operator.prev_res[-2] prev_dt = self.timesteps[i] - prev_res.time[0] - self._prev_rates = prev_res.rates[0] + self._prev_rates = prev_res.rates else: prev_dt = self.timesteps[i - 1] @@ -585,7 +556,10 @@ def __call__(self, n_bos, bos_rates, dt, source_rate, i): n_inter, inputs, dt, i, matrix_func=leqi_f4) proc_time += time1 + time2 - return proc_time, [n_eos, n_inter], [res_bar] + # Store updated rates for next step + self._prev_rates = copy.deepcopy(bos_rates) + + return proc_time, n_inter, res_bar integrator_by_name = { diff --git a/openmc/deplete/microxs.py b/openmc/deplete/microxs.py index 4ce199f0cc1..879a2d4ee99 100644 --- a/openmc/deplete/microxs.py +++ b/openmc/deplete/microxs.py @@ -8,8 +8,9 @@ from collections.abc import Sequence import shutil from tempfile import TemporaryDirectory -from typing import Union, TypeAlias +from typing import Union, TypeAlias, Self +import h5py import pandas as pd import numpy as np @@ -20,6 +21,7 @@ import openmc from .chain import Chain, REACTIONS, _get_chain from .coupled_operator import _find_cross_sections, _get_nuclides_with_data +from ..utility_funcs import h5py_file_or_group import openmc.lib from openmc.mpi import comm @@ -47,6 +49,7 @@ def get_microxs_and_flux( reaction_rate_mode: str = 'direct', chain_file: PathLike | Chain | None = None, path_statepoint: PathLike | None = None, + path_input: PathLike | None = None, run_kwargs=None ) -> tuple[list[np.ndarray], list[MicroXS]]: """Generate microscopic cross sections and fluxes for multiple domains. @@ -59,7 +62,7 @@ def get_microxs_and_flux( .. versionadded:: 0.14.0 .. versionchanged:: 0.15.3 - Added `reaction_rate_mode` and `path_statepoint` arguments. + Added `reaction_rate_mode`, `path_statepoint`, `path_input` arguments. Parameters ---------- @@ -90,6 +93,10 @@ def get_microxs_and_flux( Path to write the statepoint file from the neutron transport solve to. By default, The statepoint file is written to a temporary directory and is not kept. + path_input : path-like, optional + Path to write the model XML file from the neutron transport solve to. + By default, the model XML file is written to a temporary directory and + not kept. run_kwargs : dict, optional Keyword arguments passed to :meth:`openmc.Model.run` @@ -108,7 +115,7 @@ def get_microxs_and_flux( check_value('reaction_rate_mode', reaction_rate_mode, {'direct', 'flux'}) # Save any original tallies on the model - original_tallies = model.tallies + original_tallies = list(model.tallies) # Determine what reactions and nuclides are available in chain chain = _get_chain(chain_file) @@ -163,14 +170,16 @@ def get_microxs_and_flux( # Reinitialize with tallies openmc.lib.init(intracomm=comm) - # create temporary run with TemporaryDirectory() as temp_dir: - if run_kwargs is None: - run_kwargs = {} - else: - run_kwargs = dict(run_kwargs) - run_kwargs.setdefault('cwd', temp_dir) + # Indicate to run in temporary directory unless being executed through + # openmc.lib, in which case we don't need to specify the cwd + run_kwargs = dict(run_kwargs) if run_kwargs else {} + if not openmc.lib.is_initialized: + run_kwargs.setdefault('cwd', temp_dir) + + # Run transport simulation and synchronize statepoint_path = model.run(**run_kwargs) + comm.barrier() if comm.rank == 0: # Move the statepoint file if it is being saved to a specific path @@ -178,15 +187,22 @@ def get_microxs_and_flux( shutil.move(statepoint_path, path_statepoint) statepoint_path = path_statepoint - with StatePoint(statepoint_path) as sp: - if reaction_rate_mode == 'direct': - rr_tally = sp.tallies[rr_tally.id] - rr_tally._read_results() - flux_tally = sp.tallies[flux_tally.id] - flux_tally._read_results() + # Export the model to path_input if provided + if path_input is not None: + model.export_to_model_xml(path_input) + + # Broadcast updated statepoint path to all ranks + statepoint_path = comm.bcast(statepoint_path) + + # Read in tally results (on all ranks) + with StatePoint(statepoint_path) as sp: + if reaction_rate_mode == 'direct': + rr_tally = sp.tallies[rr_tally.id] + rr_tally._read_results() + flux_tally = sp.tallies[flux_tally.id] + flux_tally._read_results() # Get flux values and make energy groups last dimension - flux_tally = comm.bcast(flux_tally) flux = flux_tally.get_reshaped_data() # (domains, groups, 1, 1) flux = np.moveaxis(flux, 1, -1) # (domains, 1, 1, groups) @@ -195,7 +211,6 @@ def get_microxs_and_flux( if reaction_rate_mode == 'direct': # Get reaction rates - rr_tally = comm.bcast(rr_tally) reaction_rates = rr_tally.get_reshaped_data() # (domains, groups, nuclides, reactions) # Make energy groups last dimension @@ -345,13 +360,17 @@ def from_multigroup_flux( reactions = chain.reactions mts = [REACTION_MT[name] for name in reactions] - # Normalize multigroup flux - multigroup_flux = np.array(multigroup_flux) - multigroup_flux /= multigroup_flux.sum() - # Create 3D array for microscopic cross sections microxs_arr = np.zeros((len(nuclides), len(mts), 1)) + # If flux is zero, safely return zero cross sections + multigroup_flux = np.array(multigroup_flux) + if (flux_sum := multigroup_flux.sum()) == 0.0: + return cls(microxs_arr, nuclides, reactions) + + # Normalize multigroup flux + multigroup_flux /= flux_sum + # Compute microscopic cross sections within a temporary session with openmc.lib.TemporarySession(**init_kwargs): # For each nuclide and reaction, compute the flux-averaged xs @@ -383,8 +402,7 @@ def from_csv(cls, csv_file, **kwargs): MicroXS """ - if 'float_precision' not in kwargs: - kwargs['float_precision'] = 'round_trip' + kwargs.setdefault('float_precision', 'round_trip') df = pd.read_csv(csv_file, **kwargs) df.set_index(['nuclides', 'reactions', 'groups'], inplace=True) @@ -419,3 +437,96 @@ def to_csv(self, *args, **kwargs): ) df = pd.DataFrame({'xs': self.data.flatten()}, index=multi_index) df.to_csv(*args, **kwargs) + + def to_hdf5(self, group_or_filename: h5py.Group | PathLike, **kwargs): + """Export microscopic cross section data to HDF5 format + + Parameters + ---------- + group_or_filename : h5py.Group or path-like + HDF5 group or filename to write to + kwargs : dict, optional + Keyword arguments to pass to :meth:`h5py.Group.create_dataset`. + Defaults to {'compression': 'lzf'}. + + """ + kwargs.setdefault('compression', 'lzf') + + with h5py_file_or_group(group_or_filename, 'w') as group: + # Store cross section data as 3D dataset + group.create_dataset('data', data=self.data, **kwargs) + + # Store metadata as datasets using string encoding + group.create_dataset('nuclides', data=np.array(self.nuclides, dtype='S')) + group.create_dataset('reactions', data=np.array(self.reactions, dtype='S')) + + @classmethod + def from_hdf5(cls, group_or_filename: h5py.Group | PathLike) -> Self: + """Load data from an HDF5 file + + Parameters + ---------- + group_or_filename : h5py.Group or str or PathLike + HDF5 group or path to HDF5 file. If given as an h5py.Group, the + data is read from that group. If given as a string, it is assumed + to be the filename for the HDF5 file. + + Returns + ------- + MicroXS + """ + + with h5py_file_or_group(group_or_filename, 'r') as group: + # Read data from HDF5 group + data = group['data'][:] + nuclides = [nuc.decode('utf-8') for nuc in group['nuclides'][:]] + reactions = [rxn.decode('utf-8') for rxn in group['reactions'][:]] + + return cls(data, nuclides, reactions) + + +def write_microxs_hdf5( + micros: Sequence[MicroXS], + filename: PathLike, + names: Sequence[str] | None = None, + **kwargs +): + """Write multiple MicroXS objects to an HDF5 file + + Parameters + ---------- + micros : list of MicroXS + List of MicroXS objects + filename : PathLike + Output HDF5 filename + names : list of str, optional + Names for each MicroXS object. If None, uses 'domain_0', 'domain_1', + etc. + **kwargs + Additional keyword arguments passed to :meth:`h5py.Group.create_dataset` + """ + if names is None: + names = [f'domain_{i}' for i in range(len(micros))] + + # Open file once and write all domains using group interface + with h5py.File(filename, 'w') as f: + for microxs, name in zip(micros, names): + group = f.create_group(name) + microxs.to_hdf5(group, **kwargs) + + +def read_microxs_hdf5(filename: PathLike) -> dict[str, MicroXS]: + """Read multiple MicroXS objects from an HDF5 file + + Parameters + ---------- + filename : path-like + HDF5 filename + + Returns + ------- + dict + Dictionary mapping domain names to MicroXS objects + """ + with h5py.File(filename, 'r') as f: + return {name: MicroXS.from_hdf5(group) for name, group in f.items()} diff --git a/openmc/deplete/pool.py b/openmc/deplete/pool.py index 03b050af38f..aa348c02aa7 100644 --- a/openmc/deplete/pool.py +++ b/openmc/deplete/pool.py @@ -109,6 +109,13 @@ def deplete(func, chain, n, rates, dt, current_timestep=None, matrix_func=None, matrices = [matrix - transfer for (matrix, transfer) in zip(matrices, transfers)] + if transfer_rates.redox: + for mat_idx, mat_id in enumerate(transfer_rates.local_mats): + if mat_id in transfer_rates.redox: + matrices[mat_idx] = chain.add_redox_term(matrices[mat_idx], + transfer_rates.redox[mat_id][0], + transfer_rates.redox[mat_id][1]) + if current_timestep in transfer_rates.index_transfer: # Gather all on comm.rank 0 matrices = comm.gather(matrices) @@ -125,6 +132,12 @@ def deplete(func, chain, n, rates, dt, current_timestep=None, matrix_func=None, transfer_matrix = chain.form_rr_term(transfer_rates, current_timestep, mat_pair) + + # check if destination material has a redox control + if mat_pair[0] in transfer_rates.redox: + transfer_matrix = chain.add_redox_term(transfer_matrix, + transfer_rates.redox[mat_pair[0]][0], + transfer_rates.redox[mat_pair[0]][1]) transfer_pair[mat_pair] = transfer_matrix # Combine all matrices together in a single matrix of matrices diff --git a/openmc/deplete/r2s.py b/openmc/deplete/r2s.py new file mode 100644 index 00000000000..97277cbda84 --- /dev/null +++ b/openmc/deplete/r2s.py @@ -0,0 +1,693 @@ +from __future__ import annotations +from collections.abc import Sequence +import copy +from datetime import datetime +import json +from pathlib import Path + +import numpy as np +import openmc +from . import IndependentOperator, PredictorIntegrator +from .microxs import get_microxs_and_flux, write_microxs_hdf5, read_microxs_hdf5 +from .results import Results +from ..checkvalue import PathLike +from ..mpi import comm +from openmc.lib import TemporarySession +from openmc.utility_funcs import change_directory + + +def get_activation_materials( + model: openmc.Model, mmv: openmc.MeshMaterialVolumes +) -> openmc.Materials: + """Get a list of activation materials for each mesh element/material. + + When performing a mesh-based R2S calculation, a unique material is needed + for each activation region, which is a combination of a mesh element and a + material within that mesh element. This function generates a list of such + materials, each with a unique name and volume corresponding to the mesh + element and material. + + Parameters + ---------- + model : openmc.Model + The full model containing the geometry and materials. + mmv : openmc.MeshMaterialVolumes + The mesh material volumes object containing the materials and their + volumes for each mesh element. + + Returns + ------- + openmc.Materials + A list of materials, each corresponding to a unique mesh element and + material combination. + + """ + # Get the material ID, volume, and element index for each element-material + # combination + mat_ids = mmv._materials[mmv._materials > -1] + volumes = mmv._volumes[mmv._materials > -1] + elems, _ = np.where(mmv._materials > -1) + + # Get all materials in the model + material_dict = model._get_all_materials() + + # Create a new activation material for each element-material combination + materials = openmc.Materials() + for elem, mat_id, vol in zip(elems, mat_ids, volumes): + mat = material_dict[mat_id] + new_mat = mat.clone() + new_mat.depletable = True + new_mat.name = f'Element {elem}, Material {mat_id}' + new_mat.volume = vol + materials.append(new_mat) + + return materials + + +class R2SManager: + """Manager for Rigorous 2-Step (R2S) method calculations. + + This class is responsible for managing the materials and sources needed for + mesh-based or cell-based R2S calculations. It provides methods to get + activation materials and decay photon sources based on the mesh/cells and + materials in the OpenMC model. + + This class supports the use of a different models for the neutron and photon + transport calculation. However, for cell-based calculations, it assumes that + the only changes in the model are material assignments. For mesh-based + calculations, it checks material assignments in the photon model and any + element--material combinations that don't appear in the photon model are + skipped. + + Parameters + ---------- + neutron_model : openmc.Model + The OpenMC model to use for neutron transport. + domains : openmc.MeshBase or Sequence[openmc.Cell] + The mesh or a sequence of cells that represent the spatial units over + which the R2S calculation will be performed. + photon_model : openmc.Model, optional + The OpenMC model to use for photon transport calculations. If None, a + shallow copy of the neutron_model will be created and used. + + Attributes + ---------- + domains : openmc.MeshBase or Sequence[openmc.Cell] + The mesh or a sequence of cells that represent the spatial units over + which the R2S calculation will be performed. + neutron_model : openmc.Model + The OpenMC model used for neutron transport. + photon_model : openmc.Model + The OpenMC model used for photon transport calculations. + method : {'mesh-based', 'cell-based'} + Indicates whether the R2S calculation uses mesh elements ('mesh-based') + as the spatial discetization or a list of a cells ('cell-based'). + results : dict + A dictionary that stores results from the R2S calculation. + + """ + def __init__( + self, + neutron_model: openmc.Model, + domains: openmc.MeshBase | Sequence[openmc.Cell], + photon_model: openmc.Model | None = None, + ): + self.neutron_model = neutron_model + if photon_model is None: + # Create a shallow copy of the neutron model for photon transport + self.photon_model = openmc.Model( + geometry=copy.copy(neutron_model.geometry), + materials=copy.copy(neutron_model.materials), + settings=copy.copy(neutron_model.settings), + tallies=copy.copy(neutron_model.tallies), + plots=copy.copy(neutron_model.plots), + ) + else: + self.photon_model = photon_model + if isinstance(domains, openmc.MeshBase): + self.method = 'mesh-based' + else: + self.method = 'cell-based' + self.domains = domains + self.results = {} + + def run( + self, + timesteps: Sequence[float] | Sequence[tuple[float, str]], + source_rates: float | Sequence[float], + timestep_units: str = 's', + photon_time_indices: Sequence[int] | None = None, + output_dir: PathLike | None = None, + bounding_boxes: dict[int, openmc.BoundingBox] | None = None, + chain_file: PathLike | None = None, + micro_kwargs: dict | None = None, + mat_vol_kwargs: dict | None = None, + run_kwargs: dict | None = None, + operator_kwargs: dict | None = None, + ): + """Run the R2S calculation. + + Parameters + ---------- + timesteps : Sequence[float] or Sequence[tuple[float, str]] + Sequence of timesteps. Note that values are not cumulative. The + units are specified by the `timestep_units` argument when + `timesteps` is an iterable of float. Alternatively, units can be + specified for each step by passing an iterable of (value, unit) + tuples. + source_rates : float or Sequence[float] + Source rate in [neutron/sec] for each interval in `timesteps`. + timestep_units : {'s', 'min', 'h', 'd', 'a'}, optional + Units for values specified in the `timesteps` argument when passing + float values. 's' means seconds, 'min' means minutes, 'h' means + hours, 'd' means days, and 'a' means years (Julian). + photon_time_indices : Sequence[int], optional + Sequence of time indices at which photon transport should be run; + represented as indices into the array of times formed by the + timesteps. For example, if two timesteps are specified, the array of + times would contain three entries, and [2] would indicate computing + photon results at the last time. A value of None indicates to run + photon transport for each time. + output_dir : PathLike, optional + Path to directory where R2S calculation outputs will be saved. If + not provided, a timestamped directory 'r2s_YYYY-MM-DDTHH-MM-SS' is + created. Subdirectories will be created for the neutron transport, + activation, and photon transport steps. + bounding_boxes : dict[int, openmc.BoundingBox], optional + Dictionary mapping cell IDs to bounding boxes used for spatial + source sampling in cell-based R2S calculations. Required if method + is 'cell-based'. + chain_file : PathLike, optional + Path to the depletion chain XML file to use during activation. If + not provided, the default configured chain file will be used. + micro_kwargs : dict, optional + Additional keyword arguments passed to + :func:`openmc.deplete.get_microxs_and_flux` during the neutron + transport step. + mat_vol_kwargs : dict, optional + Additional keyword arguments passed to + :meth:`openmc.MeshBase.material_volumes`. + run_kwargs : dict, optional + Additional keyword arguments passed to :meth:`openmc.Model.run` + during the neutron and photon transport step. By default, output is + disabled. + operator_kwargs : dict, optional + Additional keyword arguments passed to + :class:`openmc.deplete.IndependentOperator`. + + Returns + ------- + Path + Path to the output directory containing all calculation results + """ + + if output_dir is None: + # Create timestamped output directory and broadcast to all ranks for + # consistency (different ranks may have slightly different times) + stamp = datetime.now().strftime('%Y-%m-%dT%H-%M-%S') + output_dir = Path(comm.bcast(f'r2s_{stamp}')) + + # Set run_kwargs for the neutron transport step + if micro_kwargs is None: + micro_kwargs = {} + if run_kwargs is None: + run_kwargs = {} + if operator_kwargs is None: + operator_kwargs = {} + run_kwargs.setdefault('output', False) + micro_kwargs.setdefault('run_kwargs', run_kwargs) + # If a chain file is provided, prefer it for steps 1 and 2 + if chain_file is not None: + micro_kwargs.setdefault('chain_file', chain_file) + operator_kwargs.setdefault('chain_file', chain_file) + + self.step1_neutron_transport( + output_dir / 'neutron_transport', mat_vol_kwargs, micro_kwargs + ) + self.step2_activation( + timesteps, source_rates, timestep_units, output_dir / 'activation', + operator_kwargs=operator_kwargs + ) + self.step3_photon_transport( + photon_time_indices, bounding_boxes, output_dir / 'photon_transport', + mat_vol_kwargs=mat_vol_kwargs, run_kwargs=run_kwargs + ) + + return output_dir + + def step1_neutron_transport( + self, + output_dir: PathLike = "neutron_transport", + mat_vol_kwargs: dict | None = None, + micro_kwargs: dict | None = None + ): + """Run the neutron transport step. + + This step computes the material volume fractions on the mesh, creates a + mesh-material filter, and retrieves the fluxes and microscopic cross + sections for each mesh/material combination. This step will populate the + 'fluxes' and 'micros' keys in the results dictionary. For a mesh-based + calculation, it will also populate the 'mesh_material_volumes' key. + + Parameters + ---------- + output_dir : PathLike, optional + The directory where the results will be saved. + mat_vol_kwargs : dict, optional + Additional keyword arguments based to + :meth:`openmc.MeshBase.material_volumes`. + micro_kwargs : dict, optional + Additional keyword arguments passed to + :func:`openmc.deplete.get_microxs_and_flux`. + + """ + + output_dir = Path(output_dir).resolve() + output_dir.mkdir(parents=True, exist_ok=True) + + if self.method == 'mesh-based': + # Compute material volume fractions on the mesh + if mat_vol_kwargs is None: + mat_vol_kwargs = {} + self.results['mesh_material_volumes'] = mmv = comm.bcast( + self.domains.material_volumes(self.neutron_model, **mat_vol_kwargs)) + + # Save results to file + if comm.rank == 0: + mmv.save(output_dir / 'mesh_material_volumes.npz') + + # Create mesh-material filter based on what combos were found + domains = openmc.MeshMaterialFilter.from_volumes(self.domains, mmv) + else: + domains: Sequence[openmc.Cell] = self.domains + + # Check to make sure that each cell is filled with a material and + # that the volume has been set + + # TODO: If volumes are not set, run volume calculation for cells + for cell in domains: + if cell.fill is None: + raise ValueError( + f"Cell {cell.id} is not filled with a materials. " + "Please set the fill material for each cell before " + "running the R2S calculation." + ) + if cell.volume is None: + raise ValueError( + f"Cell {cell.id} does not have a volume set. " + "Please set the volume for each cell before running " + "the R2S calculation." + ) + + # Set default keyword arguments for microxs and flux calculation + if micro_kwargs is None: + micro_kwargs = {} + micro_kwargs.setdefault('path_statepoint', output_dir / 'statepoint.h5') + micro_kwargs.setdefault('path_input', output_dir / 'model.xml') + + # Run neutron transport and get fluxes and micros. Run via openmc.lib to + # maintain a consistent parallelism strategy with the activation step. + with TemporarySession(): + self.results['fluxes'], self.results['micros'] = get_microxs_and_flux( + self.neutron_model, domains, **micro_kwargs) + + # Save flux and micros to file + if comm.rank == 0: + np.save(output_dir / 'fluxes.npy', self.results['fluxes']) + write_microxs_hdf5(self.results['micros'], output_dir / 'micros.h5') + + def step2_activation( + self, + timesteps: Sequence[float] | Sequence[tuple[float, str]], + source_rates: float | Sequence[float], + timestep_units: str = 's', + output_dir: PathLike = 'activation', + operator_kwargs: dict | None = None, + ): + """Run the activation step. + + This step creates a unique copy of each activation material based on the + mesh elements or cells, then solves the depletion equations for each + material using the fluxes and microscopic cross sections obtained in the + neutron transport step. This step will populate the 'depletion_results' + and 'activation_materials' keys in the results dictionary. + + Parameters + ---------- + timesteps : Sequence[float] or Sequence[tuple[float, str]] + Sequence of timesteps. Note that values are not cumulative. The + units are specified by the `timestep_units` argument when + `timesteps` is an iterable of float. Alternatively, units can be + specified for each step by passing an iterable of (value, unit) + tuples. + source_rates : float | Sequence[float] + Source rate in [neutron/sec] for each interval in `timesteps`. + timestep_units : {'s', 'min', 'h', 'd', 'a'}, optional + Units for values specified in the `timesteps` argument when passing + float values. 's' means seconds, 'min' means minutes, 'h' means + hours, 'd' means days, and 'a' means years (Julian). + output_dir : PathLike, optional + Path to directory where activation calculation outputs will be + saved. + operator_kwargs : dict, optional + Additional keyword arguments passed to + :class:`openmc.deplete.IndependentOperator`. + """ + + if self.method == 'mesh-based': + # Get unique material for each (mesh, material) combination + mmv = self.results['mesh_material_volumes'] + self.results['activation_materials'] = get_activation_materials(self.neutron_model, mmv) + else: + # Create unique material for each cell + activation_mats = openmc.Materials() + for cell in self.domains: + mat = cell.fill.clone() + mat.name = f'Cell {cell.id}' + mat.depletable = True + mat.volume = cell.volume + activation_mats.append(mat) + self.results['activation_materials'] = activation_mats + + # Save activation materials to file + output_dir = Path(output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + self.results['activation_materials'].export_to_xml( + output_dir / 'materials.xml') + + # Create depletion operator for the activation materials + if operator_kwargs is None: + operator_kwargs = {} + operator_kwargs.setdefault('normalization_mode', 'source-rate') + op = IndependentOperator( + self.results['activation_materials'], + self.results['fluxes'], + self.results['micros'], + **operator_kwargs + ) + + # Create time integrator and solve depletion equations + integrator = PredictorIntegrator( + op, timesteps, source_rates=source_rates, timestep_units=timestep_units + ) + output_path = output_dir / 'depletion_results.h5' + integrator.integrate(final_step=False, path=output_path) + comm.barrier() + + # Get depletion results + self.results['depletion_results'] = Results(output_path) + + def step3_photon_transport( + self, + time_indices: Sequence[int] | None = None, + bounding_boxes: dict[int, openmc.BoundingBox] | None = None, + output_dir: PathLike = 'photon_transport', + mat_vol_kwargs: dict | None = None, + run_kwargs: dict | None = None, + ): + """Run the photon transport step. + + This step performs photon transport calculations using decay photon + sources created from the activated materials. For each specified time, + it creates appropriate photon sources and runs a transport calculation. + In mesh-based mode, the sources are created using the mesh material + volumes, while in cell-based mode, they are created using bounding boxes + for each cell. This step will populate the 'photon_tallies' key in the + results dictionary. + + Parameters + ---------- + time_indices : Sequence[int], optional + Sequence of time indices at which photon transport should be run; + represented as indices into the array of times formed by the + timesteps. For example, if two timesteps are specified, the array of + times would contain three entries, and [2] would indicate computing + photon results at the last time. A value of None indicates to run + photon transport for each time. + bounding_boxes : dict[int, openmc.BoundingBox], optional + Dictionary mapping cell IDs to bounding boxes used for spatial + source sampling in cell-based R2S calculations. Required if method + is 'cell-based'. + output_dir : PathLike, optional + Path to directory where photon transport outputs will be saved. + mat_vol_kwargs : dict, optional + Additional keyword arguments passed to + :meth:`openmc.MeshBase.material_volumes`. + run_kwargs : dict, optional + Additional keyword arguments passed to :meth:`openmc.Model.run` + during the photon transport step. By default, output is disabled. + """ + + # TODO: Automatically determine bounding box for each cell + if bounding_boxes is None and self.method == 'cell-based': + raise ValueError("bounding_boxes must be provided for cell-based " + "R2S calculations.") + + # Set default run arguments if not provided + if run_kwargs is None: + run_kwargs = {} + run_kwargs.setdefault('output', False) + + # Write out JSON file with tally IDs that can be used for loading + # results + output_dir = Path(output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + + # Get default time indices if not provided + if time_indices is None: + n_steps = len(self.results['depletion_results']) + time_indices = list(range(n_steps)) + + # Check whether the photon model is different + neutron_univ = self.neutron_model.geometry.root_universe + photon_univ = self.photon_model.geometry.root_universe + different_photon_model = (neutron_univ != photon_univ) + + # For mesh-based calculations, compute material volume fractions for the + # photon model if it is different from the neutron model to account for + # potential material changes + if self.method == 'mesh-based' and different_photon_model: + self.results['mesh_material_volumes_photon'] = photon_mmv = comm.bcast( + self.domains.material_volumes(self.photon_model, **mat_vol_kwargs)) + + # Save photon MMV results to file + if comm.rank == 0: + photon_mmv.save(output_dir / 'mesh_material_volumes.npz') + + if comm.rank == 0: + tally_ids = [tally.id for tally in self.photon_model.tallies] + with open(output_dir / 'tally_ids.json', 'w') as f: + json.dump(tally_ids, f) + + self.results['photon_tallies'] = {} + + # Get dictionary of cells in the photon model + if different_photon_model: + photon_cells = self.photon_model.geometry.get_all_cells() + + for time_index in time_indices: + # Create decay photon source + if self.method == 'mesh-based': + self.photon_model.settings.source = \ + self.get_decay_photon_source_mesh(time_index) + else: + sources = [] + results = self.results['depletion_results'] + for cell, original_mat in zip(self.domains, self.results['activation_materials']): + # Skip if the cell is not in the photon model or the + # material has changed + if different_photon_model: + if cell.id not in photon_cells or \ + cell.fill.id != photon_cells[cell.id].fill.id: + continue + + # Get bounding box for the cell + bounding_box = bounding_boxes[cell.id] + + # Get activated material composition + activated_mat = results[time_index].get_material(str(original_mat.id)) + + # Create decay photon source source + space = openmc.stats.Box(*bounding_box) + energy = activated_mat.get_decay_photon_energy() + strength = energy.integral() if energy is not None else 0.0 + source = openmc.IndependentSource( + space=space, + energy=energy, + particle='photon', + strength=strength, + constraints={'domains': [cell]} + ) + sources.append(source) + self.photon_model.settings.source = sources + + # Convert time_index (which may be negative) to a normal index + if time_index < 0: + time_index = len(self.results['depletion_results']) + time_index + + # Run photon transport calculation + photon_dir = Path(output_dir) / f'time_{time_index}' + with TemporarySession(self.photon_model, cwd=photon_dir): + statepoint_path = self.photon_model.run(**run_kwargs) + + # Store tally results + with openmc.StatePoint(statepoint_path) as sp: + self.results['photon_tallies'][time_index] = [ + sp.tallies[tally.id] for tally in self.photon_model.tallies + ] + + def get_decay_photon_source_mesh( + self, + time_index: int = -1 + ) -> list[openmc.MeshSource]: + """Create decay photon source for a mesh-based calculation. + + This function creates N :class:`MeshSource` objects where N is the + maximum number of unique materials that appears in a single mesh + element. For each mesh element-material combination, and + IndependentSource instance is created with a spatial constraint limited + the sampled decay photons to the correct region. + + When the photon transport model is different from the neutron model, the + photon MeshMaterialVolumes is used to determine whether an (element, + material) combination exists in the photon model. + + Parameters + ---------- + time_index : int, optional + Time index for the decay photon source. Default is -1 (last time). + + Returns + ------- + list of openmc.MeshSource + A list of MeshSource objects, each containing IndependentSource + instances for the decay photons in the corresponding mesh element. + + """ + mat_dict = self.neutron_model._get_all_materials() + + # Some MeshSource objects will have empty positions; create a "null source" + # that is used for this case + null_source = openmc.IndependentSource(particle='photon', strength=0.0) + + # List to hold sources for each MeshSource (length = N) + source_lists = [] + + # Index in the overall list of activated materials + index_mat = 0 + + # Get various results from previous steps + mat_vols = self.results['mesh_material_volumes'] + materials = self.results['activation_materials'] + results = self.results['depletion_results'] + photon_mat_vols = self.results.get('mesh_material_volumes_photon') + + # Total number of mesh elements + n_elements = mat_vols.num_elements + + for index_elem in range(n_elements): + # Determine which materials exist in the photon model for this element + if photon_mat_vols is not None: + photon_materials = { + mat_id + for mat_id, _ in photon_mat_vols.by_element(index_elem) + if mat_id is not None + } + + for j, (mat_id, _) in enumerate(mat_vols.by_element(index_elem)): + # Skip void volume + if mat_id is None: + continue + + # Skip if this material doesn't exist in photon model + if photon_mat_vols is not None and mat_id not in photon_materials: + index_mat += 1 + continue + + # Check whether a new MeshSource object is needed + if j >= len(source_lists): + source_lists.append([null_source]*n_elements) + + # Get activated material composition + original_mat = materials[index_mat] + activated_mat = results[time_index].get_material(str(original_mat.id)) + + # Create decay photon source source + energy = activated_mat.get_decay_photon_energy() + if energy is not None: + strength = energy.integral() + source_lists[j][index_elem] = openmc.IndependentSource( + energy=energy, + particle='photon', + strength=strength, + constraints={'domains': [mat_dict[mat_id]]} + ) + + # Increment index of activated material + index_mat += 1 + + # Return list of mesh sources + return [openmc.MeshSource(self.domains, sources) for sources in source_lists] + + def load_results(self, path: PathLike): + """Load results from a previous R2S calculation. + + Parameters + ---------- + path : PathLike + Path to the directory containing the R2S calculation results. + + """ + path = Path(path) + + # Load neutron transport results + neutron_dir = path / 'neutron_transport' + if self.method == 'mesh-based': + mmv_file = neutron_dir / 'mesh_material_volumes.npz' + if mmv_file.exists(): + self.results['mesh_material_volumes'] = \ + openmc.MeshMaterialVolumes.from_npz(mmv_file) + fluxes_file = neutron_dir / 'fluxes.npy' + if fluxes_file.exists(): + self.results['fluxes'] = list(np.load(fluxes_file, allow_pickle=True)) + micros_dict = read_microxs_hdf5(neutron_dir / 'micros.h5') + self.results['micros'] = [ + micros_dict[f'domain_{i}'] for i in range(len(micros_dict)) + ] + + # Load activation results + activation_dir = path / 'activation' + activation_results = activation_dir / 'depletion_results.h5' + if activation_results.exists(): + self.results['depletion_results'] = Results(activation_results) + activation_mats_file = activation_dir / 'materials.xml' + if activation_mats_file.exists(): + self.results['activation_materials'] = \ + openmc.Materials.from_xml(activation_mats_file) + + # Load photon transport results + photon_dir = path / 'photon_transport' + + # Load photon mesh material volumes if they exist (for mesh-based calculations) + if self.method == 'mesh-based': + photon_mmv_file = photon_dir / 'mesh_material_volumes.npz' + if photon_mmv_file.exists(): + self.results['mesh_material_volumes_photon'] = \ + openmc.MeshMaterialVolumes.from_npz(photon_mmv_file) + + # Load tally IDs from JSON file + tally_ids_path = photon_dir / 'tally_ids.json' + if tally_ids_path.exists(): + with tally_ids_path.open('r') as f: + tally_ids = json.load(f) + self.results['photon_tallies'] = {} + + # For each photon transport calc, load the statepoint and get the + # tally results based on tally_ids + for time_dir in photon_dir.glob('time_*'): + time_index = int(time_dir.name.split('_')[1]) + for sp_path in time_dir.glob('statepoint.*.h5'): + with openmc.StatePoint(sp_path) as sp: + self.results['photon_tallies'][time_index] = [ + sp.tallies[tally_id] for tally_id in tally_ids + ] diff --git a/openmc/deplete/results.py b/openmc/deplete/results.py index 7427abd7353..e1fcb26b6d6 100644 --- a/openmc/deplete/results.py +++ b/openmc/deplete/results.py @@ -203,7 +203,7 @@ def get_atoms( # Evaluate value in each region for i, result in enumerate(self): times[i] = result.time[0] - concentrations[i] = result[0, mat_id, nuc] + concentrations[i] = result[mat_id, nuc] # Unit conversions times = _get_time_as(times, time_units) @@ -363,7 +363,7 @@ def get_reaction_rate( # Evaluate value in each region for i, result in enumerate(self): times[i] = result.time[0] - rates[i] = result.rates[0].get(mat_id, nuc, rx) * result[0, mat, nuc] + rates[i] = result.rates.get(mat_id, nuc, rx) * result[mat, nuc] return times, rates @@ -397,7 +397,7 @@ def get_keff(self, time_units: str = 's') -> tuple[np.ndarray, np.ndarray]: # Get time/eigenvalue at each point for i, result in enumerate(self): times[i] = result.time[0] - eigenvalues[i] = result.k[0] + eigenvalues[i] = result.k # Convert time units if necessary times = _get_time_as(times, time_units) @@ -630,7 +630,7 @@ def export_to_materials( for nuc in result.index_nuc: if nuc not in available_cross_sections: continue - atoms = result[0, mat_id, nuc] + atoms = result[mat_id, nuc] if atoms > 0.0: atoms_per_barn_cm = 1e-24 * atoms / mat.volume mat.remove_nuclide(nuc) # Replace if it's there diff --git a/openmc/deplete/stepresult.py b/openmc/deplete/stepresult.py index 1a26cbe3466..ff39e9acb6d 100644 --- a/openmc/deplete/stepresult.py +++ b/openmc/deplete/stepresult.py @@ -16,7 +16,7 @@ from openmc.checkvalue import PathLike from .reaction_rates import ReactionRates -VERSION_RESULTS = (1, 1) +VERSION_RESULTS = (1, 2) __all__ = ["StepResult"] @@ -30,8 +30,8 @@ class StepResult: Attributes ---------- - k : list of (float, float) - Eigenvalue and uncertainty for each substep. + k : tuple of (float, float) + Eigenvalue and uncertainty at end of step. time : list of float Time at beginning, end of step, in seconds. source_rate : float @@ -40,8 +40,8 @@ class StepResult: Number of mats. n_nuc : int Number of nuclides. - rates : list of ReactionRates - The reaction rates for each substep. + rates : ReactionRates + The reaction rates at end of step. volume : dict of str to float Dictionary mapping mat id to volume. index_mat : dict of str to int @@ -52,10 +52,8 @@ class StepResult: A dictionary mapping mat ID as string to global index. n_hdf5_mats : int Number of materials in entire geometry. - n_stages : int - Number of stages in simulation. data : numpy.ndarray - Atom quantity, stored by stage, mat, then by nuclide. + Atom quantity, stored by mat, then by nuclide. proc_time : int Average time spent depleting a material across all materials and processes @@ -86,17 +84,17 @@ def __getitem__(self, pos): Parameters ---------- pos : tuple - A three-length tuple containing a stage index, mat index and a nuc - index. All can be integers or slices. The second two can be + A two-length tuple containing a mat index and a nuc + index. Both can be integers or slices, or can be strings corresponding to their respective dictionary. Returns ------- float - The atoms for stage, mat, nuc + The atoms for mat, nuc """ - stage, mat, nuc = pos + mat, nuc = pos if isinstance(mat, openmc.Material): mat = str(mat.id) if isinstance(mat, str): @@ -104,7 +102,7 @@ def __getitem__(self, pos): if isinstance(nuc, str): nuc = self.index_nuc[nuc] - return self.data[stage, mat, nuc] + return self.data[mat, nuc] def __setitem__(self, pos, val): """Sets an item from results. @@ -112,21 +110,21 @@ def __setitem__(self, pos, val): Parameters ---------- pos : tuple - A three-length tuple containing a stage index, mat index and a nuc - index. All can be integers or slices. The second two can be + A two-length tuple containing a mat index and a nuc + index. Both can be integers or slices, or can be strings corresponding to their respective dictionary. val : float The value to set data to. """ - stage, mat, nuc = pos + mat, nuc = pos if isinstance(mat, str): mat = self.index_mat[mat] if isinstance(nuc, str): nuc = self.index_nuc[nuc] - self.data[stage, mat, nuc] = val + self.data[mat, nuc] = val @property def n_mat(self): @@ -140,11 +138,7 @@ def n_nuc(self): def n_hdf5_mats(self): return len(self.mat_to_hdf5_ind) - @property - def n_stages(self): - return self.data.shape[0] - - def allocate(self, volume, nuc_list, burn_list, full_burn_list, stages): + def allocate(self, volume, nuc_list, burn_list, full_burn_list): """Allocate memory for depletion step data Parameters @@ -157,8 +151,6 @@ def allocate(self, volume, nuc_list, burn_list, full_burn_list, stages): A list of all mat IDs to be burned. Used for sorting the simulation. full_burn_list : list of str List of all burnable material IDs - stages : int - Number of stages in simulation. """ self.volume = copy.deepcopy(volume) @@ -167,7 +159,7 @@ def allocate(self, volume, nuc_list, burn_list, full_burn_list, stages): self.mat_to_hdf5_ind = {mat: i for i, mat in enumerate(full_burn_list)} # Create storage array - self.data = np.zeros((stages, self.n_mat, self.n_nuc)) + self.data = np.zeros((self.n_mat, self.n_nuc)) def distribute(self, local_materials, ranges): """Create a new object containing data for distributed materials @@ -196,8 +188,8 @@ def distribute(self, local_materials, ranges): for attr in direct_attrs: setattr(new, attr, getattr(self, attr)) # Get applicable slice of data - new.data = self.data[:, ranges] - new.rates = [r[ranges] for r in self.rates] + new.data = self.data[ranges] + new.rates = self.rates[ranges] return new def get_material(self, mat_id): @@ -232,7 +224,7 @@ def get_material(self, mat_id): f'values are {list(self.volume.keys())}' ) from e for nuc, _ in sorted(self.index_nuc.items(), key=lambda x: x[1]): - atoms = self[0, mat_id, nuc] + atoms = self[mat_id, nuc] if atoms <= 0.0: continue atom_per_bcm = atoms / vol * 1e-24 @@ -240,7 +232,7 @@ def get_material(self, mat_id): material.volume = vol return material - def export_to_hdf5(self, filename, step): + def export_to_hdf5(self, filename, step, write_rates: bool = False): """Export results to an HDF5 file Parameters @@ -249,6 +241,8 @@ def export_to_hdf5(self, filename, step): The filename to write to step : int What step is this? + write_rates : bool, optional + Whether to include reaction rate datasets in the results file. """ # Write new file if first time step, else add to existing file @@ -259,7 +253,8 @@ def export_to_hdf5(self, filename, step): kwargs['driver'] = 'mpio' kwargs['comm'] = comm with h5py.File(filename, **kwargs) as handle: - self._to_hdf5(handle, step, parallel=True) + self._to_hdf5(handle, step, parallel=True, + write_rates=write_rates) else: # Gather results at root process all_results = comm.gather(self) @@ -268,15 +263,18 @@ def export_to_hdf5(self, filename, step): if comm.rank == 0: with h5py.File(filename, **kwargs) as handle: for res in all_results: - res._to_hdf5(handle, step, parallel=False) + res._to_hdf5(handle, step, parallel=False, + write_rates=write_rates) - def _write_hdf5_metadata(self, handle): + def _write_hdf5_metadata(self, handle, write_rates): """Writes result metadata in HDF5 file Parameters ---------- handle : h5py.File or h5py.Group An hdf5 file or group type to store this in. + write_rates : bool + Whether reaction rate datasets are being written. """ # Create and save the 5 dictionaries: @@ -284,8 +282,8 @@ def _write_hdf5_metadata(self, handle): # self.index_mat -> self.volume (TODO: support for changing volumes) # self.index_nuc # reactions - # self.rates[0].index_nuc (can be different from above, above is superset) - # self.rates[0].index_rx + # self.rates.index_nuc (can be different from above, above is superset) + # self.rates.index_rx # these are shared by every step of the simulation, and should be deduplicated. # Store concentration mat and nuclide dictionaries (along with volumes) @@ -295,13 +293,19 @@ def _write_hdf5_metadata(self, handle): mat_list = sorted(self.mat_to_hdf5_ind, key=int) nuc_list = sorted(self.index_nuc) - rxn_list = sorted(self.rates[0].index_rx) + + include_rates = ( + write_rates + and self.rates is not None + and bool(self.rates.index_nuc) + and bool(self.rates.index_rx) + ) + rxn_list = sorted(self.rates.index_rx) if include_rates else [] n_mats = self.n_hdf5_mats n_nuc_number = len(nuc_list) - n_nuc_rxn = len(self.rates[0].index_nuc) + n_nuc_rxn = len(self.rates.index_nuc) if include_rates else 0 n_rxn = len(rxn_list) - n_stages = self.n_stages mat_group = handle.create_group("materials") @@ -315,41 +319,44 @@ def _write_hdf5_metadata(self, handle): for nuc in nuc_list: nuc_single_group = nuc_group.create_group(nuc) nuc_single_group.attrs["atom number index"] = self.index_nuc[nuc] - if nuc in self.rates[0].index_nuc: - nuc_single_group.attrs["reaction rate index"] = self.rates[0].index_nuc[nuc] + if include_rates and nuc in self.rates.index_nuc: + nuc_single_group.attrs["reaction rate index"] = ( + self.rates.index_nuc[nuc]) - rxn_group = handle.create_group("reactions") + if include_rates: + rxn_group = handle.create_group("reactions") - for rxn in rxn_list: - rxn_single_group = rxn_group.create_group(rxn) - rxn_single_group.attrs["index"] = self.rates[0].index_rx[rxn] + for rxn in rxn_list: + rxn_single_group = rxn_group.create_group(rxn) + rxn_single_group.attrs["index"] = ( + self.rates.index_rx[rxn]) # Construct array storage - handle.create_dataset("number", (1, n_stages, n_mats, n_nuc_number), - maxshape=(None, n_stages, n_mats, n_nuc_number), + handle.create_dataset("number", (1, n_mats, n_nuc_number), + maxshape=(None, n_mats, n_nuc_number), chunks=True, dtype='float64') - if n_nuc_rxn > 0 and n_rxn > 0: - handle.create_dataset("reaction rates", (1, n_stages, n_mats, n_nuc_rxn, n_rxn), - maxshape=(None, n_stages, n_mats, n_nuc_rxn, n_rxn), - chunks=True, - dtype='float64') + if include_rates and n_nuc_rxn > 0 and n_rxn > 0: + handle.create_dataset( + "reaction rates", (1, n_mats, n_nuc_rxn, n_rxn), + maxshape=(None, n_mats, n_nuc_rxn, n_rxn), + chunks=True, dtype='float64') - handle.create_dataset("eigenvalues", (1, n_stages, 2), - maxshape=(None, n_stages, 2), dtype='float64') + handle.create_dataset("eigenvalues", (1, 2), + maxshape=(None, 2), dtype='float64') handle.create_dataset("time", (1, 2), maxshape=(None, 2), dtype='float64') - handle.create_dataset("source_rate", (1, n_stages), maxshape=(None, n_stages), + handle.create_dataset("source_rate", (1,), maxshape=(None,), dtype='float64') handle.create_dataset( "depletion time", (1,), maxshape=(None,), dtype="float64") - def _to_hdf5(self, handle, index, parallel=False): + def _to_hdf5(self, handle, index, parallel=False, write_rates: bool = False): """Converts results object into an hdf5 object. Parameters @@ -360,12 +367,14 @@ def _to_hdf5(self, handle, index, parallel=False): What step is this? parallel : bool Being called with parallel HDF5? + write_rates : bool, optional + Whether reaction rate datasets are being written. """ if "/number" not in handle: if parallel: comm.barrier() - self._write_hdf5_metadata(handle) + self._write_hdf5_metadata(handle, write_rates) if parallel: comm.barrier() @@ -417,18 +426,14 @@ def _to_hdf5(self, handle, index, parallel=False): return # Add data - # Note, for the last step, self.n_stages = 1, even if n_stages != 1. - n_stages = self.n_stages inds = [self.mat_to_hdf5_ind[mat] for mat in self.index_mat] low = min(inds) high = max(inds) - for i in range(n_stages): - number_dset[index, i, low:high+1] = self.data[i] - if has_reactions: - rxn_dset[index, i, low:high+1] = self.rates[i] - if comm.rank == 0: - eigenvalues_dset[index, i] = self.k[i] + number_dset[index, low:high+1] = self.data + if has_reactions: + rxn_dset[index, low:high+1] = self.rates if comm.rank == 0: + eigenvalues_dset[index] = self.k time_dset[index] = self.time source_rate_dset[index] = self.source_rate if self.proc_time is not None: @@ -459,10 +464,24 @@ def from_hdf5(cls, handle, step): # Older versions used "power" instead of "source_rate" source_rate_dset = handle["/power"] - results.data = number_dset[step, :, :, :] - results.k = eigenvalues_dset[step, :] + # Check if this is an old format file (with stages dimension) or new format + # Old format: number has shape (n_steps, n_stages, n_mats, n_nucs) + # New format: number has shape (n_steps, n_mats, n_nucs) + has_stages = len(number_dset.shape) == 4 + + if has_stages: + # Old format - extract data from first stage (index 0) + results.data = number_dset[step, 0, :, :] + results.k = eigenvalues_dset[step, 0, :] + # source_rate had shape (n_steps, n_stages) in old format + results.source_rate = source_rate_dset[step, 0] + else: + # New format - no stages dimension + results.data = number_dset[step, :, :] + results.k = eigenvalues_dset[step, :] + results.source_rate = source_rate_dset[step] + results.time = time_dset[step, :] - results.source_rate = source_rate_dset[step, 0] if "depletion time" in handle: proc_time_dset = handle["/depletion time"] @@ -493,33 +512,45 @@ def from_hdf5(cls, handle, step): if "reaction rate index" in nuc_handle.attrs: rxn_nuc_to_ind[nuc] = nuc_handle.attrs["reaction rate index"] - for rxn, rxn_handle in handle["/reactions"].items(): - rxn_to_ind[rxn] = rxn_handle.attrs["index"] - - results.rates = [] - # Reconstruct reactions - for i in range(results.n_stages): - rate = ReactionRates(results.index_mat, rxn_nuc_to_ind, rxn_to_ind, True) + if "reactions" in handle: + for rxn, rxn_handle in handle["/reactions"].items(): + rxn_to_ind[rxn] = rxn_handle.attrs["index"] - if "reaction rates" in handle: - rate[:] = handle["/reaction rates"][step, i, :, :, :] - results.rates.append(rate) + # Reconstruct reaction rates + rate = ReactionRates(results.index_mat, rxn_nuc_to_ind, rxn_to_ind, True) + if "reaction rates" in handle: + if has_stages: + # Old format: (n_steps, n_stages, n_mats, n_nucs, n_rxns) + rate[:] = handle["/reaction rates"][step, 0, :, :, :] + else: + # New format: (n_steps, n_mats, n_nucs, n_rxns) + rate[:] = handle["/reaction rates"][step, :, :, :] + results.rates = rate return results @staticmethod - def save(op, x, op_results, t, source_rate, step_ind, proc_time=None, - path: PathLike = "depletion_results.h5"): + def save( + op, + x, + op_results, + t, + source_rate, + step_ind, + proc_time=None, + write_rates: bool = False, + path: PathLike = "depletion_results.h5" + ): """Creates and writes depletion results to disk Parameters ---------- op : openmc.deplete.abc.TransportOperator The operator used to generate these results. - x : list of list of numpy.array - The prior x vectors. Indexed [i][cell] using the above equation. - op_results : list of openmc.deplete.OperatorResult - Results of applying transport operator + x : numpy.array + End-of-step concentrations for each material + op_results : openmc.deplete.OperatorResult + Result of applying transport operator at end of step t : list of float Time indices. source_rate : float @@ -530,7 +561,8 @@ def save(op, x, op_results, t, source_rate, step_ind, proc_time=None, Total process time spent depleting materials. This may be process-dependent and will be reduced across MPI processes. - + write_rates : bool, optional + Whether reaction rates should be written to the results file. path : PathLike Path to file to write. Defaults to 'depletion_results.h5'. @@ -539,26 +571,20 @@ def save(op, x, op_results, t, source_rate, step_ind, proc_time=None, # Get indexing terms vol_dict, nuc_list, burn_list, full_burn_list = op.get_results_info() - stages = len(x) - # Create results results = StepResult() - results.allocate(vol_dict, nuc_list, burn_list, full_burn_list, stages) + results.allocate(vol_dict, nuc_list, burn_list, full_burn_list) n_mat = len(burn_list) - for i in range(stages): - for mat_i in range(n_mat): - results[i, mat_i, :] = x[i][mat_i] + for mat_i in range(n_mat): + results[mat_i, :] = x[mat_i] - ks = [] - for r in op_results: - if isinstance(r.k, type(None)): - ks += [(None, None)] - else: - ks += [(r.k.nominal_value, r.k.std_dev)] - results.k = ks - results.rates = [r.rates for r in op_results] + if isinstance(op_results.k, type(None)): + results.k = (None, None) + else: + results.k = (op_results.k.nominal_value, op_results.k.std_dev) + results.rates = op_results.rates results.time = t results.source_rate = source_rate results.proc_time = proc_time @@ -567,7 +593,7 @@ def save(op, x, op_results, t, source_rate, step_ind, proc_time=None, if not Path(path).is_file(): Path(path).parent.mkdir(parents=True, exist_ok=True) - results.export_to_hdf5(path, step_ind) + results.export_to_hdf5(path, step_ind, write_rates) def transfer_volumes(self, model): """Transfers volumes from depletion results to geometry diff --git a/openmc/deplete/transfer_rates.py b/openmc/deplete/transfer_rates.py index 4c28c7d1506..ea9fc9185ec 100644 --- a/openmc/deplete/transfer_rates.py +++ b/openmc/deplete/transfer_rates.py @@ -49,9 +49,10 @@ def __init__(self, operator, materials, number_of_timesteps): self.local_mats = operator.local_mats self.number_of_timesteps = number_of_timesteps - # initialize transfer rates container dict + #initialize transfer rates container dict self.external_rates = {mat: defaultdict(list) for mat in self.burnable_mats} self.external_timesteps = [] + self.redox = {} def _get_material_id(self, val): """Helper method for getting material id from Material obj or name. @@ -300,6 +301,46 @@ def set_transfer_rate(self, material, components, transfer_rate, self.external_timesteps = np.unique(np.concatenate( [self.external_timesteps, timesteps])) + def set_redox(self, material, buffer, oxidation_states, timesteps=None): + """Add redox control to depletable material. + + Parameters + ---------- + material : openmc.Material or str or int + Depletable material + buffer : dict + Dictionary of buffer nuclides used to maintain redox balance. + Keys are nuclide names (strings) and values are their respective + fractions (float) that collectively sum to 1. + oxidation_states : dict + User-defined oxidation states for elements. + Keys are element symbols (e.g., 'H', 'He'), and values are their + corresponding oxidation states as integers (e.g., +1, 0). + timesteps : list of int, optional + List of timestep indices where to set external source rates. + Defaults to None, which means the external source rate is set for + all timesteps. + + """ + material_id = self._get_material_id(material) + if timesteps is not None: + for timestep in timesteps: + check_value('timestep', timestep, range(self.number_of_timesteps)) + timesteps = np.array(timesteps) + else: + timesteps = np.arange(self.number_of_timesteps) + #Check nuclides in buffer exist + for nuc in buffer: + if nuc not in self.chain_nuclides: + raise ValueError(f'{nuc} is not a valid nuclide.') + # Checks element in oxidation states exist + for elm in oxidation_states: + if elm not in ELEMENT_SYMBOL.values(): + raise ValueError(f'{elm} is not a valid element.') + + self.redox[material_id] = (buffer, oxidation_states) + self.external_timesteps = np.unique(np.concatenate( + [self.external_timesteps, timesteps])) class ExternalSourceRates(ExternalRates): """Class for defining external source rates. @@ -366,7 +407,7 @@ def set_external_source_rate( rate : float External source rate in units of mass per time. A positive or negative value corresponds to a feed or removal rate, respectively. - units : {'g/s', 'g/min', 'g/h', 'g/d', 'g/a'} + rate_units : {'g/s', 'g/min', 'g/h', 'g/d', 'g/a'} Units for values specified in the `rate` argument. 's' for seconds, 'min' for minutes, 'h' for hours, 'a' for Julian years. timesteps : list of int, optional diff --git a/openmc/filter.py b/openmc/filter.py index 6a666d2a02c..550146f85de 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -1839,12 +1839,21 @@ def num_bins(self): @property def paths(self): - return self._paths + if self._paths is None: + if not hasattr(self, '_geometry'): + raise ValueError( + "Model must be exported before the 'paths' attribute is" \ + "available for a DistribcellFilter.") + + # Determine paths for cell instances + self._geometry.determine_paths() - @paths.setter - def paths(self, paths): - cv.check_iterable_type('paths', paths, str) - self._paths = paths + # Get paths for the corresponding cell + cell_id = self.bins[0] + cell = self._geometry.get_all_cells()[cell_id] + self._paths = cell.paths + + return self._paths @Filter.bins.setter def bins(self, bins): diff --git a/openmc/lib/cell.py b/openmc/lib/cell.py index 971a24cba91..dfd09d2f9c1 100644 --- a/openmc/lib/cell.py +++ b/openmc/lib/cell.py @@ -34,6 +34,10 @@ c_int32, POINTER(c_int32), POINTER(c_double)] _dll.openmc_cell_get_temperature.restype = c_int _dll.openmc_cell_get_temperature.errcheck = _error_handler +_dll.openmc_cell_get_density.argtypes = [ + c_int32, POINTER(c_int32), POINTER(c_double)] +_dll.openmc_cell_get_density.restype = c_int +_dll.openmc_cell_get_density.errcheck = _error_handler _dll.openmc_cell_get_name.argtypes = [c_int32, POINTER(c_char_p)] _dll.openmc_cell_get_name.restype = c_int _dll.openmc_cell_get_name.errcheck = _error_handler @@ -58,6 +62,10 @@ c_int32, c_double, POINTER(c_int32), c_bool] _dll.openmc_cell_set_temperature.restype = c_int _dll.openmc_cell_set_temperature.errcheck = _error_handler +_dll.openmc_cell_set_density.argtypes = [ + c_int32, c_double, POINTER(c_int32), c_bool] +_dll.openmc_cell_set_density.restype = c_int +_dll.openmc_cell_set_density.errcheck = _error_handler _dll.openmc_cell_set_translation.argtypes = [c_int32, POINTER(c_double)] _dll.openmc_cell_set_translation.restype = c_int _dll.openmc_cell_set_translation.errcheck = _error_handler @@ -236,6 +244,44 @@ def set_temperature(self, T, instance=None, set_contained=False): _dll.openmc_cell_set_temperature(self._index, T, instance, set_contained) + def get_density(self, instance: int | None = None): + """Get the density of a cell in [g/cm3] + + Parameters + ---------- + instance : int or None + Which instance of the cell + + """ + + if instance is not None: + instance = c_int32(instance) + + rho = c_double() + _dll.openmc_cell_get_density(self._index, instance, rho) + return rho.value + + def set_density(self, rho: float, instance: int | None = None, + set_contained: bool = False): + """Set the density of a cell + + Parameters + ---------- + rho : float + Density of the cell in [g/cm3] + instance : int or None + Which instance of the cell + set_contained : bool + If cell is not filled by a material, whether to set the density + of all filled cells + + """ + + if instance is not None: + instance = c_int32(instance) + + _dll.openmc_cell_set_density(self._index, rho, instance, set_contained) + @property def translation(self): translation = np.zeros(3) diff --git a/openmc/lib/core.py b/openmc/lib/core.py index 9f8db69d577..02c7784d1cc 100644 --- a/openmc/lib/core.py +++ b/openmc/lib/core.py @@ -7,12 +7,14 @@ from pathlib import Path from random import getrandbits from tempfile import TemporaryDirectory +import traceback as tb import numpy as np from numpy.ctypeslib import as_array from . import _dll from .error import _error_handler +from ..mpi import comm from openmc.checkvalue import PathLike import openmc.lib import openmc @@ -632,6 +634,9 @@ class TemporarySession: model : openmc.Model, optional OpenMC model to use for the session. If None, a minimal working model is created. + cwd : PathLike, optional + Working directory in which to run OpenMC. If None, a temporary directory + is created and deleted automatically. **init_kwargs Keyword arguments to pass to :func:`openmc.lib.init`. @@ -639,10 +644,13 @@ class TemporarySession: ---------- model : openmc.Model The OpenMC model used for the session. + comm : mpi4py.MPI.Intracomm + The MPI intracommunicator used for the session. """ - def __init__(self, model=None, **init_kwargs): - self.init_kwargs = init_kwargs + def __init__(self, model=None, cwd=None, **init_kwargs): + self.init_kwargs = dict(init_kwargs) + self.cwd = cwd if model is None: surf = openmc.Sphere(boundary_type="vacuum") cell = openmc.Cell(region=-surf) @@ -652,6 +660,10 @@ def __init__(self, model=None, **init_kwargs): particles=1, batches=1, output={'summary': False}) self.model = model + # Determine MPI intercommunicator + self.init_kwargs.setdefault('intracomm', comm) + self.comm = self.init_kwargs['intracomm'] + def __enter__(self): """Initialize the OpenMC library in a temporary directory.""" # If already initialized, the context manager is a no-op @@ -662,14 +674,24 @@ def __enter__(self): # Store original working directory self.orig_dir = Path.cwd() - # Set up temporary directory - self.tmp_dir = TemporaryDirectory() - working_dir = Path(self.tmp_dir.name) - working_dir.mkdir(parents=True, exist_ok=True) - os.chdir(working_dir) + if self.cwd is None: + # Set up temporary directory on rank 0 + if self.comm.rank == 0: + self._tmp_dir = TemporaryDirectory() + self.cwd = self._tmp_dir.name + + # Broadcast the path so that all ranks use the same directory + self.cwd = self.comm.bcast(self.cwd) - # Export model and initialize OpenMC - self.model.export_to_model_xml() + # Create and change to specified directory + self.cwd = Path(self.cwd) + self.cwd.mkdir(parents=True, exist_ok=True) + os.chdir(self.cwd) + + # Export model on first rank and initialize OpenMC + if self.comm.rank == 0: + self.model.export_to_model_xml() + self.comm.barrier() openmc.lib.init(**self.init_kwargs) return self @@ -679,11 +701,24 @@ def __exit__(self, exc_type, exc_value, traceback): if self.already_initialized: return + # If an exception occurred, abort all ranks immediately + if exc_type is not None: + # Print exception info on the rank that failed + tb.print_exception(exc_type, exc_value, traceback) + sys.stdout.flush() + + # Abort all MPI processes + self.comm.Abort(1) + try: finalize() finally: os.chdir(self.orig_dir) - self.tmp_dir.cleanup() + + # Make sure all ranks have finalized before deleting temporary dir + self.comm.barrier() + if hasattr(self, '_tmp_dir'): + self._tmp_dir.cleanup() class _DLLGlobal: diff --git a/openmc/material.py b/openmc/material.py index c7b954b6666..1609da05a36 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -290,11 +290,13 @@ def decay_photon_energy(self) -> Univariate | None: return self.get_decay_photon_energy(0.0) def get_decay_photon_energy( - self, - clip_tolerance: float = 1e-6, - units: str = 'Bq', - volume: float | None = None - ) -> Univariate | None: + self, + clip_tolerance: float = 1e-6, + units: str = 'Bq', + volume: float | None = None, + exclude_nuclides: list[str] | None = None, + include_nuclides: list[str] | None = None + ) -> Univariate | None: r"""Return energy distribution of decay photons from unstable nuclides. .. versionadded:: 0.14.0 @@ -302,22 +304,31 @@ def get_decay_photon_energy( Parameters ---------- clip_tolerance : float - Maximum fraction of :math:`\sum_i x_i p_i` for discrete - distributions that will be discarded. + Maximum fraction of :math:`\sum_i x_i p_i` for discrete distributions + that will be discarded. units : {'Bq', 'Bq/g', 'Bq/kg', 'Bq/cm3'} Specifies the units on the integral of the distribution. volume : float, optional Volume of the material. If not passed, defaults to using the :attr:`Material.volume` attribute. + exclude_nuclides : list of str, optional + Nuclides to exclude from the photon source calculation. + include_nuclides : list of str, optional + Nuclides to include in the photon source calculation. If specified, + only these nuclides are used. Returns ------- Univariate or None - Decay photon energy distribution. The integral of this distribution - is the total intensity of the photon source in the requested units. + Decay photon energy distribution. The integral of this distribution is + the total intensity of the photon source in the requested units. """ cv.check_value('units', units, {'Bq', 'Bq/g', 'Bq/kg', 'Bq/cm3'}) + + if exclude_nuclides is not None and include_nuclides is not None: + raise ValueError("Cannot specify both exclude_nuclides and include_nuclides") + if units == 'Bq': multiplier = volume if volume is not None else self.volume if multiplier is None: @@ -332,6 +343,11 @@ def get_decay_photon_energy( dists = [] probs = [] for nuc, atoms_per_bcm in self.get_nuclide_atom_densities().items(): + if exclude_nuclides is not None and nuc in exclude_nuclides: + continue + if include_nuclides is not None and nuc not in include_nuclides: + continue + source_per_atom = openmc.data.decay_photon_energy(nuc) if source_per_atom is not None and atoms_per_bcm > 0.0: dists.append(source_per_atom) diff --git a/openmc/mesh.py b/openmc/mesh.py index 2e9abd1b65c..ce5218b5e97 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -5,6 +5,7 @@ from functools import wraps from math import pi, sqrt, atan2 from numbers import Integral, Real +from pathlib import Path from typing import Protocol import h5py @@ -287,6 +288,7 @@ def get_homogenized_materials( model: openmc.Model, n_samples: int | tuple[int, int, int] = 10_000, include_void: bool = True, + material_volumes: MeshMaterialVolumes | None = None, **kwargs ) -> list[openmc.Material]: """Generate homogenized materials over each element in a mesh. @@ -305,8 +307,12 @@ def get_homogenized_materials( the x, y, and z dimensions. include_void : bool, optional Whether homogenization should include voids. + material_volumes : MeshMaterialVolumes, optional + Previously computed mesh material volumes to use for homogenization. + If not provided, they will be computed by calling + :meth:`material_volumes`. **kwargs - Keyword-arguments passed to :meth:`MeshBase.material_volumes`. + Keyword-arguments passed to :meth:`material_volumes`. Returns ------- @@ -314,23 +320,16 @@ def get_homogenized_materials( Homogenized material in each mesh element """ - vols = self.material_volumes(model, n_samples, **kwargs) + if material_volumes is None: + vols = self.material_volumes(model, n_samples, **kwargs) + else: + vols = material_volumes mat_volume_by_element = [vols.by_element(i) for i in range(vols.num_elements)] - # Create homogenized material for each element - materials = model.geometry.get_all_materials() - - # Account for materials in DAGMC universes - # TODO: This should really get incorporated in lower-level calls to - # get_all_materials, but right now it requires information from the - # Model object - for cell in model.geometry.get_all_cells().values(): - if isinstance(cell.fill, openmc.DAGMCUniverse): - names = cell.fill.material_names - materials.update({ - mat.id: mat for mat in model.materials if mat.name in names - }) + # Get dictionary of all materials + materials = model._get_all_materials() + # Create homogenized material for each element homogenized_materials = [] for mat_volume_list in mat_volume_by_element: material_ids, volumes = [list(x) for x in zip(*mat_volume_list)] @@ -402,7 +401,7 @@ def material_volumes( # In order to get mesh into model, we temporarily replace the # tallies with a single mesh tally using the current mesh - original_tallies = model.tallies + original_tallies = list(model.tallies) new_tally = openmc.Tally() new_tally.filters = [openmc.MeshFilter(self)] new_tally.scores = ['flux'] @@ -424,7 +423,6 @@ def material_volumes( # Restore original tallies model.tallies = original_tallies - return volumes @@ -2446,6 +2444,7 @@ class UnstructuredMesh(MeshBase): _UNSUPPORTED_ELEM = -1 _LINEAR_TET = 0 _LINEAR_HEX = 1 + _VTK_TETRA = 10 def __init__(self, filename: PathLike, library: str, mesh_id: int | None = None, name: str = '', length_multiplier: float = 1.0, @@ -2655,7 +2654,8 @@ def write_vtk_mesh(self, **kwargs): warnings.warn( "The 'UnstructuredMesh.write_vtk_mesh' method has been renamed " "to 'write_data_to_vtk' and will be removed in a future version " - " of OpenMC.", FutureWarning + " of OpenMC.", + FutureWarning, ) self.write_data_to_vtk(**kwargs) @@ -2673,9 +2673,10 @@ def write_data_to_vtk( Parameters ---------- filename : str or pathlib.Path - Name of the VTK file to write. If the filename ends in '.vtu' then a - binary VTU format file will be written, if the filename ends in - '.vtk' then a legacy VTK file will be written. + Name of the VTK file to write. If the filename ends in '.vtkhdf' + then a VTKHDF format file will be written. If the filename ends in + '.vtu' then a binary VTU format file will be written. If the + filename ends in '.vtk' then a legacy VTK file will be written. datasets : dict Dictionary whose keys are the data labels and values are numpy appropriately sized arrays of the data @@ -2683,6 +2684,35 @@ def write_data_to_vtk( Whether or not to normalize the data by the volume of the mesh elements """ + + if Path(filename).suffix == ".vtkhdf": + + self._write_data_to_vtk_hdf5_format( + filename=filename, + datasets=datasets, + volume_normalization=volume_normalization, + ) + + elif Path(filename).suffix == ".vtk" or Path(filename).suffix == ".vtu": + + self._write_data_to_vtk_ascii_format( + filename=filename, + datasets=datasets, + volume_normalization=volume_normalization, + ) + + else: + raise ValueError( + "Unsupported file extension, The filename must end with " + "'.vtkhdf', '.vtu' or '.vtk'" + ) + + def _write_data_to_vtk_ascii_format( + self, + filename: PathLike | None = None, + datasets: dict | None = None, + volume_normalization: bool = True, + ): from vtkmodules.util import numpy_support from vtkmodules import vtkCommonCore from vtkmodules import vtkCommonDataModel @@ -2690,9 +2720,7 @@ def write_data_to_vtk( from vtkmodules import vtkIOXML if self.connectivity is None or self.vertices is None: - raise RuntimeError( - "This mesh has not been loaded from a statepoint file." - ) + raise RuntimeError("This mesh has not been loaded from a statepoint file.") if filename is None: filename = f"mesh_{self.id}.vtk" @@ -2774,29 +2802,128 @@ def write_data_to_vtk( writer.Write() + def _write_data_to_vtk_hdf5_format( + self, + filename: PathLike | None = None, + datasets: dict | None = None, + volume_normalization: bool = True, + ): + def append_dataset(dset, array): + """Convenience function to append data to an HDF5 dataset""" + origLen = dset.shape[0] + dset.resize(origLen + array.shape[0], axis=0) + dset[origLen:] = array + + if self.library != "moab": + raise NotImplementedError("VTKHDF output is only supported for MOAB meshes") + + # the self.connectivity contains arrays of length 8 to support hex + # elements as well, in the case of tetrahedra mesh elements, the + # last 4 values are -1 and are removed + trimmed_connectivity = [] + for cell in self.connectivity: + # Find the index of the first -1 value, if any + first_negative_index = np.where(cell == -1)[0] + if first_negative_index.size > 0: + # Slice the array up to the first -1 value + trimmed_connectivity.append(cell[: first_negative_index[0]]) + else: + # No -1 values, append the whole cell + trimmed_connectivity.append(cell) + trimmed_connectivity = np.array(trimmed_connectivity, dtype="int32").flatten() + + # MOAB meshes supports tet elements only so we know it has 4 points per cell + points_per_cell = 4 + + # offsets are the indices of the first point of each cell in the array of points + offsets = np.arange(0, self.n_elements * points_per_cell + 1, points_per_cell) + + for name, data in datasets.items(): + if data.shape != self.dimension: + raise ValueError( + f'Cannot apply dataset "{name}" with ' + f"shape {data.shape} to mesh {self.id} " + f"with dimensions {self.dimension}" + ) + + with h5py.File(filename, "w") as f: + + root = f.create_group("VTKHDF") + vtk_file_format_version = (2, 1) + root.attrs["Version"] = vtk_file_format_version + ascii_type = "UnstructuredGrid".encode("ascii") + root.attrs.create( + "Type", + ascii_type, + dtype=h5py.string_dtype("ascii", len(ascii_type)), + ) + + # create hdf5 file structure + root.create_dataset("NumberOfPoints", (0,), maxshape=(None,), dtype="i8") + root.create_dataset("Types", (0,), maxshape=(None,), dtype="uint8") + root.create_dataset("Points", (0, 3), maxshape=(None, 3), dtype="f") + root.create_dataset( + "NumberOfConnectivityIds", (0,), maxshape=(None,), dtype="i8" + ) + root.create_dataset("NumberOfCells", (0,), maxshape=(None,), dtype="i8") + root.create_dataset("Offsets", (0,), maxshape=(None,), dtype="i8") + root.create_dataset("Connectivity", (0,), maxshape=(None,), dtype="i8") + + append_dataset(root["NumberOfPoints"], np.array([len(self.vertices)])) + append_dataset(root["Points"], self.vertices) + append_dataset( + root["NumberOfConnectivityIds"], + np.array([len(trimmed_connectivity)]), + ) + append_dataset(root["Connectivity"], trimmed_connectivity) + append_dataset(root["NumberOfCells"], np.array([self.n_elements])) + append_dataset(root["Offsets"], offsets) + + append_dataset( + root["Types"], np.full(self.n_elements, self._VTK_TETRA, dtype="uint8") + ) + + cell_data_group = root.create_group("CellData") + + for name, data in datasets.items(): + + cell_data_group.create_dataset( + name, (0,), maxshape=(None,), dtype="float64", chunks=True + ) + + if volume_normalization: + data /= self.volumes + append_dataset(cell_data_group[name], data) + @classmethod def from_hdf5(cls, group: h5py.Group, mesh_id: int, name: str): - filename = group['filename'][()].decode() - library = group['library'][()].decode() - if 'options' in group.attrs: + filename = group["filename"][()].decode() + library = group["library"][()].decode() + if "options" in group.attrs: options = group.attrs['options'].decode() else: options = None - mesh = cls(filename=filename, library=library, mesh_id=mesh_id, name=name, options=options) + mesh = cls( + filename=filename, + library=library, + mesh_id=mesh_id, + name=name, + options=options, + ) mesh._has_statepoint_data = True - vol_data = group['volumes'][()] + vol_data = group["volumes"][()] mesh.volumes = np.reshape(vol_data, (vol_data.shape[0],)) mesh.n_elements = mesh.volumes.size - vertices = group['vertices'][()] + vertices = group["vertices"][()] mesh._vertices = vertices.reshape((-1, 3)) - connectivity = group['connectivity'][()] + connectivity = group["connectivity"][()] mesh._connectivity = connectivity.reshape((-1, 8)) - mesh._element_types = group['element_types'][()] + mesh._element_types = group["element_types"][()] - if 'length_multiplier' in group: - mesh.length_multiplier = group['length_multiplier'][()] + if "length_multiplier" in group: + mesh.length_multiplier = group["length_multiplier"][()] return mesh @@ -2815,7 +2942,7 @@ def to_xml_element(self): element.set("library", self._library) if self.options is not None: - element.set('options', self.options) + element.set("options", self.options) subelement = ET.SubElement(element, "filename") subelement.text = str(self.filename) diff --git a/openmc/mgxs/__init__.py b/openmc/mgxs/__init__.py index 5de85afb0e7..682b5d55072 100644 --- a/openmc/mgxs/__init__.py +++ b/openmc/mgxs/__init__.py @@ -13,8 +13,8 @@ - "XMAS-172_" designed for LWR analysis ([SAR1990]_, [SAN2004]_) - "SHEM-361_" designed for LWR analysis to eliminate self-shielding calculations of thermal resonances ([HFA2005]_, [SAN2007]_, [HEB2008]_) -- "SCALE-X" (where X is 44 which is designed for criticality analysis - and 252 is designed for thermal reactors) for the SCALE code suite +- "SCALE-X" (where X is 44 which is designed for criticality analysis, 252 is designed + for thermal reactors and 999 for multipurpose activation) for the SCALE code suite ([ZAL1999]_ and [REARDEN2013]_) - "MPACT-X" (where X is 51 (PWR), 60 (BWR), 69 (Magnox)) from the MPACT_ reactor physics code ([KIM2019]_ and [KIM2020]_) @@ -29,6 +29,7 @@ .. _SCALE44: https://www-nds.iaea.org/publications/indc/indc-czr-0001.pdf .. _ECCO-33: https://serpent.vtt.fi/mediawiki/index.php/ECCO_33-group_structure .. _SCALE252: https://oecd-nea.org/science/wpncs/amct/workingarea/meeting2013/EGAMCT2013_08.pdf +.. _SCALE999: https://info.ornl.gov/sites/publications/Files/Pub67728.pdf, https://www.nrc.gov/docs/ML1218/ML12184A002.pdf .. _MPACT: https://vera.ornl.gov/mpact/ .. _XMAS-172: https://www-nds.iaea.org/wimsd/energy.htm .. _SHEM-361: http://merlin.polymtl.ca/downloads/FP214.pdf @@ -593,7 +594,208 @@ 2.4000e8, 2.8000e8, 3.2000e8, 3.6000e8, 4.0000e8, 4.4000e8, 4.8000e8, 5.2000e8, 5.6000e8, 6.0000e8, 6.4000e8, 6.8000e8, 7.2000e8, 7.6000e8, 8.0000e8, - 8.4000e8, 8.8000e8, 9.2000e8, 9.6000e8, 1.0000e9,]) + 8.4000e8, 8.8000e8, 9.2000e8, 9.6000e8, 1.0000e9]) +GROUP_STRUCTURES['SCALE-999'] = np.array([ + 1.000e-5, 1.000e-4, 5.000e-4, 7.500e-4, 1.000e-3, + 1.200e-3, 1.500e-3, 2.000e-3, 2.500e-3, 3.000e-3, + 4.000e-3, 5.000e-3, 7.500e-3, 1.000e-2, 1.450e-2, + 1.850e-2, 2.100e-2, 2.530e-2, 3.000e-2, 4.000e-2, + 5.000e-2, 6.000e-2, 7.000e-2, 8.000e-2, 9.000e-2, + 1.000e-1, 1.250e-1, 1.500e-1, 1.750e-1, 1.840e-1, + 2.000e-1, 2.250e-1, 2.500e-1, 2.750e-1, 3.000e-1, + 3.250e-1, 3.500e-1, 3.668e-1, 3.750e-1, 4.000e-1, + 4.140e-1, 4.500e-1, 5.000e-1, 5.316e-1, 5.500e-1, + 6.000e-1, 6.250e-1, 6.500e-1, 6.826e-1, 7.000e-1, + 7.500e-1, 8.000e-1, 8.500e-1, 8.764e-1, 9.000e-1, + 9.250e-1, 9.500e-1, 9.750e-1, 1.000e+0, 1.010e+0, + 1.020e+0, 1.030e+0, 1.040e+0, 1.050e+0, 1.060e+0, + 1.070e+0, 1.080e+0, 1.090e+0, 1.100e+0, 1.110e+0, + 1.120e+0, 1.130e+0, 1.140e+0, 1.150e+0, 1.175e+0, + 1.200e+0, 1.225e+0, 1.250e+0, 1.300e+0, 1.350e+0, + 1.400e+0, 1.450e+0, 1.500e+0, 1.545e+0, 1.590e+0, + 1.635e+0, 1.680e+0, 1.725e+0, 1.770e+0, 1.815e+0, + 1.860e+0, 1.900e+0, 1.940e+0, 1.970e+0, 2.000e+0, + 2.060e+0, 2.120e+0, 2.165e+0, 2.210e+0, 2.255e+0, + 2.300e+0, 2.340e+0, 2.380e+0, 2.425e+0, 2.470e+0, + 2.520e+0, 2.570e+0, 2.620e+0, 2.670e+0, 2.720e+0, + 2.770e+0, 2.820e+0, 2.870e+0, 2.920e+0, 2.970e+0, + 3.000e+0, 3.100e+0, 3.200e+0, 3.300e+0, 3.500e+0, + 3.620e+0, 3.730e+0, 3.830e+0, 3.928e+0, 4.000e+0, + 4.100e+0, 4.300e+0, 4.500e+0, 4.750e+0, 4.875e+0, + 5.000e+0, 5.044e+0, 5.250e+0, 5.400e+0, 5.550e+0, + 5.700e+0, 5.850e+0, 6.000e+0, 6.250e+0, 6.375e+0, + 6.500e+0, 6.625e+0, 6.750e+0, 6.875e+0, 7.000e+0, + 7.075e+0, 7.150e+0, 7.625e+0, 8.100e+0, 8.208e+0, + 8.315e+0, 8.708e+0, 9.100e+0, 9.550e+0, 1.000e+1, + 1.034e+1, 1.068e+1, 1.109e+1, 1.150e+1, 1.170e+1, + 1.190e+1, 1.240e+1, 1.290e+1, 1.333e+1, 1.375e+1, + 1.408e+1, 1.440e+1, 1.475e+1, 1.510e+1, 1.555e+1, + 1.600e+1, 1.650e+1, 1.700e+1, 1.730e+1, 1.760e+1, + 1.805e+1, 1.850e+1, 1.875e+1, 1.900e+1, 1.940e+1, + 2.000e+1, 2.050e+1, 2.100e+1, 2.175e+1, 2.250e+1, + 2.375e+1, 2.500e+1, 2.625e+1, 2.750e+1, 2.826e+1, + 2.902e+1, 2.951e+1, 3.000e+1, 3.063e+1, 3.125e+1, + 3.150e+1, 3.175e+1, 3.250e+1, 3.325e+1, 3.350e+1, + 3.375e+1, 3.418e+1, 3.460e+1, 3.500e+1, 3.550e+1, + 3.600e+1, 3.700e+1, 3.713e+1, 3.727e+1, 3.763e+1, + 3.800e+1, 3.855e+1, 3.910e+1, 3.935e+1, 3.960e+1, + 4.030e+1, 4.100e+1, 4.170e+1, 4.240e+1, 4.320e+1, + 4.400e+1, 4.460e+1, 4.520e+1, 4.610e+1, 4.700e+1, + 4.743e+1, 4.785e+1, 4.808e+1, 4.830e+1, 4.875e+1, + 4.920e+1, 4.990e+1, 5.060e+1, 5.130e+1, 5.200e+1, + 5.270e+1, 5.340e+1, 5.620e+1, 5.800e+1, 6.000e+1, + 6.100e+1, 6.122e+1, 6.144e+1, 6.300e+1, 6.500e+1, + 6.625e+1, 6.750e+1, 6.975e+1, 7.200e+1, 7.400e+1, + 7.600e+1, 7.745e+1, 7.889e+1, 7.945e+1, 8.000e+1, + 8.170e+1, 8.200e+1, 8.400e+1, 8.600e+1, 8.800e+1, + 9.000e+1, 9.250e+1, 9.500e+1, 9.700e+1, 1.000e+2, + 1.012e+2, 1.038e+2, 1.050e+2, 1.080e+2, 1.105e+2, + 1.130e+2, 1.160e+2, 1.175e+2, 1.190e+2, 1.205e+2, + 1.220e+2, 1.240e+2, 1.260e+2, 1.280e+2, 1.301e+2, + 1.325e+2, 1.350e+2, 1.375e+2, 1.400e+2, 1.430e+2, + 1.450e+2, 1.475e+2, 1.500e+2, 1.525e+2, 1.550e+2, + 1.575e+2, 1.600e+2, 1.625e+2, 1.650e+2, 1.670e+2, + 1.700e+2, 1.716e+2, 1.739e+2, 1.763e+2, 1.786e+2, + 1.800e+2, 1.877e+2, 1.885e+2, 1.915e+2, 1.930e+2, + 1.962e+2, 1.999e+2, 2.020e+2, 2.074e+2, 2.088e+2, + 2.095e+2, 2.122e+2, 2.145e+2, 2.175e+2, 2.200e+2, + 2.237e+2, 2.269e+2, 2.301e+2, 2.333e+2, 2.367e+2, + 2.400e+2, 2.442e+2, 2.484e+2, 2.527e+2, 2.571e+2, + 2.615e+2, 2.661e+2, 2.707e+2, 2.754e+2, 2.801e+2, + 2.850e+2, 2.899e+2, 2.948e+2, 2.999e+2, 3.050e+2, + 3.107e+2, 3.165e+2, 3.224e+2, 3.284e+2, 3.345e+2, + 3.408e+2, 3.471e+2, 3.536e+2, 3.591e+2, 3.648e+2, + 3.705e+2, 3.764e+2, 3.823e+2, 3.883e+2, 3.944e+2, + 4.007e+2, 4.070e+2, 4.134e+2, 4.199e+2, 4.265e+2, + 4.332e+2, 4.400e+2, 4.470e+2, 4.540e+2, 4.595e+2, + 4.650e+2, 4.706e+2, 4.763e+2, 4.821e+2, 4.879e+2, + 4.937e+2, 4.997e+2, 5.057e+2, 5.118e+2, 5.180e+2, + 5.243e+2, 5.306e+2, 5.370e+2, 5.435e+2, 5.500e+2, + 5.581e+2, 5.662e+2, 5.745e+2, 5.830e+2, 5.932e+2, + 6.036e+2, 6.142e+2, 6.250e+2, 6.359e+2, 6.471e+2, + 6.585e+2, 6.700e+2, 6.765e+2, 6.830e+2, 6.909e+2, + 6.988e+2, 7.069e+2, 7.150e+2, 7.232e+2, 7.316e+2, + 7.400e+2, 7.485e+2, 7.598e+2, 7.712e+2, 7.827e+2, + 7.945e+2, 8.064e+2, 8.185e+2, 8.308e+2, 8.433e+2, + 8.559e+2, 8.688e+2, 8.818e+2, 8.950e+2, 9.085e+2, + 9.221e+2, 9.360e+2, 9.500e+2, 9.555e+2, 9.611e+2, + 9.720e+2, 9.829e+2, 9.940e+2, 1.005e+3, 1.017e+3, + 1.028e+3, 1.040e+3, 1.051e+3, 1.063e+3, 1.075e+3, + 1.087e+3, 1.100e+3, 1.112e+3, 1.125e+3, 1.137e+3, + 1.150e+3, 1.171e+3, 1.191e+3, 1.213e+3, 1.234e+3, + 1.249e+3, 1.265e+3, 1.280e+3, 1.296e+3, 1.312e+3, + 1.328e+3, 1.344e+3, 1.361e+3, 1.377e+3, 1.394e+3, + 1.411e+3, 1.429e+3, 1.446e+3, 1.464e+3, 1.482e+3, + 1.500e+3, 1.525e+3, 1.550e+3, 1.585e+3, 1.610e+3, + 1.636e+3, 1.662e+3, 1.689e+3, 1.716e+3, 1.744e+3, + 1.772e+3, 1.800e+3, 1.828e+3, 1.856e+3, 1.885e+3, + 1.914e+3, 1.943e+3, 1.973e+3, 2.004e+3, 2.035e+3, + 2.075e+3, 2.116e+3, 2.158e+3, 2.200e+3, 2.250e+3, + 2.290e+3, 2.337e+3, 2.386e+3, 2.435e+3, 2.500e+3, + 2.532e+3, 2.580e+3, 2.613e+3, 2.679e+3, 2.747e+3, + 2.808e+3, 2.871e+3, 2.935e+3, 3.000e+3, 3.035e+3, + 3.112e+3, 3.191e+3, 3.272e+3, 3.355e+3, 3.440e+3, + 3.527e+3, 3.616e+3, 3.707e+3, 3.740e+3, 3.819e+3, + 3.900e+3, 3.998e+3, 4.099e+3, 4.202e+3, 4.307e+3, + 4.400e+3, 4.500e+3, 4.620e+3, 4.740e+3, 4.850e+3, + 4.960e+3, 5.100e+3, 5.250e+3, 5.400e+3, 5.531e+3, + 5.645e+3, 5.700e+3, 5.879e+3, 6.000e+3, 6.128e+3, + 6.258e+3, 6.392e+3, 6.528e+3, 6.667e+3, 6.809e+3, + 6.954e+3, 7.102e+3, 7.212e+3, 7.323e+3, 7.437e+3, + 7.552e+3, 7.669e+3, 7.787e+3, 7.908e+3, 8.030e+3, + 8.159e+3, 8.289e+3, 8.422e+3, 8.557e+3, 8.694e+3, + 8.834e+3, 8.975e+3, 9.119e+3, 9.307e+3, 9.500e+3, + 9.763e+3, 1.003e+4, 1.031e+4, 1.060e+4, 1.086e+4, + 1.114e+4, 1.142e+4, 1.171e+4, 1.202e+4, 1.234e+4, + 1.266e+4, 1.300e+4, 1.324e+4, 1.348e+4, 1.373e+4, + 1.398e+4, 1.424e+4, 1.450e+4, 1.476e+4, 1.503e+4, + 1.527e+4, 1.550e+4, 1.574e+4, 1.599e+4, 1.623e+4, + 1.649e+4, 1.674e+4, 1.700e+4, 1.727e+4, 1.755e+4, + 1.783e+4, 1.812e+4, 1.841e+4, 1.870e+4, 1.900e+4, + 1.931e+4, 1.965e+4, 2.000e+4, 2.045e+4, 2.092e+4, + 2.139e+4, 2.188e+4, 2.229e+4, 2.271e+4, 2.314e+4, + 2.358e+4, 2.388e+4, 2.418e+4, 2.450e+4, 2.479e+4, + 2.500e+4, 2.520e+4, 2.552e+4, 2.580e+4, 2.606e+4, + 2.653e+4, 2.700e+4, 2.737e+4, 2.774e+4, 2.812e+4, + 2.850e+4, 2.887e+4, 2.924e+4, 2.962e+4, 3.000e+4, + 3.045e+4, 3.090e+4, 3.136e+4, 3.183e+4, 3.243e+4, + 3.304e+4, 3.367e+4, 3.431e+4, 3.468e+4, 3.507e+4, + 3.545e+4, 3.584e+4, 3.624e+4, 3.663e+4, 3.704e+4, + 3.744e+4, 3.786e+4, 3.827e+4, 3.869e+4, 3.912e+4, + 3.955e+4, 3.998e+4, 4.042e+4, 4.087e+4, 4.136e+4, + 4.186e+4, 4.237e+4, 4.288e+4, 4.340e+4, 4.393e+4, + 4.446e+4, 4.500e+4, 4.565e+4, 4.631e+4, 4.721e+4, + 4.812e+4, 4.905e+4, 5.000e+4, 5.099e+4, 5.200e+4, + 5.248e+4, 5.347e+4, 5.448e+4, 5.551e+4, 5.656e+4, + 5.740e+4, 5.826e+4, 5.912e+4, 6.000e+4, 6.088e+4, + 6.177e+4, 6.267e+4, 6.358e+4, 6.451e+4, 6.545e+4, + 6.641e+4, 6.738e+4, 6.851e+4, 6.965e+4, 7.081e+4, + 7.200e+4, 7.300e+4, 7.399e+4, 7.500e+4, 7.610e+4, + 7.722e+4, 7.835e+4, 7.950e+4, 8.074e+4, 8.200e+4, + 8.250e+4, 8.374e+4, 8.500e+4, 8.652e+4, 8.788e+4, + 8.926e+4, 9.067e+4, 9.210e+4, 9.355e+4, 9.502e+4, + 9.652e+4, 9.804e+4, 1.000e+5, 1.013e+5, 1.027e+5, + 1.040e+5, 1.054e+5, 1.068e+5, 1.082e+5, 1.096e+5, + 1.111e+5, 1.125e+5, 1.139e+5, 1.153e+5, 1.168e+5, + 1.183e+5, 1.197e+5, 1.213e+5, 1.228e+5, 1.241e+5, + 1.255e+5, 1.269e+5, 1.283e+5, 1.291e+5, 1.307e+5, + 1.323e+5, 1.340e+5, 1.357e+5, 1.374e+5, 1.391e+5, + 1.409e+5, 1.426e+5, 1.445e+5, 1.463e+5, 1.481e+5, + 1.490e+5, 1.519e+5, 1.538e+5, 1.557e+5, 1.576e+5, + 1.596e+5, 1.616e+5, 1.637e+5, 1.657e+5, 1.678e+5, + 1.699e+5, 1.721e+5, 1.742e+5, 1.764e+5, 1.786e+5, + 1.809e+5, 1.832e+5, 1.855e+5, 1.878e+5, 1.902e+5, + 1.926e+5, 1.962e+5, 2.000e+5, 2.024e+5, 2.050e+5, + 2.076e+5, 2.102e+5, 2.128e+5, 2.155e+5, 2.182e+5, + 2.209e+5, 2.237e+5, 2.265e+5, 2.294e+5, 2.323e+5, + 2.352e+5, 2.381e+5, 2.411e+5, 2.442e+5, 2.472e+5, + 2.500e+5, 2.527e+5, 2.555e+5, 2.584e+5, 2.612e+5, + 2.641e+5, 2.670e+5, 2.700e+5, 2.732e+5, 2.767e+5, + 2.802e+5, 2.837e+5, 2.873e+5, 2.909e+5, 2.945e+5, + 2.972e+5, 2.985e+5, 3.020e+5, 3.053e+5, 3.088e+5, + 3.122e+5, 3.157e+5, 3.192e+5, 3.228e+5, 3.264e+5, + 3.300e+5, 3.337e+5, 3.379e+5, 3.422e+5, 3.465e+5, + 3.508e+5, 3.553e+5, 3.597e+5, 3.643e+5, 3.688e+5, + 3.735e+5, 3.782e+5, 3.829e+5, 3.877e+5, 3.938e+5, + 4.000e+5, 4.076e+5, 4.138e+5, 4.200e+5, 4.249e+5, + 4.299e+5, 4.349e+5, 4.400e+5, 4.452e+5, 4.505e+5, + 4.553e+5, 4.601e+5, 4.650e+5, 4.700e+5, 4.772e+5, + 4.845e+5, 4.920e+5, 4.995e+5, 5.054e+5, 5.113e+5, + 5.173e+5, 5.234e+5, 5.299e+5, 5.365e+5, 5.432e+5, + 5.500e+5, 5.557e+5, 5.614e+5, 5.672e+5, 5.730e+5, + 5.784e+5, 5.891e+5, 6.000e+5, 6.081e+5, 6.158e+5, + 6.235e+5, 6.313e+5, 6.393e+5, 6.468e+5, 6.545e+5, + 6.622e+5, 6.700e+5, 6.790e+5, 6.926e+5, 7.065e+5, + 7.154e+5, 7.244e+5, 7.335e+5, 7.427e+5, 7.500e+5, + 7.576e+5, 7.653e+5, 7.730e+5, 7.808e+5, 7.904e+5, + 8.002e+5, 8.100e+5, 8.200e+5, 8.301e+5, 8.403e+5, + 8.506e+5, 8.611e+5, 8.750e+5, 8.874e+5, 9.000e+5, + 9.072e+5, 9.200e+5, 9.400e+5, 9.616e+5, 9.800e+5, + 1.003e+6, 1.010e+6, 1.040e+6, 1.070e+6, 1.100e+6, + 1.108e+6, 1.136e+6, 1.165e+6, 1.200e+6, 1.225e+6, + 1.250e+6, 1.287e+6, 1.317e+6, 1.356e+6, 1.400e+6, + 1.423e+6, 1.461e+6, 1.500e+6, 1.536e+6, 1.572e+6, + 1.612e+6, 1.653e+6, 1.695e+6, 1.738e+6, 1.782e+6, + 1.827e+6, 1.850e+6, 1.921e+6, 1.969e+6, 2.019e+6, + 2.070e+6, 2.123e+6, 2.176e+6, 2.231e+6, 2.307e+6, + 2.354e+6, 2.365e+6, 2.385e+6, 2.466e+6, 2.479e+6, + 2.535e+6, 2.592e+6, 2.658e+6, 2.725e+6, 2.794e+6, + 2.865e+6, 2.932e+6, 3.000e+6, 3.080e+6, 3.166e+6, + 3.247e+6, 3.329e+6, 3.413e+6, 3.499e+6, 3.588e+6, + 3.679e+6, 3.772e+6, 3.867e+6, 3.965e+6, 4.066e+6, + 4.183e+6, 4.304e+6, 4.398e+6, 4.493e+6, 4.607e+6, + 4.724e+6, 4.800e+6, 4.882e+6, 4.966e+6, 5.092e+6, + 5.221e+6, 5.353e+6, 5.488e+6, 5.627e+6, 5.770e+6, + 5.916e+6, 6.065e+6, 6.219e+6, 6.376e+6, 6.434e+6, + 6.592e+6, 6.703e+6, 6.873e+6, 7.047e+6, 7.225e+6, + 7.408e+6, 7.596e+6, 7.788e+6, 7.985e+6, 8.187e+6, + 8.395e+6, 8.607e+6, 8.825e+6, 9.048e+6, 9.278e+6, + 9.512e+6, 9.753e+6, 1.000e+7, 1.025e+7, 1.051e+7, + 1.078e+7, 1.105e+7, 1.133e+7, 1.162e+7, 1.191e+7, + 1.221e+7, 1.252e+7, 1.284e+7, 1.317e+7, 1.350e+7, + 1.384e+7, 1.419e+7, 1.455e+7, 1.492e+7, 1.530e+7, + 1.568e+7, 1.608e+7, 1.649e+7, 1.691e+7, 1.733e+7, + 1.790e+7, 1.845e+7, 1.900e+7, 1.964e+7, 2.000e+7]) GROUP_STRUCTURES['UKAEA-1102'] = np.array([ 1.0000e-5, 1.0471e-5, 1.0965e-5, 1.1482e-5, 1.2023e-5, 1.2589e-5, 1.3183e-5, 1.3804e-5, 1.4454e-5, 1.5136e-5, diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 12a4630bdc4..b476de90202 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -10,6 +10,7 @@ import openmc import openmc.mgxs import openmc.checkvalue as cv +from openmc.checkvalue import PathLike from ..tallies import ESTIMATOR_TYPES @@ -555,14 +556,14 @@ def build_library(self): self.all_mgxs[domain.id][mgxs_type] = mgxs - def add_to_tallies_file(self, tallies_file, merge=True): - """Add all tallies from all MGXS objects to a tallies file. + def add_to_tallies(self, tallies, merge=True): + """Add tallies from all MGXS objects to a tallies object. NOTE: This assumes that :meth:`Library.build_library` has been called Parameters ---------- - tallies_file : openmc.Tallies + tallies : openmc.Tallies A Tallies collection to add each MGXS' tallies to generate a 'tallies.xml' input file for OpenMC merge : bool @@ -571,7 +572,7 @@ def add_to_tallies_file(self, tallies_file, merge=True): """ - cv.check_type('tallies_file', tallies_file, openmc.Tallies) + cv.check_type('tallies', tallies, openmc.Tallies) # Add tallies from each MGXS for each domain and mgxs type for domain in self.domains: @@ -586,7 +587,15 @@ def add_to_tallies_file(self, tallies_file, merge=True): = list(range(1, self.num_delayed_groups + 1)) for tally in mgxs.tallies.values(): - tallies_file.append(tally, merge=merge) + tallies.append(tally, merge=merge) + + def add_to_tallies_file(self, tallies_file, merge=True): + warn( + "The Library.add_to_tallies_file(...) method has been renamed to" + "add_to_tallies(...) and will be removed in a future version of " + "OpenMC.", FutureWarning + ) + self.add_to_tallies(tallies_file, merge=merge) def load_from_statepoint(self, statepoint): """Extracts tallies in an OpenMC StatePoint with the data needed to @@ -851,7 +860,7 @@ def build_hdf5_store(self, filename='mgxs.h5', directory='mgxs', 'since a statepoint has not yet been loaded' raise ValueError(msg) - cv.check_type('filename', filename, str) + cv.check_type('filename', filename, (str, PathLike)) cv.check_type('directory', directory, str) import h5py @@ -894,7 +903,7 @@ def dump_to_file(self, filename='mgxs', directory='mgxs'): """ - cv.check_type('filename', filename, str) + cv.check_type('filename', filename, (str, PathLike)) cv.check_type('directory', directory, str) # Make directory if it does not exist @@ -930,7 +939,7 @@ def load_from_file(filename='mgxs', directory='mgxs'): """ - cv.check_type('filename', filename, str) + cv.check_type('filename', filename, (str, PathLike)) cv.check_type('directory', directory, str) # Make directory if it does not exist diff --git a/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py index b95a4fbc0eb..c12c1a9abe6 100644 --- a/openmc/mgxs/mdgxs.py +++ b/openmc/mgxs/mdgxs.py @@ -7,6 +7,7 @@ import openmc import openmc.checkvalue as cv +from openmc.checkvalue import PathLike from openmc.mgxs import MGXS from .mgxs import _DOMAIN_TO_FILTER @@ -722,7 +723,7 @@ def export_xs_data(self, filename='mgxs', directory='mgxs', """ - cv.check_type('filename', filename, str) + cv.check_type('filename', filename, (str, PathLike)) cv.check_type('directory', directory, str) cv.check_value('format', format, ['csv', 'excel', 'pickle', 'latex']) cv.check_value('xs_type', xs_type, ['macro', 'micro']) diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 1bc7f938786..f621db092fc 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -2,6 +2,7 @@ from numbers import Integral import os import warnings +from textwrap import dedent import h5py import numpy as np @@ -9,6 +10,7 @@ import openmc from openmc.data import REACTION_MT, REACTION_NAME, FISSION_MTS import openmc.checkvalue as cv +from openmc.checkvalue import PathLike from ..tallies import ESTIMATOR_TYPES from . import EnergyGroups @@ -164,7 +166,7 @@ class MGXS: """ - _params = """ + _params = dedent(""" Parameters ---------- domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.RegularMesh @@ -251,7 +253,7 @@ class MGXS: .. versionadded:: 0.13.1 - """ + """) # Store whether or not the number density should be removed for microscopic # values of this data @@ -1981,7 +1983,7 @@ def export_xs_data(self, filename='mgxs', directory='mgxs', """ - cv.check_type('filename', filename, str) + cv.check_type('filename', filename, (str, PathLike)) cv.check_type('directory', directory, str) cv.check_value('format', format, ['csv', 'excel', 'pickle', 'latex']) cv.check_value('xs_type', xs_type, ['macro', 'micro']) @@ -2125,8 +2127,8 @@ def get_pandas_dataframe(self, groups='all', nuclides='all', df['std. dev.'] /= np.tile(densities, tile_factor) # Replace NaNs by zeros (happens if nuclide density is zero) - df['mean'].replace(np.nan, 0.0, inplace=True) - df['std. dev.'].replace(np.nan, 0.0, inplace=True) + df['mean'] = df['mean'].replace(np.nan, 0.0) + df['std. dev.'] = df['std. dev.'].replace(np.nan, 0.0) # Sort the dataframe by domain type id (e.g., distribcell id) and # energy groups such that data is from fast to thermal diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index b840563cffc..4bc2d4a5a76 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -11,7 +11,7 @@ import openmc.mgxs from openmc.mgxs import SCATTER_TABULAR, SCATTER_LEGENDRE, SCATTER_HISTOGRAM from .checkvalue import check_type, check_value, check_greater_than, \ - check_iterable_type, check_less_than, check_filetype_version + check_iterable_type, check_less_than, check_filetype_version, PathLike ROOM_TEMPERATURE_KELVIN = 294.0 @@ -2506,7 +2506,7 @@ def export_to_hdf5(self, filename='mgxs.h5', libver='earliest'): Parameters ---------- - filename : str + filename : str or PathLike Filename of file, default is mgxs.h5. libver : {'earliest', 'latest'} Compatibility mode for the HDF5 file. 'latest' will produce files @@ -2514,8 +2514,7 @@ def export_to_hdf5(self, filename='mgxs.h5', libver='earliest'): """ - check_type('filename', filename, str) - + check_type('filename', filename, (str, PathLike)) # Create and write to the HDF5 file file = h5py.File(filename, "w", libver=libver) file.attrs['filetype'] = np.bytes_(_FILETYPE_MGXS_LIBRARY) @@ -2554,7 +2553,7 @@ def from_hdf5(cls, filename=None): raise ValueError("Either path or openmc.config['mg_cross_sections']" "must be set") - check_type('filename', filename, str) + check_type('filename', filename, (str, PathLike)) file = h5py.File(filename, 'r') # Check filetype and version diff --git a/openmc/model/funcs.py b/openmc/model/funcs.py index 41aa920eae7..e076b080a9d 100644 --- a/openmc/model/funcs.py +++ b/openmc/model/funcs.py @@ -39,8 +39,8 @@ def borated_water(boron_ppm, temperature=293., pressure=0.1013, temp_unit='K', press_unit : {'MPa', 'psi'} The units used for the `pressure` argument. density : float - Water density in [g / cm^3]. If specified, this value overrides the - temperature and pressure arguments. + Water density in [g / cm^3]. If specified, this value overrides + the value that is computed from the temperature and pressure arguments. **kwargs All keyword arguments are passed to the created Material object. @@ -95,10 +95,7 @@ def borated_water(boron_ppm, temperature=293., pressure=0.1013, temp_unit='K', frac_B = boron_ppm * 1e-6 / M_B # Build the material. - if density is None: - out = openmc.Material(temperature=T, **kwargs) - else: - out = openmc.Material(**kwargs) + out = openmc.Material(temperature=T, **kwargs) out.add_element('H', frac_H, 'ao') out.add_element('O', frac_O, 'ao') out.add_element('B', frac_B, 'ao') diff --git a/openmc/model/model.py b/openmc/model/model.py index 03fdcda1fc8..782725b78e6 100644 --- a/openmc/model/model.py +++ b/openmc/model/model.py @@ -1,18 +1,21 @@ from __future__ import annotations -from collections.abc import Iterable, Sequence +from collections.abc import Callable, Iterable, Sequence import copy -from functools import lru_cache +from dataclasses import dataclass, field +from functools import cache from pathlib import Path import math from numbers import Integral, Real import random import re from tempfile import NamedTemporaryFile, TemporaryDirectory +from typing import Any, Protocol import warnings import h5py import lxml.etree as ET import numpy as np +from scipy.optimize import curve_fit import openmc import openmc._xml as xml @@ -24,6 +27,12 @@ from openmc.utility_funcs import change_directory +# Protocol for a function that is passed to search_keff +class ModelModifier(Protocol): + def __call__(self, val: float, **kwargs: Any) -> None: + ... + + class Model: """Model container. @@ -160,7 +169,7 @@ def is_initialized(self) -> bool: return False @property - @lru_cache(maxsize=None) + @cache def _materials_by_id(self) -> dict: """Dictionary mapping material ID --> material""" if self.materials: @@ -170,14 +179,14 @@ def _materials_by_id(self) -> dict: return {mat.id: mat for mat in mats} @property - @lru_cache(maxsize=None) + @cache def _cells_by_id(self) -> dict: """Dictionary mapping cell ID --> cell""" cells = self.geometry.get_all_cells() return {cell.id: cell for cell in cells.values()} @property - @lru_cache(maxsize=None) + @cache def _cells_by_name(self) -> dict[int, openmc.Cell]: # Get the names maps, but since names are not unique, store a set for # each name key. In this way when the user requests a change by a name, @@ -190,7 +199,7 @@ def _cells_by_name(self) -> dict[int, openmc.Cell]: return result @property - @lru_cache(maxsize=None) + @cache def _materials_by_name(self) -> dict[int, openmc.Material]: if self.materials is None: mats = self.geometry.get_all_materials().values() @@ -203,6 +212,60 @@ def _materials_by_name(self) -> dict[int, openmc.Material]: result[mat.name].add(mat) return result + # TODO: This should really get incorporated in lower-level calls to + # get_all_materials, but right now it requires information from the Model object + def _get_all_materials(self) -> dict[int, openmc.Material]: + """Get all materials including those in DAGMC universes + + Returns + ------- + dict + Dictionary mapping material ID to material instances + """ + # Get all materials from the Geometry object + materials = self.geometry.get_all_materials() + + # Account for materials in DAGMC universes + for cell in self.geometry.get_all_cells().values(): + if isinstance(cell.fill, openmc.DAGMCUniverse): + names = cell.fill.material_names + materials.update({ + mat.id: mat for mat in self.materials if mat.name in names + }) + + return materials + + def add_kinetics_parameters_tallies(self, num_groups: int | None = None): + """Add tallies for calculating kinetics parameters using the IFP method. + + This method adds tallies to the model for calculating two kinetics + parameters, the generation time and the effective delayed neutron + fraction (beta effective). After a model is run, these parameters can be + determined through the :meth:`openmc.StatePoint.ifp_results` method. + + Parameters + ---------- + num_groups : int, optional + Number of precursor groups to filter the delayed neutron fraction. + If None, only the total effective delayed neutron fraction is + tallied. + + """ + if not any('ifp-time-numerator' in t.scores for t in self.tallies): + gen_time_tally = openmc.Tally(name='IFP time numerator') + gen_time_tally.scores = ['ifp-time-numerator'] + self.tallies.append(gen_time_tally) + if not any('ifp-beta-numerator' in t.scores for t in self.tallies): + beta_tally = openmc.Tally(name='IFP beta numerator') + beta_tally.scores = ['ifp-beta-numerator'] + if num_groups is not None: + beta_tally.filters = [openmc.DelayedGroupFilter(list(range(1, num_groups + 1)))] + self.tallies.append(beta_tally) + if not any('ifp-denominator' in t.scores for t in self.tallies): + denom_tally = openmc.Tally(name='IFP denominator') + denom_tally.scores = ['ifp-denominator'] + self.tallies.append(denom_tally) + @classmethod def from_xml( cls, @@ -483,6 +546,13 @@ def deplete( depletion_operator.cleanup_when_done = True depletion_operator.finalize() + def _link_geometry_to_filters(self): + """Establishes a link between distribcell filters and the geometry""" + for tally in self.tallies: + for f in tally.filters: + if isinstance(f, openmc.DistribcellFilter): + f._geometry = self.geometry + def export_to_xml(self, directory: PathLike = '.', remove_surfs: bool = False, nuclides_to_ignore: Iterable[str] | None = None): """Export model to separate XML files. @@ -524,6 +594,8 @@ def export_to_xml(self, directory: PathLike = '.', remove_surfs: bool = False, if self.plots: self.plots.export_to_xml(d) + self._link_geometry_to_filters() + def export_to_model_xml(self, path: PathLike = 'model.xml', remove_surfs: bool = False, nuclides_to_ignore: Iterable[str] | None = None): """Export model to a single XML file. @@ -603,6 +675,8 @@ def export_to_model_xml(self, path: PathLike = 'model.xml', remove_surfs: bool = fh.write(ET.tostring(plots_element, encoding="unicode")) fh.write("\n") + self._link_geometry_to_filters() + def import_properties(self, filename: PathLike): """Import physical properties @@ -633,7 +707,7 @@ def import_properties(self, filename: PathLike): raise ValueError("Number of cells in properties file doesn't " "match current model.") - # Update temperatures for cells filled with materials + # Update temperatures and densities for cells filled with materials for name, group in cells_group.items(): cell_id = int(name.split()[1]) cell = cells[cell_id] @@ -648,6 +722,20 @@ def import_properties(self, filename: PathLike): else: lib_cell.set_temperature(temperature[0]) + if group['density']: + density = group['density'][()] + if density.size > 1: + cell.density = [rho for rho in density] + else: + cell.density = density + if self.is_initialized: + lib_cell = openmc.lib.cells[cell_id] + if density.size > 1: + for i, rho in enumerate(density): + lib_cell.set_density(rho, i) + else: + lib_cell.set_density(density[0]) + # Make sure number of materials matches mats_group = fh['materials'] n_cells = mats_group.attrs['n_materials'] @@ -1610,6 +1698,91 @@ def differentiate_mats(self, diff_volume_method: str = None, depletable_only: bo self.geometry.get_all_materials().values() ) + def _create_mgxs_sources( + self, + groups: openmc.mgxs.EnergyGroups, + spatial_dist: openmc.stats.Spatial, + source_energy: openmc.stats.Univariate | None = None, + ) -> list[openmc.IndependentSource]: + """Create a list of independent sources to use with MGXS generation. + + Note that in all cases, a discrete source that is uniform over all + energy groups is created (strength = 0.01) to ensure that total cross + sections are generated for all energy groups. In the case that the user + has provided a source_energy distribution as an argument, an additional + source (strength = 0.99) is created using that energy distribution. If + the user has not provided a source_energy distribution, but the model + has sources defined, and all of those sources are of IndependentSource + type, then additional sources are created based on the model's existing + sources, keeping their energy distributions but replacing their + spatial/angular distributions, with their combined strength being 0.99. + If the user has not provided a source_energy distribution and no sources + are defined on the model and the run mode is 'eigenvalue', then a + default Watt spectrum source (strength = 0.99) is added. + + Parameters + ---------- + groups : openmc.mgxs.EnergyGroups + Energy group structure for the MGXS. + spatial_dist : openmc.stats.Spatial + Spatial distribution to use for all sources. + source_energy : openmc.stats.Univariate, optional + Energy distribution to use when generating MGXS data, replacing any + existing sources in the model. + + Returns + ------- + list[openmc.IndependentSource] + A list of independent sources to use for MGXS generation. + """ + # Make a discrete source that is uniform over the bins of the group structure + midpoints = [] + strengths = [] + for i in range(groups.num_groups): + bounds = groups.get_group_bounds(i+1) + midpoints.append((bounds[0] + bounds[1]) / 2.0) + strengths.append(1.0) + + uniform_energy = openmc.stats.Discrete(x=midpoints, p=strengths) + uniform_distribution = openmc.IndependentSource(spatial_dist, energy=uniform_energy, strength=0.01) + sources = [uniform_distribution] + + # If the user provided an energy distribution, use that + if source_energy is not None: + user_energy = openmc.IndependentSource( + space=spatial_dist, energy=source_energy, strength=0.99) + sources.append(user_energy) + + # If the user did not provide an energy distribution, create sources + # based on what is in their model, keeping the energy spectrum but + # replacing the spatial/angular distributions. We only do this if ALL + # sources are of IndependentSource type, as we can't pull the energy + # distribution from e.g. CompiledSource or FileSource types. + else: + if self.settings.source is not None: + for src in self.settings.source: + if not isinstance(src, openmc.IndependentSource): + break + else: + n_user_sources = len(self.settings.source) + for src in self.settings.source: + # Create a new IndependentSource with adjusted strength, space, and angle + user_source = openmc.IndependentSource( + space=spatial_dist, + energy=src.energy, + strength=0.99 / n_user_sources + ) + sources.append(user_source) + else: + # No user sources defined. If we are in eigenvalue mode, then use the default Watt spectrum. + if self.settings.run_mode == 'eigenvalue': + watt_energy = openmc.stats.Watt() + watt_source = openmc.IndependentSource( + space=spatial_dist, energy=watt_energy, strength=0.99) + sources.append(watt_source) + + return sources + def _generate_infinite_medium_mgxs( self, groups: openmc.mgxs.EnergyGroups, @@ -1617,6 +1790,7 @@ def _generate_infinite_medium_mgxs( mgxs_path: PathLike, correction: str | None, directory: PathLike, + source_energy: openmc.stats.Univariate | None = None, ): """Generate a MGXS library by running multiple OpenMC simulations, each representing an infinite medium simulation of a single isolated @@ -1625,6 +1799,20 @@ def _generate_infinite_medium_mgxs( method that ignores all spatial self shielding effects and all resonance shielding effects between materials. + Note that in all cases, a discrete source that is uniform over all + energy groups is created (strength = 0.01) to ensure that total cross + sections are generated for all energy groups. In the case that the user + has provided a source_energy distribution as an argument, an additional + source (strength = 0.99) is created using that energy distribution. If + the user has not provided a source_energy distribution, but the model + has sources defined, and all of those sources are of IndependentSource + type, then additional sources are created based on the model's existing + sources, keeping their energy distributions but replacing their + spatial/angular distributions, with their combined strength being 0.99. + If the user has not provided a source_energy distribution and no sources + are defined on the model and the run mode is 'eigenvalue', then a + default Watt spectrum source (strength = 0.99) is added. + Parameters ---------- groups : openmc.mgxs.EnergyGroups @@ -1638,9 +1826,10 @@ def _generate_infinite_medium_mgxs( "P0". directory : str Directory to run the simulation in, so as to contain XML files. + source_energy : openmc.stats.Univariate, optional + Energy distribution to use when generating MGXS data, replacing any + existing sources in the model. """ - warnings.warn("The infinite medium method of generating MGXS may hang " - "if a material has a k-infinity > 1.0.") mgxs_sets = [] for material in self.materials: model = openmc.Model() @@ -1651,20 +1840,16 @@ def _generate_infinite_medium_mgxs( # Settings model.settings.batches = 100 model.settings.particles = nparticles + + model.settings.source = self._create_mgxs_sources( + groups, + spatial_dist=openmc.stats.Point(), + source_energy=source_energy + ) + model.settings.run_mode = 'fixed source' + model.settings.create_fission_neutrons = False - # Make a discrete source that is uniform over the bins of the group structure - n_groups = groups.num_groups - midpoints = [] - strengths = [] - for i in range(n_groups): - bounds = groups.get_group_bounds(i+1) - midpoints.append((bounds[0] + bounds[1]) / 2.0) - strengths.append(1.0) - - energy_distribution = openmc.stats.Discrete(x=midpoints, p=strengths) - model.settings.source = openmc.IndependentSource( - space=openmc.stats.Point(), energy=energy_distribution) model.settings.output = {'summary': True, 'tallies': False} # Geometry @@ -1714,7 +1899,7 @@ def _generate_infinite_medium_mgxs( mgxs_lib.build_library() # Create a "tallies.xml" file for the MGXS Library - mgxs_lib.add_to_tallies_file(model.tallies, merge=True) + mgxs_lib.add_to_tallies(model.tallies, merge=True) # Run statepoint_filename = model.run(cwd=directory) @@ -1814,6 +1999,7 @@ def _generate_stochastic_slab_mgxs( mgxs_path: PathLike, correction: str | None, directory: PathLike, + source_energy: openmc.stats.Univariate | None = None, ) -> None: """Generate MGXS assuming a stochastic "sandwich" of materials in a layered slab geometry. While geometry-specific spatial shielding effects are not @@ -1838,6 +2024,23 @@ def _generate_stochastic_slab_mgxs( "P0". directory : str Directory to run the simulation in, so as to contain XML files. + source_energy : openmc.stats.Univariate, optional + Energy distribution to use when generating MGXS data, replacing any + existing sources in the model. In all cases, a discrete source that + is uniform over all energy groups is created (strength = 0.01) to + ensure that total cross sections are generated for all energy + groups. In the case that the user has provided a source_energy + distribution as an argument, an additional source (strength = 0.99) + is created using that energy distribution. If the user has not + provided a source_energy distribution, but the model has sources + defined, and all of those sources are of IndependentSource type, + then additional sources are created based on the model's existing + sources, keeping their energy distributions but replacing their + spatial/angular distributions, with their combined strength being + 0.99. If the user has not provided a source_energy distribution and + no sources are defined on the model and the run mode is + 'eigenvalue', then a default Watt spectrum source (strength = 0.99) + is added. """ model = openmc.Model() model.materials = self.materials @@ -1847,24 +2050,20 @@ def _generate_stochastic_slab_mgxs( model.settings.inactive = 100 model.settings.particles = nparticles model.settings.output = {'summary': True, 'tallies': False} - model.settings.run_mode = self.settings.run_mode # Stochastic slab geometry model.geometry, spatial_distribution = Model._create_stochastic_slab_geometry( model.materials) - # Make a discrete source that is uniform over the bins of the group structure - n_groups = groups.num_groups - midpoints = [] - strengths = [] - for i in range(n_groups): - bounds = groups.get_group_bounds(i+1) - midpoints.append((bounds[0] + bounds[1]) / 2.0) - strengths.append(1.0) + # Define the sources + model.settings.source = self._create_mgxs_sources( + groups, + spatial_dist=spatial_distribution, + source_energy=source_energy + ) - energy_distribution = openmc.stats.Discrete(x=midpoints, p=strengths) - model.settings.source = [openmc.IndependentSource( - space=spatial_distribution, energy=energy_distribution, strength=1.0)] + model.settings.run_mode = 'fixed source' + model.settings.create_fission_neutrons = False model.settings.output = {'summary': True, 'tallies': False} @@ -1903,7 +2102,7 @@ def _generate_stochastic_slab_mgxs( mgxs_lib.build_library() # Create a "tallies.xml" file for the MGXS Library - mgxs_lib.add_to_tallies_file(model.tallies, merge=True) + mgxs_lib.add_to_tallies(model.tallies, merge=True) # Run statepoint_filename = model.run(cwd=directory) @@ -1998,7 +2197,7 @@ def _generate_material_wise_mgxs( mgxs_lib.build_library() # Create a "tallies.xml" file for the MGXS Library - mgxs_lib.add_to_tallies_file(model.tallies, merge=True) + mgxs_lib.add_to_tallies(model.tallies, merge=True) # Run statepoint_filename = model.run(cwd=directory) @@ -2022,6 +2221,7 @@ def convert_to_multigroup( overwrite_mgxs_library: bool = False, mgxs_path: PathLike = "mgxs.h5", correction: str | None = None, + source_energy: openmc.stats.Univariate | None = None, ): """Convert all materials from continuous energy to multigroup. @@ -2035,11 +2235,33 @@ def convert_to_multigroup( groups : openmc.mgxs.EnergyGroups or str, optional Energy group structure for the MGXS or the name of the group structure (based on keys from openmc.mgxs.GROUP_STRUCTURES). + nparticles : int, optional + Number of particles to simulate per batch when generating MGXS. + overwrite_mgxs_library : bool, optional + Whether to overwrite an existing MGXS library file. mgxs_path : str, optional - Filename of the mgxs.h5 library file. + Path to the mgxs.h5 library file. correction : str, optional Transport correction to apply to the MGXS. Options are None and "P0". + source_energy : openmc.stats.Univariate, optional + Energy distribution to use when generating MGXS data, replacing any + existing sources in the model. In all cases, a discrete source that + is uniform over all energy groups is created (strength = 0.01) to + ensure that total cross sections are generated for all energy + groups. In the case that the user has provided a source_energy + distribution as an argument, an additional source (strength = 0.99) + is created using that energy distribution. If the user has not + provided a source_energy distribution, but the model has sources + defined, and all of those sources are of IndependentSource type, + then additional sources are created based on the model's existing + sources, keeping their energy distributions but replacing their + spatial/angular distributions, with their combined strength being + 0.99. If the user has not provided a source_energy distribution and + no sources are defined on the model and the run mode is + 'eigenvalue', then a default Watt spectrum source (strength = 0.99) + is added. Note that this argument is only used when using the + "stochastic_slab" or "infinite_medium" MGXS generation methods. """ if isinstance(groups, str): groups = openmc.mgxs.EnergyGroups(groups) @@ -2069,13 +2291,13 @@ def convert_to_multigroup( if not Path(mgxs_path).is_file() or overwrite_mgxs_library: if method == "infinite_medium": self._generate_infinite_medium_mgxs( - groups, nparticles, mgxs_path, correction, tmpdir) + groups, nparticles, mgxs_path, correction, tmpdir, source_energy) elif method == "material_wise": self._generate_material_wise_mgxs( groups, nparticles, mgxs_path, correction, tmpdir) elif method == "stochastic_slab": self._generate_stochastic_slab_mgxs( - groups, nparticles, mgxs_path, correction, tmpdir) + groups, nparticles, mgxs_path, correction, tmpdir, source_energy) else: raise ValueError( f'MGXS generation method "{method}" not recognized') @@ -2151,3 +2373,262 @@ def _replace_infinity(value): # Take a wild guess as to how many rays are needed self.settings.particles = 2 * int(max_length) + + def keff_search( + self, + func: ModelModifier, + x0: float, + x1: float, + target: float = 1.0, + k_tol: float = 1e-4, + sigma_final: float = 3e-4, + p: float = 0.5, + q: float = 0.95, + memory: int = 4, + x_min: float | None = None, + x_max: float | None = None, + b0: int | None = None, + b_min: int = 20, + b_max: int | None = None, + maxiter: int = 50, + output: bool = False, + func_kwargs: dict[str, Any] | None = None, + run_kwargs: dict[str, Any] | None = None, + ) -> SearchResult: + r"""Perform a keff search on a model parametrized by a single variable. + + This method uses the GRsecant method described in a paper by `Price and + Roskoff `_. The GRsecant + method is a modification of the secant method that accounts for + uncertainties in the function evaluations. The method uses a weighted + linear fit of the most recent function evaluations to predict the next + point to evaluate. It also adaptively changes the number of batches to + meet the target uncertainty value at each iteration. + + The target uncertainty for iteration :math:`n+1` is determined by the + following equation (following Eq. (8) in the paper): + + .. math:: + \sigma_{i+1} = q \sigma_\text{final} \left ( \frac{ \min \left \{ + \left\lvert k_i - k_\text{target} \right\rvert : k=0,1,\dots,n + \right \} }{k_\text{tol}} \right )^p + + where :math:`q` is a multiplicative factor less than 1, given as the + ``sigma_factor`` parameter below. + + Parameters + ---------- + func : ModelModifier + Function that takes the parameter to be searched and makes a + modification to the model. + x0 : float + First guess for the parameter passed to `func` + x1 : float + Second guess for the parameter passed to `func` + target : float, optional + keff value to search for + k_tol : float, optional + Stopping criterion on the function value; the absolute value must be + within ``k_tol`` of zero to be accepted. + sigma_final : float, optional + Maximum accepted k-effective uncertainty for the stopping criterion. + p : float, optional + Exponent used in the stopping criterion. + q : float, optional + Multiplicative factor used in the stopping criterion. + memory : int, optional + Number of most-recent points used in the weighted linear fit of + ``f(x) = a + b x`` to predict the next point. + x_min : float, optional + Minimum allowed value for the parameter ``x``. + x_max : float, optional + Maximum allowed value for the parameter ``x``. + b0 : int, optional + Number of active batches to use for the initial function + evaluations. If None, uses the model's current setting. + b_min : int, optional + Minimum number of active batches to use in a function evaluation. + b_max : int, optional + Maximum number of active batches to use in a function evaluation. + maxiter : int, optional + Maximum number of iterations to perform. + output : bool, optional + Whether or not to display output showing iteration progress. + func_kwargs : dict, optional + Keyword-based arguments to pass to the `func` function. + run_kwargs : dict, optional + Keyword arguments to pass to :meth:`openmc.Model.run` or + :meth:`openmc.lib.run`. + + Returns + ------- + SearchResult + Result object containing the estimated root (parameter value) and + evaluation history (parameters, means, standard deviations, and + batches), plus convergence status and termination reason. + + """ + import openmc.lib + + check_type('model modifier', func, Callable) + check_type('target', target, Real) + if memory < 2: + raise ValueError("memory must be ≥ 2") + func_kwargs = {} if func_kwargs is None else dict(func_kwargs) + run_kwargs = {} if run_kwargs is None else dict(run_kwargs) + run_kwargs.setdefault('output', False) + + # Create lists to store the history of evaluations + xs: list[float] = [] + fs: list[float] = [] + ss: list[float] = [] + gs: list[int] = [] + count = 0 + + # Helper function to evaluate f and store results + def eval_at(x: float, batches: int) -> tuple[float, float]: + # Modify the model with the current guess + func(x, **func_kwargs) + + # Change the number of batches and run the model + batches += self.settings.inactive + if openmc.lib.is_initialized: + openmc.lib.settings.set_batches(batches) + openmc.lib.reset() + openmc.lib.run(**run_kwargs) + sp_filepath = f'statepoint.{batches}.h5' + else: + self.settings.batches = batches + sp_filepath = self.run(**run_kwargs) + + # Extract keff and its uncertainty + with openmc.StatePoint(sp_filepath) as sp: + keff = sp.keff + + if output: + nonlocal count + count += 1 + print(f'Iteration {count}: {batches=}, {x=:.6g}, {keff=:.5f}') + + xs.append(float(x)) + fs.append(float(keff.n - target)) + ss.append(float(keff.s)) + gs.append(int(batches)) + return fs[-1], ss[-1] + + # Default b0 to current model settings if not explicitly provided + if b0 is None: + b0 = self.settings.batches - self.settings.inactive + + # Perform the search (inlined GRsecant) in a temporary directory + with TemporaryDirectory() as tmpdir: + if not openmc.lib.is_initialized: + run_kwargs.setdefault('cwd', tmpdir) + + # ---- Seed with two evaluations + f0, s0 = eval_at(x0, b0) + if abs(f0) <= k_tol and s0 <= sigma_final: + return SearchResult(x0, xs, fs, ss, gs, True, "converged") + f1, s1 = eval_at(x1, b0) + if abs(f1) <= k_tol and s1 <= sigma_final: + return SearchResult(x1, xs, fs, ss, gs, True, "converged") + + for _ in range(maxiter - 2): + # ------ Step 1: propose next x via GRsecant + m = min(memory, len(xs)) + + # Perform a curve fit on f(x) = a + bx accounting for + # uncertainties. This is equivalent to minimizing the function + # in Equation (A.14) + (a, b), _ = curve_fit( + lambda x, a, b: a + b*x, + xs[-m:], fs[-m:], sigma=ss[-m:], absolute_sigma=True + ) + x_new = float(-a / b) + + # Clamp x_new to the bounds if provided + if x_min is not None: + x_new = max(x_new, x_min) + if x_max is not None: + x_new = min(x_new, x_max) + + # ------ Step 2: choose target σ for next run (Eq. 8 + clamp) + + min_abs_f = float(np.min(np.abs(fs))) + base = q * sigma_final + ratio = min_abs_f / k_tol if k_tol > 0 else 1.0 + sig = base * (ratio ** p) + sig_target = max(sig, base) + + # ------ Step 3: choose generations to hit σ_target (Appendix C) + + # Use at least two past points for regression + if len(gs) >= 2 and np.var(np.log(gs)) > 0.0: + # Perform a curve fit based on Eq. (C.3) to solve for ln(k). + # Note that unlike in the paper, we do not leave r as an + # undetermined parameter and choose r=0.5. + (ln_k,), _ = curve_fit( + lambda ln_b, ln_k: ln_k - 0.5*ln_b, + np.log(gs[-4:]), np.log(ss[-4:]), + ) + k = float(np.exp(ln_k)) + else: + k = float(ss[-1] * math.sqrt(gs[-1])) + + b_new = (k / sig_target) ** 2 + + # Clamp and round up to integer + b_new = max(b_min, math.ceil(b_new)) + if b_max is not None: + b_new = min(b_new, b_max) + + # Evaluate at proposed x with batches determined above + f_new, s_new = eval_at(x_new, b_new) + + # Termination based on both criteria (|f| and σ) + if abs(f_new) <= k_tol and s_new <= sigma_final: + return SearchResult(x_new, xs, fs, ss, gs, True, "converged") + + return SearchResult(xs[-1], xs, fs, ss, gs, False, "maxiter") + + +@dataclass +class SearchResult: + """Result of a GRsecant keff search. + + Attributes + ---------- + root : float + Estimated parameter value where f(x) = 0 at termination. + parameters : list[float] + Parameter values (x) evaluated during the search, in order. + keffs : list[float] + Estimated keff values for each evaluation. + stdevs : list[float] + One-sigma uncertainties of keff for each evaluation. + batches : list[int] + Number of active batches used for each evaluation. + converged : bool + Whether both |f| <= k_tol and sigma <= sigma_final were met. + flag : str + Reason for termination (e.g., "converged", "maxiter"). + """ + root: float + parameters: list[float] = field(repr=False) + means: list[float] = field(repr=False) + stdevs: list[float] = field(repr=False) + batches: list[int] = field(repr=False) + converged: bool + flag: str + + @property + def function_calls(self) -> int: + """Number of function evaluations performed.""" + return len(self.parameters) + + @property + def total_batches(self) -> int: + """Total number of active batches used across all evaluations.""" + return sum(self.batches) + + diff --git a/openmc/plots.py b/openmc/plots.py index 072a9a319e3..a0bde3f007a 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -1,6 +1,7 @@ from collections.abc import Iterable, Mapping from numbers import Integral, Real from pathlib import Path +from textwrap import dedent import h5py import lxml.etree as ET @@ -167,7 +168,8 @@ 'yellowgreen': (154, 205, 50) } -_PLOT_PARAMS = """ +_PLOT_PARAMS = dedent("""\ + Parameters ---------- origin : iterable of float @@ -249,7 +251,7 @@ ------- matplotlib.axes.Axes Axes containing resulting image -""" +""") # Decorator for consistently adding plot parameters to docstrings (Model.plot, @@ -437,7 +439,7 @@ def filename(self): @filename.setter def filename(self, filename): - cv.check_type('filename', filename, str) + cv.check_type('filename', filename, (str, PathLike)) self._filename = filename @property diff --git a/openmc/plotter.py b/openmc/plotter.py index 693cdaca4eb..abd8ab6dd4b 100644 --- a/openmc/plotter.py +++ b/openmc/plotter.py @@ -501,7 +501,7 @@ def _calculate_cexs_nuclide(this, types, temperature=294., sab_name=None, elif ncrystal_cfg: import NCrystal nc_scatter = NCrystal.createScatter(ncrystal_cfg) - nc_func = nc_scatter.crossSectionNonOriented + nc_func = nc_scatter.xsect nc_emax = 5 # eV # this should be obtained from NCRYSTAL_MAX_ENERGY energy_grid = np.union1d(np.geomspace(min(energy_grid), 1.1*nc_emax, diff --git a/openmc/settings.py b/openmc/settings.py index ce3743ff5d1..76e191c5e02 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -6,7 +6,7 @@ from pathlib import Path import lxml.etree as ET - +import warnings import openmc import openmc.checkvalue as cv from openmc.checkvalue import PathLike @@ -47,6 +47,21 @@ class Settings: half-width of the 95% two-sided confidence interval. If False, uncertainties on tally results will be reported as the sample standard deviation. + collision_track : dict + Options for writing collision information. Acceptable keys are: + + :max_collisions: Maximum number of collisions to be banked per file. (int) + :max_collision_track_files: Maximum number of collision_track files. (int) + :mcpl: Output in the form of an MCPL-file. (bool) + :cell_ids: List of cell IDs to define cells in which collisions should be banked. (list of int) + :universe_ids: List of universe IDs to define universes in which collisions should be banked. (list of int) + :material_ids: List of material IDs to define materials in which collisions should be banked. (list of int) + :nuclides: List of nuclides to define nuclides in which collisions should be banked. + (ex: ["I135m", "U233"] ). (list of str) + :reactions: List of reaction to define specific reactions that should be banked + (ex: ["(n,fission)", 2, "(n,2n)"] ). (list of str or int) + :deposited_E_threshold: Number to define the minimum deposited energy during + per collision to trigger banking. (float) create_fission_neutrons : bool Indicate whether fission neutrons should be created or not. cutoff : dict @@ -84,6 +99,10 @@ class Settings: history-based parallelism. .. versionadded:: 0.12 + free_gas_threshold : float + Energy multiplier (in units of :math:`kT`) below which the free gas + scattering treatment is applied for elastic scattering. If not + specified, a value of 400.0 is used. generations_per_batch : int Number of generations per batch ifp_n_generation : int @@ -128,6 +147,10 @@ class Settings: Maximum number of times a particle can split during a history .. versionadded:: 0.13 + max_secondaries : int + Maximum secondary bank size + + .. versionadded:: 0.15.3 max_tracks : int Maximum number of tracks written to a track file (per MPI process). @@ -159,7 +182,7 @@ class Settings: Options for configuring the random ray solver. Acceptable keys are: :distance_inactive: - Indicates the total active distance in [cm] a ray should travel + Indicates the total inactive distance in [cm] a ray should travel :distance_active: Indicates the total active distance in [cm] a ray should travel :ray_source: @@ -372,6 +395,7 @@ def __init__(self, **kwargs): self._seed = None self._stride = None self._survival_biasing = None + self._free_gas_threshold = None # Shannon entropy mesh self._entropy_mesh = None @@ -386,6 +410,9 @@ def __init__(self, **kwargs): # Iterated Fission Probability self._ifp_n_generation = None + # Collision track feature + self._collision_track = {} + # Output options self._statepoint = {} self._sourcepoint = {} @@ -425,12 +452,14 @@ def __init__(self, **kwargs): self._max_particle_events = None self._write_initial_source = None self._weight_windows = WeightWindowsList() - self._weight_window_generators = cv.CheckedList(WeightWindowGenerator, 'weight window generators') + self._weight_window_generators = cv.CheckedList( + WeightWindowGenerator, 'weight window generators') self._weight_windows_on = None self._weight_windows_file = None self._weight_window_checkpoints = {} self._max_history_splits = None self._max_tracks = None + self._max_secondaries = None self._use_decay_photons = None self._random_ray = {} @@ -465,8 +494,9 @@ def generations_per_batch(self) -> int: @generations_per_batch.setter def generations_per_batch(self, generations_per_batch: int): - cv.check_type('generations per patch', generations_per_batch, Integral) - cv.check_greater_than('generations per batch', generations_per_batch, 0) + cv.check_type('generations per batch', generations_per_batch, Integral) + cv.check_greater_than('generations per batch', + generations_per_batch, 0) self._generations_per_batch = generations_per_batch @property @@ -496,7 +526,8 @@ def rel_max_lost_particles(self) -> float: @rel_max_lost_particles.setter def rel_max_lost_particles(self, rel_max_lost_particles: float): cv.check_type('rel_max_lost_particles', rel_max_lost_particles, Real) - cv.check_greater_than('rel_max_lost_particles', rel_max_lost_particles, 0) + cv.check_greater_than('rel_max_lost_particles', + rel_max_lost_particles, 0) cv.check_less_than('rel_max_lost_particles', rel_max_lost_particles, 1) self._rel_max_lost_particles = rel_max_lost_particles @@ -506,8 +537,10 @@ def max_write_lost_particles(self) -> int: @max_write_lost_particles.setter def max_write_lost_particles(self, max_write_lost_particles: int): - cv.check_type('max_write_lost_particles', max_write_lost_particles, Integral) - cv.check_greater_than('max_write_lost_particles', max_write_lost_particles, 0) + cv.check_type('max_write_lost_particles', + max_write_lost_particles, Integral) + cv.check_greater_than('max_write_lost_particles', + max_write_lost_particles, 0) self._max_write_lost_particles = max_write_lost_particles @property @@ -528,12 +561,12 @@ def keff_trigger(self) -> dict: def keff_trigger(self, keff_trigger: dict): if not isinstance(keff_trigger, dict): msg = f'Unable to set a trigger on keff from "{keff_trigger}" ' \ - 'which is not a Python dictionary' + 'which is not a Python dictionary' raise ValueError(msg) elif 'type' not in keff_trigger: msg = f'Unable to set a trigger on keff from "{keff_trigger}" ' \ - 'which does not have a "type" key' + 'which does not have a "type" key' raise ValueError(msg) elif keff_trigger['type'] not in ['variance', 'std_dev', 'rel_err']: @@ -543,7 +576,7 @@ def keff_trigger(self, keff_trigger: dict): elif 'threshold' not in keff_trigger: msg = f'Unable to set a trigger on keff from "{keff_trigger}" ' \ - 'which does not have a "threshold" key' + 'which does not have a "threshold" key' raise ValueError(msg) elif not isinstance(keff_trigger['threshold'], Real): @@ -560,7 +593,7 @@ def energy_mode(self) -> str: @energy_mode.setter def energy_mode(self, energy_mode: str): cv.check_value('energy mode', energy_mode, - ['continuous-energy', 'multi-group']) + ['continuous-energy', 'multi-group']) self._energy_mode = energy_mode @property @@ -583,7 +616,8 @@ def source(self) -> list[SourceBase]: def source(self, source: SourceBase | Iterable[SourceBase]): if not isinstance(source, MutableSequence): source = [source] - self._source = cv.CheckedList(SourceBase, 'source distributions', source) + self._source = cv.CheckedList( + SourceBase, 'source distributions', source) @property def confidence_intervals(self) -> bool: @@ -600,7 +634,8 @@ def electron_treatment(self) -> str: @electron_treatment.setter def electron_treatment(self, electron_treatment: str): - cv.check_value('electron treatment', electron_treatment, ['led', 'ttb']) + cv.check_value('electron treatment', + electron_treatment, ['led', 'ttb']) self._electron_treatment = electron_treatment @property @@ -694,7 +729,8 @@ def trigger_max_batches(self) -> int: @trigger_max_batches.setter def trigger_max_batches(self, trigger_max_batches: int): cv.check_type('trigger maximum batches', trigger_max_batches, Integral) - cv.check_greater_than('trigger maximum batches', trigger_max_batches, 0) + cv.check_greater_than('trigger maximum batches', + trigger_max_batches, 0) self._trigger_max_batches = trigger_max_batches @property @@ -703,8 +739,10 @@ def trigger_batch_interval(self) -> int: @trigger_batch_interval.setter def trigger_batch_interval(self, trigger_batch_interval: int): - cv.check_type('trigger batch interval', trigger_batch_interval, Integral) - cv.check_greater_than('trigger batch interval', trigger_batch_interval, 0) + cv.check_type('trigger batch interval', + trigger_batch_interval, Integral) + cv.check_greater_than('trigger batch interval', + trigger_batch_interval, 0) self._trigger_batch_interval = trigger_batch_interval @property @@ -788,19 +826,22 @@ def surf_source_write(self) -> dict: @surf_source_write.setter def surf_source_write(self, surf_source_write: dict): - cv.check_type("surface source writing options", surf_source_write, Mapping) + cv.check_type("surface source writing options", + surf_source_write, Mapping) for key, value in surf_source_write.items(): cv.check_value( "surface source writing key", key, - ("surface_ids", "max_particles", "max_source_files", "mcpl", "cell", "cellfrom", "cellto"), + ("surface_ids", "max_particles", "max_source_files", + "mcpl", "cell", "cellfrom", "cellto"), ) if key == "surface_ids": cv.check_type( "surface ids for source banking", value, Iterable, Integral ) for surf_id in value: - cv.check_greater_than("surface id for source banking", surf_id, 0) + cv.check_greater_than( + "surface id for source banking", surf_id, 0) elif key == "mcpl": cv.check_type("write to an MCPL-format file", value, bool) @@ -817,6 +858,79 @@ def surf_source_write(self, surf_source_write: dict): self._surf_source_write = surf_source_write + @property + def collision_track(self) -> dict: + return self._collision_track + + @collision_track.setter + def collision_track(self, collision_track: dict): + cv.check_type('Collision tracking options', collision_track, Mapping) + for key, value in collision_track.items(): + cv.check_value('collision_track key', key, + ('cell_ids', 'reactions', 'universe_ids', 'material_ids', 'nuclides', + 'deposited_E_threshold', 'max_collisions', 'max_collision_track_files', 'mcpl')) + if key == 'cell_ids': + cv.check_type('cell ids for collision tracking data banking', value, + Iterable, Integral) + for cell_id in value: + cv.check_greater_than('cell id for collision tracking data banking', + cell_id, 0) + elif key == 'reactions': + cv.check_type('MT numbers for collision tracking data banking', value, + Iterable) + for reaction in value: + if isinstance(reaction, int): + cv.check_greater_than( + 'MT number for collision tracking data banking', reaction, 0 + ) + elif isinstance(reaction, str): + # check against allowed strings? so far let C++ code handle it + pass + else: + raise TypeError( + f"MT number for collision tracking data banking must be a positive int or string, " + f"got {type(reaction).__name__}") + elif key == 'universe_ids': + cv.check_type('universe ids for collision tracking data banking', value, + Iterable, Integral) + for universe_id in value: + cv.check_greater_than('universe id for collision tracking data banking', + universe_id, 0) + elif key == 'material_ids': + cv.check_type('material ids for collision tracking data banking', value, + Iterable, Integral) + for material_id in value: + cv.check_greater_than('material id for collision tracking data banking', + material_id, 0) + elif key == 'nuclides': + cv.check_type('nuclides for collision tracking data banking', value, + Iterable, str) + for nuclide in value: + # If nuclide name doesn't look valid, give a warning + try: + openmc.data.zam(nuclide) + except ValueError: + warnings.warn(f"Nuclide {nuclide} is not valid") + elif key == 'deposited_E_threshold': + cv.check_type('Deposited Energy Threshold for collision tracking data banking', + value, Real) + cv.check_greater_than('Deposited Energy Threshold for collision tracking data banking', + value, 0) + elif key == 'max_collisions': + cv.check_type('maximum collisions banks per file', + value, Integral) + cv.check_greater_than('maximum collisions banks in collision tracking', + value, 0) + elif key == 'max_collision_track_files': + cv.check_type('maximum collisions banks', + value, Integral) + cv.check_greater_than('maximum number of collision_track files ', + value, 0) + elif key == 'mcpl': + cv.check_type('write to an MCPL-format file', value, bool) + + self._collision_track = collision_track + @property def no_reduce(self) -> bool: return self._no_reduce @@ -933,7 +1047,7 @@ def cutoff(self) -> dict: def cutoff(self, cutoff: dict): if not isinstance(cutoff, Mapping): msg = f'Unable to set cutoff from "{cutoff}" which is not a '\ - 'Python dictionary' + 'Python dictionary' raise ValueError(msg) for key in cutoff: if key == 'weight': @@ -951,7 +1065,7 @@ def cutoff(self, cutoff: dict): cv.check_greater_than('energy cutoff', cutoff[key], 0.0) else: msg = f'Unable to set cutoff to "{key}" which is unsupported ' \ - 'by OpenMC' + 'by OpenMC' self._cutoff = cutoff @@ -1120,12 +1234,14 @@ def weight_window_checkpoints(self) -> dict: @weight_window_checkpoints.setter def weight_window_checkpoints(self, weight_window_checkpoints: dict): for key in weight_window_checkpoints.keys(): - cv.check_value('weight_window_checkpoints', key, ('collision', 'surface')) + cv.check_value('weight_window_checkpoints', + key, ('collision', 'surface')) self._weight_window_checkpoints = weight_window_checkpoints @property def max_splits(self): - raise AttributeError('max_splits has been deprecated. Please use max_history_splits instead') + raise AttributeError( + 'max_splits has been deprecated. Please use max_history_splits instead') @property def max_history_splits(self) -> int: @@ -1137,6 +1253,16 @@ def max_history_splits(self, value: int): cv.check_greater_than('max particle splits', value, 0) self._max_history_splits = value + @property + def max_secondaries(self) -> int: + return self._max_secondaries + + @max_secondaries.setter + def max_secondaries(self, value: int): + cv.check_type('maximum secondary bank size', value, Integral) + cv.check_greater_than('max secondary bank size', value, 0) + self._max_secondaries = value + @property def max_tracks(self) -> int: return self._max_tracks @@ -1152,9 +1278,12 @@ def weight_windows_file(self) -> PathLike | None: return self._weight_windows_file @weight_windows_file.setter - def weight_windows_file(self, value: PathLike): - cv.check_type('weight windows file', value, PathLike) - self._weight_windows_file = input_path(value) + def weight_windows_file(self, value: PathLike | None): + if value is None: + self._weight_windows_file = None + else: + cv.check_type('weight windows file', value, PathLike) + self._weight_windows_file = input_path(value) @property def weight_window_generators(self) -> list[WeightWindowGenerator]: @@ -1164,7 +1293,8 @@ def weight_window_generators(self) -> list[WeightWindowGenerator]: def weight_window_generators(self, wwgs): if not isinstance(wwgs, MutableSequence): wwgs = [wwgs] - self._weight_window_generators = cv.CheckedList(WeightWindowGenerator, 'weight window generators', wwgs) + self._weight_window_generators = cv.CheckedList( + WeightWindowGenerator, 'weight window generators', wwgs) @property def random_ray(self) -> dict: @@ -1201,7 +1331,8 @@ def random_ray(self, random_ray: dict): for mesh, domains in value: cv.check_type('mesh', mesh, MeshBase) cv.check_type('domains', domains, Iterable) - valid_types = (openmc.Material, openmc.Cell, openmc.Universe) + valid_types = (openmc.Material, + openmc.Cell, openmc.Universe) for domain in domains: if not isinstance(domain, valid_types): raise ValueError( @@ -1235,11 +1366,25 @@ def source_rejection_fraction(self) -> float: @source_rejection_fraction.setter def source_rejection_fraction(self, source_rejection_fraction: float): - cv.check_type('source_rejection_fraction', source_rejection_fraction, Real) - cv.check_greater_than('source_rejection_fraction', source_rejection_fraction, 0) - cv.check_less_than('source_rejection_fraction', source_rejection_fraction, 1) + cv.check_type('source_rejection_fraction', + source_rejection_fraction, Real) + cv.check_greater_than('source_rejection_fraction', + source_rejection_fraction, 0) + cv.check_less_than('source_rejection_fraction', + source_rejection_fraction, 1) self._source_rejection_fraction = source_rejection_fraction + @property + def free_gas_threshold(self) -> float | None: + return self._free_gas_threshold + + @free_gas_threshold.setter + def free_gas_threshold(self, free_gas_threshold: float | None): + if free_gas_threshold is not None: + cv.check_type('free gas threshold', free_gas_threshold, Real) + cv.check_greater_than('free gas threshold', free_gas_threshold, 0.0) + self._free_gas_threshold = free_gas_threshold + def _create_run_mode_subelement(self, root): elem = ET.SubElement(root, "run_mode") elem.text = self._run_mode.value @@ -1391,6 +1536,45 @@ def _create_surf_source_write_subelement(self, root): subelement = ET.SubElement(element, key) subelement.text = str(self._surf_source_write[key]) + def _create_collision_track_subelement(self, root): + if self._collision_track: + element = ET.SubElement(root, "collision_track") + if 'cell_ids' in self._collision_track: + subelement = ET.SubElement(element, "cell_ids") + subelement.text = ' '.join( + str(x) for x in self._collision_track['cell_ids']) + if 'reactions' in self._collision_track: + subelement = ET.SubElement(element, "reactions") + subelement.text = ' '.join( + str(x) for x in self._collision_track['reactions']) + if 'universe_ids' in self._collision_track: + subelement = ET.SubElement(element, "universe_ids") + subelement.text = ' '.join( + str(x) for x in self._collision_track['universe_ids']) + if 'material_ids' in self._collision_track: + subelement = ET.SubElement(element, "material_ids") + subelement.text = ' '.join( + str(x) for x in self._collision_track['material_ids']) + if 'nuclides' in self._collision_track: + subelement = ET.SubElement(element, "nuclides") + subelement.text = ' '.join( + str(x) for x in self._collision_track['nuclides']) + if 'deposited_E_threshold' in self._collision_track: + subelement = ET.SubElement(element, "deposited_E_threshold") + subelement.text = str( + self._collision_track['deposited_E_threshold']) + if 'max_collisions' in self._collision_track: + subelement = ET.SubElement(element, "max_collisions") + subelement.text = str(self._collision_track['max_collisions']) + if 'max_collision_track_files' in self._collision_track: + subelement = ET.SubElement( + element, "max_collision_track_files") + subelement.text = str( + self._collision_track['max_collision_track_files']) + if 'mcpl' in self._collision_track: + subelement = ET.SubElement(element, "mcpl") + subelement.text = str(self._collision_track['mcpl']).lower() + def _create_confidence_intervals(self, root): if self._confidence_intervals is not None: element = ET.SubElement(root, "confidence_intervals") @@ -1446,8 +1630,8 @@ def _create_entropy_mesh_subelement(self, root, mesh_memo=None): # use default heuristic for entropy mesh if not set by user if self.entropy_mesh.dimension is None: if self.particles is None: - raise RuntimeError("Number of particles must be set in order to " \ - "use entropy mesh dimension heuristic") + raise RuntimeError("Number of particles must be set in order to " + "use entropy mesh dimension heuristic") else: n = ceil((self.particles / 20.0)**(1.0 / 3.0)) d = len(self.entropy_mesh.lower_left) @@ -1537,7 +1721,8 @@ def _create_ufs_mesh_subelement(self, root, mesh_memo=None): path = f"./mesh[@id='{self.ufs_mesh.id}']" if root.find(path) is None: root.append(self.ufs_mesh.to_xml_element()) - if mesh_memo is not None: mesh_memo.add(self.ufs_mesh.id) + if mesh_memo is not None: + mesh_memo.add(self.ufs_mesh.id) def _create_use_decay_photons_subelement(self, root): if self._use_decay_photons is not None: @@ -1626,6 +1811,7 @@ def _create_weight_windows_subelement(self, root, mesh_memo=None): if mesh_memo is not None: mesh_memo.add(ww.mesh.id) + def _create_weight_windows_on_subelement(self, root): if self._weight_windows_on is not None: elem = ET.SubElement(root, "weight_windows_on") elem.text = str(self._weight_windows_on).lower() @@ -1662,17 +1848,24 @@ def _create_weight_window_checkpoints_subelement(self, root): if 'collision' in self._weight_window_checkpoints: subelement = ET.SubElement(element, "collision") - subelement.text = str(self._weight_window_checkpoints['collision']).lower() + subelement.text = str( + self._weight_window_checkpoints['collision']).lower() if 'surface' in self._weight_window_checkpoints: subelement = ET.SubElement(element, "surface") - subelement.text = str(self._weight_window_checkpoints['surface']).lower() + subelement.text = str( + self._weight_window_checkpoints['surface']).lower() def _create_max_history_splits_subelement(self, root): if self._max_history_splits is not None: elem = ET.SubElement(root, "max_history_splits") elem.text = str(self._max_history_splits) + def _create_max_secondaries_subelement(self, root): + if self._max_secondaries is not None: + elem = ET.SubElement(root, "max_secondaries") + elem.text = str(self._max_secondaries) + def _create_max_tracks_subelement(self, root): if self._max_tracks is not None: elem = ET.SubElement(root, "max_tracks") @@ -1693,10 +1886,19 @@ def _create_random_ray_subelement(self, root, mesh_memo=None): for domain in domains: domain_elem = ET.SubElement(mesh_elem, 'domain') domain_elem.set('id', str(domain.id)) - domain_elem.set('type', domain.__class__.__name__.lower()) + domain_elem.set( + 'type', domain.__class__.__name__.lower()) if mesh_memo is not None and mesh.id not in mesh_memo: + domain_elem.set('type', domain.__class__.__name__.lower()) + # See if a element already exists -- if not, add it + path = f"./mesh[@id='{mesh.id}']" + if root.find(path) is None: root.append(mesh.to_xml_element()) - mesh_memo.add(mesh.id) + if mesh_memo is not None: + mesh_memo.add(mesh.id) + elif isinstance(value, bool): + subelement = ET.SubElement(element, key) + subelement.text = str(value).lower() else: subelement = ET.SubElement(element, key) subelement.text = str(value) @@ -1706,6 +1908,11 @@ def _create_source_rejection_fraction_subelement(self, root): element = ET.SubElement(root, "source_rejection_fraction") element.text = str(self._source_rejection_fraction) + def _create_free_gas_threshold_subelement(self, root): + if self._free_gas_threshold is not None: + element = ET.SubElement(root, "free_gas_threshold") + element.text = str(self._free_gas_threshold) + def _eigenvalue_from_xml_element(self, root): elem = root.find('eigenvalue') if elem is not None: @@ -1833,6 +2040,25 @@ def _surf_source_write_from_xml_element(self, root): value = int(value) self.surf_source_write[key] = value + def _collision_track_from_xml_element(self, root): + elem = root.find('collision_track') + if elem is not None: + for key in ('cell_ids', 'reactions', 'universe_ids', 'material_ids', 'nuclides', + 'deposited_E_threshold', 'max_collisions', "max_collision_track_files", 'mcpl'): + value = get_text(elem, key) + if value is not None: + if key in ('cell_ids', 'universe_ids', 'material_ids'): + value = [int(x) for x in value.split()] + elif key in ('reactions', 'nuclides'): + value = value.split() + elif key in ('max_collisions', 'max_collision_track_files'): + value = int(value) + elif key == 'deposited_E_threshold': + value = float(value) + elif key == 'mcpl': + value = value in ('true', '1') + self.collision_track[key] = value + def _confidence_intervals_from_xml_element(self, root): text = get_text(root, 'confidence_intervals') if text is not None: @@ -2054,10 +2280,16 @@ def _weight_windows_from_xml_element(self, root, meshes=None): ww = WeightWindows.from_xml_element(elem, meshes) self.weight_windows.append(ww) + def _weight_windows_on_from_xml_element(self, root): text = get_text(root, 'weight_windows_on') if text is not None: self.weight_windows_on = text in ('true', '1') + def _weight_windows_file_from_xml_element(self, root): + text = get_text(root, 'weight_windows_file') + if text is not None: + self.weight_windows_file = text + def _weight_window_checkpoints_from_xml_element(self, root): elem = root.find('weight_window_checkpoints') if elem is None: @@ -2073,12 +2305,17 @@ def _max_history_splits_from_xml_element(self, root): if text is not None: self.max_history_splits = int(text) + def _max_secondaries_from_xml_element(self, root): + text = get_text(root, 'max_secondaries') + if text is not None: + self.max_secondaries = int(text) + def _max_tracks_from_xml_element(self, root): text = get_text(root, 'max_tracks') if text is not None: self.max_tracks = int(text) - def _random_ray_from_xml_element(self, root): + def _random_ray_from_xml_element(self, root, meshes=None): elem = root.find('random_ray') if elem is not None: self.random_ray = {} @@ -2105,7 +2342,11 @@ def _random_ray_from_xml_element(self, root): elif child.tag == 'source_region_meshes': self.random_ray['source_region_meshes'] = [] for mesh_elem in child.findall('mesh'): - mesh = MeshBase.from_xml_element(mesh_elem) + mesh_id = int(get_text(mesh_elem, 'id')) + if meshes and mesh_id in meshes: + mesh = meshes[mesh_id] + else: + mesh = MeshBase.from_xml_element(mesh_elem) domains = [] for domain_elem in mesh_elem.findall('domain'): domain_id = int(get_text(domain_elem, "id")) @@ -2117,7 +2358,8 @@ def _random_ray_from_xml_element(self, root): elif domain_type == 'universe': domain = openmc.Universe(domain_id) domains.append(domain) - self.random_ray['source_region_meshes'].append((mesh, domains)) + self.random_ray['source_region_meshes'].append( + (mesh, domains)) def _use_decay_photons_from_xml_element(self, root): text = get_text(root, 'use_decay_photons') @@ -2129,6 +2371,11 @@ def _source_rejection_fraction_from_xml_element(self, root): if text is not None: self.source_rejection_fraction = float(text) + def _free_gas_threshold_from_xml_element(self, root): + text = get_text(root, 'free_gas_threshold') + if text is not None: + self.free_gas_threshold = float(text) + def to_xml_element(self, mesh_memo=None): """Create a 'settings' element to be written to an XML file. @@ -2155,6 +2402,7 @@ def to_xml_element(self, mesh_memo=None): self._create_sourcepoint_subelement(element) self._create_surf_source_read_subelement(element) self._create_surf_source_write_subelement(element) + self._create_collision_track_subelement(element) self._create_confidence_intervals(element) self._create_electron_treatment_subelement(element) self._create_energy_mode_subelement(element) @@ -2189,14 +2437,17 @@ def to_xml_element(self, mesh_memo=None): self._create_log_grid_bins_subelement(element) self._create_write_initial_source_subelement(element) self._create_weight_windows_subelement(element, mesh_memo) + self._create_weight_windows_on_subelement(element) self._create_weight_window_generators_subelement(element, mesh_memo) self._create_weight_windows_file_element(element) self._create_weight_window_checkpoints_subelement(element) self._create_max_history_splits_subelement(element) self._create_max_tracks_subelement(element) + self._create_max_secondaries_subelement(element) self._create_random_ray_subelement(element, mesh_memo) self._create_use_decay_photons_subelement(element) self._create_source_rejection_fraction_subelement(element) + self._create_free_gas_threshold_subelement(element) # Clean the indentation in the file to be user-readable clean_indentation(element) @@ -2265,6 +2516,7 @@ def from_xml_element(cls, elem, meshes=None): settings._sourcepoint_from_xml_element(elem) settings._surf_source_read_from_xml_element(elem) settings._surf_source_write_from_xml_element(elem) + settings._collision_track_from_xml_element(elem) settings._confidence_intervals_from_xml_element(elem) settings._electron_treatment_from_xml_element(elem) settings._energy_mode_from_xml_element(elem) @@ -2298,13 +2550,17 @@ def from_xml_element(cls, elem, meshes=None): settings._log_grid_bins_from_xml_element(elem) settings._write_initial_source_from_xml_element(elem) settings._weight_windows_from_xml_element(elem, meshes) + settings._weight_windows_on_from_xml_element(elem) + settings._weight_windows_file_from_xml_element(elem) settings._weight_window_generators_from_xml_element(elem, meshes) settings._weight_window_checkpoints_from_xml_element(elem) settings._max_history_splits_from_xml_element(elem) settings._max_tracks_from_xml_element(elem) - settings._random_ray_from_xml_element(elem) + settings._max_secondaries_from_xml_element(elem) + settings._random_ray_from_xml_element(elem, meshes) settings._use_decay_photons_from_xml_element(elem) settings._source_rejection_fraction_from_xml_element(elem) + settings._free_gas_threshold_from_xml_element(elem) return settings diff --git a/openmc/source.py b/openmc/source.py index c463ccb2756..84d8a9619dc 100644 --- a/openmc/source.py +++ b/openmc/source.py @@ -6,7 +6,6 @@ from pathlib import Path import warnings from typing import Any -from pathlib import Path import lxml.etree as ET import numpy as np @@ -107,10 +106,12 @@ def constraints(self, constraints: dict[str, Any] | None): cv.check_type('fissionable', value, bool) self._constraints['fissionable'] = value elif key == 'rejection_strategy': - cv.check_value('rejection strategy', value, ('resample', 'kill')) + cv.check_value('rejection strategy', + value, ('resample', 'kill')) self._constraints['rejection_strategy'] = value else: - raise ValueError(f'Unknown key in constraints dictionary: {key}') + raise ValueError( + f'Unknown key in constraints dictionary: {key}') @abstractmethod def populate_xml_element(self, element): @@ -144,13 +145,16 @@ def to_xml_element(self) -> ET.Element: dt_elem = ET.SubElement(constraints_elem, "domain_type") dt_elem.text = constraints["domain_type"] id_elem = ET.SubElement(constraints_elem, "domain_ids") - id_elem.text = ' '.join(str(uid) for uid in constraints["domain_ids"]) + id_elem.text = ' '.join(str(uid) + for uid in constraints["domain_ids"]) if "time_bounds" in constraints: dt_elem = ET.SubElement(constraints_elem, "time_bounds") - dt_elem.text = ' '.join(str(t) for t in constraints["time_bounds"]) + dt_elem.text = ' '.join(str(t) + for t in constraints["time_bounds"]) if "energy_bounds" in constraints: dt_elem = ET.SubElement(constraints_elem, "energy_bounds") - dt_elem.text = ' '.join(str(E) for E in constraints["energy_bounds"]) + dt_elem.text = ' '.join(str(E) + for E in constraints["energy_bounds"]) if "fissionable" in constraints: dt_elem = ET.SubElement(constraints_elem, "fissionable") dt_elem.text = str(constraints["fissionable"]).lower() @@ -199,7 +203,8 @@ def from_xml_element(cls, elem: ET.Element, meshes=None) -> SourceBase: elif source_type == 'mesh': return MeshSource.from_xml_element(elem, meshes) else: - raise ValueError(f'Source type {source_type} is not recognized') + raise ValueError( + f'Source type {source_type} is not recognized') @staticmethod def _get_constraints(elem: ET.Element) -> dict[str, Any]: @@ -260,7 +265,7 @@ class IndependentSource(SourceBase): time distribution of source sites strength : float Strength of the source - particle : {'neutron', 'photon'} + particle : {'neutron', 'photon', 'electron', 'positron'} Source particle type domains : iterable of openmc.Cell, openmc.Material, or openmc.Universe Domains to reject based on, i.e., if a sampled spatial location is not @@ -299,7 +304,7 @@ class IndependentSource(SourceBase): .. versionadded:: 0.14.0 - particle : {'neutron', 'photon'} + particle : {'neutron', 'photon', 'electron', 'positron'} Source particle type constraints : dict Constraints on sampled source particles. Valid keys include @@ -316,7 +321,8 @@ def __init__( time: openmc.stats.Univariate | None = None, strength: float = 1.0, particle: str = 'neutron', - domains: Sequence[openmc.Cell | openmc.Material | openmc.Universe] | None = None, + domains: Sequence[openmc.Cell | openmc.Material | + openmc.Universe] | None = None, constraints: dict[str, Any] | None = None ): if domains is not None: @@ -404,7 +410,8 @@ def particle(self): @particle.setter def particle(self, particle): - cv.check_value('source particle', particle, ['neutron', 'photon']) + cv.check_value('source particle', particle, + ['neutron', 'photon', 'electron', 'positron']) self._particle = particle def populate_xml_element(self, element): @@ -526,11 +533,12 @@ class MeshSource(SourceBase): 'fissionable', and 'rejection_strategy'. """ + def __init__( self, mesh: MeshBase, sources: Sequence[SourceBase], - constraints: dict[str, Any] | None = None, + constraints: dict[str, Any] | None = None, ): super().__init__(strength=None, constraints=constraints) self.mesh = mesh @@ -576,7 +584,8 @@ def sources(self, s): elif isinstance(self.mesh, UnstructuredMesh): if s.ndim > 1: - raise ValueError('Sources must be a 1-D array for unstructured mesh') + raise ValueError( + 'Sources must be a 1-D array for unstructured mesh') self._sources = s for src in self._sources: @@ -645,7 +654,8 @@ def from_xml_element(cls, elem: ET.Element, meshes) -> openmc.MeshSource: mesh_id = int(get_text(elem, 'mesh')) mesh = meshes[mesh_id] - sources = [SourceBase.from_xml_element(e) for e in elem.iterchildren('source')] + sources = [SourceBase.from_xml_element( + e) for e in elem.iterchildren('source')] constraints = cls._get_constraints(elem) return cls(mesh, sources, constraints=constraints) @@ -655,7 +665,8 @@ def Source(*args, **kwargs): A function for backward compatibility of sources. Will be removed in the future. Please update to IndependentSource. """ - warnings.warn("This class is deprecated in favor of 'IndependentSource'", FutureWarning) + warnings.warn( + "This class is deprecated in favor of 'IndependentSource'", FutureWarning) return openmc.IndependentSource(*args, **kwargs) @@ -702,6 +713,7 @@ class CompiledSource(SourceBase): 'fissionable', and 'rejection_strategy'. """ + def __init__( self, library: PathLike, @@ -913,7 +925,8 @@ def from_string(cls, value: str): try: return cls[value.upper()] except KeyError: - raise ValueError(f"Invalid string for creation of {cls.__name__}: {value}") + raise ValueError( + f"Invalid string for creation of {cls.__name__}: {value}") @classmethod def from_pdg_number(cls, pdg_number: int) -> ParticleType: @@ -983,6 +996,7 @@ class SourceParticle: Type of the particle """ + def __init__( self, r: Iterable[float] = (0., 0., 0.), @@ -1041,7 +1055,8 @@ def write_source_file( openmc.SourceParticle """ - cv.check_iterable_type("source particles", source_particles, SourceParticle) + cv.check_iterable_type( + "source particles", source_particles, SourceParticle) pl = ParticleList(source_particles) pl.export_to_hdf5(filename, **kwargs) @@ -1103,7 +1118,8 @@ def from_mcpl(cls, filename: PathLike) -> ParticleList: for particle in f.particles: # Determine particle type based on the PDG number try: - particle_type = ParticleType.from_pdg_number(particle.pdgcode) + particle_type = ParticleType.from_pdg_number( + particle.pdgcode) except ValueError: particle_type = "UNKNOWN" @@ -1240,3 +1256,133 @@ def read_source_file(filename: PathLike) -> ParticleList: return ParticleList.from_hdf5(filename) else: return ParticleList.from_mcpl(filename) + + +def read_collision_track_hdf5(filename): + """Read a collision track file in HDF5 format. + + Parameters + ---------- + filename : str or path-like + Path to the HDF5 collision track file. + + Returns + ------- + numpy.ndarray + Structured array containing collision track data. + + See Also + -------- + read_collision_track_mcpl + read_collision_track_file + """ + + with h5py.File(filename, 'r') as file: + data = file['collision_track_bank'][:] + + return data + + +def read_collision_track_mcpl(file_path): + """Read a collision track file in MCPL format. + + Parameters + ---------- + file_path : str or path-like + Path to the MCPL collision track file. + + Returns + ------- + numpy.ndarray + Structured array of particle collision track information, including + position, direction, energy, weight, reaction data, and identifiers. + + See Also + -------- + read_collision_track_hdf5 + read_collision_track_file + """ + import mcpl + myfile = mcpl.MCPLFile(file_path) + data = { + 'r': [], # for position (x, y, z) + 'u': [], # for direction (ux, uy, uz) + 'E': [], 'dE': [], 'time': [], + 'wgt': [], 'event_mt': [], 'delayed_group': [], + 'cell_id': [], 'nuclide_id': [], 'material_id': [], + 'universe_id': [], 'n_collision': [], 'particle': [], + 'parent_id': [], 'progeny_id': [] + } + + # Read and collect data from the MCPL file + for i, p in enumerate(myfile.particles): + if f'blob_{i}' in myfile.blobs: + blob_data = myfile.blobs[f'blob_{i}'] + decoded_str = blob_data.decode('utf-8') + pairs = decoded_str.split(';') + values_dict = {k.strip(): v.strip() + for k, v in (pair.split(':') for pair in pairs if pair.strip())} + + data['r'].append((p.x, p.y, p.z)) # Append as tuple + data['u'].append((p.ux, p.uy, p.uz)) # Append as tuple + data['E'].append(p.ekin * 1e6) + data['dE'].append(float(values_dict.get('dE', 0))) + data['time'].append(p.time * 1e-3) + data['wgt'].append(p.weight) + data['event_mt'].append(int(values_dict.get('event_mt', 0))) + data['delayed_group'].append( + int(values_dict.get('delayed_group', 0))) + data['cell_id'].append(int(values_dict.get('cell_id', 0))) + data['nuclide_id'].append(int(values_dict.get('nuclide_id', 0))) + data['material_id'].append(int(values_dict.get('material_id', 0))) + data['universe_id'].append(int(values_dict.get('universe_id', 0))) + data['n_collision'].append(int(values_dict.get('n_collision', 0))) + data['particle'].append(ParticleType.from_pdg_number(p.pdgcode)) + data['parent_id'].append(int(values_dict.get('parent_id', 0))) + data['progeny_id'].append(int(values_dict.get('progeny_id', 0))) + + dtypes = [ + ('r', [('x', 'f8'), ('y', 'f8'), ('z', 'f8')]), + ('u', [('x', 'f8'), ('y', 'f8'), ('z', 'f8')]), + ('E', 'f8'), ('dE', 'f8'), ('time', 'f8'), ('wgt', 'f8'), + ('event_mt', 'f8'), ('delayed_group', 'i4'), ('cell_id', 'i4'), + ('nuclide_id', 'i4'), ('material_id', 'i4'), ('universe_id', 'i4'), + ('n_collision', 'i4'), ('particle', 'i4'), + ('parent_id', 'i8'), ('progeny_id', 'i8') + ] + + structured_array = np.zeros(len(data['r']), dtype=dtypes) + for key in data: + structured_array[key] = data[key] # Assign data + + return structured_array + + +def read_collision_track_file(filename): + """Read a collision track file (HDF5 or MCPL) and return its data. + + Parameters + ---------- + filename : str or path-like + Path to the collision track file to read. Must end with + ``.h5`` or ``.mcpl``. + + Returns + ------- + numpy.ndarray + Structured array containing collision track data. + + See Also + -------- + read_collision_track_hdf5 + read_collision_track_mcpl + """ + + filename = Path(filename) + if filename.suffix not in ('.h5', '.mcpl'): + raise ValueError('Collision track file must have a .h5 or .mcpl extension.') + + if filename.suffix == '.h5': + return read_collision_track_hdf5(filename) + else: + return read_collision_track_mcpl(filename) diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 715becf4882..a10ec3a839d 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -1,4 +1,5 @@ from datetime import datetime +from collections import namedtuple import glob import re import os @@ -8,6 +9,7 @@ import numpy as np from pathlib import Path from uncertainties import ufloat +from uncertainties.unumpy import uarray import openmc import openmc.checkvalue as cv @@ -15,6 +17,9 @@ _VERSION_STATEPOINT = 18 +KineticsParameters = namedtuple("KineticsParameters", ["generation_time", "beta_effective"]) + + class StatePoint: """State information on a simulation at a certain point in time (at the end of a given batch). Statepoints can be used to analyze tally results as well @@ -429,6 +434,10 @@ def tallies(self): if "multiply_density" in group.attrs: tally.multiply_density = group.attrs["multiply_density"].item() > 0 + # Check if tally has higher_moments attribute + if 'higher_moments' in group.attrs: + tally.higher_moments = bool(group.attrs['higher_moments'][()]) + # Read the number of realizations n_realizations = group['n_realizations'][()] @@ -531,7 +540,7 @@ def add_volume_information(self, volume_calc): def get_tally(self, scores=[], filters=[], nuclides=[], name=None, id=None, estimator=None, exact_filters=False, exact_nuclides=False, exact_scores=False, - multiply_density=None, derivative=None): + multiply_density=None, derivative=None, filter_type=None): """Finds and returns a Tally object with certain properties. This routine searches the list of Tallies and returns the first Tally @@ -575,6 +584,9 @@ def get_tally(self, scores=[], filters=[], nuclides=[], to the same value as this parameter. derivative : openmc.TallyDerivative, optional TallyDerivative object to match. + filter_type : type, optional + If not None, the Tally must have at least one Filter that is an + instance of this type. For example `openmc.MeshFilter`. Returns ------- @@ -648,6 +660,10 @@ def get_tally(self, scores=[], filters=[], nuclides=[], if not contains_filters: continue + if filter_type is not None: + if not any(isinstance(f, filter_type) for f in test_tally.filters): + continue + # Determine if Tally has the queried Nuclide(s) if nuclides: if not all(nuclide in test_tally.nuclides for nuclide in nuclides): @@ -707,6 +723,59 @@ def link_with_summary(self, summary): cell = cells[cell_id] if not cell._paths: summary.geometry.determine_paths() - tally_filter.paths = cell.paths + tally_filter._paths = cell.paths self._summary = summary + + def get_kinetics_parameters(self) -> KineticsParameters: + """Get kinetics parameters from IFP tallies. + + This method searches the tallies in the statepoint for the tallies + required to compute kinetics parameters using the Iterated Fission + Probability (IFP) method. + + Returns + ------- + KineticsParameters + A named tuple containing the generation time and effective delayed + neutron fraction. If the necessary tallies for one or both + parameters are not found, that parameter is returned as None. + + """ + + denom_tally = None + gen_time_tally = None + beta_tally = None + for tally in self.tallies.values(): + if 'ifp-denominator' in tally.scores: + denom_tally = self.get_tally(scores=['ifp-denominator']) + if 'ifp-time-numerator' in tally.scores: + gen_time_tally = self.get_tally(scores=['ifp-time-numerator']) + if 'ifp-beta-numerator' in tally.scores: + beta_tally = self.get_tally(scores=['ifp-beta-numerator']) + + if denom_tally is None: + return KineticsParameters(None, None) + + def get_ufloat(tally, score): + return uarray(tally.get_values(scores=[score]), + tally.get_values(scores=[score], value='std_dev')) + + denom_values = get_ufloat(denom_tally, 'ifp-denominator') + if gen_time_tally is None: + generation_time = None + else: + gen_time_values = get_ufloat(gen_time_tally, 'ifp-time-numerator') + gen_time_values /= denom_values*self.keff + generation_time = gen_time_values.flatten()[0] + + if beta_tally is None: + beta_effective = None + else: + beta_values = get_ufloat(beta_tally, 'ifp-beta-numerator') + beta_values /= denom_values + beta_effective = beta_values.flatten() + if beta_effective.size == 1: + beta_effective = beta_effective[0] + + return KineticsParameters(generation_time, beta_effective) diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index 222d2d18a56..1ce998758ad 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -79,6 +79,9 @@ class PolarAzimuthal(UnitSphere): reference_uvw : Iterable of float Direction from which polar angle is measured. Defaults to the positive z-direction. + reference_vwu : Iterable of float + Direction from which azimuthal angle is measured. Defaults to the positive + x-direction. Attributes ---------- @@ -89,8 +92,9 @@ class PolarAzimuthal(UnitSphere): """ - def __init__(self, mu=None, phi=None, reference_uvw=(0., 0., 1.)): + def __init__(self, mu=None, phi=None, reference_uvw=(0., 0., 1.), reference_vwu=(1., 0., 0.)): super().__init__(reference_uvw) + self.reference_vwu = reference_vwu if mu is not None: self.mu = mu else: @@ -100,6 +104,20 @@ def __init__(self, mu=None, phi=None, reference_uvw=(0., 0., 1.)): self.phi = phi else: self.phi = Uniform(0., 2*pi) + + @property + def reference_vwu(self): + return self._reference_vwu + + @reference_vwu.setter + def reference_vwu(self, vwu): + cv.check_type('reference v direction', vwu, Iterable, Real) + vwu = np.asarray(vwu) + uvw = self.reference_uvw + cv.check_greater_than('reference v direction must not be parallel to reference u direction', np.linalg.norm(np.cross(vwu,uvw)), 1e-6*np.linalg.norm(vwu)) + vwu -= vwu.dot(uvw)*uvw + cv.check_less_than('reference v direction must be orthogonal to reference u direction', np.abs(vwu.dot(uvw)), 1e-6) + self._reference_vwu = vwu/np.linalg.norm(vwu) @property def mu(self): @@ -132,6 +150,8 @@ def to_xml_element(self): element.set("type", "mu-phi") if self.reference_uvw is not None: element.set("reference_uvw", ' '.join(map(str, self.reference_uvw))) + if self.reference_vwu is not None: + element.set("reference_vwu", ' '.join(map(str, self.reference_vwu))) element.append(self.mu.to_xml_element('mu')) element.append(self.phi.to_xml_element('phi')) return element @@ -155,6 +175,9 @@ def from_xml_element(cls, elem): uvw = get_elem_list(elem, "reference_uvw", float) if uvw is not None: mu_phi.reference_uvw = uvw + vwu = get_elem_list(elem, "reference_vwu", float) + if vwu is not None: + mu_phi.reference_vwu = vwu mu_phi.mu = Univariate.from_xml_element(elem.find('mu')) mu_phi.phi = Univariate.from_xml_element(elem.find('phi')) return mu_phi diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index 28d5e87ef9e..c48cc00757c 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -295,6 +295,20 @@ def integral(self): """ return np.sum(self.p) + def mean(self) -> float: + """Return mean of the discrete distribution + + The mean is the weighted average of the discrete values. + + .. versionadded:: 0.15.3 + + Returns + ------- + float + Mean of discrete distribution + """ + return np.sum(self.x * self.p) / np.sum(self.p) + def clip(self, tolerance: float = 1e-6, inplace: bool = False) -> Discrete: r"""Remove low-importance points from discrete distribution. @@ -413,6 +427,18 @@ def sample(self, n_samples=1, seed=None): rng = np.random.RandomState(seed) return rng.uniform(self.a, self.b, n_samples) + def mean(self) -> float: + """Return mean of the uniform distribution + + .. versionadded:: 0.15.3 + + Returns + ------- + float + Mean of uniform distribution + """ + return 0.5 * (self.a + self.b) + def to_xml_element(self, element_name: str): """Return XML representation of the uniform distribution @@ -480,6 +506,9 @@ class PowerLaw(Univariate): """ def __init__(self, a: float = 0.0, b: float = 1.0, n: float = 0.): + if a >= b: + raise ValueError( + "Lower bound of sampling interval must be less than upper bound.") self.a = a self.b = b self.n = n @@ -494,6 +523,9 @@ def a(self): @a.setter def a(self, a): cv.check_type('interval lower bound', a, Real) + if a < 0: + raise ValueError( + "PowerLaw sampling is restricted to positive-valued intervals.") self._a = a @property @@ -503,6 +535,9 @@ def b(self): @b.setter def b(self, b): cv.check_type('interval upper bound', b, Real) + if b < 0: + raise ValueError( + "PowerLaw sampling is restricted to positive-valued intervals.") self._b = b @property @@ -1114,7 +1149,7 @@ def from_xml_element(cls, elem: ET.Element): """ interpolation = get_text(elem, 'interpolation') - params = get_elem_list(elem, "parameters", float) + params = get_elem_list(elem, "parameters", float) m = (len(params) + 1)//2 # +1 for when len(params) is odd x = params[:m] p = params[m:] @@ -1338,6 +1373,30 @@ def integral(self): for p, dist in zip(self.probability, self.distribution) ]) + def mean(self) -> float: + """Return mean of the mixture distribution + + The mean is the weighted average of the means of the component + distributions, weighted by probability * integral. + + .. versionadded:: 0.15.3 + + Returns + ------- + float + Mean of the mixture distribution + """ + # Weight each component by its probability and integral + weights = [p*dist.integral() for p, dist in + zip(self.probability, self.distribution)] + total_weight = sum(weights) + + if total_weight == 0: + return 0.0 + + return sum([w*dist.mean() for w, dist in + zip(weights, self.distribution)]) / total_weight + def clip(self, tolerance: float = 1e-6, inplace: bool = False) -> Mixture: r"""Remove low-importance points / distributions @@ -1360,14 +1419,14 @@ def clip(self, tolerance: float = 1e-6, inplace: bool = False) -> Mixture: Distribution with low-importance points / distributions removed """ - # Determine integral of original distribution to compare later - original_integral = self.integral() + # Calculate mean * integral for original distribution to compare later. + original_mean_integral = self.mean() * self.integral() # Determine indices for any distributions that contribute non-negligibly - # to overall intensity - intensities = [prob*dist.integral() for prob, dist in - zip(self.probability, self.distribution)] - indices = _intensity_clip(intensities, tolerance=tolerance) + # to overall mean * integral + mean_integrals = [prob*dist.mean()*dist.integral() for prob, dist in + zip(self.probability, self.distribution)] + indices = _intensity_clip(mean_integrals, tolerance=tolerance) # Clip mixture of distributions probability = self.probability[indices] @@ -1388,12 +1447,14 @@ def clip(self, tolerance: float = 1e-6, inplace: bool = False) -> Mixture: # Create new distribution new_dist = type(self)(probability, distribution) - # Show warning if integral of new distribution is not within - # tolerance of original - diff = (original_integral - new_dist.integral())/original_integral + # Show warning if mean * integral of new distribution is not within + # tolerance of original. For energy distributions, mean * integral + # represents total energy. + new_mean_integral = new_dist.mean() * new_dist.integral() + diff = (original_mean_integral - new_mean_integral)/original_mean_integral if diff > tolerance: - warn("Clipping mixture distribution resulted in an integral that is " - f"lower by a fraction of {diff} when tolerance={tolerance}.") + warn("Clipping mixture distribution resulted in a mean*integral " + f"that is lower by a fraction of {diff} when tolerance={tolerance}.") return new_dist diff --git a/openmc/tallies.py b/openmc/tallies.py index 075b1e99117..09365e5257a 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -3,6 +3,7 @@ import copy from functools import partial, reduce, wraps from itertools import product +from math import sqrt, log from numbers import Integral, Real import operator from pathlib import Path @@ -12,6 +13,7 @@ import numpy as np import pandas as pd import scipy.sparse as sps +from scipy.stats import chi2, norm import openmc import openmc.checkvalue as cv @@ -91,10 +93,20 @@ class Tally(IDManagerMixin): sum_sq : numpy.ndarray An array containing the sum of each independent realization squared for each bin + sum_third : numpy.ndarray + An array containing the sum of each independent realization to the third power for + each bin + sum_fourth : numpy.ndarray + An array containing the sum of each independent realization to the fourth power for + each bin mean : numpy.ndarray An array containing the sample mean for each bin std_dev : numpy.ndarray An array containing the sample standard deviation for each bin + vov : numpy.ndarray + An array containing the variance of the variance for each tally bin + higher_moments : bool + Whether or not the tally accumulates the sums third and fourth to compute higher-order moments figure_of_merit : numpy.ndarray An array containing the figure of merit for each bin @@ -129,8 +141,12 @@ def __init__(self, tally_id=None, name=''): self._sum = None self._sum_sq = None + self._sum_third = None + self._sum_fourth = None self._mean = None self._std_dev = None + self._vov = None + self._higher_moments = False self._simulation_time = None self._with_batch_statistics = False self._derived = False @@ -221,6 +237,15 @@ def multiply_density(self, value): cv.check_type('multiply density', value, bool) self._multiply_density = value + @property + def higher_moments(self) -> bool: + return self._higher_moments + + @higher_moments.setter + def higher_moments(self, value): + cv.check_type("higher_moments", value, bool) + self._higher_moments = value + @property def filters(self): return self._filters @@ -265,7 +290,7 @@ def nuclides(self, nuclides): @property def num_nuclides(self): - return len(self._nuclides) + return max(len(self._nuclides), 1) @property def scores(self): @@ -368,9 +393,19 @@ def _read_results(self): group = f[f'tallies/tally {self.id}'] self._num_realizations = int(group['n_realizations'][()]) + for filt in self.filters: + if isinstance(filt, openmc.DistribcellFilter): + filter_group = f[f'tallies/filters/filter {filt.id}'] + filt._num_bins = int(filter_group['n_bins'][()]) + # Update nuclides nuclide_names = group['nuclides'][()] self._nuclides = [name.decode().strip() for name in nuclide_names] + # Check for higher_moments attribute + if "higher_moments" in group.attrs: + self._higher_moments = bool(group.attrs["higher_moments"][()]) + else: + self._higher_moments = False # Extract Tally data from the file data = group['results'] @@ -385,10 +420,25 @@ def _read_results(self): self._sum = sum_ self._sum_sq = sum_sq + if self._higher_moments: + # Extract additional Tally data when higher moments enabled + sum_third = data[:, :, 2] + sum_fourth = data[:, :, 3] + + # Reshape the results arrays + sum_third = np.reshape(sum_third, self.shape) + sum_fourth = np.reshape(sum_fourth, self.shape) + + # Set the additional data for this Tally + self._sum_third = sum_third + self._sum_fourth = sum_fourth + # Convert NumPy arrays to SciPy sparse LIL matrices if self.sparse: self._sum = sps.lil_matrix(self._sum.flatten(), self._sum.shape) self._sum_sq = sps.lil_matrix(self._sum_sq.flatten(), self._sum_sq.shape) + self._sum_third = sps.lil_matrix(self._sum_third.flatten(), self._sum_third.shape) + self._sum_fourth = sps.lil_matrix(self.sum_fourth.flatten(), self._sum_fourth.shape) # Read simulation time (needed for figure of merit) self._simulation_time = f["runtime"]["simulation"][()] @@ -428,6 +478,52 @@ def sum_sq(self, sum_sq): cv.check_type('sum_sq', sum_sq, Iterable) self._sum_sq = sum_sq + @property + @ensure_results + def sum_third(self): + if not self._higher_moments: + raise ValueError( + "Higher moments have not been enabled for this tally. To make " + "higher moments available, set the higher_moments attribute to " + "True before running a simulation." + ) + + if not self._sp_filename or self.derived: + return None + + if self.sparse: + return np.reshape(self._sum_third.toarray(), self.shape) + else: + return self._sum_third + + @sum_third.setter + def sum_third(self, sum_third): + cv.check_type("sum_third", sum_third, Iterable) + self._sum_third = sum_third + + @property + @ensure_results + def sum_fourth(self): + if not self._higher_moments: + raise ValueError( + "Higher moments have not been enabled for this tally. To make " + "higher moments available, set the higher_moments attribute to " + "True before running a simulation." + ) + + if not self._sp_filename or self.derived: + return None + + if self.sparse: + return np.reshape(self._sum_fourth.toarray(), self.shape) + else: + return self._sum_fourth + + @sum_fourth.setter + def sum_fourth(self, sum_fourth): + cv.check_type("sum_fourth", sum_fourth, Iterable) + self._sum_fourth = sum_fourth + @property def mean(self): if self._mean is None: @@ -470,14 +566,357 @@ def std_dev(self): else: return self._std_dev + @property + def vov(self): + if self._vov is None: + n = self.num_realizations + sum1 = self.sum + sum2 = self.sum_sq + sum3 = self.sum_third + sum4 = self.sum_fourth + self._vov = np.zeros_like(sum1, dtype=float) + + # Calculate the variance of the variance (Eq. 2.232 in + # https://doi.org/10.2172/2372634) + numerator = (sum4 - (4.0*sum3*sum1)/n + + (6.0*sum2*(sum1**2))/(n**2) + - (3.0*(sum1)**4)/(n**3)) + denominator = (sum2 - (1.0/n)*(sum1**2))**2 + + mask = denominator > 0.0 + + self._vov[mask] = numerator[mask]/denominator[mask] - 1.0/n + + if self.sparse: + self._vov = sps.lil_matrix(self._vov.flatten(), self._vov.shape) + + if self.sparse: + return np.reshape(self._vov.toarray(), self.shape) + else: + return self._vov + + @property + def m2(self): + n = self.num_realizations + return self.sum_sq/n - self.mean**2 + + @property + def m3(self): + n = self.num_realizations + mean = self.mean + sum2 = self.sum_sq/n + sum3 = self.sum_third/n + + return sum3 - 3.0*mean*sum2 + 2.0*mean**3 + + @property + def m4(self): + n = self.num_realizations + mean = self.mean + sum2 = self.sum_sq/n + sum3 = self.sum_third/n + sum4 = self.sum_fourth/n + + return sum4 - 4.0*mean*sum3 + 6.0*(mean**2)*sum2 - 3.0*mean**4 + + def skew(self, bias=False) -> np.ndarray: + """Return the sample skewness of each tally bin. + + This method computes and returns the unadjusted or adjusted + Fisher-Pearson coefficient of skewness. + + Parameters + ---------- + bias : bool + If False, calculations are corrected for bias and the adjusted + Fisher-Pearson skewness (:math:`G_1`) is returned. If True, + calculations are not corrected for bias and the unadjusted skewness + (:math:`g_1`) is returned. + + Returns + ------- + float + The skewness of each tally bin + """ + n = self.num_realizations + m2 = self.m2 + m3 = self.m3 + + with np.errstate(divide="ignore", invalid="ignore"): + g1 = np.where(m2 > 0.0, m3/(m2**1.5), 0.0) + + if bias: + return g1 + else: + if n <= 2: + raise ValueError("Insufficient number of independent realizations" + f"for bias-corrected skewness: need n >= 3, got {n=}.") + else: + return sqrt(n*(n - 1))/(n - 2)*g1 + + def kurtosis(self, fisher=True, bias=False) -> np.ndarray: + r"""Return the sample kurtosis of each tally bin. + + This method computes and returns the sample kurtosis using either + Pearson's or Fisher's definition, with or without finite-sample bias + correction. The value returned depends on the `bias` and `fisher` + arguments as follows: + + - **bias=True, fisher=False**: Returns :math:`b_2` (Pearson's kurtosis) + This is the raw fourth standardized moment: :math:`m_4/m_2^2`. For a + normal distribution, :math:`b_2\approx 3`. + + - **bias=True, fisher=True**: Returns :math:`g_2` (excess kurtosis) This + is :math:`b_2 - 3`, centered at 0 for normal distributions. Positive + values indicate heavier tails, negative values lighter tails. + + - **bias=False, fisher=True** (default): Returns :math:`G_2` (adjusted + excess kurtosis). This applies finite-sample bias correction to + :math:`g_2`. This is the recommended estimator for statistical + inference. + + - **bias=False, fisher=False**: Returns bias-corrected Pearson's + kurtosis. This is :math:`G_2 + 3`. + + Parameters + ---------- + fisher : bool, optional + If True (default), Fisher's definition is used (excess kurtosis). If + False, Pearson's definition is used. + bias : bool, optional + If False (default), calculations are corrected for statistical bias + using finite-sample adjustments. If True, calculations use the + biased estimator (population formulas). + + Returns + ------- + numpy.ndarray + The kurtosis of each tally bin + + """ + n = self.num_realizations + m2 = self.m2 + m4 = self.m4 + + with np.errstate(divide="ignore", invalid="ignore"): + b2 = np.where(m2 > 0.0, m4/(m2**2), 0.0) + g2 = b2 - 3.0 + + if bias: + # Biased estimator (g2 or b2) + return g2 if fisher else b2 + else: + # Unbiased estimator with finite-sample correction + if n <= 3: + raise ValueError("Insufficient number of independent realizations" + f"for bias-corrected kurtosis: need n >= 4, got {n=}.") + else: + G2 = ((n - 1)/((n - 2)*(n - 3)))*((n + 1)*g2 + 6.0) + return G2 if fisher else G2 + 3.0 + + def skewtest(self, alternative: str = "two-sided"): + """Perform D'Agostino and Pearson's test for skewness. + + This method tests the null hypothesis that the skewness of the + population that the sample was drawn from is the same as that of a + corresponding normal distribution. + + Parameters + ---------- + alternative : {'two-sided', 'less', 'greater'}, optional + Defines the alternative hypothesis. The following options are + available: + + * 'two-sided': the skewness of the distribution is different from + that of the normal distribution (i.e., non-zero) + * 'less': the skewness of the distribution is less than that of the + normal distribution + * 'greater': the skewness of the distribution is greater than that + of the normal distribution + + Returns + ------- + statistic : np.ndarray + The computed z-score for the skewness test for each tally bin + pvalue : np.ndarray + The p-value for the hypothesis test for each tally bin + + Notes + ----- + This test is based on `D'Agostino and Pearson's test + `_. The test requires at least + 8 realizations to produce valid results. + + """ + n = self.num_realizations + if n < 8: + raise ValueError("Skewness test is not well-defined for n < 8.") + + g1 = self.skew(bias=True) + + # --- Z1 (skewness) --- + y = g1 * sqrt(((n + 1.0)*(n + 3.0))/(6.0*(n - 2.0))) + beta2 = (3.0*(n**2 + 27.0*n - 70.0)*(n + 1.0)*(n + 3.0) + )/((n - 2.0)*(n + 5.0)*(n + 7.0)*(n + 9.0)) + W2 = -1.0 + sqrt(2.0*(beta2 - 1.0)) + delta = 1.0 / sqrt(log(sqrt(W2))) + alpha = sqrt(2.0 / (W2 - 1.0)) + Zb1 = np.where( + y >= 0.0, + delta*np.log((y/alpha) + np.sqrt((y/alpha)**2 + 1.0)), + -delta*np.log((-y/alpha) + np.sqrt((y/alpha)**2 + 1.0)) + ) + + # p-value + if alternative == "two-sided": + p = 2.0 * (1.0 - norm.cdf(np.abs(Zb1))) + elif alternative == "greater": + p = 1.0 - norm.cdf(Zb1) + elif alternative == "less": + p = norm.cdf(Zb1) + else: + raise ValueError("alternative must be 'two-sided', 'greater', or 'less'") + + return Zb1, p + + def kurtosistest(self, alternative: str = "two-sided"): + """Perform D'Agostino and Pearson's test for kurtosis. + + This method tests the null hypothesis that the kurtosis of the + population that the sample was drawn from is the same as that of a + corresponding normal distribution. + + Parameters + ---------- + alternative : {'two-sided', 'less', 'greater'}, optional + Defines the alternative hypothesis. Default is 'two-sided'. The + following options are available: + + * 'two-sided': the kurtosis of the distribution is different from + that of the normal distribution + * 'less': the kurtosis of the distribution is less than that of the + normal distribution + * 'greater': the kurtosis of the distribution is greater than that + of the normal distribution + + Returns + ------- + statistic : np.ndarray + The computed z-score for the kurtosis test for each tally bin + pvalue : np.ndarray + The p-value for the hypothesis test for each tally bin + + Raises + ------ + ValueError + If the number of realizations is less than 20, or if an invalid + alternative hypothesis is specified. + + Notes + ----- + This test is based on `D'Agostino and Pearson's test + `_. The test is typically + recommended for at least 20 realizations to produce valid results. + + """ + n = self.num_realizations + if n < 20: + raise ValueError("Kurtosis test is typically recommended for n >= 20.") + + b2 = self.kurtosis(bias=True, fisher=False) + + # --- Z2 (kurtosis) --- + mean_b2 = 3.0 * (n - 1.0) / (n + 1.0) + var_b2 = (24.0*n*(n - 2.0)*(n - 3.0)/( + (n + 1.0)**2*(n + 3.0)*(n + 5.0))) + x = (b2 - mean_b2)/np.sqrt(var_b2) + moment = ((6.0*(n**2 - 5.0*n + 2.0))/((n + 7.0)*(n + 9.0)) + )*sqrt((6.0*(n + 3.0)*(n + 5.0))/(n*(n - 2.0)*(n - 3.0))) + A = 6.0 + (8.0/moment)*((2.0/moment) + sqrt(1.0 + 4.0/(moment**2))) + Zb2 = (1.0- 2.0/(9.0*A) - ((1.0 - 2.0/A) / (1.0 + (x + )*sqrt(2.0/(A - 4.0))))**(1.0/3.0)) / sqrt(2.0/(9.0*A)) + + # p-value + if alternative == "two-sided": + p = 2.0 * (1.0 - norm.cdf(np.abs(Zb2))) + elif alternative == "greater": + p = 1.0 - norm.cdf(Zb2) + elif alternative == "less": + p = norm.cdf(Zb2) + else: + raise ValueError("alternative must be 'two-sided', 'greater', or 'less'") + + return Zb2, p + + def normaltest(self, alternative: str = "two-sided"): + """Perform D'Agostino and Pearson's omnibus test for normality. + + This method tests the null hypothesis that a sample comes from a normal + distribution. It combines skewness and kurtosis to produce an omnibus + test of normality. + + Parameters + ---------- + alternative : {'two-sided', 'less', 'greater'}, optional + Defines the alternative hypothesis used for the component skewness + and kurtosis tests. Default is 'two-sided'. The following options + are available: + + * 'two-sided': the distribution is different from normal + * 'less': used for the component tests + * 'greater': used for the component tests + + Returns + ------- + statistic : np.ndarray + The computed z-score for the normality test for each tally bin + pvalue : np.ndarray + The p-value for the hypothesis test for each tally bin + + Raises + ------ + ValueError + If the number of realizations is less than 20, or if an invalid + alternative hypothesis is specified. + + Notes + ----- + This test combines a test for skewness and a test for kurtosis to + produce an `omnibus test `_. + The test statistic is: + + .. math:: + + K^2 = Z_1^2 + Z_2^2 + + where :math:`Z_1` is the z-score from the skewness test and :math:`Z_2` + is the z-score from the kurtosis test. This statistic follows a + chi-square distribution with 2 degrees of freedom. + + The test requires at least 20 realizations to produce valid results. + + """ + n = self.num_realizations + if n < 20: + raise ValueError("normaltest requires n >= 20 (per D'Agostino-Pearson).") + + # Use the component tests + Z1, _ = self.skewtest(alternative) + Z2, _ = self.kurtosistest(alternative) + + # Combine as chi-square with df=2 since we have skewness and kurtosis + K2 = Z1*Z1 + Z2*Z2 + p = chi2.sf(K2, df=2) + return K2, p + @property def figure_of_merit(self): mean = self.mean std_dev = self.std_dev fom = np.zeros_like(mean) nonzero = np.abs(mean) > 0 - fom[nonzero] = 1.0 / ( - (std_dev[nonzero] / mean[nonzero])**2 * self._simulation_time) + rel_err = std_dev[nonzero] / mean[nonzero] + fom[nonzero] = 1.0 / (rel_err**2 * self._simulation_time) return fom @property @@ -528,6 +967,12 @@ def sparse(self, sparse): if self._sum_sq is not None: self._sum_sq = sps.lil_matrix(self._sum_sq.flatten(), self._sum_sq.shape) + if self._sum_third is not None: + self._sum_third = sps.lil_matrix(self._sum_third.flatten(), + self._sum_third.shape) + if self._sum_fourth is not None: + self._sum_fourth = sps.lil_matrix(self._sum_fourth.flatten(), + self._sum_fourth.shape) if self._mean is not None: self._mean = sps.lil_matrix(self._mean.flatten(), self._mean.shape) @@ -543,6 +988,10 @@ def sparse(self, sparse): self._sum = np.reshape(self._sum.toarray(), self.shape) if self._sum_sq is not None: self._sum_sq = np.reshape(self._sum_sq.toarray(), self.shape) + if self._sum_third is not None: + self._sum_third = np.reshape(self._sum_third.toarray(), self.shape) + if self._sum_fourth is not None: + self._sum_fourth = np.reshape(self._sum_fourth.toarray(), self.shape) if self._mean is not None: self._mean = np.reshape(self._mean.toarray(), self.shape) if self._std_dev is not None: @@ -869,6 +1318,34 @@ def merge(self, other): merged_tally._sum_sq = np.reshape(merged_sum_sq, merged_tally.shape) + # Concatenate sum_third arrays if present in both tallies + if self._sum_third is not None and other._sum_third is not None: + self_sum_third = self.get_reshaped_data(value="sum_third") + other_sum_third = other_copy.get_reshaped_data(value="sum_third") + + if join_right: + merged_sum_third = np.concatenate((self_sum_third, other_sum_third), + axis=merge_axis) + else: + merged_sum_third = np.concatenate((other_sum_third, self_sum_third), + axis=merge_axis) + + merged_tally._sum_third = np.reshape(merged_sum_third, merged_tally.shape) + + # Concatenate sum_fourth arrays if present in both tallies + if self._sum_fourth is not None and other._sum_fourth is not None: + self_sum_fourth = self.get_reshaped_data(value="sum_fourth") + other_sum_fourth = other_copy.get_reshaped_data(value="sum_fourth") + + if join_right: + merged_sum_fourth = np.concatenate((self_sum_fourth, other_sum_fourth), + axis=merge_axis) + else: + merged_sum_fourth = np.concatenate((other_sum_fourth, self_sum_fourth), + axis=merge_axis) + + merged_tally._sum_fourth = np.reshape(merged_sum_fourth, merged_tally.shape) + # Concatenate mean arrays if present in both tallies if self.mean is not None and other.mean is not None: self_mean = self.get_reshaped_data(value='mean') @@ -958,6 +1435,11 @@ def to_xml_element(self): subelement = ET.SubElement(element, "derivative") subelement.text = str(self.derivative.id) + # Optional higher moments accumulation + if self.higher_moments: + subelement = ET.SubElement(element, "higher_moments") + subelement.text = str(self.higher_moments).lower() + return element def add_results(self, statepoint: cv.PathLike | openmc.StatePoint): @@ -984,8 +1466,12 @@ def add_results(self, statepoint: cv.PathLike | openmc.StatePoint): # point are based on the current statepoint file self._sum = None self._sum_sq = None + self._sum_third = None + self._sum_fourth = None self._mean = None self._std_dev = None + self._vov = None + self._higher_moments = False self._num_realizations = 0 self._results_read = False @@ -1355,7 +1841,9 @@ def get_values(self, scores=[], filters=[], filter_bins=[], (value == 'std_dev' and self.std_dev is None) or \ (value == 'rel_err' and self.mean is None) or \ (value == 'sum' and self.sum is None) or \ - (value == 'sum_sq' and self.sum_sq is None): + (value == 'sum_sq' and self.sum_sq is None) or \ + (value == "sum_third" and self.sum_third is None) or \ + (value == "sum_fourth" and self.sum_fourth is None): msg = f'The Tally ID="{self.id}" has no data to return' raise ValueError(msg) @@ -1378,10 +1866,14 @@ def get_values(self, scores=[], filters=[], filter_bins=[], data = self.sum[indices] elif value == 'sum_sq': data = self.sum_sq[indices] + elif value == "sum_third": + data = self.sum_third[indices] + elif value == "sum_fourth": + data = self.sum_fourth[indices] else: msg = f'Unable to return results from Tally ID="{value}" since ' \ f'the requested value "{self.id}" is not \'mean\', ' \ - '\'std_dev\', \'rel_err\', \'sum\', or \'sum_sq\'' + '\'std_dev\', \'rel_err\', \'sum\', \'sum_sq\', \'sum_third\' or \'sum_fourth\'' raise LookupError(msg) return data @@ -2711,6 +3203,16 @@ def get_slice(self, scores=[], filters=[], filter_bins=[], nuclides=[], new_sum_sq = self.get_values(scores, filters, filter_bins, nuclides, 'sum_sq') new_tally.sum_sq = new_sum_sq + if not self.derived and self._sum_third is not None: + new_sum_third = self.get_values( + scores, filters, filter_bins, nuclides, "sum_third" + ) + new_tally._sum_third = new_sum_third + if not self.derived and self._sum_fourth is not None: + new_sum_fourth = self.get_values( + scores, filters, filter_bins, nuclides, "sum_fourth" + ) + new_tally._sum_fourth = new_sum_fourth if self.mean is not None: new_mean = self.get_values(scores, filters, filter_bins, nuclides, 'mean') @@ -3151,6 +3653,12 @@ def diagonalize_filter(self, new_filter, filter_position=-1): if not self.derived and self.sum_sq is not None: new_tally._sum_sq = np.zeros(new_tally.shape, dtype=np.float64) new_tally._sum_sq[diag_indices, :, :] = self.sum_sq + if not self.derived and self._sum_third is not None: + new_tally._sum_third = np.zeros(new_tally.shape, dtype=np.float64) + new_tally._sum_third[diag_indices, :, :] = self.sum_third + if not self.derived and self._sum_fourth is not None: + new_tally._sum_fourth = np.zeros(new_tally.shape, dtype=np.float64) + new_tally._sum_fourth[diag_indices, :, :] = self.sum_fourth if self.mean is not None: new_tally._mean = np.zeros(new_tally.shape, dtype=np.float64) new_tally._mean[diag_indices, :, :] = self.mean @@ -3201,43 +3709,17 @@ def append(self, tally, merge=False): if possible. Defaults to False. """ - if not isinstance(tally, Tally): - msg = f'Unable to add a non-Tally "{tally}" to the Tallies instance' - raise TypeError(msg) - if merge: - merged = False - # Look for a tally to merge with this one for i, tally2 in enumerate(self): - # If a mergeable tally is found if tally2.can_merge(tally): # Replace tally2 with the merged tally merged_tally = tally2.merge(tally) self[i] = merged_tally - merged = True - break - - # If no mergeable tally was found, simply add this tally - if not merged: - super().append(tally) - - else: - super().append(tally) + return - def insert(self, index, item): - """Insert tally before index - - Parameters - ---------- - index : int - Index in list - item : openmc.Tally - Tally to insert - - """ - super().insert(index, item) + super().append(tally) def merge_tallies(self): """Merge any mergeable tallies together. Note that n-way merges are diff --git a/openmc/tracks.py b/openmc/tracks.py index 61e5a72442e..81646e7d2e7 100644 --- a/openmc/tracks.py +++ b/openmc/tracks.py @@ -296,16 +296,16 @@ def write_to_vtk(self, filename=Path('tracks.vtp')): for state in pt.states: points.InsertNextPoint(state['r']) - # Create VTK line and assign points to line. - n = pt.states.size - line = vtk.vtkPolyLine() - line.GetPointIds().SetNumberOfIds(n) - for i in range(n): - line.GetPointIds().SetId(i, point_offset + i) - point_offset += n - - # Add line to cell array - cells.InsertNextCell(line) + # Create VTK line and assign points to line. + n = pt.states.size + line = vtk.vtkPolyLine() + line.GetPointIds().SetNumberOfIds(n) + for i in range(n): + line.GetPointIds().SetId(i, point_offset + i) + point_offset += n + + # Add line to cell array + cells.InsertNextCell(line) data = vtk.vtkPolyData() data.SetPoints(points) diff --git a/openmc/utility_funcs.py b/openmc/utility_funcs.py index da9f73b1651..935a589853d 100644 --- a/openmc/utility_funcs.py +++ b/openmc/utility_funcs.py @@ -3,6 +3,8 @@ from pathlib import Path from tempfile import TemporaryDirectory +import h5py + import openmc from .checkvalue import PathLike @@ -57,3 +59,20 @@ def input_path(filename: PathLike) -> Path: return Path(filename).resolve() else: return Path(filename) + + +@contextmanager +def h5py_file_or_group(group_or_filename: PathLike | h5py.Group, *args, **kwargs): + """Context manager for opening an HDF5 file or using an existing group + + Parameters + ---------- + group_or_filename : path-like or h5py.Group + Path to HDF5 file, or group from an existing HDF5 file + + """ + if isinstance(group_or_filename, h5py.Group): + yield group_or_filename + else: + with h5py.File(group_or_filename, *args, **kwargs) as f: + yield f diff --git a/pyproject.toml b/pyproject.toml index 6e8ed798e78..2d67e834012 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,15 +41,22 @@ dependencies = [ [project.optional-dependencies] depletion-mpi = ["mpi4py"] docs = [ - "sphinx==5.0.2", + "sphinx", "sphinxcontrib-katex", "sphinx-numfig", "jupyter", "sphinxcontrib-svg2pdfconverter", - "sphinx-rtd-theme==1.0.0" + "sphinx-rtd-theme" ] -test = ["packaging", "pytest", "pytest-cov", "colorama", "openpyxl"] -ci = ["cpp-coveralls", "coveralls"] +test = [ + "packaging", + "pytest", + "pytest-cov>=4.0", + "pytest-rerunfailures", + "colorama", + "openpyxl", +] +ci = ["coverage>=7.4", "gcovr>=7.2"] vtk = ["vtk"] [project.urls] diff --git a/src/bank.cpp b/src/bank.cpp index 9955939f6e6..33790379b85 100644 --- a/src/bank.cpp +++ b/src/bank.cpp @@ -20,6 +20,8 @@ vector source_bank; SharedArray surf_source_bank; +SharedArray collision_track_bank; + // The fission bank is allocated as a SharedArray, rather than a vector, as it // will be shared by all threads in the simulation. It will be allocated to a // fixed maximum capacity in the init_fission_bank() function. Then, Elements @@ -50,6 +52,7 @@ void free_memory_bank() { simulation::source_bank.clear(); simulation::surf_source_bank.clear(); + simulation::collision_track_bank.clear(); simulation::fission_bank.clear(); simulation::progeny_per_particle.clear(); simulation::ifp_source_delayed_group_bank.clear(); @@ -79,16 +82,9 @@ void sort_fission_bank() // Perform exclusive scan summation to determine starting indices in fission // bank for each parent particle id - int64_t tmp = simulation::progeny_per_particle[0]; - simulation::progeny_per_particle[0] = 0; - for (int64_t i = 1; i < simulation::progeny_per_particle.size(); i++) { - int64_t value = simulation::progeny_per_particle[i - 1] + tmp; - tmp = simulation::progeny_per_particle[i]; - simulation::progeny_per_particle[i] = value; - } - - // TODO: C++17 introduces the exclusive_scan() function which could be - // used to replace everything above this point in this function. + std::exclusive_scan(simulation::progeny_per_particle.begin(), + simulation::progeny_per_particle.end(), + simulation::progeny_per_particle.begin(), 0); // We need a scratch vector to make permutation of the fission bank into // sorted order easy. Under normal usage conditions, the fission bank is diff --git a/src/cell.cpp b/src/cell.cpp index d838bfbb4d1..e2479994a6a 100644 --- a/src/cell.cpp +++ b/src/cell.cpp @@ -101,6 +101,25 @@ double Cell::temperature(int32_t instance) const } } +double Cell::density_mult(int32_t instance) const +{ + if (instance >= 0) { + return density_mult_.size() == 1 ? density_mult_.at(0) + : density_mult_.at(instance); + } else { + return density_mult_[0]; + } +} + +double Cell::density(int32_t instance) const +{ + const int32_t mat_index = material(instance); + if (mat_index == MATERIAL_VOID) + return 0.0; + + return density_mult(instance) * model::materials[mat_index]->density_gpcc(); +} + void Cell::set_temperature(double T, int32_t instance, bool set_contained) { if (settings::temperature_method == TemperatureMethod::INTERPOLATION) { @@ -151,6 +170,47 @@ void Cell::set_temperature(double T, int32_t instance, bool set_contained) } } +void Cell::set_density(double density, int32_t instance, bool set_contained) +{ + if (type_ != Fill::MATERIAL && !set_contained) { + fatal_error( + fmt::format("Attempted to set the density multiplier of cell {} " + "which is not filled by a material.", + id_)); + } + + if (type_ == Fill::MATERIAL) { + const int32_t mat_index = material(instance); + if (mat_index == MATERIAL_VOID) + return; + + if (instance >= 0) { + // If density multiplier vector is not big enough, resize it first + if (density_mult_.size() != n_instances()) + density_mult_.resize(n_instances(), density_mult_[0]); + + // Set density multiplier for the corresponding instance + density_mult_.at(instance) = + density / model::materials[mat_index]->density_gpcc(); + } else { + // Set density multiplier for all instances + for (auto& x : density_mult_) { + x = density / model::materials[mat_index]->density_gpcc(); + } + } + } else { + auto contained_cells = this->get_contained_cells(instance); + for (const auto& entry : contained_cells) { + auto& cell = model::cells[entry.first]; + assert(cell->type_ == Fill::MATERIAL); + auto& instances = entry.second; + for (auto instance : instances) { + cell->set_density(density, instance); + } + } + } +} + void Cell::export_properties_hdf5(hid_t group) const { // Create a group for this cell. @@ -162,6 +222,15 @@ void Cell::export_properties_hdf5(hid_t group) const temps.push_back(sqrtkT_val * sqrtkT_val / K_BOLTZMANN); write_dataset(cell_group, "temperature", temps); + // Write density for one or more cell instances + if (type_ == Fill::MATERIAL && material_.size() > 0) { + vector density; + for (int32_t i = 0; i < density_mult_.size(); ++i) + density.push_back(this->density(i)); + + write_dataset(cell_group, "density", density); + } + close_group(cell_group); } @@ -176,7 +245,7 @@ void Cell::import_properties_hdf5(hid_t group) // Ensure number of temperatures makes sense auto n_temps = temps.size(); if (n_temps > 1 && n_temps != n_instances()) { - throw std::runtime_error(fmt::format( + fatal_error(fmt::format( "Number of temperatures for cell {} doesn't match number of instances", id_)); } @@ -188,6 +257,25 @@ void Cell::import_properties_hdf5(hid_t group) this->set_temperature(temps[i], i); } + // Read densities + if (object_exists(cell_group, "density")) { + vector density; + read_dataset(cell_group, "density", density); + + // Ensure number of densities makes sense + auto n_density = density.size(); + if (n_density > 1 && n_density != n_instances()) { + fatal_error(fmt::format("Number of densities for cell {} " + "doesn't match number of instances", + id_)); + } + + // Set densities. + for (int32_t i = 0; i < n_density; ++i) { + this->set_density(density[i], i); + } + } + close_group(cell_group); } @@ -227,6 +315,8 @@ void Cell::to_hdf5(hid_t cell_group) const temps.push_back(sqrtkT_val * sqrtkT_val / K_BOLTZMANN); write_dataset(group, "temperature", temps); + write_dataset(group, "density_mult", density_mult_); + } else if (type_ == Fill::UNIVERSE) { write_dataset(group, "fill_type", "universe"); write_dataset(group, "fill", model::universes[fill_]->id_); @@ -344,6 +434,44 @@ CSGCell::CSGCell(pugi::xml_node cell_node) } } + // Read the density element which can be distributed similar to temperature. + // These get assigned to the density multiplier, requiring a division by + // the material density. + // Note: calculating the actual density multiplier is deferred until materials + // are finalized. density_mult_ contains the true density in the meantime. + if (check_for_node(cell_node, "density")) { + density_mult_ = get_node_array(cell_node, "density"); + density_mult_.shrink_to_fit(); + + // Make sure this is a material-filled cell. + if (material_.size() == 0) { + fatal_error(fmt::format( + "Cell {} was specified with a density but no material. Density" + "specification is only valid for cells filled with a material.", + id_)); + } + + // Make sure this is a non-void material. + for (auto mat_id : material_) { + if (mat_id == MATERIAL_VOID) { + fatal_error(fmt::format( + "Cell {} was specified with a density, but contains a void " + "material. Density specification is only valid for cells " + "filled with a non-void material.", + id_)); + } + } + + // Make sure all densities are non-negative and greater than zero. + for (auto rho : density_mult_) { + if (rho <= 0) { + fatal_error(fmt::format( + "Cell {} was specified with a density less than or equal to zero", + id_)); + } + } + } + // Read the region specification. std::string region_spec; if (check_for_node(cell_node, "region")) { @@ -1129,6 +1257,24 @@ extern "C" int openmc_cell_set_temperature( return 0; } +extern "C" int openmc_cell_set_density( + int32_t index, double density, const int32_t* instance, bool set_contained) +{ + if (index < 0 || index >= model::cells.size()) { + strcpy(openmc_err_msg, "Index in cells array is out of bounds."); + return OPENMC_E_OUT_OF_BOUNDS; + } + + int32_t instance_index = instance ? *instance : -1; + try { + model::cells[index]->set_density(density, instance_index, set_contained); + } catch (const std::exception& e) { + set_errmsg(e.what()); + return OPENMC_E_UNASSIGNED; + } + return 0; +} + extern "C" int openmc_cell_get_temperature( int32_t index, const int32_t* instance, double* T) { @@ -1147,6 +1293,36 @@ extern "C" int openmc_cell_get_temperature( return 0; } +extern "C" int openmc_cell_get_density( + int32_t index, const int32_t* instance, double* density) +{ + if (index < 0 || index >= model::cells.size()) { + strcpy(openmc_err_msg, "Index in cells array is out of bounds."); + return OPENMC_E_OUT_OF_BOUNDS; + } + + int32_t instance_index = instance ? *instance : -1; + try { + if (model::cells[index]->type_ != Fill::MATERIAL) { + fatal_error( + fmt::format("Cell {}, instance {} is not filled with a material.", + model::cells[index]->id_, instance_index)); + } + + int32_t mat_index = model::cells[index]->material(instance_index); + if (mat_index == MATERIAL_VOID) { + *density = 0.0; + } else { + *density = model::cells[index]->density_mult(instance_index) * + model::materials[mat_index]->density_gpcc(); + } + } catch (const std::exception& e) { + set_errmsg(e.what()); + return OPENMC_E_UNASSIGNED; + } + return 0; +} + //! Get the bounding box of a cell extern "C" int openmc_cell_bounding_box( const int32_t index, double* llc, double* urc) diff --git a/src/collision_track.cpp b/src/collision_track.cpp new file mode 100644 index 00000000000..75e56574a68 --- /dev/null +++ b/src/collision_track.cpp @@ -0,0 +1,238 @@ +#include "openmc/collision_track.h" + +#include +#include + +#include + +#include "openmc/bank.h" +#include "openmc/bank_io.h" +#include "openmc/cell.h" +#include "openmc/constants.h" +#include "openmc/error.h" +#include "openmc/file_utils.h" +#include "openmc/hdf5_interface.h" +#include "openmc/material.h" +#include "openmc/mcpl_interface.h" +#include "openmc/message_passing.h" +#include "openmc/nuclide.h" +#include "openmc/output.h" +#include "openmc/particle.h" +#include "openmc/settings.h" +#include "openmc/simulation.h" +#include "openmc/universe.h" + +#ifdef OPENMC_MPI +#include +#endif + +namespace openmc { + +namespace { + +hid_t h5_collision_track_banktype() +{ + hid_t postype = H5Tcreate(H5T_COMPOUND, sizeof(Position)); + H5Tinsert(postype, "x", HOFFSET(Position, x), H5T_NATIVE_DOUBLE); + H5Tinsert(postype, "y", HOFFSET(Position, y), H5T_NATIVE_DOUBLE); + H5Tinsert(postype, "z", HOFFSET(Position, z), H5T_NATIVE_DOUBLE); + + hid_t banktype = H5Tcreate(H5T_COMPOUND, sizeof(CollisionTrackSite)); + + H5Tinsert(banktype, "r", HOFFSET(CollisionTrackSite, r), postype); + H5Tinsert(banktype, "u", HOFFSET(CollisionTrackSite, u), postype); + H5Tinsert(banktype, "E", HOFFSET(CollisionTrackSite, E), H5T_NATIVE_DOUBLE); + H5Tinsert(banktype, "dE", HOFFSET(CollisionTrackSite, dE), H5T_NATIVE_DOUBLE); + H5Tinsert( + banktype, "time", HOFFSET(CollisionTrackSite, time), H5T_NATIVE_DOUBLE); + H5Tinsert( + banktype, "wgt", HOFFSET(CollisionTrackSite, wgt), H5T_NATIVE_DOUBLE); + H5Tinsert(banktype, "event_mt", HOFFSET(CollisionTrackSite, event_mt), + H5T_NATIVE_INT); + H5Tinsert(banktype, "delayed_group", + HOFFSET(CollisionTrackSite, delayed_group), H5T_NATIVE_INT); + H5Tinsert( + banktype, "cell_id", HOFFSET(CollisionTrackSite, cell_id), H5T_NATIVE_INT); + H5Tinsert(banktype, "nuclide_id", HOFFSET(CollisionTrackSite, nuclide_id), + H5T_NATIVE_INT); + H5Tinsert(banktype, "material_id", HOFFSET(CollisionTrackSite, material_id), + H5T_NATIVE_INT); + H5Tinsert(banktype, "universe_id", HOFFSET(CollisionTrackSite, universe_id), + H5T_NATIVE_INT); + H5Tinsert(banktype, "n_collision", HOFFSET(CollisionTrackSite, n_collision), + H5T_NATIVE_INT); + H5Tinsert(banktype, "particle", HOFFSET(CollisionTrackSite, particle), + H5T_NATIVE_INT); + H5Tinsert(banktype, "parent_id", HOFFSET(CollisionTrackSite, parent_id), + H5T_NATIVE_INT64); + H5Tinsert(banktype, "progeny_id", HOFFSET(CollisionTrackSite, progeny_id), + H5T_NATIVE_INT64); + H5Tclose(postype); + return banktype; +} + +void write_collision_track_bank(hid_t group_id, + openmc::span collision_track_bank, + const openmc::vector& bank_index) +{ + hid_t banktype = h5_collision_track_banktype(); +#ifdef OPENMC_MPI + write_bank_dataset("collision_track_bank", group_id, collision_track_bank, + bank_index, banktype, mpi::collision_track_site); +#else + write_bank_dataset("collision_track_bank", group_id, collision_track_bank, + bank_index, banktype); +#endif + + H5Tclose(banktype); +} + +void write_h5_collision_track(const char* filename, + openmc::span collision_track_bank, + const openmc::vector& bank_index) +{ +#ifdef PHDF5 + bool parallel = true; +#else + bool parallel = false; +#endif + + if (!filename) + fatal_error("write_h5_collision_track filename needs a nonempty name."); + + std::string filename_(filename); + const auto extension = get_file_extension(filename_); + if (extension.empty()) { + filename_.append(".h5"); + } else if (extension != "h5") { + warning("write_h5_collision_track was passed a file extension differing " + "from .h5, but an hdf5 file will be written."); + } + + hid_t file_id; + if (mpi::master || parallel) { + file_id = file_open(filename_.c_str(), 'w', true); + + // Write filetype and version info + write_attribute(file_id, "filetype", "collision_track"); + write_attribute(file_id, "version", VERSION_COLLISION_TRACK); + } + + write_collision_track_bank(file_id, collision_track_bank, bank_index); + + if (mpi::master || parallel) + file_close(file_id); +} + +} // namespace + +bool should_record_event(int id_cell, int mt_event, const std::string& nuclide, + int id_universe, int id_material, double energy_loss) +{ + auto matches_filter = [](const auto& filter_set, const auto& value) { + return filter_set.empty() || filter_set.count(value) > 0; + }; + + const auto& cfg = settings::collision_track_config; + return simulation::current_batch > settings::n_inactive && + !simulation::collision_track_bank.full() && + matches_filter(cfg.cell_ids, id_cell) && + matches_filter(cfg.mt_numbers, mt_event) && + matches_filter(cfg.universe_ids, id_universe) && + matches_filter(cfg.material_ids, id_material) && + matches_filter(cfg.nuclides, nuclide) && + (cfg.deposited_energy_threshold == 0 || + cfg.deposited_energy_threshold < energy_loss); +} + +void collision_track_reserve_bank() +{ + simulation::collision_track_bank.reserve( + settings::collision_track_config.max_collisions); +} + +void collision_track_flush_bank() +{ + const auto& cfg = settings::collision_track_config; + if (simulation::ct_current_file > cfg.max_files) + return; + + bool last_batch = (simulation::current_batch == settings::n_batches); + if (!simulation::collision_track_bank.full() && !last_batch) + return; + + auto size = simulation::collision_track_bank.size(); + if (size == 0 && !last_batch) + return; + + auto collision_track_work_index = mpi::calculate_parallel_index_vector(size); + openmc::span collisiontrackbankspan( + simulation::collision_track_bank.begin(), size); + + std::string ext = cfg.mcpl_write ? "mcpl" : "h5"; + auto filename = fmt::format("{}collision_track.{}.{}", settings::path_output, + simulation::ct_current_file, ext); + + if (cfg.max_files == 1 || (simulation::ct_current_file == 1 && last_batch)) { + filename = settings::path_output + "collision_track." + ext; + } + write_message("Creating {}...", filename, 4); + + if (cfg.mcpl_write) { + write_mcpl_collision_track( + filename.c_str(), collisiontrackbankspan, collision_track_work_index); + } else { + write_h5_collision_track( + filename.c_str(), collisiontrackbankspan, collision_track_work_index); + } + + simulation::collision_track_bank.clear(); + if (!last_batch && cfg.max_files >= 1) { + collision_track_reserve_bank(); + } + ++simulation::ct_current_file; +} + +void collision_track_record(Particle& particle) +{ + int cell_index = particle.lowest_coord().cell(); + if (cell_index == C_NONE) + return; + + int cell_id = model::cells[cell_index]->id_; + const auto* nuclide_ptr = data::nuclides[particle.event_nuclide()].get(); + std::string nuclide = nuclide_ptr->name_; + int universe_id = model::universes[particle.lowest_coord().universe()]->id_; + double delta_E = particle.E_last() - particle.E(); + int material_index = particle.material(); + if (material_index == C_NONE) + return; + + int material_id = model::materials[material_index]->id_; + + if (!should_record_event(cell_id, particle.event_mt(), nuclide, universe_id, + material_id, delta_E)) + return; + + CollisionTrackSite site; + site.r = particle.r(); + site.u = particle.u(); + site.E = particle.E_last(); + site.dE = delta_E; + site.time = particle.time(); + site.wgt = particle.wgt(); + site.event_mt = particle.event_mt(); + site.delayed_group = particle.delayed_group(); + site.cell_id = cell_id; + site.nuclide_id = + 10000 * nuclide_ptr->Z_ + 10 * nuclide_ptr->A_ + nuclide_ptr->metastable_; + site.material_id = material_id; + site.universe_id = universe_id; + site.n_collision = particle.n_collision(); + site.particle = particle.type(); + site.parent_id = particle.id(); + site.progeny_id = particle.n_progeny(); + simulation::collision_track_bank.thread_safe_append(site); +} + +} // namespace openmc diff --git a/src/distribution_multi.cpp b/src/distribution_multi.cpp index b7b3efe5268..cdb33adc2ad 100644 --- a/src/distribution_multi.cpp +++ b/src/distribution_multi.cpp @@ -58,6 +58,15 @@ PolarAzimuthal::PolarAzimuthal(Direction u, UPtrDist mu, UPtrDist phi) PolarAzimuthal::PolarAzimuthal(pugi::xml_node node) : UnitSphereDistribution {node} { + // Read reference directional unit vector + if (check_for_node(node, "reference_vwu")) { + auto v_ref = get_node_array(node, "reference_vwu"); + if (v_ref.size() != 3) + fatal_error("Angular distribution reference v direction must have " + "three parameters specified."); + v_ref_ = Direction(v_ref.data()); + } + w_ref_ = u_ref_.cross(v_ref_); if (check_for_node(node, "mu")) { pugi::xml_node node_dist = node.child("mu"); mu_ = distribution_from_xml(node_dist); @@ -79,11 +88,15 @@ Direction PolarAzimuthal::sample(uint64_t* seed) const double mu = mu_->sample(seed); if (mu == 1.0) return u_ref_; + if (mu == -1.0) + return -u_ref_; // Sample azimuthal angle double phi = phi_->sample(seed); - return rotate_angle(u_ref_, mu, &phi, seed); + double f = std::sqrt(1 - mu * mu); + + return mu * u_ref_ + f * std::cos(phi) * v_ref_ + f * std::sin(phi) * w_ref_; } //============================================================================== diff --git a/src/eigenvalue.cpp b/src/eigenvalue.cpp index 2685bbe98a4..8412cbd3b47 100644 --- a/src/eigenvalue.cpp +++ b/src/eigenvalue.cpp @@ -127,30 +127,8 @@ void synchronize_bank() "No fission sites banked on MPI rank " + std::to_string(mpi::rank)); } - // Make sure all processors start at the same point for random sampling. Then - // skip ahead in the sequence using the starting index in the 'global' - // fission bank for each processor. - - int64_t id = simulation::total_gen + overall_generation(); - uint64_t seed = init_seed(id, STREAM_TRACKING); - advance_prn_seed(start, &seed); - - // Determine how many fission sites we need to sample from the source bank - // and the probability for selecting a site. - - int64_t sites_needed; - if (total < settings::n_particles) { - sites_needed = settings::n_particles % total; - } else { - sites_needed = settings::n_particles; - } - double p_sample = static_cast(sites_needed) / total; - simulation::time_bank_sample.start(); - // ========================================================================== - // SAMPLE N_PARTICLES FROM FISSION BANK AND PLACE IN TEMP_SITES - // Allocate temporary source bank -- we don't really know how many fission // sites were created, so overallocate by a factor of 3 int64_t index_temp = 0; @@ -165,33 +143,38 @@ void synchronize_bank() temp_delayed_groups, temp_lifetimes, 3 * simulation::work_per_rank); } - for (int64_t i = 0; i < simulation::fission_bank.size(); i++) { - const auto& site = simulation::fission_bank[i]; + // ========================================================================== + // SAMPLE N_PARTICLES FROM FISSION BANK AND PLACE IN TEMP_SITES - // If there are less than n_particles particles banked, automatically add - // int(n_particles/total) sites to temp_sites. For example, if you need - // 1000 and 300 were banked, this would add 3 source sites per banked site - // and the remaining 100 would be randomly sampled. - if (total < settings::n_particles) { - for (int64_t j = 1; j <= settings::n_particles / total; ++j) { - temp_sites[index_temp] = site; - if (settings::ifp_on) { - copy_ifp_data_from_fission_banks( - i, temp_delayed_groups[index_temp], temp_lifetimes[index_temp]); - } - ++index_temp; - } - } + // We use Uniform Combing method to exactly get the targeted particle size + // [https://doi.org/10.1080/00295639.2022.2091906] - // Randomly sample sites needed - if (prn(&seed) < p_sample) { - temp_sites[index_temp] = site; - if (settings::ifp_on) { - copy_ifp_data_from_fission_banks( - i, temp_delayed_groups[index_temp], temp_lifetimes[index_temp]); - } - ++index_temp; + // Make sure all processors use the same random number seed. + int64_t id = simulation::total_gen + overall_generation(); + uint64_t seed = init_seed(id, STREAM_TRACKING); + + // Comb specification + double teeth_distance = static_cast(total) / settings::n_particles; + double teeth_offset = prn(&seed) * teeth_distance; + + // First and last hitting tooth + int64_t end = start + simulation::fission_bank.size(); + int64_t tooth_start = std::ceil((start - teeth_offset) / teeth_distance); + int64_t tooth_end = std::floor((end - teeth_offset) / teeth_distance) + 1; + + // Locally comb particles in fission_bank + double tooth = tooth_start * teeth_distance + teeth_offset; + for (int64_t i = tooth_start; i < tooth_end; i++) { + int64_t idx = std::floor(tooth) - start; + temp_sites[index_temp] = simulation::fission_bank[idx]; + if (settings::ifp_on) { + copy_ifp_data_from_fission_banks( + idx, temp_delayed_groups[index_temp], temp_lifetimes[index_temp]); } + ++index_temp; + + // Next tooth + tooth += teeth_distance; } // At this point, the sampling of source sites is done and now we need to @@ -217,37 +200,6 @@ void synchronize_bank() finish = index_temp; #endif - // Now that the sampling is complete, we need to ensure that we have exactly - // n_particles source sites. The way this is done in a reproducible manner is - // to adjust only the source sites on the last processor. - - if (mpi::rank == mpi::n_procs - 1) { - if (finish > settings::n_particles) { - // If we have extra sites sampled, we will simply discard the extra - // ones on the last processor - index_temp = settings::n_particles - start; - - } else if (finish < settings::n_particles) { - // If we have too few sites, repeat sites from the very end of the - // fission bank - sites_needed = settings::n_particles - finish; - // TODO: sites_needed > simulation::fission_bank.size() or other test to - // make sure we don't need info from other proc - for (int i = 0; i < sites_needed; ++i) { - int i_bank = simulation::fission_bank.size() - sites_needed + i; - temp_sites[index_temp] = simulation::fission_bank[i_bank]; - if (settings::ifp_on) { - copy_ifp_data_from_fission_banks(i_bank, - temp_delayed_groups[index_temp], temp_lifetimes[index_temp]); - } - ++index_temp; - } - } - - // the last processor should not be sending sites to right - finish = simulation::work_index[mpi::rank + 1]; - } - simulation::time_bank_sample.stop(); simulation::time_bank_sendrecv.start(); @@ -451,6 +403,16 @@ void calculate_average_keff() t_value * std::sqrt( (simulation::k_sum[1] / n - std::pow(simulation::keff, 2)) / (n - 1)); + + // In some cases (such as an infinite medium problem), random ray + // may estimate k exactly and in an unvarying manner between iterations. + // In this case, the floating point roundoff between the division and the + // power operations may cause an extremely small negative value to occur + // inside the sqrt operation, leading to NaN. If this occurs, we check for + // it and set the std dev to zero. + if (!std::isfinite(simulation::keff_std)) { + simulation::keff_std = 0.0; + } } } } diff --git a/src/event.cpp b/src/event.cpp index aa3987504b6..f33e132d0af 100644 --- a/src/event.cpp +++ b/src/event.cpp @@ -1,4 +1,5 @@ #include "openmc/event.h" + #include "openmc/material.h" #include "openmc/simulation.h" #include "openmc/timer.h" @@ -73,17 +74,17 @@ void process_calculate_xs_events(SharedArray& queue) { simulation::time_event_calculate_xs.start(); - // TODO: If using C++17, perform a parallel sort of the queue - // by particle type, material type, and then energy, in order to - // improve cache locality and reduce thread divergence on GPU. Prior - // to C++17, std::sort is a serial only operation, which in this case - // makes it too slow to be practical for most test problems. + // TODO: If using C++17, we could perform a parallel sort of the queue by + // particle type, material type, and then energy, in order to improve cache + // locality and reduce thread divergence on GPU. However, the parallel + // algorithms typically require linking against an additional library (Intel + // TBB). Prior to C++17, std::sort is a serial only operation, which in this + // case makes it too slow to be practical for most test problems. // // std::sort(std::execution::par_unseq, queue.data(), queue.data() + // queue.size()); int64_t offset = simulation::advance_particle_queue.size(); - ; #pragma omp parallel for schedule(runtime) for (int64_t i = 0; i < queue.size(); i++) { diff --git a/src/finalize.cpp b/src/finalize.cpp index e38b0b251cb..9ee94340997 100644 --- a/src/finalize.cpp +++ b/src/finalize.cpp @@ -3,6 +3,7 @@ #include "openmc/bank.h" #include "openmc/capi.h" #include "openmc/cmfd_solver.h" +#include "openmc/collision_track.h" #include "openmc/constants.h" #include "openmc/cross_sections.h" #include "openmc/dagmc.h" @@ -76,6 +77,7 @@ int openmc_finalize() // Reset global variables settings::assume_separate = false; settings::check_overlaps = false; + settings::collision_track_config = CollisionTrackConfig {}; settings::confidence_intervals = false; settings::create_fission_neutrons = true; settings::create_delayed_neutrons = true; @@ -85,6 +87,7 @@ int openmc_finalize() settings::time_cutoff = {INFTY, INFTY, INFTY, INFTY}; settings::entropy_on = false; settings::event_based = false; + settings::free_gas_threshold = 400.0; settings::gen_per_batch = 1; settings::legendre_to_tabular = true; settings::legendre_to_tabular_points = -1; @@ -92,6 +95,7 @@ int openmc_finalize() settings::max_lost_particles = 10; settings::max_order = 0; settings::max_particles_in_flight = 100000; + settings::max_secondaries = 10000; settings::max_particle_events = 1'000'000; settings::max_history_splits = 10'000'000; settings::max_tracks = 1000; @@ -154,8 +158,8 @@ int openmc_finalize() simulation::entropy_mesh = nullptr; simulation::ufs_mesh = nullptr; - data::energy_max = {INFTY, INFTY}; - data::energy_min = {0.0, 0.0}; + data::energy_max = {INFTY, INFTY, INFTY, INFTY}; + data::energy_min = {0.0, 0.0, 0.0, 0.0}; data::temperature_min = 0.0; data::temperature_max = INFTY; model::root_universe = -1; @@ -175,6 +179,9 @@ int openmc_finalize() if (mpi::source_site != MPI_DATATYPE_NULL) { MPI_Type_free(&mpi::source_site); } + if (mpi::collision_track_site != MPI_DATATYPE_NULL) { + MPI_Type_free(&mpi::collision_track_site); + } #endif openmc_reset_random_ray(); diff --git a/src/geometry.cpp b/src/geometry.cpp index b80646d05c6..5ff15097b19 100644 --- a/src/geometry.cpp +++ b/src/geometry.cpp @@ -12,8 +12,6 @@ #include "openmc/simulation.h" #include "openmc/string_utils.h" #include "openmc/surface.h" -// #include "openmc/random_ray/decomposition_map.h" -// #include "openmc/message_passing.h" namespace openmc { @@ -174,11 +172,13 @@ bool find_cell_inner( p.cell_instance() = cell_instance_at_level(p, p.n_coord() - 1); } - // Set the material and temperature. + // Set the material, temperature and density multiplier. p.material_last() = p.material(); p.material() = c.material(p.cell_instance()); p.sqrtkT_last() = p.sqrtkT(); p.sqrtkT() = c.sqrtkT(p.cell_instance()); + p.density_mult_last() = p.density_mult(); + p.density_mult() = c.density_mult(p.cell_instance()); return true; diff --git a/src/geometry_aux.cpp b/src/geometry_aux.cpp index 51732cf8b90..8a145fb1f1e 100644 --- a/src/geometry_aux.cpp +++ b/src/geometry_aux.cpp @@ -195,6 +195,24 @@ void assign_temperatures() //============================================================================== +void finalize_cell_densities() +{ + for (auto& c : model::cells) { + // Convert to density multipliers. + if (!c->density_mult_.empty()) { + for (int32_t instance = 0; instance < c->density_mult_.size(); + ++instance) { + c->density_mult_[instance] /= + model::materials[c->material(instance)]->density_gpcc(); + } + } else { + c->density_mult_ = {1.0}; + } + } +} + +//============================================================================== + void get_temperatures( vector>& nuc_temps, vector>& thermal_temps) { @@ -362,6 +380,17 @@ void prepare_distribcell(const std::vector* user_distribcells) c.id_, c.sqrtkT_.size(), c.n_instances())); } } + + if (c.density_mult_.size() > 1) { + if (c.density_mult_.size() != c.n_instances()) { + fatal_error(fmt::format("Cell {} was specified with {} density " + "multipliers but has {} distributed " + "instances. The number of density multipliers " + "must equal one or the number " + "of instances.", + c.id_, c.density_mult_.size(), c.n_instances())); + } + } } // Search through universes for material cells and assign each one a diff --git a/src/hdf5_interface.cpp b/src/hdf5_interface.cpp index e90aa74901e..c56d485e281 100644 --- a/src/hdf5_interface.cpp +++ b/src/hdf5_interface.cpp @@ -225,8 +225,7 @@ void get_name(hid_t obj_id, std::string& name) { size_t size = 1 + H5Iget_name(obj_id, nullptr, 0); name.resize(size); - // TODO: switch to name.data() when using C++17 - H5Iget_name(obj_id, &name[0], size); + H5Iget_name(obj_id, name.data(), size); } int get_num_datasets(hid_t group_id) @@ -537,14 +536,14 @@ void read_complex( H5Tclose(complex_id); } -void read_tally_results( - hid_t group_id, hsize_t n_filter, hsize_t n_score, double* results) +void read_tally_results(hid_t group_id, hsize_t n_filter, hsize_t n_score, + hsize_t n_results, double* results) { // Create dataspace for hyperslab in memory constexpr int ndim = 3; - hsize_t dims[ndim] {n_filter, n_score, 3}; + hsize_t dims[ndim] {n_filter, n_score, n_results}; hsize_t start[ndim] {0, 0, 1}; - hsize_t count[ndim] {n_filter, n_score, 2}; + hsize_t count[ndim] {n_filter, n_score, n_results - 1}; hid_t memspace = H5Screate_simple(ndim, dims, nullptr); H5Sselect_hyperslab(memspace, H5S_SELECT_SET, start, nullptr, count, nullptr); @@ -687,15 +686,15 @@ void write_string( group_id, 0, nullptr, buffer.length(), name, buffer.c_str(), indep); } -void write_tally_results( - hid_t group_id, hsize_t n_filter, hsize_t n_score, const double* results) +void write_tally_results(hid_t group_id, hsize_t n_filter, hsize_t n_score, + hsize_t n_results, const double* results) { // Set dimensions of sum/sum_sq hyperslab to store constexpr int ndim = 3; - hsize_t count[ndim] {n_filter, n_score, 2}; + hsize_t count[ndim] {n_filter, n_score, n_results - 1}; // Set dimensions of results array - hsize_t dims[ndim] {n_filter, n_score, 3}; + hsize_t dims[ndim] {n_filter, n_score, n_results}; hsize_t start[ndim] {0, 0, 1}; hid_t memspace = H5Screate_simple(ndim, dims, nullptr); H5Sselect_hyperslab(memspace, H5S_SELECT_SET, start, nullptr, count, nullptr); diff --git a/src/ifp.cpp b/src/ifp.cpp index 1f81f26f6ea..cc4a76538b1 100644 --- a/src/ifp.cpp +++ b/src/ifp.cpp @@ -28,13 +28,13 @@ bool is_generation_time_or_both() return false; } -void ifp(const Particle& p, const SourceSite& site, int64_t idx) +void ifp(const Particle& p, int64_t idx) { if (is_beta_effective_or_both()) { const auto& delayed_groups = simulation::ifp_source_delayed_group_bank[p.current_work() - 1]; simulation::ifp_fission_delayed_group_bank[idx] = - _ifp(site.delayed_group, delayed_groups); + _ifp(p.delayed_group(), delayed_groups); } if (is_generation_time_or_both()) { const auto& lifetimes = diff --git a/src/initialize.cpp b/src/initialize.cpp index 2da78137d10..e2a5b974338 100644 --- a/src/initialize.cpp +++ b/src/initialize.cpp @@ -178,6 +178,37 @@ void initialize_mpi(MPI_Comm intracomm) MPI_DOUBLE, MPI_INT, MPI_INT, MPI_INT, MPI_INT, MPI_LONG, MPI_LONG}; MPI_Type_create_struct(11, blocks, disp, types, &mpi::source_site); MPI_Type_commit(&mpi::source_site); + + CollisionTrackSite bc; + MPI_Aint dispc[16]; + MPI_Get_address(&bc.r, &dispc[0]); // double + MPI_Get_address(&bc.u, &dispc[1]); // double + MPI_Get_address(&bc.E, &dispc[2]); // double + MPI_Get_address(&bc.dE, &dispc[3]); // double + MPI_Get_address(&bc.time, &dispc[4]); // double + MPI_Get_address(&bc.wgt, &dispc[5]); // double + MPI_Get_address(&bc.event_mt, &dispc[6]); // int + MPI_Get_address(&bc.delayed_group, &dispc[7]); // int + MPI_Get_address(&bc.cell_id, &dispc[8]); // int + MPI_Get_address(&bc.nuclide_id, &dispc[9]); // int + MPI_Get_address(&bc.material_id, &dispc[10]); // int + MPI_Get_address(&bc.universe_id, &dispc[11]); // int + MPI_Get_address(&bc.n_collision, &dispc[12]); // int + MPI_Get_address(&bc.particle, &dispc[13]); // int + MPI_Get_address(&bc.parent_id, &dispc[14]); // int64_t + MPI_Get_address(&bc.progeny_id, &dispc[15]); // int64_t + for (int i = 15; i >= 0; --i) { + dispc[i] -= dispc[0]; + } + + int blocksc[] = {3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; + MPI_Datatype typesc[] = {MPI_DOUBLE, MPI_DOUBLE, MPI_DOUBLE, MPI_DOUBLE, + MPI_DOUBLE, MPI_DOUBLE, MPI_INT, MPI_INT, MPI_INT, MPI_INT, MPI_INT, + MPI_INT, MPI_INT, MPI_INT, MPI_INT64_T, MPI_INT64_T}; + + MPI_Type_create_struct( + 16, blocksc, dispc, typesc, &mpi::collision_track_site); + MPI_Type_commit(&mpi::collision_track_site); } #endif // OPENMC_MPI @@ -401,6 +432,10 @@ bool read_model_xml() // Finalize cross sections having assigned temperatures finalize_cross_sections(); + // Compute cell density multipliers now that material densities + // have been finalized (from geometry_aux.h) + finalize_cell_densities(); + if (check_for_node(root, "tallies")) read_tallies_xml(root.child("tallies")); @@ -441,6 +476,11 @@ void read_separate_xml_files() // Finalize cross sections having assigned temperatures finalize_cross_sections(); + + // Compute cell density multipliers now that material densities + // have been finalized (from geometry_aux.h) + finalize_cell_densities(); + read_tallies_xml(); // Initialize distribcell_filters diff --git a/src/material.cpp b/src/material.cpp index 32384ddf12b..54caa38409a 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -890,7 +890,7 @@ void Material::calculate_neutron_xs(Particle& p) const // ADD TO MACROSCOPIC CROSS SECTION // Copy atom density of nuclide in material - double atom_density = atom_density_(i); + double atom_density = this->atom_density(i, p.density_mult()); // Add contributions to cross sections p.macro_xs().total += atom_density * micro.total; @@ -925,7 +925,7 @@ void Material::calculate_photon_xs(Particle& p) const // ADD TO MACROSCOPIC CROSS SECTION // Copy atom density of nuclide in material - double atom_density = atom_density_(i); + double atom_density = this->atom_density(i, p.density_mult()); // Add contributions to material macroscopic cross sections p.macro_xs().total += atom_density * micro.total; diff --git a/src/mcpl_interface.cpp b/src/mcpl_interface.cpp index b8e78071003..1294073019e 100644 --- a/src/mcpl_interface.cpp +++ b/src/mcpl_interface.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -61,6 +62,8 @@ using mcpl_hdr_nparticles_fpt = uint64_t (*)(mcpl_file_t* file_handle); using mcpl_read_fpt = const mcpl_particle_repr_t* (*)(mcpl_file_t* file_handle); using mcpl_close_file_fpt = void (*)(mcpl_file_t* file_handle); +using mcpl_hdr_add_data_fpt = void (*)(mcpl_outfile_t* file_handle, + const char* key, int32_t ldata, const char* data); using mcpl_create_outfile_fpt = mcpl_outfile_t* (*)(const char* filename); using mcpl_hdr_set_srcname_fpt = void (*)( mcpl_outfile_t* outfile_handle, const char* srcname); @@ -110,6 +113,7 @@ struct McplApi { mcpl_close_file_fpt close_file; mcpl_create_outfile_fpt create_outfile; mcpl_hdr_set_srcname_fpt hdr_set_srcname; + mcpl_hdr_add_data_fpt hdr_add_data; mcpl_add_particle_fpt add_particle; mcpl_close_outfile_fpt close_outfile; mcpl_hdr_add_stat_sum_fpt hdr_add_stat_sum; @@ -146,6 +150,8 @@ struct McplApi { load_symbol_platform("mcpl_create_outfile")); hdr_set_srcname = reinterpret_cast( load_symbol_platform("mcpl_hdr_set_srcname")); + hdr_add_data = reinterpret_cast( + load_symbol_platform("mcpl_hdr_add_data")); add_particle = reinterpret_cast( load_symbol_platform("mcpl_add_particle")); close_outfile = reinterpret_cast( @@ -545,4 +551,153 @@ void write_mcpl_source_point(const char* filename, span source_bank, } } +// Collision track feature with MCPL +void write_mcpl_collision_track_internal(mcpl_outfile_t* file_id, + span collision_track_bank, + const vector& bank_index_all_ranks) +{ + if (mpi::master) { + if (!file_id) { + fatal_error("MCPL: Internal error - master rank called " + "write_mcpl_source_bank_internal with null file_id."); + } + vector receive_buffer; + vector all_sites; + all_sites.reserve(static_cast(bank_index_all_ranks.back())); + vector all_blobs; + all_blobs.reserve(static_cast(bank_index_all_ranks.back())); + + for (int rank_idx = 0; rank_idx < mpi::n_procs; ++rank_idx) { + size_t num_sites_on_rank = static_cast( + bank_index_all_ranks[rank_idx + 1] - bank_index_all_ranks[rank_idx]); + if (num_sites_on_rank == 0) + continue; + + span sites_to_process; +#ifdef OPENMC_MPI + if (rank_idx == mpi::rank) { + sites_to_process = openmc::span( + collision_track_bank.data(), num_sites_on_rank); + } else { + receive_buffer.resize(num_sites_on_rank); + MPI_Recv(receive_buffer.data(), num_sites_on_rank, + mpi::collision_track_site, rank_idx, rank_idx, mpi::intracomm, + MPI_STATUS_IGNORE); + sites_to_process = openmc::span( + receive_buffer.data(), num_sites_on_rank); + } +#else + sites_to_process = openmc::span( + collision_track_bank.data(), num_sites_on_rank); +#endif + + for (const auto& site : sites_to_process) { + std::ostringstream custom_data_stream; + custom_data_stream << " dE : " << site.dE + << " ; event_mt : " << site.event_mt + << " ; delayed_group : " << site.delayed_group + << " ; cell_id : " << site.cell_id + << " ; nuclide_id : " << site.nuclide_id + << " ; material_id : " << site.material_id + << " ; universe_id : " << site.universe_id + << " ; n_collision : " << site.n_collision + << " ; parent_id : " << site.parent_id + << " ; progeny_id : " << site.progeny_id; + + all_blobs.push_back(custom_data_stream.str()); + all_sites.push_back(site); + } + } + + for (size_t idx = 0; idx < all_blobs.size(); ++idx) { + const auto& blob = all_blobs[idx]; + std::string key = "blob_" + std::to_string(idx); + g_mcpl_api->hdr_add_data(file_id, key.c_str(), blob.size(), blob.c_str()); + } + + for (const auto& site : all_sites) { + mcpl_particle_repr_t p_repr {}; + p_repr.position[0] = site.r.x; + p_repr.position[1] = site.r.y; + p_repr.position[2] = site.r.z; + p_repr.direction[0] = site.u.x; + p_repr.direction[1] = site.u.y; + p_repr.direction[2] = site.u.z; + p_repr.ekin = site.E * 1e-6; + p_repr.time = site.time * 1e3; + p_repr.weight = site.wgt; + switch (site.particle) { + case ParticleType::neutron: + p_repr.pdgcode = 2112; + break; + case ParticleType::photon: + p_repr.pdgcode = 22; + break; + case ParticleType::electron: + p_repr.pdgcode = 11; + break; + case ParticleType::positron: + p_repr.pdgcode = -11; + break; + default: + continue; + } + g_mcpl_api->add_particle(file_id, &p_repr); + } + } else { +#ifdef OPENMC_MPI + if (!collision_track_bank.empty()) { + MPI_Send(collision_track_bank.data(), collision_track_bank.size(), + mpi::collision_track_site, 0, mpi::rank, mpi::intracomm); + } +#endif + } +} + +void write_mcpl_collision_track(const char* filename, + span collision_track_bank, + const vector& bank_index) +{ + ensure_mcpl_ready_or_fatal(); + + std::string filename_(filename); + const auto extension = get_file_extension(filename_); + if (extension.empty()) { + filename_.append(".mcpl"); + } else if (extension != "mcpl") { + warning(fmt::format("Specified filename '{}' has an extension '.{}', but " + "an MCPL file (.mcpl) will be written using this name.", + filename, extension)); + } + + mcpl_outfile_t* file_id = nullptr; + + if (mpi::master) { + file_id = g_mcpl_api->create_outfile(filename_.c_str()); + if (!file_id) { + fatal_error(fmt::format( + "MCPL: Failed to create output file '{}'. Check permissions and path.", + filename_)); + } + std::string src_line; + if (VERSION_DEV) { + src_line = fmt::format("OpenMC {}.{}.{}-dev{}", VERSION_MAJOR, + VERSION_MINOR, VERSION_RELEASE, VERSION_COMMIT_COUNT); + } else { + src_line = fmt::format( + "OpenMC {}.{}.{}", VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE); + } + + g_mcpl_api->hdr_set_srcname(file_id, src_line.c_str()); + } + write_mcpl_collision_track_internal( + file_id, collision_track_bank, bank_index); + + if (mpi::master) { + if (file_id) { + g_mcpl_api->close_outfile(file_id); + } + } +} + } // namespace openmc diff --git a/src/mesh.cpp b/src/mesh.cpp index 3e4ff1a3eca..610d057cf08 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -230,6 +230,42 @@ void MaterialVolumes::add_volume_unsafe( // Mesh implementation //============================================================================== +template +const std::unique_ptr& Mesh::create( + T dataset, const std::string& mesh_type, const std::string& mesh_library) +{ + // Determine mesh type. Add to model vector and map + if (mesh_type == RegularMesh::mesh_type) { + model::meshes.push_back(make_unique(dataset)); + } else if (mesh_type == RectilinearMesh::mesh_type) { + model::meshes.push_back(make_unique(dataset)); + } else if (mesh_type == CylindricalMesh::mesh_type) { + model::meshes.push_back(make_unique(dataset)); + } else if (mesh_type == SphericalMesh::mesh_type) { + model::meshes.push_back(make_unique(dataset)); +#ifdef OPENMC_DAGMC_ENABLED + } else if (mesh_type == UnstructuredMesh::mesh_type && + mesh_library == MOABMesh::mesh_lib_type) { + model::meshes.push_back(make_unique(dataset)); +#endif +#ifdef OPENMC_LIBMESH_ENABLED + } else if (mesh_type == UnstructuredMesh::mesh_type && + mesh_library == LibMesh::mesh_lib_type) { + model::meshes.push_back(make_unique(dataset)); +#endif + } else if (mesh_type == UnstructuredMesh::mesh_type) { + fatal_error("Unstructured mesh support is not enabled or the mesh " + "library is invalid."); + } else { + fatal_error(fmt::format("Invalid mesh type: {}", mesh_type)); + } + + // Map ID to position in vector + model::mesh_map[model::meshes.back()->id_] = model::meshes.size() - 1; + + return model::meshes.back(); +} + Mesh::Mesh(pugi::xml_node node) { // Read mesh id @@ -238,6 +274,17 @@ Mesh::Mesh(pugi::xml_node node) name_ = get_node_value(node, "name"); } +Mesh::Mesh(hid_t group) +{ + // Read mesh ID + read_attribute(group, "id", id_); + + // Read mesh name + if (object_exists(group, "name")) { + read_dataset(group, "name", name_); + } +} + void Mesh::set_id(int32_t id) { assert(id >= 0 || id == C_NONE); @@ -265,7 +312,13 @@ void Mesh::set_id(int32_t id) // Update ID and entry in the mesh map id_ = id; - model::mesh_map[id] = model::meshes.size() - 1; + + // find the index of this mesh in the model::meshes vector + // (search in reverse because this mesh was likely just added to the vector) + auto it = std::find_if(model::meshes.rbegin(), model::meshes.rend(), + [this](const std::unique_ptr& mesh) { return mesh.get() == this; }); + + model::mesh_map[id] = std::distance(model::meshes.begin(), it.base()) - 1; } vector Mesh::volumes() const @@ -590,6 +643,8 @@ Position StructuredMesh::sample_element( UnstructuredMesh::UnstructuredMesh(pugi::xml_node node) : Mesh(node) { + n_dimension_ = 3; + // check the mesh type if (check_for_node(node, "type")) { auto temp = get_node_value(node, "type", true, true); @@ -625,6 +680,46 @@ UnstructuredMesh::UnstructuredMesh(pugi::xml_node node) : Mesh(node) } } +UnstructuredMesh::UnstructuredMesh(hid_t group) : Mesh(group) +{ + n_dimension_ = 3; + + // check the mesh type + if (object_exists(group, "type")) { + std::string temp; + read_dataset(group, "type", temp); + if (temp != mesh_type) { + fatal_error(fmt::format("Invalid mesh type: {}", temp)); + } + } + + // check if a length unit multiplier was specified + if (object_exists(group, "length_multiplier")) { + read_dataset(group, "length_multiplier", length_multiplier_); + } + + // get the filename of the unstructured mesh to load + if (object_exists(group, "filename")) { + read_dataset(group, "filename", filename_); + if (!file_exists(filename_)) { + fatal_error("Mesh file '" + filename_ + "' does not exist!"); + } + } else { + fatal_error(fmt::format( + "No filename supplied for unstructured mesh with ID: {}", id_)); + } + + if (attribute_exists(group, "options")) { + read_attribute(group, "options", options_); + } + + // check if mesh tally data should be written with + // statepoint files + if (attribute_exists(group, "output")) { + read_attribute(group, "output", output_); + } +} + void UnstructuredMesh::determine_bounds() { double xmin = INFTY; @@ -1084,6 +1179,72 @@ void StructuredMesh::surface_bins_crossed( // RegularMesh implementation //============================================================================== +int RegularMesh::set_grid() +{ + auto shape = xt::adapt(shape_, {n_dimension_}); + + // Check that dimensions are all greater than zero + if (xt::any(shape <= 0)) { + set_errmsg("All entries for a regular mesh dimensions " + "must be positive."); + return OPENMC_E_INVALID_ARGUMENT; + } + + // Make sure lower_left and dimension match + if (lower_left_.size() != n_dimension_) { + set_errmsg("Number of entries in lower_left must be the same " + "as the regular mesh dimensions."); + return OPENMC_E_INVALID_ARGUMENT; + } + if (width_.size() > 0) { + + // Check to ensure width has same dimensions + if (width_.size() != n_dimension_) { + set_errmsg("Number of entries on width must be the same as " + "the regular mesh dimensions."); + return OPENMC_E_INVALID_ARGUMENT; + } + + // Check for negative widths + if (xt::any(width_ < 0.0)) { + set_errmsg("Cannot have a negative width on a regular mesh."); + return OPENMC_E_INVALID_ARGUMENT; + } + + // Set width and upper right coordinate + upper_right_ = xt::eval(lower_left_ + shape * width_); + + } else if (upper_right_.size() > 0) { + + // Check to ensure upper_right_ has same dimensions + if (upper_right_.size() != n_dimension_) { + set_errmsg("Number of entries on upper_right must be the " + "same as the regular mesh dimensions."); + return OPENMC_E_INVALID_ARGUMENT; + } + + // Check that upper-right is above lower-left + if (xt::any(upper_right_ < lower_left_)) { + set_errmsg( + "The upper_right coordinates of a regular mesh must be greater than " + "the lower_left coordinates."); + return OPENMC_E_INVALID_ARGUMENT; + } + + // Set width + width_ = xt::eval((upper_right_ - lower_left_) / shape); + } + + // Set material volumes + volume_frac_ = 1.0 / xt::prod(shape)(); + + element_volume_ = 1.0; + for (int i = 0; i < n_dimension_; i++) { + element_volume_ *= width_[i]; + } + return 0; +} + RegularMesh::RegularMesh(pugi::xml_node node) : StructuredMesh {node} { // Determine number of dimensions for mesh @@ -1098,12 +1259,6 @@ RegularMesh::RegularMesh(pugi::xml_node node) : StructuredMesh {node} } std::copy(shape.begin(), shape.end(), shape_.begin()); - // Check that dimensions are all greater than zero - if (xt::any(shape <= 0)) { - fatal_error("All entries on the element for a tally " - "mesh must be positive."); - } - // Check for lower-left coordinates if (check_for_node(node, "lower_left")) { // Read mesh lower-left corner location @@ -1112,12 +1267,6 @@ RegularMesh::RegularMesh(pugi::xml_node node) : StructuredMesh {node} fatal_error("Must specify on a mesh."); } - // Make sure lower_left and dimension match - if (shape.size() != lower_left_.size()) { - fatal_error("Number of entries on must be the same " - "as the number of entries on ."); - } - if (check_for_node(node, "width")) { // Make sure one of upper-right or width were specified if (check_for_node(node, "upper_right")) { @@ -1126,49 +1275,52 @@ RegularMesh::RegularMesh(pugi::xml_node node) : StructuredMesh {node} width_ = get_node_xarray(node, "width"); - // Check to ensure width has same dimensions - auto n = width_.size(); - if (n != lower_left_.size()) { - fatal_error("Number of entries on must be the same as " - "the number of entries on ."); - } + } else if (check_for_node(node, "upper_right")) { - // Check for negative widths - if (xt::any(width_ < 0.0)) { - fatal_error("Cannot have a negative on a tally mesh."); - } + upper_right_ = get_node_xarray(node, "upper_right"); - // Set width and upper right coordinate - upper_right_ = xt::eval(lower_left_ + shape * width_); + } else { + fatal_error("Must specify either or on a mesh."); + } - } else if (check_for_node(node, "upper_right")) { - upper_right_ = get_node_xarray(node, "upper_right"); + if (int err = set_grid()) { + fatal_error(openmc_err_msg); + } +} - // Check to ensure width has same dimensions - auto n = upper_right_.size(); - if (n != lower_left_.size()) { - fatal_error("Number of entries on must be the " - "same as the number of entries on ."); - } +RegularMesh::RegularMesh(hid_t group) : StructuredMesh {group} +{ + // Determine number of dimensions for mesh + if (!object_exists(group, "dimension")) { + fatal_error("Must specify on a regular mesh."); + } - // Check that upper-right is above lower-left - if (xt::any(upper_right_ < lower_left_)) { - fatal_error("The coordinates must be greater than " - "the coordinates on a tally mesh."); - } + xt::xtensor shape; + read_dataset(group, "dimension", shape); + int n = n_dimension_ = shape.size(); + if (n != 1 && n != 2 && n != 3) { + fatal_error("Mesh must be one, two, or three dimensions."); + } + std::copy(shape.begin(), shape.end(), shape_.begin()); - // Set width - width_ = xt::eval((upper_right_ - lower_left_) / shape); + // Check for lower-left coordinates + if (object_exists(group, "lower_left")) { + // Read mesh lower-left corner location + read_dataset(group, "lower_left", lower_left_); } else { - fatal_error("Must specify either or on a mesh."); + fatal_error("Must specify lower_left dataset on a mesh."); } - // Set material volumes - volume_frac_ = 1.0 / xt::prod(shape)(); + if (object_exists(group, "upper_right")) { - element_volume_ = 1.0; - for (int i = 0; i < n_dimension_; i++) { - element_volume_ *= width_[i]; + read_dataset(group, "upper_right", upper_right_); + + } else { + fatal_error("Must specify either upper_right dataset on a mesh."); + } + + if (int err = set_grid()) { + fatal_error(openmc_err_msg); } } @@ -1341,6 +1493,19 @@ RectilinearMesh::RectilinearMesh(pugi::xml_node node) : StructuredMesh {node} } } +RectilinearMesh::RectilinearMesh(hid_t group) : StructuredMesh {group} +{ + n_dimension_ = 3; + + read_dataset(group, "x_grid", grid_[0]); + read_dataset(group, "y_grid", grid_[1]); + read_dataset(group, "z_grid", grid_[2]); + + if (int err = set_grid()) { + fatal_error(openmc_err_msg); + } +} + const std::string RectilinearMesh::mesh_type = "rectilinear"; std::string RectilinearMesh::get_mesh_type() const @@ -1476,6 +1641,19 @@ CylindricalMesh::CylindricalMesh(pugi::xml_node node) } } +CylindricalMesh::CylindricalMesh(hid_t group) : PeriodicStructuredMesh {group} +{ + n_dimension_ = 3; + read_dataset(group, "r_grid", grid_[0]); + read_dataset(group, "phi_grid", grid_[1]); + read_dataset(group, "z_grid", grid_[2]); + read_dataset(group, "origin", origin_); + + if (int err = set_grid()) { + fatal_error(openmc_err_msg); + } +} + const std::string CylindricalMesh::mesh_type = "cylindrical"; std::string CylindricalMesh::get_mesh_type() const @@ -1754,6 +1932,20 @@ SphericalMesh::SphericalMesh(pugi::xml_node node) } } +SphericalMesh::SphericalMesh(hid_t group) : PeriodicStructuredMesh {group} +{ + n_dimension_ = 3; + + read_dataset(group, "r_grid", grid_[0]); + read_dataset(group, "theta_grid", grid_[1]); + read_dataset(group, "phi_grid", grid_[2]); + read_dataset(group, "origin", origin_); + + if (int err = set_grid()) { + fatal_error(openmc_err_msg); + } +} + const std::string SphericalMesh::mesh_type = "spherical"; std::string SphericalMesh::get_mesh_type() const @@ -2518,8 +2710,15 @@ MOABMesh::MOABMesh(pugi::xml_node node) : UnstructuredMesh(node) initialize(); } +MOABMesh::MOABMesh(hid_t group) : UnstructuredMesh(group) +{ + initialize(); +} + MOABMesh::MOABMesh(const std::string& filename, double length_multiplier) + : UnstructuredMesh() { + n_dimension_ = 3; filename_ = filename; set_length_multiplier(length_multiplier); initialize(); @@ -3215,7 +3414,16 @@ void MOABMesh::write(const std::string& base_filename) const const std::string LibMesh::mesh_lib_type = "libmesh"; -LibMesh::LibMesh(pugi::xml_node node) : UnstructuredMesh(node), adaptive_(false) +LibMesh::LibMesh(pugi::xml_node node) : UnstructuredMesh(node) +{ + // filename_ and length_multiplier_ will already be set by the + // UnstructuredMesh constructor + set_mesh_pointer_from_filename(filename_); + set_length_multiplier(length_multiplier_); + initialize(); +} + +LibMesh::LibMesh(hid_t group) : UnstructuredMesh(group) { // filename_ and length_multiplier_ will already be set by the // UnstructuredMesh constructor @@ -3226,7 +3434,6 @@ LibMesh::LibMesh(pugi::xml_node node) : UnstructuredMesh(node), adaptive_(false) // create the mesh from a pointer to a libMesh Mesh LibMesh::LibMesh(libMesh::MeshBase& input_mesh, double length_multiplier) - : adaptive_(input_mesh.n_active_elem() != input_mesh.n_elem()) { if (!dynamic_cast(&input_mesh)) { fatal_error("At present LibMesh tallies require a replicated mesh. Please " @@ -3240,8 +3447,8 @@ LibMesh::LibMesh(libMesh::MeshBase& input_mesh, double length_multiplier) // create the mesh from an input file LibMesh::LibMesh(const std::string& filename, double length_multiplier) - : adaptive_(false) { + n_dimension_ = 3; set_mesh_pointer_from_filename(filename); set_length_multiplier(length_multiplier); initialize(); @@ -3302,21 +3509,6 @@ void LibMesh::initialize() auto first_elem = *m_->elements_begin(); first_element_id_ = first_elem->id(); - // if the mesh is adaptive elements aren't guaranteed by libMesh to be - // contiguous in ID space, so we need to map from bin indices (defined over - // active elements) to global dof ids - if (adaptive_) { - bin_to_elem_map_.reserve(m_->n_active_elem()); - elem_to_bin_map_.resize(m_->n_elem(), -1); - for (auto it = m_->active_elements_begin(); it != m_->active_elements_end(); - it++) { - auto elem = *it; - - bin_to_elem_map_.push_back(elem->id()); - elem_to_bin_map_[elem->id()] = bin_to_elem_map_.size() - 1; - } - } - // bounding box for the mesh for quick rejection checks bbox_ = libMesh::MeshTools::create_bounding_box(*m_); libMesh::Point ll = bbox_.min(); @@ -3374,7 +3566,7 @@ std::string LibMesh::library() const int LibMesh::n_bins() const { - return m_->n_active_elem(); + return m_->n_elem(); } int LibMesh::n_surface_bins() const @@ -3397,14 +3589,6 @@ int LibMesh::n_surface_bins() const void LibMesh::add_score(const std::string& var_name) { - if (adaptive_) { - warning(fmt::format( - "Exodus output cannot be provided as unstructured mesh {} is adaptive.", - this->id_)); - - return; - } - if (!equation_systems_) { build_eqn_sys(); } @@ -3440,14 +3624,6 @@ void LibMesh::remove_scores() void LibMesh::set_score_data(const std::string& var_name, const vector& values, const vector& std_dev) { - if (adaptive_) { - warning(fmt::format( - "Exodus output cannot be provided as unstructured mesh {} is adaptive.", - this->id_)); - - return; - } - if (!equation_systems_) { build_eqn_sys(); } @@ -3491,14 +3667,6 @@ void LibMesh::set_score_data(const std::string& var_name, void LibMesh::write(const std::string& filename) const { - if (adaptive_) { - warning(fmt::format( - "Exodus output cannot be provided as unstructured mesh {} is adaptive.", - this->id_)); - - return; - } - write_message(fmt::format( "Writing file: {}.e for unstructured mesh {}", filename, this->id_)); libMesh::ExodusII_IO exo(*m_); @@ -3532,8 +3700,7 @@ int LibMesh::get_bin(Position r) const int LibMesh::get_bin_from_element(const libMesh::Elem* elem) const { - int bin = - adaptive_ ? elem_to_bin_map_[elem->id()] : elem->id() - first_element_id_; + int bin = elem->id() - first_element_id_; if (bin >= n_bins() || bin < 0) { fatal_error(fmt::format("Invalid bin: {}", bin)); } @@ -3548,7 +3715,7 @@ std::pair, vector> LibMesh::plot( const libMesh::Elem& LibMesh::get_element_from_bin(int bin) const { - return adaptive_ ? m_->elem_ref(bin_to_elem_map_.at(bin)) : m_->elem_ref(bin); + return m_->elem_ref(bin); } double LibMesh::volume(int bin) const @@ -3556,6 +3723,65 @@ double LibMesh::volume(int bin) const return this->get_element_from_bin(bin).volume(); } +AdaptiveLibMesh::AdaptiveLibMesh( + libMesh::MeshBase& input_mesh, double length_multiplier) + : LibMesh(input_mesh, length_multiplier), num_active_(m_->n_active_elem()) +{ + // if the mesh is adaptive elements aren't guaranteed by libMesh to be + // contiguous in ID space, so we need to map from bin indices (defined over + // active elements) to global dof ids + bin_to_elem_map_.reserve(num_active_); + elem_to_bin_map_.resize(m_->n_elem(), -1); + for (auto it = m_->active_elements_begin(); it != m_->active_elements_end(); + it++) { + auto elem = *it; + + bin_to_elem_map_.push_back(elem->id()); + elem_to_bin_map_[elem->id()] = bin_to_elem_map_.size() - 1; + } +} + +int AdaptiveLibMesh::n_bins() const +{ + return num_active_; +} + +void AdaptiveLibMesh::add_score(const std::string& var_name) +{ + warning(fmt::format( + "Exodus output cannot be provided as unstructured mesh {} is adaptive.", + this->id_)); +} + +void AdaptiveLibMesh::set_score_data(const std::string& var_name, + const vector& values, const vector& std_dev) +{ + warning(fmt::format( + "Exodus output cannot be provided as unstructured mesh {} is adaptive.", + this->id_)); +} + +void AdaptiveLibMesh::write(const std::string& filename) const +{ + warning(fmt::format( + "Exodus output cannot be provided as unstructured mesh {} is adaptive.", + this->id_)); +} + +int AdaptiveLibMesh::get_bin_from_element(const libMesh::Elem* elem) const +{ + int bin = elem_to_bin_map_[elem->id()]; + if (bin >= n_bins() || bin < 0) { + fatal_error(fmt::format("Invalid bin: {}", bin)); + } + return bin; +} + +const libMesh::Elem& AdaptiveLibMesh::get_element_from_bin(int bin) const +{ + return m_->elem_ref(bin_to_elem_map_.at(bin)); +} + #endif // OPENMC_LIBMESH_ENABLED //============================================================================== @@ -3596,34 +3822,51 @@ void read_meshes(pugi::xml_node root) mesh_lib = get_node_value(node, "library", true, true); } - // Read mesh and add to vector - if (mesh_type == RegularMesh::mesh_type) { - model::meshes.push_back(make_unique(node)); - } else if (mesh_type == RectilinearMesh::mesh_type) { - model::meshes.push_back(make_unique(node)); - } else if (mesh_type == CylindricalMesh::mesh_type) { - model::meshes.push_back(make_unique(node)); - } else if (mesh_type == SphericalMesh::mesh_type) { - model::meshes.push_back(make_unique(node)); -#ifdef OPENMC_DAGMC_ENABLED - } else if (mesh_type == UnstructuredMesh::mesh_type && - mesh_lib == MOABMesh::mesh_lib_type) { - model::meshes.push_back(make_unique(node)); -#endif -#ifdef OPENMC_LIBMESH_ENABLED - } else if (mesh_type == UnstructuredMesh::mesh_type && - mesh_lib == LibMesh::mesh_lib_type) { - model::meshes.push_back(make_unique(node)); -#endif - } else if (mesh_type == UnstructuredMesh::mesh_type) { - fatal_error("Unstructured mesh support is not enabled or the mesh " - "library is invalid."); + Mesh::create(node, mesh_type, mesh_lib); + } +} + +void read_meshes(hid_t group) +{ + std::unordered_set mesh_ids; + + std::vector ids; + read_attribute(group, "ids", ids); + + for (auto id : ids) { + + // Check to make sure multiple meshes in the same file don't share IDs + if (contains(mesh_ids, id)) { + fatal_error(fmt::format("Two or more meshes use the same unique ID " + "'{}' in the same HDF5 input file", + id)); + } + mesh_ids.insert(id); + + // If we've already read a mesh with the same ID in a *different* file, + // assume it is the same here + if (model::mesh_map.find(id) != model::mesh_map.end()) { + warning(fmt::format("Mesh with ID={} appears in multiple files.", id)); + continue; + } + + std::string name = fmt::format("mesh {}", id); + hid_t mesh_group = open_group(group, name.c_str()); + + std::string mesh_type; + if (object_exists(mesh_group, "type")) { + read_dataset(mesh_group, "type", mesh_type); } else { - fatal_error("Invalid mesh type: " + mesh_type); + mesh_type = "regular"; + } + + // determine the mesh library to use + std::string mesh_lib; + if (object_exists(mesh_group, "library")) { + read_dataset(mesh_group, "library", mesh_lib); } - // Map ID to position in vector - model::mesh_map[model::meshes.back()->id_] = model::meshes.size() - 1; + Mesh::create(mesh_group, mesh_type, mesh_lib); } } diff --git a/src/message_passing.cpp b/src/message_passing.cpp index 374c1aa7257..a160f6d73c0 100644 --- a/src/message_passing.cpp +++ b/src/message_passing.cpp @@ -10,6 +10,7 @@ bool master {true}; #ifdef OPENMC_MPI MPI_Comm intracomm {MPI_COMM_NULL}; MPI_Datatype source_site {MPI_DATATYPE_NULL}; +MPI_Datatype collision_track_site {MPI_DATATYPE_NULL}; #endif extern "C" bool openmc_master() diff --git a/src/mgxs.cpp b/src/mgxs.cpp index a88d2c196b6..a2c479f2156 100644 --- a/src/mgxs.cpp +++ b/src/mgxs.cpp @@ -617,10 +617,12 @@ void Mgxs::calculate_xs(Particle& p) } int temperature = p.mg_xs_cache().t; int angle = p.mg_xs_cache().a; - p.macro_xs().total = xs[temperature].total(angle, p.g()); - p.macro_xs().absorption = xs[temperature].absorption(angle, p.g()); + p.macro_xs().total = xs[temperature].total(angle, p.g()) * p.density_mult(); + p.macro_xs().absorption = + xs[temperature].absorption(angle, p.g()) * p.density_mult(); p.macro_xs().nu_fission = - fissionable ? xs[temperature].nu_fission(angle, p.g()) : 0.; + fissionable ? xs[temperature].nu_fission(angle, p.g()) * p.density_mult() + : 0.; } //============================================================================== diff --git a/src/nuclide.cpp b/src/nuclide.cpp index 7cb84640d62..5ae6e30ee24 100644 --- a/src/nuclide.cpp +++ b/src/nuclide.cpp @@ -31,8 +31,8 @@ namespace openmc { //============================================================================== namespace data { -array energy_min {0.0, 0.0}; -array energy_max {INFTY, INFTY}; +array energy_min {0.0, 0.0, 0.0, 0.0}; +array energy_max {INFTY, INFTY, INFTY, INFTY}; double temperature_min {INFTY}; double temperature_max {0.0}; std::unordered_map nuclide_map; diff --git a/src/particle.cpp b/src/particle.cpp index fb41d82e950..2d70d715e22 100644 --- a/src/particle.cpp +++ b/src/particle.cpp @@ -8,6 +8,7 @@ #include "openmc/bank.h" #include "openmc/capi.h" #include "openmc/cell.h" +#include "openmc/collision_track.h" #include "openmc/constants.h" #include "openmc/dagmc.h" #include "openmc/error.h" @@ -121,6 +122,9 @@ void Particle::from_source(const SourceSite* src) fission() = false; zero_flux_derivs(); lifetime() = 0.0; +#ifdef OPENMC_DAGMC_ENABLED + history().reset(); +#endif // Copy attributes from source bank site type() = src->particle; @@ -144,6 +148,7 @@ void Particle::from_source(const SourceSite* src) time() = src->time; time_last() = src->time; parent_nuclide() = src->parent_nuclide; + delayed_group() = src->delayed_group; // Convert signed surface ID to signed index if (src->surf_id != SURFACE_NONE) { @@ -200,7 +205,8 @@ void Particle::event_calculate_xs() // Calculate microscopic and macroscopic cross sections if (material() != MATERIAL_VOID) { if (settings::run_CE) { - if (material() != material_last() || sqrtkT() != sqrtkT_last()) { + if (material() != material_last() || sqrtkT() != sqrtkT_last() || + density_mult() != density_mult_last()) { // If the material is the same as the last material and the // temperature hasn't changed, we don't need to lookup cross // sections again. @@ -230,7 +236,7 @@ void Particle::event_advance() // Sample a distance to collision if (type() == ParticleType::electron || type() == ParticleType::positron) { - collision_distance() = 0.0; + collision_distance() = material() == MATERIAL_VOID ? INFINITY : 0.0; } else if (macro_xs().total == 0.0) { collision_distance() = INFINITY; } else { @@ -252,6 +258,11 @@ void Particle::event_advance() this->time() += dt; this->lifetime() += dt; + // Score timed track-length tallies + if (!model::active_timed_tracklength_tallies.empty()) { + score_timed_tracklength_tally(*this, distance); + } + // Score track-length tallies if (!model::active_tracklength_tallies.empty()) { score_tracklength_tally(*this, distance); @@ -341,6 +352,11 @@ void Particle::event_collide() collision_mg(*this); } + // Collision track feature to recording particle interaction + if (settings::collision_track) { + collision_track_record(*this); + } + // Score collision estimator tallies -- this is done after a collision // has occurred rather than before because we need information on the // outgoing energy for any tallies with an outgoing energy filter @@ -544,7 +560,8 @@ void Particle::cross_surface(const Surface& surf) #endif // Handle any applicable boundary conditions. - if (surf.bc_ && settings::run_mode != RunMode::PLOTTING) { + if (surf.bc_ && settings::run_mode != RunMode::PLOTTING && + settings::run_mode != RunMode::VOLUME) { surf.bc_->handle_particle(*this, surf); return; } @@ -558,9 +575,10 @@ void Particle::cross_surface(const Surface& surf) int32_t i_cell = next_cell(surface_index(), cell_last(n_coord() - 1), lowest_coord().universe()) - 1; - // save material and temp + // save material, temperature, and density multiplier material_last() = material(); sqrtkT_last() = sqrtkT(); + density_mult_last() = density_mult(); // set new cell value lowest_coord().cell() = i_cell; auto& cell = model::cells[i_cell]; @@ -571,6 +589,7 @@ void Particle::cross_surface(const Surface& surf) material() = cell->material(cell_instance()); sqrtkT() = cell->sqrtkT(cell_instance()); + density_mult() = cell->density_mult(cell_instance()); return; } #endif @@ -845,10 +864,12 @@ void Particle::update_neutron_xs( // If the cache doesn't match, recalculate micro xs if (this->E() != micro.last_E || this->sqrtkT() != micro.last_sqrtkT || - i_sab != micro.index_sab || sab_frac != micro.sab_frac) { + i_sab != micro.index_sab || sab_frac != micro.sab_frac || + ncrystal_xs != micro.ncrystal_xs) { data::nuclides[i_nuclide]->calculate_xs(i_sab, i_grid, sab_frac, *this); // If NCrystal is being used, update micro cross section cache + micro.ncrystal_xs = ncrystal_xs; if (ncrystal_xs >= 0.0) { data::nuclides[i_nuclide]->calculate_elastic_xs(*this); ncrystal_update_micro(ncrystal_xs, micro); diff --git a/src/physics.cpp b/src/physics.cpp index 3c06e543de1..41509af97be 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -115,13 +115,14 @@ void sample_neutron_reaction(Particle& p) // Make sure particle population doesn't grow out of control for // subcritical multiplication problems. - if (p.secondary_bank().size() >= 10000) { + if (p.secondary_bank().size() >= settings::max_secondaries) { fatal_error( "The secondary particle bank appears to be growing without " "bound. You are likely running a subcritical multiplication problem " "with k-effective close to or greater than one."); } } + p.event_mt() = rx.mt_; } // Create secondary photons @@ -210,13 +211,23 @@ void create_fission_sites(Particle& p, int i_nuclide, const Reaction& rx) site.particle = ParticleType::neutron; site.time = p.time(); site.wgt = 1. / weight; - site.parent_id = p.id(); - site.progeny_id = p.n_progeny()++; site.surf_id = 0; // Sample delayed group and angle/energy for fission reaction sample_fission_neutron(i_nuclide, rx, &site, p); + // Reject site if it exceeds time cutoff + if (site.delayed_group > 0) { + double t_cutoff = settings::time_cutoff[static_cast(site.particle)]; + if (site.time > t_cutoff) { + continue; + } + } + + // Set parent and progeny IDs + site.parent_id = p.id(); + site.progeny_id = p.n_progeny()++; + // Store fission site in bank if (use_fission_bank) { int64_t idx = simulation::fission_bank.thread_safe_append(site); @@ -236,18 +247,15 @@ void create_fission_sites(Particle& p, int i_nuclide, const Reaction& rx) } // Iterated Fission Probability (IFP) method if (settings::ifp_on) { - ifp(p, site, idx); + ifp(p, idx); } } else { p.secondary_bank().push_back(site); } - // Set the delayed group on the particle as well - p.delayed_group() = site.delayed_group; - // Increment the number of neutrons born delayed - if (p.delayed_group() > 0) { - nu_d[p.delayed_group() - 1]++; + if (site.delayed_group > 0) { + nu_d[site.delayed_group - 1]++; } // Write fission particles to nuBank @@ -496,7 +504,7 @@ int sample_nuclide(Particle& p) for (int i = 0; i < n; ++i) { // Get atom density int i_nuclide = mat->nuclide_[i]; - double atom_density = mat->atom_density_[i]; + double atom_density = mat->atom_density(i, p.density_mult()); // Increment probability to compare to cutoff prob += atom_density * p.neutron_xs(i_nuclide).total; @@ -521,7 +529,7 @@ int sample_element(Particle& p) for (int i = 0; i < mat->element_.size(); ++i) { // Find atom density int i_element = mat->element_[i]; - double atom_density = mat->atom_density_[i]; + double atom_density = mat->atom_density(i, p.density_mult()); // Determine microscopic cross section double sigma = atom_density * p.photon_xs(i_element).total; @@ -656,7 +664,9 @@ void absorption(Particle& p, int i_nuclide) p.wgt() = 0.0; p.event() = TallyEvent::ABSORB; - p.event_mt() = N_DISAPPEAR; + if (!p.fission()) { + p.event_mt() = N_DISAPPEAR; + } } } } @@ -844,7 +854,7 @@ Direction sample_target_velocity(const Nuclide& nuc, double E, Direction u, // otherwise, use free gas model } else { - if (E >= FREE_GAS_THRESHOLD * kT && nuc.awr_ > 1.0) { + if (E >= settings::free_gas_threshold * kT && nuc.awr_ > 1.0) { return {}; } else { sampling_method = ResScatMethod::cxs; @@ -1069,6 +1079,10 @@ void sample_fission_neutron( // set the delayed group for the particle born from fission site->delayed_group = group; + // Sample time of emission based on decay constant of precursor + double decay_rate = rx.products_[site->delayed_group].decay_rate_; + site->time -= std::log(prn(p.current_seed())) / decay_rate; + } else { // ==================================================================== // PROMPT NEUTRON SAMPLED diff --git a/src/physics_mg.cpp b/src/physics_mg.cpp index 5ebef9c1417..4c28cb1795a 100644 --- a/src/physics_mg.cpp +++ b/src/physics_mg.cpp @@ -139,8 +139,6 @@ void create_fission_sites(Particle& p) site.particle = ParticleType::neutron; site.time = p.time(); site.wgt = 1. / weight; - site.parent_id = p.id(); - site.progeny_id = p.n_progeny()++; // Sample the cosine of the angle, assuming fission neutrons are emitted // isotropically @@ -165,6 +163,24 @@ void create_fission_sites(Particle& p) // of the code, 0 is prompt. site.delayed_group = dg + 1; + // If delayed product production, sample time of emission + if (dg != -1) { + auto& macro_xs = data::mg.macro_xs_[p.material()]; + double decay_rate = + macro_xs.get_xs(MgxsType::DECAY_RATE, 0, nullptr, nullptr, &dg, 0, 0); + site.time -= std::log(prn(p.current_seed())) / decay_rate; + + // Reject site if it exceeds time cutoff + double t_cutoff = settings::time_cutoff[static_cast(site.particle)]; + if (site.time > t_cutoff) { + continue; + } + } + + // Set parent and progeny ID + site.parent_id = p.id(); + site.progeny_id = p.n_progeny()++; + // Store fission site in bank if (use_fission_bank) { int64_t idx = simulation::fission_bank.thread_safe_append(site); diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 6002a6e6a5e..a9ed358e69c 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -55,24 +55,6 @@ FlatSourceDomain::FlatSourceDomain() : negroups_(data::mg.num_energy_groups_) // Initialize source regions. bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; source_regions_ = SourceRegionContainer(negroups_, is_linear); - source_regions_.assign( - base_source_regions, SourceRegion(negroups_, is_linear)); - - // Initialize materials - int64_t source_region_id = 0; - for (int i = 0; i < model::cells.size(); i++) { - Cell& cell = *model::cells[i]; - if (cell.type_ == Fill::MATERIAL) { - for (int j = 0; j < cell.n_instances(); j++) { - source_regions_.material(source_region_id++) = cell.material(j); - } - } - } - - // Sanity check - if (source_region_id != base_source_regions) { - fatal_error("Unexpected number of source regions"); - } // Initialize tally volumes if (volume_normalized_flux_tallies_) { @@ -121,44 +103,35 @@ void FlatSourceDomain::accumulate_iteration_flux() } } -// Compute new estimate of scattering + fission sources in each source region -// based on the flux estimate from the previous iteration. -void FlatSourceDomain::update_neutron_source(double k_eff) +void FlatSourceDomain::update_single_neutron_source(SourceRegionHandle& srh) { - simulation::time_update_src.start(); - - double inverse_k_eff = 1.0 / k_eff; - -// Reset all source regions to zero (important for void regions) -#pragma omp parallel for - for (int64_t se = 0; se < n_source_elements(); se++) { - source_regions_.source(se) = 0.0; + // Reset all source regions to zero (important for void regions) + for (int g = 0; g < negroups_; g++) { + srh.source(g) = 0.0; } // Add scattering + fission source -#pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions(); sr++) { - int material = source_regions_.material(sr); - if (material == MATERIAL_VOID) { - continue; - } + int material = srh.material(); + if (material != MATERIAL_VOID) { + double inverse_k_eff = 1.0 / k_eff_; for (int g_out = 0; g_out < negroups_; g_out++) { double sigma_t = sigma_t_[material * negroups_ + g_out]; double scatter_source = 0.0; double fission_source = 0.0; for (int g_in = 0; g_in < negroups_; g_in++) { - double scalar_flux = source_regions_.scalar_flux_old(sr, g_in); + double scalar_flux = srh.scalar_flux_old(g_in); double sigma_s = sigma_s_[material * negroups_ * negroups_ + g_out * negroups_ + g_in]; double nu_sigma_f = nu_sigma_f_[material * negroups_ + g_in]; double chi = chi_[material * negroups_ + g_out]; scatter_source += sigma_s * scalar_flux; - fission_source += nu_sigma_f * scalar_flux * chi; + if (settings::create_fission_neutrons) { + fission_source += nu_sigma_f * scalar_flux * chi; + } } - - source_regions_.source(sr, g_out) = + srh.source(g_out) = (scatter_source + fission_source * inverse_k_eff) / sigma_t; // if (source_regions_.key(sr) == SourceRegionKey(96506,0)){ @@ -169,11 +142,23 @@ void FlatSourceDomain::update_neutron_source(double k_eff) // Add external source if in fixed source mode if (settings::run_mode == RunMode::FIXED_SOURCE) { -#pragma omp parallel for - for (int64_t se = 0; se < n_source_elements(); se++) { - source_regions_.source(se) += source_regions_.external_source(se); + for (int g = 0; g < negroups_; g++) { + srh.source(g) += srh.external_source(g); } } +} + +// Compute new estimate of scattering + fission sources in each source region +// based on the flux estimate from the previous iteration. +void FlatSourceDomain::update_all_neutron_sources() +{ + simulation::time_update_src.start(); + +#pragma omp parallel for + for (int64_t sr = 0; sr < n_source_regions(); sr++) { + SourceRegionHandle srh = source_regions_.get_source_region_handle(sr); + update_single_neutron_source(srh); + } simulation::time_update_src.stop(); } @@ -334,7 +319,7 @@ int64_t FlatSourceDomain::add_source_to_scalar_flux() // Generates new estimate of k_eff based on the differences between this // iteration's estimate of the scalar flux and the last iteration's estimate. -double FlatSourceDomain::compute_k_eff(double k_eff_old) const +void FlatSourceDomain::compute_k_eff() { double fission_rate_old = 0; double fission_rate_new = 0; @@ -387,7 +372,7 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const simulation::time_decomposition_handling.stop(); } - double k_eff_new = k_eff_old * (fission_rate_new / fission_rate_old); + double k_eff_new = k_eff_ * (fission_rate_new / fission_rate_old); double H = 0.0; // defining an inverse sum for better performance @@ -417,7 +402,8 @@ double FlatSourceDomain::compute_k_eff(double k_eff_old) const // Adds entropy value to shared entropy vector in openmc namespace. simulation::entropy.push_back(H); - return k_eff_new; + fission_rate_ = fission_rate_new; + k_eff_ = k_eff_new; } // This function is responsible for generating a mapping between random @@ -567,12 +553,33 @@ void FlatSourceDomain::reset_tally_volumes() // simulation double FlatSourceDomain::compute_fixed_source_normalization_factor() const { - // If we are not in fixed source mode, then there are no external sources - // so no normalization is needed. - if (settings::run_mode != RunMode::FIXED_SOURCE || adjoint_) { + // Eigenvalue mode normalization + if (settings::run_mode == RunMode::EIGENVALUE) { + // Normalize fluxes by total number of fission neutrons produced. This + // ensures consistent scaling of the eigenvector such that its magnitude is + // comparable to the eigenvector produced by the Monte Carlo solver. + // Multiplying by the eigenvalue is unintuitive, but it is necessary. + // If the eigenvalue is 1.2, per starting source neutron, you will + // generate 1.2 neutrons. Thus if we normalize to generating only ONE + // neutron in total for the whole domain, then we don't actually have enough + // flux to generate the required 1.2 neutrons. We only know the flux + // required to generate 1 neutron (which would have required less than one + // starting neutron). Thus, you have to scale the flux up by the eigenvalue + // such that 1.2 neutrons are generated, so as to be consistent with the + // bookkeeping in MC which is all done per starting source neutron (not per + // neutron produced). + return k_eff_ / (fission_rate_ * simulation_volume_); + } + + // If we are in adjoint mode of a fixed source problem, the external + // source is already normalized, such that all resulting fluxes are + // also normalized. + if (adjoint_) { return 1.0; } + // Fixed source mode normalization + // Step 1 is to sum over all source regions and energy groups to get the // total external source strength in the simulation. double simulation_external_source_strength = 0.0; @@ -684,7 +691,6 @@ void FlatSourceDomain::random_ray_tally() "random ray mode."); break; } - // Apply score to the appropriate tally bin Tally& tally {*model::tallies[task.tally_idx]}; #pragma omp atomic @@ -758,21 +764,21 @@ void FlatSourceDomain::output_to_vtk() const print_plot(); // Outer loop over plots - for (int p = 0; p < model::plots.size(); p++) { + for (int plt = 0; plt < model::plots.size(); plt++) { // Get handle to OpenMC plot object and extract params - Plot* openmc_plot = dynamic_cast(model::plots[p].get()); + Plot* openmc_plot = dynamic_cast(model::plots[plt].get()); // Random ray plots only support voxel plots if (!openmc_plot) { warning(fmt::format("Plot {} is invalid plot type -- only voxel plotting " "is allowed in random ray mode.", - p)); + plt)); continue; } else if (openmc_plot->type_ != Plot::PlotType::voxel) { warning(fmt::format("Plot {} is invalid plot type -- only voxel plotting " "is allowed in random ray mode.", - p)); + plt)); continue; } @@ -828,24 +834,11 @@ void FlatSourceDomain::output_to_vtk() const continue; } - int i_cell = p.lowest_coord().cell(); - int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); - SourceRegionKey sr_key {sr, 0}; - if (RandomRay::mesh_subdivision_enabled_) { - int mesh_idx = base_source_regions_.mesh(sr); - int mesh_bin; - if (mesh_idx == C_NONE) { - mesh_bin = 0; - } else { - mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); - } - sr_key = {sr, mesh_bin}; - auto it = source_region_map_.find(sr_key); - if (it != source_region_map_.end()) { - sr = it->second; - } else { - sr = -1; - } + SourceRegionKey sr_key = lookup_source_region_key(p); + int64_t sr = -1; + auto it = source_region_map_.find(sr_key); + if (it != source_region_map_.end()) { + sr = it->second; } voxel_indices_key[z * Ny * Nx + y * Nx + x] = sr_key; @@ -1095,26 +1088,33 @@ void FlatSourceDomain::output_to_vtk_decomp() const continue; } - int i_cell = p.lowest_coord().cell(); - int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); - SourceRegionKey sr_key {sr, 0}; - if (RandomRay::mesh_subdivision_enabled_) { - int mesh_idx = base_source_regions_.mesh(sr); - int mesh_bin; - if (mesh_idx == C_NONE) { - mesh_bin = 0; - } else { - mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); - } - sr_key = {sr, mesh_bin}; - auto it = source_region_map_.find(sr_key); - if (it != source_region_map_.end()) { - sr = it->second; - } else { - sr = -1; - } + SourceRegionKey sr_key = lookup_source_region_key(p); + int64_t sr = -1; + auto it_sr = source_region_map_.find(sr_key); + if (it_sr != source_region_map_.end()) { + sr = it_sr->second; } + // int i_cell = p.lowest_coord().cell(); + // int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); + // SourceRegionKey sr_key {sr, 0}; + // if (RandomRay::mesh_subdivision_enabled_) { + // int mesh_idx = base_source_regions_.mesh(sr); + // int mesh_bin; + // if (mesh_idx == C_NONE) { + // mesh_bin = 0; + // } else { + // mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); + // } + // sr_key = {sr, mesh_bin}; + // auto it = source_region_map_.find(sr_key); + // if (it != source_region_map_.end()) { + // sr = it->second; + // } else { + // sr = -1; + // } + // } + voxel_indices[z * Ny * Nx + y * Nx + x] = sr; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; @@ -1419,13 +1419,17 @@ void FlatSourceDomain::output_to_vtk_decomp() const } void FlatSourceDomain::apply_external_source_to_source_region( - Discrete* discrete, double strength_factor, SourceRegionHandle& srh) +int src_idx, SourceRegionHandle& srh) { - srh.external_source_present() = 1; - + auto s = model::external_sources[src_idx].get(); + auto is = dynamic_cast(s); + auto discrete = dynamic_cast(is->energy()); + double strength_factor = is->strength(); const auto& discrete_energies = discrete->x(); const auto& discrete_probs = discrete->prob(); + srh.external_source_present() = 1; + for (int i = 0; i < discrete_energies.size(); i++) { int g = data::mg.get_group_index(discrete_energies[i]); srh.external_source(g) += discrete_probs[i] * strength_factor; @@ -1433,8 +1437,7 @@ void FlatSourceDomain::apply_external_source_to_source_region( } void FlatSourceDomain::apply_external_source_to_cell_instances(int32_t i_cell, - Discrete* discrete, double strength_factor, int target_material_id, - const vector& instances) + int src_idx, int target_material_id, const vector& instances) { Cell& cell = *model::cells[i_cell]; @@ -1452,16 +1455,13 @@ void FlatSourceDomain::apply_external_source_to_cell_instances(int32_t i_cell, if (target_material_id == C_NONE || cell_material_id == target_material_id) { int64_t source_region = source_region_offsets_[i_cell] + j; - SourceRegionHandle srh = - source_regions_.get_source_region_handle(source_region); - apply_external_source_to_source_region(discrete, strength_factor, srh); + external_volumetric_source_map_[source_region].push_back(src_idx); } } } void FlatSourceDomain::apply_external_source_to_cell_and_children( - int32_t i_cell, Discrete* discrete, double strength_factor, - int32_t target_material_id) + int32_t i_cell, int src_idx, int32_t target_material_id) { Cell& cell = *model::cells[i_cell]; @@ -1469,14 +1469,14 @@ void FlatSourceDomain::apply_external_source_to_cell_and_children( vector instances(cell.n_instances()); std::iota(instances.begin(), instances.end(), 0); apply_external_source_to_cell_instances( - i_cell, discrete, strength_factor, target_material_id, instances); + i_cell, src_idx, target_material_id, instances); } else if (target_material_id == C_NONE) { std::unordered_map> cell_instance_list = cell.get_contained_cells(0, nullptr); for (const auto& pair : cell_instance_list) { int32_t i_child_cell = pair.first; - apply_external_source_to_cell_instances(i_child_cell, discrete, - strength_factor, target_material_id, pair.second); + apply_external_source_to_cell_instances( + i_child_cell, src_idx, target_material_id, pair.second); } } } @@ -1522,36 +1522,17 @@ void FlatSourceDomain::convert_external_sources() "point source at {}", sp->r())); } - int i_cell = gs.lowest_coord().cell(); - int64_t sr = source_region_offsets_[i_cell] + gs.cell_instance(); - - if (RandomRay::mesh_subdivision_enabled_) { - // If mesh subdivision is enabled, we need to determine which subdivided - // mesh bin the point source coordinate is in as well - int mesh_idx = source_regions_.mesh(sr); - int mesh_bin; - if (mesh_idx == C_NONE) { - mesh_bin = 0; - } else { - mesh_bin = model::meshes[mesh_idx]->get_bin(gs.r()); - } - // With the source region and mesh bin known, we can use the - // accompanying SourceRegionKey as a key into a map that stores the - // corresponding external source index for the point source. Notably, we - // do not actually apply the external source to any source regions here, - // as if mesh subdivision is enabled, they haven't actually been - // discovered & initilized yet. When discovered, they will read from the - // point_source_map to determine if there are any point source terms - // that should be applied. - SourceRegionKey key {sr, mesh_bin}; - point_source_map_[key] = es; - } else { - // If we are not using mesh subdivision, we can apply the external - // source directly to the source region as we do for volumetric domain - // constraint sources. - SourceRegionHandle srh = source_regions_.get_source_region_handle(sr); - apply_external_source_to_source_region(energy, strength_factor, srh); - } + SourceRegionKey key = lookup_source_region_key(gs); + + // With the source region and mesh bin known, we can use the + // accompanying SourceRegionKey as a key into a map that stores the + // corresponding external source index for the point source. Notably, we + // do not actually apply the external source to any source regions here, + // as if mesh subdivision is enabled, they haven't actually been + // discovered & initilized yet. When discovered, they will read from the + // external_source_map to determine if there are any external source + // terms that should be applied. + external_point_source_map_[key].push_back(es); } else { // If not a point source, then use the volumetric domain constraints to @@ -1559,42 +1540,25 @@ void FlatSourceDomain::convert_external_sources() if (is->domain_type() == Source::DomainType::MATERIAL) { for (int32_t material_id : domain_ids) { for (int i_cell = 0; i_cell < model::cells.size(); i_cell++) { - apply_external_source_to_cell_and_children( - i_cell, energy, strength_factor, material_id); + apply_external_source_to_cell_and_children(i_cell, es, material_id); } } } else if (is->domain_type() == Source::DomainType::CELL) { for (int32_t cell_id : domain_ids) { int32_t i_cell = model::cell_map[cell_id]; - apply_external_source_to_cell_and_children( - i_cell, energy, strength_factor, C_NONE); + apply_external_source_to_cell_and_children(i_cell, es, C_NONE); } } else if (is->domain_type() == Source::DomainType::UNIVERSE) { for (int32_t universe_id : domain_ids) { int32_t i_universe = model::universe_map[universe_id]; Universe& universe = *model::universes[i_universe]; for (int32_t i_cell : universe.cells_) { - apply_external_source_to_cell_and_children( - i_cell, energy, strength_factor, C_NONE); + apply_external_source_to_cell_and_children(i_cell, es, C_NONE); } } } } } // End loop over external sources - -// Divide the fixed source term by sigma t (to save time when applying each -// iteration) -#pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions(); sr++) { - int material = source_regions_.material(sr); - if (material == MATERIAL_VOID) { - continue; - } - for (int g = 0; g < negroups_; g++) { - double sigma_t = sigma_t_[material * negroups_ + g]; - source_regions_.external_source(sr, g) /= sigma_t; - } - } } void FlatSourceDomain::flux_swap() @@ -1611,13 +1575,23 @@ void FlatSourceDomain::flatten_xs() const int a = 0; n_materials_ = data::mg.macro_xs_.size(); - for (auto& m : data::mg.macro_xs_) { + for (int i = 0; i < n_materials_; i++) { + auto& m = data::mg.macro_xs_[i]; for (int g_out = 0; g_out < negroups_; g_out++) { if (m.exists_in_model) { double sigma_t = m.get_xs(MgxsType::TOTAL, g_out, NULL, NULL, NULL, t, a); sigma_t_.push_back(sigma_t); + if (sigma_t < MINIMUM_MACRO_XS) { + Material* mat = model::materials[i].get(); + warning(fmt::format( + "Material \"{}\" (id: {}) has a group {} total cross section " + "({:.3e}) below the minimum threshold " + "({:.3e}). Material will be treated as pure void.", + mat->name(), mat->id(), g_out, sigma_t, MINIMUM_MACRO_XS)); + } + double nu_sigma_f = m.get_xs(MgxsType::NU_FISSION, g_out, NULL, NULL, NULL, t, a); nu_sigma_f_.push_back(nu_sigma_f); @@ -1658,7 +1632,7 @@ void FlatSourceDomain::flatten_xs() } } -void FlatSourceDomain::set_adjoint_sources(const vector& forward_flux) +void FlatSourceDomain::set_adjoint_sources() { // Set the adjoint external source to 1/forward_flux. If the forward flux is // negative, zero, or extremely close to zero, set the adjoint source to zero, @@ -1672,7 +1646,7 @@ void FlatSourceDomain::set_adjoint_sources(const vector& forward_flux) double max_flux = 0.0; #pragma omp parallel for reduction(max : max_flux) for (int64_t se = 0; se < n_source_elements(); se++) { - double flux = forward_flux[se]; + double flux = source_regions_.scalar_flux_final(se); if (flux > max_flux) { max_flux = flux; } @@ -1682,7 +1656,7 @@ void FlatSourceDomain::set_adjoint_sources(const vector& forward_flux) #pragma omp parallel for for (int64_t sr = 0; sr < n_source_regions(); sr++) { for (int g = 0; g < negroups_; g++) { - double flux = forward_flux[sr * negroups_ + g]; + double flux = source_regions_.scalar_flux_final(sr, g); if (flux <= ZERO_FLUX_CUTOFF * max_flux) { source_regions_.external_source(sr, g) = 0.0; } else { @@ -1691,6 +1665,7 @@ void FlatSourceDomain::set_adjoint_sources(const vector& forward_flux) if (flux > 0.0) { source_regions_.external_source_present(sr) = 1; } + source_regions_.scalar_flux_final(sr, g) = 0.0; } } @@ -1717,7 +1692,6 @@ void FlatSourceDomain::set_adjoint_sources(const vector& forward_flux) source_regions_.external_source_present(sr) = 0; } } - // Divide the fixed source term by sigma t (to save time when applying each // iteration) #pragma omp parallel for @@ -1778,13 +1752,14 @@ void FlatSourceDomain::apply_mesh_to_cell_instances(int32_t i_cell, if ((target_material_id == C_NONE && !is_target_void) || cell_material_id == target_material_id) { int64_t sr = source_region_offsets_[i_cell] + j; - if (source_regions_.mesh(sr) != C_NONE) { - // print out the source region that is broken: + // Check if the key is already present in the mesh_map_ + if (mesh_map_.find(sr) != mesh_map_.end()) { fatal_error(fmt::format("Source region {} already has mesh idx {} " "applied, but trying to apply mesh idx {}", - sr, source_regions_.mesh(sr), mesh_idx)); + sr, mesh_map_[sr], mesh_idx)); } - source_regions_.mesh(sr) = mesh_idx; + // If the SR has not already been assigned, then we can write to it + mesh_map_[sr] = mesh_idx; } } } @@ -1854,18 +1829,9 @@ void FlatSourceDomain::apply_meshes() } } -void FlatSourceDomain::prepare_base_source_regions() -{ - std::swap(source_regions_, base_source_regions_); - source_regions_.negroups() = base_source_regions_.negroups(); - source_regions_.is_linear() = base_source_regions_.is_linear(); -} - SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( - int64_t sr, int mesh_bin, Position r, Direction u) + SourceRegionKey sr_key, Position r, Direction u) { - SourceRegionKey sr_key {sr, mesh_bin}; - // Case 1: Check if the source region key is already present in the permanent // map. This is the most common condition, as any source region visited in a // previous power iteration will already be present in the permanent map. If @@ -1927,9 +1893,8 @@ SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( gs.r() = r + TINY_BIT * u; gs.u() = {1.0, 0.0, 0.0}; exhaustive_find_cell(gs); - int gs_i_cell = gs.lowest_coord().cell(); - int64_t sr_found = source_region_offsets_[gs_i_cell] + gs.cell_instance(); - if (sr_found != sr) { + int64_t sr_found = lookup_base_source_region_idx(gs); + if (sr_found != sr_key.base_source_region_id) { discovered_source_regions_.unlock(sr_key); SourceRegionHandle handle; handle.is_numerical_fp_artifact_ = true; @@ -1937,9 +1902,9 @@ SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( } // Sanity check on mesh bin - int mesh_idx = base_source_regions_.mesh(sr); + int mesh_idx = lookup_mesh_idx(sr_key.base_source_region_id); if (mesh_idx == C_NONE) { - if (mesh_bin != 0) { + if (sr_key.mesh_bin != 0) { discovered_source_regions_.unlock(sr_key); SourceRegionHandle handle; handle.is_numerical_fp_artifact_ = true; @@ -1948,7 +1913,7 @@ SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( } else { Mesh* mesh = model::meshes[mesh_idx].get(); int bin_found = mesh->get_bin(r + TINY_BIT * u); - if (bin_found != mesh_bin) { + if (bin_found != sr_key.mesh_bin) { discovered_source_regions_.unlock(sr_key); SourceRegionHandle handle; handle.is_numerical_fp_artifact_ = true; @@ -1960,27 +1925,61 @@ SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( // condition only occurs the first time the source region is discovered // (typically in the first power iteration). In this case, we need to handle // creation of the new source region and its storage into the parallel map. - // The new source region is created by copying the base source region, so as - // to inherit material, external source, and some flux properties etc. We - // also pass the base source region id to allow the new source region to - // know which base source region it is derived from. - SourceRegion* sr_ptr = discovered_source_regions_.emplace( - sr_key, {base_source_regions_.get_source_region_handle(sr), sr}); - discovered_source_regions_.unlock(sr_key); + // Additionally, we need to determine the source region's material, initialize + // the starting scalar flux guess, and apply any known external sources. + + // Call the basic constructor for the source region and store in the parallel + // map. + bool is_linear = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; + SourceRegion* sr_ptr = + discovered_source_regions_.emplace(sr_key, {negroups_, is_linear}); SourceRegionHandle handle {*sr_ptr}; handle.key() = sr_key; - // Check if the new source region contains a point source and apply it if so - auto it2 = point_source_map_.find(sr_key); - if (it2 != point_source_map_.end()) { - int es = it2->second; - auto s = model::external_sources[es].get(); - auto is = dynamic_cast(s); - auto energy = dynamic_cast(is->energy()); - double strength_factor = is->strength(); - apply_external_source_to_source_region(energy, strength_factor, handle); - int material = handle.material(); - if (material != MATERIAL_VOID) { + // Determine the material + int gs_i_cell = gs.lowest_coord().cell(); + Cell& cell = *model::cells[gs_i_cell]; + int material = cell.material(gs.cell_instance()); + + // If material total XS is extremely low, just set it to void to avoid + // problems with 1/Sigma_t + for (int g = 0; g < negroups_; g++) { + double sigma_t = sigma_t_[material * negroups_ + g]; + if (sigma_t < MINIMUM_MACRO_XS) { + material = MATERIAL_VOID; + break; + } + } + + handle.material() = material; + + // Store the mesh index (if any) assigned to this source region + handle.mesh() = mesh_idx; + + if (settings::run_mode == RunMode::FIXED_SOURCE) { + // Determine if there are any volumetric sources, and apply them. + // Volumetric sources are specifc only to the base SR idx. + auto it_vol = + external_volumetric_source_map_.find(sr_key.base_source_region_id); + if (it_vol != external_volumetric_source_map_.end()) { + const vector& vol_sources = it_vol->second; + for (int src_idx : vol_sources) { + apply_external_source_to_source_region(src_idx, handle); + } + } + + // Determine if there are any point sources, and apply them. + // Point sources are specific to the source region key. + auto it_point = external_point_source_map_.find(sr_key); + if (it_point != external_point_source_map_.end()) { + const vector& point_sources = it_point->second; + for (int src_idx : point_sources) { + apply_external_source_to_source_region(src_idx, handle); + } + } + + // Divide external source term by sigma_t + if (material != C_NONE) { for (int g = 0; g < negroups_; g++) { double sigma_t = sigma_t_[material * negroups_ + g]; handle.external_source(g) /= sigma_t; @@ -1988,6 +1987,21 @@ SourceRegionHandle FlatSourceDomain::get_subdivided_source_region_handle( } } + // Compute the combined source term + update_single_neutron_source(handle); + + // Unlock the parallel map. Note: we may be tempted to release + // this lock earlier, and then just use the source region's lock to protect + // the flux/source initialization stages above. However, the rest of the code + // only protects updates to the new flux and volume fields, and assumes that + // the source is constant for the duration of transport. Thus, using just the + // source region's lock by itself would result in other threads potentially + // reading from the source before it is computed, as they won't use the lock + // when only reading from the SR's source. It would be expensive to protect + // those operations, whereas generating the SR is only done once, so we just + // hold the map's bucket lock until the source region is fully initialized. + discovered_source_regions_.unlock(sr_key); + return handle; } @@ -2073,6 +2087,54 @@ void FlatSourceDomain::apply_transport_stabilization() } } +// Determines the base source region index (i.e., a material filled cell +// instance) that corresponds to a particular location in the geometry. Requires +// that the "gs" object passed in has already been initialized and has called +// find_cell etc. +int64_t FlatSourceDomain::lookup_base_source_region_idx( + const GeometryState& gs) const +{ + int i_cell = gs.lowest_coord().cell(); + int64_t sr = source_region_offsets_[i_cell] + gs.cell_instance(); + return sr; +} + +// Determines the index of the mesh (if any) that has been applied +// to a particular base source region index. +int FlatSourceDomain::lookup_mesh_idx(int64_t sr) const +{ + int mesh_idx = C_NONE; + auto mesh_it = mesh_map_.find(sr); + if (mesh_it != mesh_map_.end()) { + mesh_idx = mesh_it->second; + } + return mesh_idx; +} + +// Determines the source region key that corresponds to a particular location in +// the geometry. This takes into account both the base source region index as +// well as the mesh bin if a mesh is applied to this source region for +// subdivision. +SourceRegionKey FlatSourceDomain::lookup_source_region_key( + const GeometryState& gs) const +{ + int64_t sr = lookup_base_source_region_idx(gs); + int64_t mesh_bin = lookup_mesh_bin(sr, gs.r()); + return SourceRegionKey {sr, mesh_bin}; +} + +// Determines the mesh bin that corresponds to a particular base source region +// index and position. +int64_t FlatSourceDomain::lookup_mesh_bin(int64_t sr, Position r) const +{ + int mesh_idx = lookup_mesh_idx(sr); + int mesh_bin = 0; + if (mesh_idx != C_NONE) { + mesh_bin = model::meshes[mesh_idx]->get_bin(r); + } + return mesh_bin; +} + bool FlatSourceDomain::is_geometry_3D() { // Get spatial box of ray_source_ @@ -2110,21 +2172,23 @@ bool FlatSourceDomain::is_geometry_3D() continue; } - int i_cell = p.lowest_coord().cell(); - int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); - SourceRegionKey sr_key {sr, 0}; + // int i_cell = p.lowest_coord().cell(); + // int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); + // SourceRegionKey sr_key {sr, 0}; - if (RandomRay::mesh_subdivision_enabled_) { - int mesh_idx = base_source_regions_.mesh(sr); + // if (RandomRay::mesh_subdivision_enabled_) { + // int mesh_idx = base_source_regions_.mesh(sr); - int mesh_bin; - if (mesh_idx == C_NONE) { - mesh_bin = 0; - } else { - mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); - } - sr_key = {sr, mesh_bin}; - } + // int mesh_bin; + // if (mesh_idx == C_NONE) { + // mesh_bin = 0; + // } else { + // mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); + // } + // sr_key = {sr, mesh_bin}; + // } + + SourceRegionKey sr_key = lookup_source_region_key(p); // Check if sr_key has changed in z-direction if (check_key && (sr_key.base_source_region_id != sr_key_prev.base_source_region_id || diff --git a/src/random_ray/linear_source_domain.cpp b/src/random_ray/linear_source_domain.cpp index fdf21a8daba..825f5a29d86 100644 --- a/src/random_ray/linear_source_domain.cpp +++ b/src/random_ray/linear_source_domain.cpp @@ -34,25 +34,18 @@ void LinearSourceDomain::batch_reset() } } -void LinearSourceDomain::update_neutron_source(double k_eff) +void LinearSourceDomain::update_single_neutron_source(SourceRegionHandle& srh) { - simulation::time_update_src.start(); - - double inverse_k_eff = 1.0 / k_eff; - -// Reset all source regions to zero (important for void regions) -#pragma omp parallel for - for (int64_t se = 0; se < n_source_elements(); se++) { - source_regions_.source(se) = 0.0; + // Reset all source regions to zero (important for void regions) + for (int g = 0; g < negroups_; g++) { + srh.source(g) = 0.0; } -#pragma omp parallel for - for (int64_t sr = 0; sr < n_source_regions(); sr++) { - int material = source_regions_.material(sr); - if (material == MATERIAL_VOID) { - continue; - } - MomentMatrix invM = source_regions_.mom_matrix(sr).inverse(); + // Add scattering + fission source + int material = srh.material(); + if (material != MATERIAL_VOID) { + double inverse_k_eff = 1.0 / k_eff_; + MomentMatrix invM = srh.mom_matrix().inverse(); for (int g_out = 0; g_out < negroups_; g_out++) { double sigma_t = sigma_t_[material * negroups_ + g_out]; @@ -64,8 +57,8 @@ void LinearSourceDomain::update_neutron_source(double k_eff) for (int g_in = 0; g_in < negroups_; g_in++) { // Handles for the flat and linear components of the flux - double flux_flat = source_regions_.scalar_flux_old(sr, g_in); - MomentArray flux_linear = source_regions_.flux_moments_old(sr, g_in); + double flux_flat = srh.scalar_flux_old(g_in); + MomentArray flux_linear = srh.flux_moments_old(g_in); // Handles for cross sections double sigma_s = @@ -75,13 +68,15 @@ void LinearSourceDomain::update_neutron_source(double k_eff) // Compute source terms for flat and linear components of the flux scatter_flat += sigma_s * flux_flat; - fission_flat += nu_sigma_f * flux_flat * chi; scatter_linear += sigma_s * flux_linear; - fission_linear += nu_sigma_f * flux_linear * chi; + if (settings::create_fission_neutrons) { + fission_flat += nu_sigma_f * flux_flat * chi; + fission_linear += nu_sigma_f * flux_linear * chi; + } } // Compute the flat source term - source_regions_.source(sr, g_out) = + srh.source(g_out) = (scatter_flat + fission_flat * inverse_k_eff) / sigma_t; // Compute the linear source terms. In the first 10 iterations when the @@ -91,25 +86,21 @@ void LinearSourceDomain::update_neutron_source(double k_eff) // very small/noisy or have poorly developed spatial moments, so we zero // the source gradients (effectively making this a flat source region // temporarily), so as to improve stability. - if (simulation::current_batch > 10 && - source_regions_.source(sr, g_out) >= 0.0) { - source_regions_.source_gradients(sr, g_out) = + if (simulation::current_batch > 10 && srh.source(g_out) >= 0.0) { + srh.source_gradients(g_out) = invM * ((scatter_linear + fission_linear * inverse_k_eff) / sigma_t); } else { - source_regions_.source_gradients(sr, g_out) = {0.0, 0.0, 0.0}; + srh.source_gradients(g_out) = {0.0, 0.0, 0.0}; } } } + // Add external source if in fixed source mode if (settings::run_mode == RunMode::FIXED_SOURCE) { -// Add external source to flat source term if in fixed source mode -#pragma omp parallel for - for (int64_t se = 0; se < n_source_elements(); se++) { - source_regions_.source(se) += source_regions_.external_source(se); + for (int g = 0; g < negroups_; g++) { + srh.source(g) += srh.external_source(g); } } - - simulation::time_update_src.stop(); } void LinearSourceDomain::normalize_scalar_flux_and_volumes( diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 957d55ac1c8..29b970d8a14 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -242,7 +242,6 @@ double RandomRay::distance_inactive_; double RandomRay::distance_active_; unique_ptr RandomRay::ray_source_; RandomRaySourceShape RandomRay::source_shape_ {RandomRaySourceShape::FLAT}; -bool RandomRay::mesh_subdivision_enabled_ {false}; RandomRayGeomDim RandomRay::geom_dim_ {RandomRayGeomDim::THREE_DIM}; RandomRaySampleMethod RandomRay::sample_method_ {RandomRaySampleMethod::PRNG}; @@ -267,10 +266,22 @@ uint64_t RandomRay::transport_history_based_single_ray() { using namespace openmc; while (alive()) { + // if (id()==204) { + // printf("Rank: %d, 1 Ray in transport at position %f %f %f \n", mpi::rank, r().x,r().y,r().z); + // } event_advance_ray(); + // if (id()==204) { + // printf("Rank: %d, 2 Ray in transport at position %f %f %f \n", mpi::rank, r().x,r().y,r().z); + // } if (!alive()) + // if (id()==204) { + // printf("Rank: %d, leaving \n", mpi::rank); + // } break; event_cross_surface(); + // if (id()==204) { + // printf("Rank: %d, 3 Ray in transport at position %f %f %f \n", mpi::rank, r().x,r().y,r().z); + // } // If ray has too many events, display warning and kill it if (n_event() >= settings::max_particle_events) { warning("Ray " + std::to_string(id()) + @@ -285,6 +296,10 @@ uint64_t RandomRay::transport_history_based_single_ray() // Transports ray across a single source region void RandomRay::event_advance_ray() { + // If geometry debug mode is on, check for cell overlaps + if (settings::check_overlaps) + check_cell_overlap(*this); + // Find the distance to the nearest boundary boundary() = distance_to_boundary(*this); double distance = boundary().distance(); @@ -318,7 +333,7 @@ void RandomRay::event_advance_ray() wgt() = 0.0; } - attenuate_flux(distance); + attenuate_flux(distance, true); distance_travelled_ += distance; } else { // If the ray is still in the dead zone, need to check if it @@ -328,7 +343,7 @@ void RandomRay::event_advance_ray() // full length of the segment is within the dead zone, attenuate as normal. if (distance_travelled_ + distance >= distance_inactive_) { double distance_dead = distance_inactive_ - distance_travelled_; - attenuate_flux(distance_dead); + attenuate_flux(distance_dead, false); is_active_ = true; distance_travelled_ = 0.0; @@ -344,10 +359,10 @@ void RandomRay::event_advance_ray() wgt() = 0.0; } - attenuate_flux(distance_alive, distance_dead); + attenuate_flux(distance_alive, true, distance_dead); distance_travelled_ = distance_alive; } else { - attenuate_flux(distance); + attenuate_flux(distance, false); distance_travelled_ += distance; } } @@ -358,81 +373,74 @@ void RandomRay::event_advance_ray() } } -void RandomRay::attenuate_flux(double distance, double offset) +void RandomRay::attenuate_flux(double distance, bool is_active, double offset) { - // Determine source region index etc. - int i_cell = lowest_coord().cell(); - - // The base source region is the spatial region index - int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - + // Lookup base source region index + int64_t sr = domain_->lookup_base_source_region_idx(*this); + // Initialize values needed to buffer ray for domain decomposition double mesh_partial_length = 0.0; double tiny_multiplier = 0.0; // Perform ray tracing across mesh - if (mesh_subdivision_enabled_) { - // Determine the mesh index for the base source region, if any - int mesh_idx = domain_->base_source_regions_.mesh(sr); - - if (mesh_idx == C_NONE) { - // If there's no mesh being applied to this cell, then - // we just attenuate the flux as normal, and set - // the mesh bin to 0 - attenuate_flux_inner(distance, sr, 0, r()); - } else { - // If there is a mesh being applied to this cell, then - // we loop over all the bin crossings and attenuate - // separately. - Mesh* mesh = model::meshes[mesh_idx].get(); - - // We adjust the start and end positions of the ray slightly - // to accomodate for floating point precision issues that tend - // to occur at mesh boundaries that overlap with geometry lattice - // boundaries. - Position start = r() + (offset + TINY_BIT) * u(); - Position end = start + (distance - 2.0 * TINY_BIT) * u(); - double reduced_distance = (end - start).norm(); - - // Ray trace through the mesh and record bins and lengths - mesh_bins_.resize(0); - mesh_fractional_lengths_.resize(0); - mesh->bins_crossed(start, end, u(), mesh_bins_, mesh_fractional_lengths_); - - // Loop over all mesh bins and attenuate flux - for (int b = 0; b < mesh_bins_.size(); b++) { - if (mpi::n_procs > 1) { - mpi::decomp_map.num_mesh_bin_RT_batch_[sr] += 1; + // Determine the mesh index for the base source region, if any + int mesh_idx = domain_->lookup_mesh_idx(sr); + + if (mesh_idx == C_NONE) { + // If there's no mesh being applied to this cell, then + // we just attenuate the flux as normal, and set + // the mesh bin to 0 + attenuate_flux_inner(distance, is_active, sr, 0, r()); + } else { + // If there is a mesh being applied to this cell, then + // we loop over all the bin crossings and attenuate + // separately. + Mesh* mesh = model::meshes[mesh_idx].get(); + + // We adjust the start and end positions of the ray slightly + // to accomodate for floating point precision issues that tend + // to occur at mesh boundaries that overlap with geometry lattice + // boundaries. + Position start = r() + (offset + TINY_BIT) * u(); + Position end = start + (distance - 2.0 * TINY_BIT) * u(); + double reduced_distance = (end - start).norm(); + + // Ray trace through the mesh and record bins and lengths + mesh_bins_.resize(0); + mesh_fractional_lengths_.resize(0); + mesh->bins_crossed(start, end, u(), mesh_bins_, mesh_fractional_lengths_); + + // Loop over all mesh bins and attenuate flux + for (int b = 0; b < mesh_bins_.size(); b++) { + if (mpi::n_procs > 1) { + mpi::decomp_map.num_mesh_bin_RT_batch_[sr] += 1; + } + double physical_length = reduced_distance * mesh_fractional_lengths_[b]; + attenuate_flux_inner( + physical_length, is_active, sr, mesh_bins_[b], start); + + start += physical_length * u(); + + // If ray has left MPI subdomain, stop transport + // and calculate position + if(has_left_subdomain()){ + for (int i = 0; i <= b - 1; i++) { + mesh_partial_length += mesh_fractional_lengths_[i]; } - double physical_length = reduced_distance * mesh_fractional_lengths_[b]; - attenuate_flux_inner( - physical_length, sr, mesh_bins_[b], start); - - start += physical_length * u(); - - // If ray has left MPI subdomain, stop transport - // and calculate position - if(has_left_subdomain()){ - for (int i = 0; i <= b - 1; i++) { - mesh_partial_length += mesh_fractional_lengths_[i]; - } - - if (b > 0) { - // If ray is stopped within mesh of base source region, - // need to add TINY_BIT to account for deleted length - tiny_multiplier = 1.0; - // Reset last surface crossed to none if ray is stopped - // within mesh of base source region - surface() = 0; - } - - mesh_partial_length = tiny_multiplier * TINY_BIT + reduced_distance * mesh_partial_length; - break; + + if (b > 0) { + // If ray is stopped within mesh of base source region, + // need to add TINY_BIT to account for deleted length + tiny_multiplier = 1.0; + // Reset last surface crossed to none if ray is stopped + // within mesh of base source region + surface() = 0; } + + mesh_partial_length = tiny_multiplier * TINY_BIT + reduced_distance * mesh_partial_length; + break; } } - } else { - attenuate_flux_inner(distance, sr, C_NONE, r()); } // If ray has left my subdomain, buffer ray state @@ -445,8 +453,9 @@ void RandomRay::attenuate_flux(double distance, double offset) } void RandomRay::attenuate_flux_inner( - double distance, int64_t sr, int mesh_bin, Position r) + double distance, bool is_active, int64_t sr, int mesh_bin, Position r) { + SourceRegionKey sr_key {sr, mesh_bin}; if (mpi::n_procs > 1){ // Check which rank owns the source region at the current position @@ -463,30 +472,25 @@ void RandomRay::attenuate_flux_inner( } SourceRegionHandle srh; - if (mesh_subdivision_enabled_) { - srh = domain_->get_subdivided_source_region_handle( - sr, mesh_bin, r, u()); - if (srh.is_numerical_fp_artifact_) { - return; - } - } else { - srh = domain_->source_regions_.get_source_region_handle(sr); + srh = domain_->get_subdivided_source_region_handle(sr_key, r, u()); + if (srh.is_numerical_fp_artifact_) { + return; } switch (source_shape_) { case RandomRaySourceShape::FLAT: - if (this->material() == MATERIAL_VOID) { - attenuate_flux_flat_source_void(srh, distance, r); + if (srh.material() == MATERIAL_VOID) { + attenuate_flux_flat_source_void(srh, distance, is_active, r); } else { - attenuate_flux_flat_source(srh, distance, r); + attenuate_flux_flat_source(srh, distance, is_active, r); } break; case RandomRaySourceShape::LINEAR: case RandomRaySourceShape::LINEAR_XY: - if (this->material() == MATERIAL_VOID) { - attenuate_flux_linear_source_void(srh, distance, r); + if (srh.material() == MATERIAL_VOID) { + attenuate_flux_linear_source_void(srh, distance, is_active, r); } else { - attenuate_flux_linear_source(srh, distance, r); + attenuate_flux_linear_source(srh, distance, is_active, r); } break; default: @@ -508,13 +512,13 @@ void RandomRay::attenuate_flux_inner( // individually (at least on CPU). Several other bookkeeping tasks are also // performed when inside the lock. void RandomRay::attenuate_flux_flat_source( - SourceRegionHandle& srh, double distance, Position r) + SourceRegionHandle& srh, double distance, bool is_active, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; // Get material - int material = this->material(); + int material = srh.material(); // MOC incoming flux attenuation + source contribution/attenuation equation for (int g = 0; g < negroups_; g++) { @@ -533,7 +537,7 @@ void RandomRay::attenuate_flux_flat_source( // Aquire lock for source region srh.lock(); - if (is_active_) { + if (is_active) { // Accumulate delta psi into new estimate of source region flux for // this iteration for (int g = 0; g < negroups_; g++) { @@ -562,16 +566,16 @@ void RandomRay::attenuate_flux_flat_source( // Alternative flux attenuation function for true void regions. void RandomRay::attenuate_flux_flat_source_void( - SourceRegionHandle& srh, double distance, Position r) + SourceRegionHandle& srh, double distance, bool is_active, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; - int material = this->material(); + int material = srh.material(); // If ray is in the active phase (not in dead zone), make contributions to // source region bookkeeping - if (is_active_) { + if (is_active) { Position midpoint = r + u() * (distance / 2.0); @@ -612,12 +616,12 @@ void RandomRay::attenuate_flux_flat_source_void( } void RandomRay::attenuate_flux_linear_source( - SourceRegionHandle& srh, double distance, Position r) + SourceRegionHandle& srh, double distance, bool is_active, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; - int material = this->material(); + int material = srh.material(); Position& centroid = srh.centroid(); Position midpoint = r + u() * (distance / 2.0); @@ -745,7 +749,7 @@ void RandomRay::attenuate_flux_linear_source( // estimating the flux at specific pixel coordinates. Thus, plots will look // nicer/more accurate if we record flux moments, so this function is useful. void RandomRay::attenuate_flux_linear_source_void( - SourceRegionHandle& srh, double distance, Position r) + SourceRegionHandle& srh, double distance, bool is_active, Position r) { // The number of geometric intersections is counted for reporting purposes n_event()++; @@ -869,6 +873,8 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // set identifier for particle id() = data.ray_id; + // printf("restart: %d, %d", mpi::rank, id()); + // generate source site using sample method SourceSite site; @@ -901,6 +907,10 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo cell_born() = lowest_coord().cell(); } + SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); + SourceRegionHandle srh = + domain_->get_subdivided_source_region_handle(sr_key, r(), u()); + // Initialize ray's starting angular flux to starting location's isotropic // source int i_cell = lowest_coord().cell(); @@ -928,22 +938,22 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // Initialize ray's starting angular flux to starting location's isotropic // source else { - SourceRegionHandle srh; - if (mesh_subdivision_enabled_) { - int mesh_idx = domain_->base_source_regions_.mesh(sr); - int mesh_bin; - if (mesh_idx == C_NONE) { - mesh_bin = 0; - } else { - Mesh* mesh = model::meshes[mesh_idx].get(); - mesh_bin = mesh->get_bin(r()); - } - - srh = - domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); - } else { - srh = domain_->source_regions_.get_source_region_handle(sr); - } + // SourceRegionHandle srh; + // if (mesh_subdivision_enabled_) { + // int mesh_idx = domain_->base_source_regions_.mesh(sr); + // int mesh_bin; + // if (mesh_idx == C_NONE) { + // mesh_bin = 0; + // } else { + // Mesh* mesh = model::meshes[mesh_idx].get(); + // mesh_bin = mesh->get_bin(r()); + // } + + // srh = + // domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); + // } else { + // srh = domain_->source_regions_.get_source_region_handle(sr); + // } if (!srh.is_numerical_fp_artifact_) { for (int g = 0; g < negroups_; g++) { @@ -989,6 +999,7 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) this->from_source(&site); // Locate ray + // printf("Initiliase: ray %d, rank %d\n", id(), mpi::rank); if (lowest_coord().cell() == C_NONE) { if (!exhaustive_find_cell(*this)) { this->mark_as_lost( @@ -1000,25 +1011,29 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) cell_born() = lowest_coord().cell(); } + SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); + SourceRegionHandle srh = + domain_->get_subdivided_source_region_handle(sr_key, r(), u()); + // Initialize ray's starting angular flux to starting location's isotropic // source - int i_cell = lowest_coord().cell(); - int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - - SourceRegionHandle srh; - if (mesh_subdivision_enabled_) { - int mesh_idx = domain_->base_source_regions_.mesh(sr); - int mesh_bin; - if (mesh_idx == C_NONE) { - mesh_bin = 0; - } else { - Mesh* mesh = model::meshes[mesh_idx].get(); - mesh_bin = mesh->get_bin(r()); - } + // int i_cell = lowest_coord().cell(); + // int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); + + // SourceRegionHandle srh; + // if (mesh_subdivision_enabled_) { + // int mesh_idx = domain_->base_source_regions_.mesh(sr); + // int mesh_bin; + // if (mesh_idx == C_NONE) { + // mesh_bin = 0; + // } else { + // Mesh* mesh = model::meshes[mesh_idx].get(); + // mesh_bin = mesh->get_bin(r()); + // } if (mpi::n_procs > 1){ // Check if ray sampling site belongs to subdomain - owner_rank_ = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), r(), + owner_rank_ = mpi::decomp_map.find_owner(sr_key, r(), domain_->discovered_source_regions_); if (owner_rank_ != mpi::rank) { for (int g = 0; g < negroups_; g++) { @@ -1030,11 +1045,11 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) } } - srh = - domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); - } else { - srh = domain_->source_regions_.get_source_region_handle(sr); - } + // srh = + // domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); + // } else { + // srh = domain_->source_regions_.get_source_region_handle(sr); + // } if (!srh.is_numerical_fp_artifact_) { for (int g = 0; g < negroups_; g++) { diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 5fab9e0d65f..e9d420fe79b 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -51,98 +51,82 @@ void openmc_run_random_ray() if (mpi::master) validate_random_ray_inputs(); - // Declare forward flux so that it can be saved for later adjoint simulation - vector forward_flux; - SourceRegionContainer forward_source_regions; - SourceRegionContainer forward_base_source_regions; - std::unordered_map - forward_source_region_map; + // Initialize Random Ray Simulation Object + RandomRaySimulation sim; - { - // Initialize Random Ray Simulation Object - RandomRaySimulation sim; + // Initialize fixed sources, if present + sim.apply_fixed_sources_and_mesh_domains(); - // Initialize fixed sources, if present - sim.apply_fixed_sources_and_mesh_domains(); + // Begin main simulation timer + simulation::time_total.start(); - // Begin main simulation timer - simulation::time_total.start(); + // Execute random ray simulation + sim.simulate(); - // Execute random ray simulation - sim.simulate(); + // End main simulation timer + simulation::time_total.stop(); - // End main simulation timer - simulation::time_total.stop(); - - // Normalize and save the final forward flux - sim.domain()->serialize_final_fluxes(forward_flux); - - double source_normalization_factor = - sim.domain()->compute_fixed_source_normalization_factor() / - (settings::n_batches - settings::n_inactive); + // Normalize and save the final forward flux + double source_normalization_factor = + sim.domain()->compute_fixed_source_normalization_factor() / + (settings::n_batches - settings::n_inactive); #pragma omp parallel for - for (uint64_t i = 0; i < forward_flux.size(); i++) { - forward_flux[i] *= source_normalization_factor; - } - - forward_source_regions = sim.domain()->source_regions_; - forward_source_region_map = sim.domain()->source_region_map_; - forward_base_source_regions = sim.domain()->base_source_regions_; + for (uint64_t se = 0; se < sim.domain()->n_source_elements(); se++) { + sim.domain()->source_regions_.scalar_flux_final(se) *= + source_normalization_factor; + } - // Finalize OpenMC - openmc_simulation_finalize(); + // Finalize OpenMC + openmc_simulation_finalize(); - // Output all simulation results - sim.output_simulation_results(); - } + // Output all simulation results + sim.output_simulation_results(); ////////////////////////////////////////////////////////// // Run adjoint simulation (if enabled) ////////////////////////////////////////////////////////// - if (adjoint_needed) { - reset_timers(); + if (!adjoint_needed) { + return; + } - // Configure the domain for adjoint simulation - FlatSourceDomain::adjoint_ = true; + reset_timers(); - if (mpi::master) - header("ADJOINT FLUX SOLVE", 3); + // Configure the domain for adjoint simulation + FlatSourceDomain::adjoint_ = true; - // Initialize OpenMC general data structures - openmc_simulation_init(); + if (mpi::master) + header("ADJOINT FLUX SOLVE", 3); - // Initialize Random Ray Simulation Object - RandomRaySimulation adjoint_sim; + // Initialize OpenMC general data structures + openmc_simulation_init(); - // Initialize adjoint fixed sources, if present - adjoint_sim.prepare_fixed_sources_adjoint(forward_flux, - forward_source_regions, forward_base_source_regions, - forward_source_region_map); + sim.domain()->k_eff_ = 1.0; - // Transpose scattering matrix - adjoint_sim.domain()->transpose_scattering_matrix(); + // Initialize adjoint fixed sources, if present + sim.prepare_fixed_sources_adjoint(); - // Swap nu_sigma_f and chi - adjoint_sim.domain()->nu_sigma_f_.swap(adjoint_sim.domain()->chi_); + // Transpose scattering matrix + sim.domain()->transpose_scattering_matrix(); - // Begin main simulation timer - simulation::time_total.start(); + // Swap nu_sigma_f and chi + sim.domain()->nu_sigma_f_.swap(sim.domain()->chi_); - // Execute random ray simulation - adjoint_sim.simulate(); + // Begin main simulation timer + simulation::time_total.start(); - // End main simulation timer - simulation::time_total.stop(); + // Execute random ray simulation + sim.simulate(); - // Finalize OpenMC - openmc_simulation_finalize(); + // End main simulation timer + simulation::time_total.stop(); - // Output all simulation results - adjoint_sim.output_simulation_results(); - } + // Finalize OpenMC + openmc_simulation_finalize(); + // Output all simulation results + sim.output_simulation_results(); } // Enforces restrictions on inputs in random ray mode. While there are @@ -342,7 +326,6 @@ void validate_random_ray_inputs() // when generating weight windows with FW-CADIS and an overlaid mesh. /////////////////////////////////////////////////////////////////// if (RandomRay::source_shape_ == RandomRaySourceShape::LINEAR && - RandomRay::mesh_subdivision_enabled_ && variance_reduction::weight_windows.size() > 0) { warning( "Linear sources may result in negative fluxes in small source regions " @@ -361,7 +344,6 @@ void openmc_reset_random_ray() RandomRay::ray_source_.reset(); RandomRay::source_shape_ = RandomRaySourceShape::FLAT; RandomRay::geom_dim_ = RandomRayGeomDim::THREE_DIM; - RandomRay::mesh_subdivision_enabled_ = false; RandomRay::sample_method_ = RandomRaySampleMethod::PRNG; } @@ -407,20 +389,11 @@ void RandomRaySimulation::apply_fixed_sources_and_mesh_domains() } } -void RandomRaySimulation::prepare_fixed_sources_adjoint( - vector& forward_flux, SourceRegionContainer& forward_source_regions, - SourceRegionContainer& forward_base_source_regions, - std::unordered_map& - forward_source_region_map) +void RandomRaySimulation::prepare_fixed_sources_adjoint() { + domain_->source_regions_.adjoint_reset(); if (settings::run_mode == RunMode::FIXED_SOURCE) { - if (RandomRay::mesh_subdivision_enabled_) { - domain_->source_regions_ = forward_source_regions; - domain_->source_region_map_ = forward_source_region_map; - domain_->base_source_regions_ = forward_base_source_regions; - domain_->source_regions_.adjoint_reset(); - } - domain_->set_adjoint_sources(forward_flux); + domain_->set_adjoint_sources(); } } @@ -442,12 +415,12 @@ void RandomRaySimulation::simulate() // Reset total starting particle weight used for normalizing tallies simulation::total_weight = 1.0; - // Update source term (scattering + fission) - domain_->update_neutron_source(k_eff_); + // Update source term (scattering + fission) + domain_->update_all_neutron_sources(); - // Reset scalar fluxes, iteration volume tallies, and region hit flags to - // zero - domain_->batch_reset(); + // Reset scalar fluxes, iteration volume tallies, and region hit flags + // to zero + domain_->batch_reset(); // At the beginning of the simulation, if mesh subvivision is in use, we // need to swap the main source region container into the base container, @@ -455,9 +428,7 @@ void RandomRaySimulation::simulate() // subdivided source regions. The base container will therefore only // contain the external source region information, the mesh indices, // material properties, and initial guess values for the flux/source. - if (RandomRay::mesh_subdivision_enabled_ && - simulation::current_batch == 1 && !FlatSourceDomain::adjoint_) { - domain_->prepare_base_source_regions(); + if (simulation::current_batch == 1 && !FlatSourceDomain::adjoint_) { // Check if problem is 3D if (!domain_->is_geometry_3D()){ @@ -486,11 +457,9 @@ void RandomRaySimulation::simulate() transport_sweep(); } - // If using mesh subdivision, add any newly discovered source regions - // to the main source region container. - if (RandomRay::mesh_subdivision_enabled_) { + // Add any newly discovered source regions to the main source region + // container. domain_->finalize_discovered_source_regions(); - } // Normalize scalar flux and update volumes domain_->normalize_scalar_flux_and_volumes( @@ -509,26 +478,20 @@ void RandomRaySimulation::simulate() // Apply transport stabilization factors domain_->apply_transport_stabilization(); - if (settings::run_mode == RunMode::EIGENVALUE) { - // Compute random ray k-eff - k_eff_ = domain_->compute_k_eff(k_eff_); + if (settings::run_mode == RunMode::EIGENVALUE) { + // Compute random ray k-eff + domain_->compute_k_eff(); - // Store random ray k-eff into OpenMC's native k-eff variable - global_tally_tracklength = k_eff_; - } + // Store random ray k-eff into OpenMC's native k-eff variable + global_tally_tracklength = domain_->k_eff_; + } // Execute all tallying tasks, if this is an active batch if (simulation::current_batch > settings::n_inactive) { - // Add this iteration's scalar flux estimate to final accumulated - // estimate - domain_->accumulate_iteration_flux(); - - // Generate mapping between source regions and tallies - if (!domain_->mapped_all_tallies_ && - !RandomRay::mesh_subdivision_enabled_) { - domain_->convert_source_regions_to_tallies(0); - } + // Add this iteration's scalar flux estimate to final accumulated + // estimate + domain_->accumulate_iteration_flux(); // Use above mapping to contribute FSR flux data to appropriate // tallies @@ -539,7 +502,7 @@ void RandomRaySimulation::simulate() domain_->flux_swap(); // Check for any obvious insabilities/nans/infs - instability_check(n_hits, k_eff_, avg_miss_rate_); + instability_check(n_hits, domain_->k_eff_, avg_miss_rate_); // Finalize the current batch finalize_generation(); @@ -661,7 +624,7 @@ void RandomRaySimulation::instability_check( } if (k_eff > 10.0 || k_eff < 0.01 || !(std::isfinite(k_eff))) { - fatal_error("Instability detected"); + fatal_error(fmt::format("Instability detected: k-eff = {:.5f}", k_eff)); } } } @@ -829,6 +792,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { uint64_t id = simulation::work_index[mpi::rank] + i; RandomRay ray(id, domain_.get()); +// printf("%d, %d\n", mpi::rank, i); + // Add ray to ray bank if it starts in my subdomain if (!ray.has_left_subdomain()){ #pragma omp critical (raybank) @@ -852,6 +817,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { int num_communication_rounds = 0; + // printf("test2\n"); + // Move rays across ranks until they are terminated while (RB.is_any_ray_alive()) { @@ -861,8 +828,11 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { #pragma omp parallel for schedule(dynamic) \ reduction(+ : total_geometric_intersections_) for (int i = 0; i < RB.ray_bank_size(); i++) { + // printf("1 Start ray: %d in rank %d \n", i, mpi::rank); RandomRay& ray = RB.my_ray_list_[i]; + // printf("2 Start ray: %d in rank %d \n", i, mpi::rank); total_geometric_intersections_ += ray.transport_history_based_single_ray(); + // printf("3 Start ray: %d in rank %d \n", i, mpi::rank); // If ray has left my subdomain, buffer ray state if(ray.has_left_subdomain()){ @@ -876,6 +846,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } simulation::time_transport.stop(); + // printf("test3\n"); + // Update ray bank by communicating rays in buffer to new owner ranks and removing terminated ranks simulation::time_ray_comms.start(); RB.update(domain_.get()); diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index 22684701986..543df84b159 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -48,7 +48,7 @@ SourceRegion::SourceRegion(int negroups, bool is_linear) } scalar_flux_new_.assign(negroups, 0.0); - source_.resize(negroups); + source_.assign(negroups, 0.0); scalar_flux_final_.assign(negroups, 0.0); tally_task_.resize(negroups); @@ -60,24 +60,25 @@ SourceRegion::SourceRegion(int negroups, bool is_linear) } } -SourceRegion::SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr) - : SourceRegion(handle.negroups_, handle.is_linear_) -{ - scalars_.material_ = handle.material(); - scalars_.mesh_ = handle.mesh(); - scalars_.parent_sr_ = parent_sr; - for (int g = 0; g < scalar_flux_new_.size(); g++) { - scalar_flux_old_[g] = handle.scalar_flux_old(g); - source_[g] = handle.source(g); - } - - if (settings::run_mode == RunMode::FIXED_SOURCE) { - scalars_.external_source_present_ = handle.external_source_present(); - for (int g = 0; g < scalar_flux_new_.size(); g++) { - external_source_[g] = handle.external_source(g); - } - } -} +//TODO: Is this used? +// SourceRegion::SourceRegion(const SourceRegionHandle& handle, int64_t parent_sr) +// : SourceRegion(handle.negroups_, handle.is_linear_) +// { +// scalars_.material_ = handle.material(); +// scalars_.mesh_ = handle.mesh(); +// scalars_.parent_sr_ = parent_sr; +// for (int g = 0; g < scalar_flux_new_.size(); g++) { +// scalar_flux_old_[g] = handle.scalar_flux_old(g); +// source_[g] = handle.source(g); +// } + +// if (settings::run_mode == RunMode::FIXED_SOURCE) { +// scalars_.external_source_present_ = handle.external_source_present(); +// for (int g = 0; g < scalar_flux_new_.size(); g++) { +// external_source_[g] = handle.external_source(g); +// } +// } +// } SourceRegion::SourceRegion(const SourceRegionHandle& handle) : SourceRegion(handle.negroups_, handle.is_linear_) @@ -130,17 +131,27 @@ SourceRegion::SourceRegion(const SourceRegionHandle& handle) // combine two source regions from different ranks together void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) { + // printf("test1\n"); // scalar fields + // printf("SourceRegion_add.volume = %f\n", sr_add.scalars_.volume_); + // printf("SourceRegion.volume = %f\n", scalars_.volume_); scalars_.volume_ += sr_add.scalars_.volume_; + // printf("test1.1\n"); scalars_.volume_sq_ += sr_add.scalars_.volume_sq_; + // printf("test1.2\n"); scalars_.volume_naive_ += sr_add.scalars_.volume_naive_; + // printf("test1.3\n"); scalars_.n_hits_ += sr_add.scalars_.n_hits_; + // printf("test1.4\n"); scalars_.external_source_present_ = std::max(scalars_.external_source_present_, sr_add.scalars_.external_source_present_); + // printf("test1.5\n"); scalars_.centroid_iteration_ += sr_add.scalars_.centroid_iteration_; + // printf("test1.6\n"); if (is_linear) { scalars_.mom_matrix_ += sr_add.scalars_.mom_matrix_; } + // printf("test2\n"); // vector fields #pragma omp simd for (int g = 0; g < scalar_flux_new_.size(); g++) { @@ -153,6 +164,7 @@ void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) { flux_moments_new_[g] += sr_add.flux_moments_new_[g]; } } + // printf("test3\n"); } //============================================================================== @@ -352,9 +364,12 @@ void SourceRegionContainer::adjoint_reset() MomentMatrix {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}); std::fill(mom_matrix_t_.begin(), mom_matrix_t_.end(), MomentMatrix {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}); - std::fill(scalar_flux_old_.begin(), scalar_flux_old_.end(), 0.0); + if (settings::run_mode == RunMode::FIXED_SOURCE) { + std::fill(scalar_flux_old_.begin(), scalar_flux_old_.end(), 0.0); + } else { + std::fill(scalar_flux_old_.begin(), scalar_flux_old_.end(), 1.0); + } std::fill(scalar_flux_new_.begin(), scalar_flux_new_.end(), 0.0); - std::fill(scalar_flux_final_.begin(), scalar_flux_final_.end(), 0.0); std::fill(source_.begin(), source_.end(), 0.0f); std::fill(external_source_.begin(), external_source_.end(), 0.0f); std::fill(source_gradients_.begin(), source_gradients_.end(), diff --git a/src/settings.cpp b/src/settings.cpp index afa42a3c5e6..9dcf7c8dbc8 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -11,6 +11,7 @@ #endif #include "openmc/capi.h" +#include "openmc/collision_track.h" #include "openmc/constants.h" #include "openmc/container_util.h" #include "openmc/distribution.h" @@ -26,6 +27,7 @@ #include "openmc/plot.h" #include "openmc/random_lcg.h" #include "openmc/random_ray/random_ray.h" +#include "openmc/reaction.h" #include "openmc/simulation.h" #include "openmc/source.h" #include "openmc/string_utils.h" @@ -45,6 +47,7 @@ namespace settings { // Default values for boolean flags bool assume_separate {false}; bool check_overlaps {false}; +bool collision_track {false}; bool cmfd_run {false}; bool confidence_intervals {false}; bool create_delayed_neutrons {true}; @@ -114,6 +117,7 @@ int max_order {0}; int n_log_bins {8000}; int n_batches; int n_max_batches; +int max_secondaries {10000}; int max_history_splits {10'000'000}; int max_tracks {1000}; ResScatMethod res_scat_method {ResScatMethod::rvs}; @@ -125,7 +129,9 @@ SolverType solver_type {SolverType::MONTE_CARLO}; std::unordered_set sourcepoint_batch; std::unordered_set statepoint_batch; double source_rejection_fraction {0.05}; +double free_gas_threshold {400.0}; std::unordered_set source_write_surf_id; +CollisionTrackConfig collision_track_config {}; int64_t ssw_max_particles; int64_t ssw_max_files; int64_t ssw_cell_id {C_NONE}; @@ -345,7 +351,6 @@ void get_run_parameters(pugi::xml_node node_base) } FlatSourceDomain::mesh_domain_map_[mesh_id].emplace_back( type, domain_id); - RandomRay::mesh_subdivision_enabled_ = true; } } } @@ -651,6 +656,10 @@ void read_settings_xml(pugi::xml_node root) std::stod(get_node_value(root, "source_rejection_fraction")); } + if (check_for_node(root, "free_gas_threshold")) { + free_gas_threshold = std::stod(get_node_value(root, "free_gas_threshold")); + } + // Survival biasing if (check_for_node(root, "survival_biasing")) { survival_biasing = get_node_value_bool(root, "survival_biasing"); @@ -920,8 +929,72 @@ void read_settings_xml(pugi::xml_node root) } } - // If source is not separate and is to be written out in the statepoint file, - // make sure that the sourcepoint batch numbers are contained in the + // Check if the user has specified to write specific collisions + if (check_for_node(root, "collision_track")) { + settings::collision_track = true; + // Get collision track node + xml_node node_ct = root.child("collision_track"); + collision_track_config = CollisionTrackConfig {}; + + // Determine cell ids at which crossing particles are to be banked + if (check_for_node(node_ct, "cell_ids")) { + auto temp = get_node_array(node_ct, "cell_ids"); + for (const auto& b : temp) { + collision_track_config.cell_ids.insert(b); + } + } + if (check_for_node(node_ct, "reactions")) { + auto temp = get_node_array(node_ct, "reactions"); + for (const auto& b : temp) { + int reaction_int = reaction_type(b); + if (reaction_int > 0) { + collision_track_config.mt_numbers.insert(reaction_int); + } + } + } + if (check_for_node(node_ct, "universe_ids")) { + auto temp = get_node_array(node_ct, "universe_ids"); + for (const auto& b : temp) { + collision_track_config.universe_ids.insert(b); + } + } + if (check_for_node(node_ct, "material_ids")) { + auto temp = get_node_array(node_ct, "material_ids"); + for (const auto& b : temp) { + collision_track_config.material_ids.insert(b); + } + } + if (check_for_node(node_ct, "nuclides")) { + auto temp = get_node_array(node_ct, "nuclides"); + for (const auto& b : temp) { + collision_track_config.nuclides.insert(b); + } + } + if (check_for_node(node_ct, "deposited_E_threshold")) { + collision_track_config.deposited_energy_threshold = + std::stod(get_node_value(node_ct, "deposited_E_threshold")); + } + // Get maximum number of particles to be banked per collision + if (check_for_node(node_ct, "max_collisions")) { + collision_track_config.max_collisions = + std::stoll(get_node_value(node_ct, "max_collisions")); + } else { + warning("A maximum number of collisions needs to be specified. " + "By default the code sets 'max_collisions' parameter equals to " + "1000."); + } + // Get maximum number of collision_track files to be created + if (check_for_node(node_ct, "max_collision_track_files")) { + collision_track_config.max_files = + std::stoll(get_node_value(node_ct, "max_collision_track_files")); + } + if (check_for_node(node_ct, "mcpl")) { + collision_track_config.mcpl_write = get_node_value_bool(node_ct, "mcpl"); + } + } + + // If source is not separate and is to be written out in the statepoint + // file, make sure that the sourcepoint batch numbers are contained in the // statepoint list if (!source_separate) { for (const auto& b : sourcepoint_batch) { @@ -1144,6 +1217,11 @@ void read_settings_xml(pugi::xml_node root) weight_windows_on = get_node_value_bool(root, "weight_windows_on"); } + if (check_for_node(root, "max_secondaries")) { + settings::max_secondaries = + std::stoi(get_node_value(root, "max_secondaries")); + } + if (check_for_node(root, "max_history_splits")) { settings::max_history_splits = std::stoi(get_node_value(root, "max_history_splits")); @@ -1161,8 +1239,8 @@ void read_settings_xml(pugi::xml_node root) variance_reduction::weight_windows_generators.emplace_back( std::make_unique(node_wwg)); } - // if any of the weight windows are intended to be generated otf, make sure - // they're applied + // if any of the weight windows are intended to be generated otf, make + // sure they're applied for (const auto& wwg : variance_reduction::weight_windows_generators) { if (wwg->on_the_fly_) { settings::weight_windows_on = true; @@ -1210,11 +1288,6 @@ extern "C" int openmc_set_n_batches( return OPENMC_E_INVALID_ARGUMENT; } - if (simulation::current_batch >= n_batches) { - set_errmsg("Number of batches must be greater than current batch."); - return OPENMC_E_INVALID_ARGUMENT; - } - if (!settings::trigger_on) { // Set n_batches and n_max_batches to same value settings::n_batches = n_batches; diff --git a/src/simulation.cpp b/src/simulation.cpp index b9986f47375..b536ae5881f 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp @@ -2,6 +2,7 @@ #include "openmc/bank.h" #include "openmc/capi.h" +#include "openmc/collision_track.h" #include "openmc/container_util.h" #include "openmc/eigenvalue.h" #include "openmc/error.h" @@ -9,7 +10,6 @@ #include "openmc/geometry_aux.h" #include "openmc/ifp.h" #include "openmc/material.h" -#include "openmc/mcpl_interface.h" #include "openmc/message_passing.h" #include "openmc/nuclide.h" #include "openmc/output.h" @@ -118,6 +118,7 @@ int openmc_simulation_init() // Reset global variables -- this is done before loading state point (as that // will potentially populate k_generation and entropy) simulation::current_batch = 0; + simulation::ct_current_file = 1; simulation::ssw_current_file = 1; simulation::k_generation.clear(); simulation::entropy.clear(); @@ -297,6 +298,7 @@ namespace openmc { namespace simulation { +int ct_current_file; int current_batch; int current_gen; bool initialized {false}; @@ -347,6 +349,11 @@ void allocate_banks() // Allocate surface source bank simulation::surf_source_bank.reserve(settings::ssw_max_particles); } + + if (settings::collision_track) { + // Allocate collision track bank + collision_track_reserve_bank(); + } } void initialize_batch() @@ -400,11 +407,8 @@ void finalize_batch() simulation::time_tallies.stop(); // update weight windows if needed - if (settings::solver_type != SolverType::RANDOM_RAY || - simulation::current_batch == settings::n_batches) { - for (const auto& wwg : variance_reduction::weight_windows_generators) { - wwg->update(); - } + for (const auto& wwg : variance_reduction::weight_windows_generators) { + wwg->update(); } // Reset global tally results @@ -493,6 +497,10 @@ void finalize_batch() ++simulation::ssw_current_file; } } + // Write collision track file if requested + if (settings::collision_track) { + collision_track_flush_bank(); + } } void initialize_generation() @@ -674,8 +682,9 @@ void calculate_work() void initialize_data() { // Determine minimum/maximum energy for incident neutron/photon data - data::energy_max = {INFTY, INFTY}; - data::energy_min = {0.0, 0.0}; + data::energy_max = {INFTY, INFTY, INFTY, INFTY}; + data::energy_min = {0.0, 0.0, 0.0, 0.0}; + for (const auto& nuc : data::nuclides) { if (nuc->grid_.size() >= 1) { int neutron = static_cast(ParticleType::neutron); @@ -703,11 +712,21 @@ void initialize_data() // than the current minimum/maximum if (data::ttb_e_grid.size() >= 1) { int photon = static_cast(ParticleType::photon); + int electron = static_cast(ParticleType::electron); + int positron = static_cast(ParticleType::positron); int n_e = data::ttb_e_grid.size(); + + const std::vector charged = {electron, positron}; + for (auto t : charged) { + data::energy_min[t] = std::exp(data::ttb_e_grid(1)); + data::energy_max[t] = std::exp(data::ttb_e_grid(n_e - 1)); + } + data::energy_min[photon] = - std::max(data::energy_min[photon], std::exp(data::ttb_e_grid(1))); - data::energy_max[photon] = std::min( - data::energy_max[photon], std::exp(data::ttb_e_grid(n_e - 1))); + std::max(data::energy_min[photon], data::energy_min[electron]); + + data::energy_max[photon] = + std::min(data::energy_max[photon], data::energy_max[electron]); } } } diff --git a/src/source.cpp b/src/source.cpp index 12323f7bd7e..f6aa665ebd3 100644 --- a/src/source.cpp +++ b/src/source.cpp @@ -290,6 +290,12 @@ IndependentSource::IndependentSource(pugi::xml_node node) : Source(node) } else if (temp_str == "photon") { particle_ = ParticleType::photon; settings::photon_transport = true; + } else if (temp_str == "electron") { + particle_ = ParticleType::electron; + settings::photon_transport = true; + } else if (temp_str == "positron") { + particle_ = ParticleType::positron; + settings::photon_transport = true; } else { fatal_error(std::string("Unknown source particle type: ") + temp_str); } diff --git a/src/state_point.cpp b/src/state_point.cpp index 8195c486507..47296da3a51 100644 --- a/src/state_point.cpp +++ b/src/state_point.cpp @@ -9,6 +9,7 @@ #include #include "openmc/bank.h" +#include "openmc/bank_io.h" #include "openmc/capi.h" #include "openmc/constants.h" #include "openmc/eigenvalue.h" @@ -201,6 +202,12 @@ extern "C" int openmc_statepoint_write(const char* filename, bool* write_source) write_attribute(tally_group, "multiply_density", 0); } + if (tally->higher_moments()) { + write_attribute(tally_group, "higher_moments", 1); + } else { + write_attribute(tally_group, "higher_moments", 0); + } + if (tally->estimator_ == TallyEstimator::ANALOG) { write_dataset(tally_group, "estimator", "analog"); } else if (tally->estimator_ == TallyEstimator::TRACKLENGTH) { @@ -264,12 +271,13 @@ extern "C" int openmc_statepoint_write(const char* filename, bool* write_source) for (const auto& tally : model::tallies) { if (!tally->writable_) continue; - // Write sum and sum_sq for each bin + + // Write results for each bin std::string name = "tally " + std::to_string(tally->id_); hid_t tally_group = open_group(tallies_group, name.c_str()); auto& results = tally->results_; write_tally_results(tally_group, results.shape()[0], - results.shape()[1], results.data()); + results.shape()[1], results.shape()[2], results.data()); close_group(tally_group); } } else { @@ -509,7 +517,8 @@ extern "C" int openmc_statepoint_load(const char* filename) } else { auto& results = tally->results_; read_tally_results(tally_group, results.shape()[0], - results.shape()[1], results.data()); + results.shape()[1], results.shape()[2], results.data()); + read_dataset(tally_group, "n_realizations", tally->n_realizations_); close_group(tally_group); } @@ -634,91 +643,12 @@ void write_source_bank(hid_t group_id, span source_bank, { hid_t banktype = h5banktype(); - // Set total and individual process dataspace sizes for source bank - int64_t dims_size = bank_index.back(); - int64_t count_size = bank_index[mpi::rank + 1] - bank_index[mpi::rank]; - -#ifdef PHDF5 - // Set size of total dataspace for all procs and rank - hsize_t dims[] {static_cast(dims_size)}; - hid_t dspace = H5Screate_simple(1, dims, nullptr); - hid_t dset = H5Dcreate(group_id, "source_bank", banktype, dspace, H5P_DEFAULT, - H5P_DEFAULT, H5P_DEFAULT); - - // Create another data space but for each proc individually - hsize_t count[] {static_cast(count_size)}; - hid_t memspace = H5Screate_simple(1, count, nullptr); - - // Select hyperslab for this dataspace - hsize_t start[] {static_cast(bank_index[mpi::rank])}; - H5Sselect_hyperslab(dspace, H5S_SELECT_SET, start, nullptr, count, nullptr); - - // Set up the property list for parallel writing - hid_t plist = H5Pcreate(H5P_DATASET_XFER); - H5Pset_dxpl_mpio(plist, H5FD_MPIO_COLLECTIVE); - - // Write data to file in parallel - H5Dwrite(dset, banktype, memspace, dspace, plist, source_bank.data()); - - // Free resources - H5Sclose(dspace); - H5Sclose(memspace); - H5Dclose(dset); - H5Pclose(plist); - -#else - - if (mpi::master) { - // Create dataset big enough to hold all source sites - hsize_t dims[] {static_cast(dims_size)}; - hid_t dspace = H5Screate_simple(1, dims, nullptr); - hid_t dset = H5Dcreate(group_id, "source_bank", banktype, dspace, - H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); - - // Save source bank sites since the array is overwritten below -#ifdef OPENMC_MPI - vector temp_source {source_bank.begin(), source_bank.end()}; -#endif - - for (int i = 0; i < mpi::n_procs; ++i) { - // Create memory space - hsize_t count[] {static_cast(bank_index[i + 1] - bank_index[i])}; - hid_t memspace = H5Screate_simple(1, count, nullptr); - -#ifdef OPENMC_MPI - // Receive source sites from other processes - if (i > 0) - MPI_Recv(source_bank.data(), count[0], mpi::source_site, i, i, - mpi::intracomm, MPI_STATUS_IGNORE); -#endif - - // Select hyperslab for this dataspace - dspace = H5Dget_space(dset); - hsize_t start[] {static_cast(bank_index[i])}; - H5Sselect_hyperslab( - dspace, H5S_SELECT_SET, start, nullptr, count, nullptr); - - // Write data to hyperslab - H5Dwrite( - dset, banktype, memspace, dspace, H5P_DEFAULT, source_bank.data()); - - H5Sclose(memspace); - H5Sclose(dspace); - } - - // Close all ids - H5Dclose(dset); - -#ifdef OPENMC_MPI - // Restore state of source bank - std::copy(temp_source.begin(), temp_source.end(), source_bank.begin()); -#endif - } else { #ifdef OPENMC_MPI - MPI_Send(source_bank.data(), count_size, mpi::source_site, 0, mpi::rank, - mpi::intracomm); -#endif - } + write_bank_dataset("source_bank", group_id, source_bank, bank_index, banktype, + mpi::source_site); +#else + write_bank_dataset( + "source_bank", group_id, source_bank, bank_index, banktype); #endif H5Tclose(banktype); @@ -1001,7 +931,8 @@ void write_tally_results_nr(hid_t file_id) // Write reduced tally results to file auto shape = results_copy.shape(); - write_tally_results(tally_group, shape[0], shape[1], results_copy.data()); + write_tally_results( + tally_group, shape[0], shape[1], shape[2], results_copy.data()); close_group(tally_group); } else { diff --git a/src/tallies/tally.cpp b/src/tallies/tally.cpp index b29d2b67605..9b4f906c4bc 100644 --- a/src/tallies/tally.cpp +++ b/src/tallies/tally.cpp @@ -27,10 +27,12 @@ #include "openmc/tallies/filter_legendre.h" #include "openmc/tallies/filter_mesh.h" #include "openmc/tallies/filter_meshborn.h" +#include "openmc/tallies/filter_meshmaterial.h" #include "openmc/tallies/filter_meshsurface.h" #include "openmc/tallies/filter_particle.h" #include "openmc/tallies/filter_sph_harm.h" #include "openmc/tallies/filter_surface.h" +#include "openmc/tallies/filter_time.h" #include "openmc/xml_interface.h" #include "xtensor/xadapt.hpp" @@ -38,9 +40,10 @@ #include "xtensor/xview.hpp" #include -#include // for max +#include // for max, set_union #include -#include // for size_t +#include // for size_t +#include // for back_inserter #include namespace openmc { @@ -56,11 +59,13 @@ vector> tallies; vector active_tallies; vector active_analog_tallies; vector active_tracklength_tallies; +vector active_timed_tracklength_tallies; vector active_collision_tallies; vector active_meshsurf_tallies; vector active_surface_tallies; vector active_pulse_height_tallies; vector pulse_height_cells; +vector time_grid; } // namespace model namespace simulation { @@ -102,6 +107,9 @@ Tally::Tally(pugi::xml_node node) multiply_density_ = get_node_value_bool(node, "multiply_density"); } + if (check_for_node(node, "higher_moments")) { + higher_moments_ = get_node_value_bool(node, "higher_moments"); + } // ======================================================================= // READ DATA FOR FILTERS @@ -243,8 +251,8 @@ Tally::Tally(pugi::xml_node node) for (int score : scores_) { switch (score) { case SCORE_PULSE_HEIGHT: - fatal_error( - "For pulse-height tallies, photon transport needs to be activated."); + fatal_error("For pulse-height tallies, photon transport needs to be " + "activated."); break; } } @@ -318,7 +326,8 @@ Tally::Tally(pugi::xml_node node) if (has_energyout && i_nuc == -1) { fatal_error(fmt::format( "Error on tally {}: Cannot use a " - "'nuclide_density' or 'temperature' derivative on a tally with an " + "'nuclide_density' or 'temperature' derivative on a tally with " + "an " "outgoing energy filter and 'total' nuclide rate. Instead, tally " "each nuclide in the material individually.", id_)); @@ -493,9 +502,9 @@ void Tally::add_filter(Filter* filter) void Tally::set_strides() { - // Set the strides. Filters are traversed in reverse so that the last filter - // has the shortest stride in memory and the first filter has the longest - // stride. + // Set the strides. Filters are traversed in reverse so that the last + // filter has the shortest stride in memory and the first filter has the + // longest stride. auto n = filters_.size(); strides_.resize(n, 0); int stride = 1; @@ -551,9 +560,11 @@ void Tally::set_scores(const vector& scores) // Iterate over the given scores. for (auto score_str : scores) { - // Make sure a delayed group filter wasn't used with an incompatible score. + // Make sure a delayed group filter wasn't used with an incompatible + // score. if (delayedgroup_filter_ != C_NONE) { - if (score_str != "delayed-nu-fission" && score_str != "decay-rate") + if (score_str != "delayed-nu-fission" && score_str != "decay-rate" && + score_str != "ifp-beta-numerator") fatal_error("Cannot tally " + score_str + "with a delayedgroup filter"); } @@ -792,7 +803,11 @@ void Tally::init_triggers(pugi::xml_node node) void Tally::init_results() { int n_scores = scores_.size() * nuclides_.size(); - results_ = xt::empty({n_filter_bins_, n_scores, 3}); + if (higher_moments_) { + results_ = xt::empty({n_filter_bins_, n_scores, 5}); + } else { + results_ = xt::empty({n_filter_bins_, n_scores, 3}); + } } void Tally::reset() @@ -817,22 +832,46 @@ void Tally::accumulate() total_source = 1.0; } + // Determine number of particles contributing to tally + double contributing_particles = settings::reduce_tallies + ? settings::n_particles + : simulation::work_per_rank; + // Account for number of source particles in normalization double norm = - total_source / (settings::n_particles * settings::gen_per_batch); + total_source / (contributing_particles * settings::gen_per_batch); if (settings::solver_type == SolverType::RANDOM_RAY) { norm = 1.0; } -// Accumulate each result + // Accumulate each result + if (higher_moments_) { +#pragma omp parallel for + // filter bins (specific cell, energy bins) + for (int i = 0; i < results_.shape()[0]; ++i) { + // score bins (flux, total reaction rate, fission reaction rate, etc.) + for (int j = 0; j < results_.shape()[1]; ++j) { + double val = results_(i, j, TallyResult::VALUE) * norm; + double val2 = val * val; + results_(i, j, TallyResult::VALUE) = 0.0; + results_(i, j, TallyResult::SUM) += val; + results_(i, j, TallyResult::SUM_SQ) += val2; + results_(i, j, TallyResult::SUM_THIRD) += val2 * val; + results_(i, j, TallyResult::SUM_FOURTH) += val2 * val2; + } + } + } else { #pragma omp parallel for - for (int i = 0; i < results_.shape()[0]; ++i) { - for (int j = 0; j < results_.shape()[1]; ++j) { - double val = results_(i, j, TallyResult::VALUE) * norm; - results_(i, j, TallyResult::VALUE) = 0.0; - results_(i, j, TallyResult::SUM) += val; - results_(i, j, TallyResult::SUM_SQ) += val * val; + // filter bins (specific cell, energy bins) + for (int i = 0; i < results_.shape()[0]; ++i) { + // score bins (flux, total reaction rate, fission reaction rate, etc.) + for (int j = 0; j < results_.shape()[1]; ++j) { + double val = results_(i, j, TallyResult::VALUE) * norm; + results_(i, j, TallyResult::VALUE) = 0.0; + results_(i, j, TallyResult::SUM) += val; + results_(i, j, TallyResult::SUM_SQ) += val * val; + } } } } @@ -984,8 +1023,8 @@ void reduce_tally_results() } } - // Note that global tallies are *always* reduced even when no_reduce option is - // on. + // Note that global tallies are *always* reduced even when no_reduce option + // is on. // Get view of global tally values auto& gt = simulation::global_tallies; @@ -1064,21 +1103,59 @@ void accumulate_tallies() } } +double distance_to_time_boundary(double time, double speed) +{ + if (model::time_grid.empty()) { + return INFTY; + } else if (time >= model::time_grid.back()) { + return INFTY; + } else { + double next_time = + *std::upper_bound(model::time_grid.begin(), model::time_grid.end(), time); + return (next_time - time) * speed; + } +} + +//! Add new points to the global time grid +// +//! \param grid Vector of new time points to add +void add_to_time_grid(vector grid) +{ + if (grid.empty()) + return; + + // Create new vector with enough space to hold old and new grid points + vector merged; + merged.reserve(model::time_grid.size() + grid.size()); + + // Merge and remove duplicates + std::set_union(model::time_grid.begin(), model::time_grid.end(), grid.begin(), + grid.end(), std::back_inserter(merged)); + + // Swap in the new grid + model::time_grid.swap(merged); +} + void setup_active_tallies() { model::active_tallies.clear(); model::active_analog_tallies.clear(); model::active_tracklength_tallies.clear(); + model::active_timed_tracklength_tallies.clear(); model::active_collision_tallies.clear(); model::active_meshsurf_tallies.clear(); model::active_surface_tallies.clear(); model::active_pulse_height_tallies.clear(); + model::time_grid.clear(); for (auto i = 0; i < model::tallies.size(); ++i) { const auto& tally {*model::tallies[i]}; if (tally.active_) { model::active_tallies.push_back(i); + bool mesh_present = (tally.get_filter() || + tally.get_filter()); + auto time_filter = tally.get_filter(); switch (tally.type_) { case TallyType::VOLUME: @@ -1087,7 +1164,12 @@ void setup_active_tallies() model::active_analog_tallies.push_back(i); break; case TallyEstimator::TRACKLENGTH: - model::active_tracklength_tallies.push_back(i); + if (time_filter && mesh_present) { + model::active_timed_tracklength_tallies.push_back(i); + add_to_time_grid(time_filter->bins()); + } else { + model::active_tracklength_tallies.push_back(i); + } break; case TallyEstimator::COLLISION: model::active_collision_tallies.push_back(i); @@ -1123,10 +1205,12 @@ void free_memory_tally() model::active_tallies.clear(); model::active_analog_tallies.clear(); model::active_tracklength_tallies.clear(); + model::active_timed_tracklength_tallies.clear(); model::active_collision_tallies.clear(); model::active_meshsurf_tallies.clear(); model::active_surface_tallies.clear(); model::active_pulse_height_tallies.clear(); + model::time_grid.clear(); model::tally_map.clear(); } @@ -1465,8 +1549,8 @@ extern "C" int openmc_tally_get_n_realizations(int32_t index, int32_t* n) return 0; } -//! \brief Returns a pointer to a tally results array along with its shape. This -//! allows a user to obtain in-memory tally results from Python directly. +//! \brief Returns a pointer to a tally results array along with its shape. +//! This allows a user to obtain in-memory tally results from Python directly. extern "C" int openmc_tally_results( int32_t index, double** results, size_t* shape) { diff --git a/src/tallies/tally_scoring.cpp b/src/tallies/tally_scoring.cpp index e73fb90f311..67e851644a9 100644 --- a/src/tallies/tally_scoring.cpp +++ b/src/tallies/tally_scoring.cpp @@ -233,7 +233,7 @@ double score_fission_q(const Particle& p, int score_bin, const Tally& tally, double score {0.0}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); const Nuclide& nuc {*data::nuclides[j_nuclide]}; score += get_nuc_fission_q(nuc, p, score_bin) * atom_density * p.neutron_xs(j_nuclide).fission; @@ -696,7 +696,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); score += p.neutron_xs(j_nuclide).fission * data::nuclides[j_nuclide]->nu( E, ReactionProduct::EmissionMode::prompt) * @@ -743,7 +743,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); // Tally each delayed group bin individually for (auto d_bin = 0; d_bin < filt.n_bins(); ++d_bin) { auto d = filt.groups()[d_bin]; @@ -763,7 +763,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); score += p.neutron_xs(j_nuclide).fission * data::nuclides[j_nuclide]->nu( E, ReactionProduct::EmissionMode::delayed) * @@ -824,7 +824,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); const auto& nuc {*data::nuclides[j_nuclide]}; if (nuc.fissionable_) { const auto& rxn {*nuc.fission_rx_[0]}; @@ -849,7 +849,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); const auto& nuc {*data::nuclides[j_nuclide]}; if (nuc.fissionable_) { const auto& rxn {*nuc.fission_rx_[0]}; @@ -893,7 +893,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); const auto& nuc {*data::nuclides[j_nuclide]}; if (nuc.fissionable_) { const auto& rxn {*nuc.fission_rx_[0]}; @@ -924,7 +924,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); if (p.neutron_xs(j_nuclide).elastic == CACHE_INVALID) data::nuclides[j_nuclide]->calculate_elastic_xs(p); score += p.neutron_xs(j_nuclide).elastic * atom_density * flux; @@ -964,6 +964,15 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, if (delayed_groups.size() == settings::ifp_n_generation) { if (delayed_groups[0] > 0) { score = p.wgt_last(); + if (tally.delayedgroup_filter_ != C_NONE) { + auto i_dg_filt = tally.filters()[tally.delayedgroup_filter_]; + const DelayedGroupFilter& filt { + *dynamic_cast( + model::tally_filters[i_dg_filt].get())}; + score_fission_delayed_dg(i_tally, delayed_groups[0] - 1, + score, score_index, p.filter_matches()); + continue; + } } } } @@ -1025,7 +1034,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); score += p.neutron_xs(j_nuclide).reaction[m] * atom_density * flux; } } @@ -1079,7 +1088,7 @@ void score_general_ce_nonanalog(Particle& p, int i_tally, int start_index, const Material& material {*model::materials[p.material()]}; for (auto i = 0; i < material.nuclide_.size(); ++i) { auto j_nuclide = material.nuclide_[i]; - auto atom_density = material.atom_density_(i); + auto atom_density = material.atom_density(i, p.density_mult()); score += get_nuclide_xs(p, j_nuclide, score_bin) * atom_density * flux; } @@ -1624,8 +1633,7 @@ void score_general_mg(Particle& p, int i_tally, int start_index, tally.estimator_ == TallyEstimator::COLLISION) { if (settings::survival_biasing) { // Determine weight that was absorbed - wgt_absorb = p.wgt_last() * p.neutron_xs(p.event_nuclide()).absorption / - p.neutron_xs(p.event_nuclide()).total; + wgt_absorb = p.wgt_last() * p.macro_xs().absorption / p.macro_xs().total; // Then we either are alive and had a scatter (and so g changed), // or are dead and g did not change @@ -2383,7 +2391,8 @@ void score_analog_tally_mg(Particle& p) model::materials[p.material()]->mat_nuclide_index_[i_nuclide]; if (j == C_NONE) continue; - atom_density = model::materials[p.material()]->atom_density_(j); + atom_density = + model::materials[p.material()]->atom_density(j, p.density_mult()); } score_general_mg(p, i_tally, i * tally.scores_.size(), filter_index, @@ -2404,15 +2413,13 @@ void score_analog_tally_mg(Particle& p) match.bins_present_ = false; } -void score_tracklength_tally(Particle& p, double distance) +void score_tracklength_tally_general( + Particle& p, double flux, const vector& tallies) { - // Determine the tracklength estimate of the flux - double flux = p.wgt() * distance; - // Set 'none' value for log union grid index int i_log_union = C_NONE; - for (auto i_tally : model::active_tracklength_tallies) { + for (auto i_tally : tallies) { const Tally& tally {*model::tallies[i_tally]}; // Initialize an iterator over valid filter bin combinations. If there are @@ -2451,8 +2458,9 @@ void score_tracklength_tally(Particle& p, double distance) atom_density = 1.0; } } else { - atom_density = - tally.multiply_density() ? mat->atom_density_(j) : 1.0; + atom_density = tally.multiply_density() + ? mat->atom_density(j, p.density_mult()) + : 1.0; } } } @@ -2481,6 +2489,57 @@ void score_tracklength_tally(Particle& p, double distance) match.bins_present_ = false; } +void score_timed_tracklength_tally(Particle& p, double total_distance) +{ + double speed = p.speed(); + double total_dt = total_distance / speed; + + // save particle last state + auto time_last = p.time_last(); + auto r_last = p.r_last(); + + // move particle back + p.move_distance(-total_distance); + p.time() -= total_dt; + p.lifetime() -= total_dt; + + double distance_traveled = 0.0; + while (distance_traveled < total_distance) { + + double distance = std::min(distance_to_time_boundary(p.time(), speed), + total_distance - distance_traveled); + double dt = distance / speed; + + // Save particle last state for tracklength tallies + p.time_last() = p.time(); + p.r_last() = p.r(); + + // Advance particle in space and time + p.move_distance(distance); + p.time() += dt; + p.lifetime() += dt; + + // Determine the tracklength estimate of the flux + double flux = p.wgt() * distance; + + score_tracklength_tally_general( + p, flux, model::active_timed_tracklength_tallies); + distance_traveled += distance; + } + + p.time_last() = time_last; + p.r_last() = r_last; +} + +void score_tracklength_tally(Particle& p, double distance) +{ + + // Determine the tracklength estimate of the flux + double flux = p.wgt() * distance; + + score_tracklength_tally_general(p, flux, model::active_tracklength_tallies); +} + void score_collision_tally(Particle& p) { // Determine the collision estimate of the flux @@ -2530,8 +2589,9 @@ void score_collision_tally(Particle& p) atom_density = 1.0; } } else { - atom_density = - tally.multiply_density() ? mat->atom_density_(j) : 1.0; + atom_density = tally.multiply_density() + ? mat->atom_density(j, p.density_mult()) + : 1.0; } } diff --git a/src/weight_windows.cpp b/src/weight_windows.cpp index 26762ad18a6..9333800bc36 100644 --- a/src/weight_windows.cpp +++ b/src/weight_windows.cpp @@ -26,6 +26,7 @@ #include "openmc/random_ray/flat_source_domain.h" #include "openmc/search.h" #include "openmc/settings.h" +#include "openmc/simulation.h" #include "openmc/tallies/filter_energy.h" #include "openmc/tallies/filter_mesh.h" #include "openmc/tallies/filter_particle.h" @@ -546,8 +547,10 @@ void WeightWindows::update_weights(const Tally* tally, const std::string& value, // build a shape for a view of the tally results, this will always be // dimension 5 (3 filter dimensions, 1 score dimension, 1 results dimension) - std::array shape = { - 1, 1, 1, tally->n_scores(), static_cast(TallyResult::SIZE)}; + // Look for the size of the last dimension of the results array + const auto& results_arr = tally->results(); + const int results_dim = static_cast(results_arr.shape()[2]); + std::array shape = {1, 1, 1, tally->n_scores(), results_dim}; // set the shape for the filters applied on the tally for (int i = 0; i < tally->filters().size(); i++) { @@ -585,7 +588,7 @@ void WeightWindows::update_weights(const Tally* tally, const std::string& value, // get a fully reshaped view of the tally according to tally ordering of // filters - auto tally_values = xt::reshape_view(tally->results(), shape); + auto tally_values = xt::reshape_view(results_arr, shape); // get a that is (particle, energy, mesh, scores, values) auto transposed_view = xt::transpose(tally_values, transpose); @@ -966,11 +969,17 @@ void WeightWindowsGenerator::update() const Tally* tally = model::tallies[tally_idx_].get(); - // if we're beyond the number of max realizations or not at the corrrect - // update interval, skip the update - if (max_realizations_ < tally->n_realizations_ || - tally->n_realizations_ % update_interval_ != 0) + // If in random ray mode, only update on the last batch + if (settings::solver_type == SolverType::RANDOM_RAY) { + if (simulation::current_batch != settings::n_batches) { + return; + } + // If in Monte Carlo mode and beyond the number of max realizations or + // not at the correct update interval, skip the update + } else if (max_realizations_ < tally->n_realizations_ || + tally->n_realizations_ % update_interval_ != 0) { return; + } wws->update_weights(tally, tally_value_, threshold_, ratio_, method_); @@ -1328,6 +1337,10 @@ extern "C" int openmc_weight_windows_import(const char* filename) hid_t weight_windows_group = open_group(ww_file, "weight_windows"); + hid_t mesh_group = open_group(ww_file, "meshes"); + + read_meshes(mesh_group); + std::vector names = group_names(weight_windows_group); for (const auto& name : names) { diff --git a/temp.cpp b/temp.cpp new file mode 100644 index 00000000000..5ff15097b19 --- /dev/null +++ b/temp.cpp @@ -0,0 +1,495 @@ +#include "openmc/geometry.h" + +#include +#include + +#include "openmc/array.h" +#include "openmc/cell.h" +#include "openmc/constants.h" +#include "openmc/error.h" +#include "openmc/lattice.h" +#include "openmc/settings.h" +#include "openmc/simulation.h" +#include "openmc/string_utils.h" +#include "openmc/surface.h" + +namespace openmc { + +//============================================================================== +// Global variables +//============================================================================== + +namespace model { + +int root_universe {-1}; +int n_coord_levels; + +vector overlap_check_count; + +} // namespace model + +//============================================================================== +// Non-member functions +//============================================================================== + +bool check_cell_overlap(GeometryState& p, bool error) +{ + int n_coord = p.n_coord(); + + // Loop through each coordinate level + for (int j = 0; j < n_coord; j++) { + Universe& univ = *model::universes[p.coord(j).universe()]; + + // Loop through each cell on this level + for (auto index_cell : univ.cells_) { + Cell& c = *model::cells[index_cell]; + if (c.contains(p.coord(j).r(), p.coord(j).u(), p.surface())) { + if (index_cell != p.coord(j).cell()) { + if (error) { + fatal_error( + fmt::format("Overlapping cells detected: {}, {} on universe {}", + c.id_, model::cells[p.coord(j).cell()]->id_, univ.id_)); + } + return true; + } +#pragma omp atomic + ++model::overlap_check_count[index_cell]; + } + } + } + + return false; +} + +//============================================================================== + +int cell_instance_at_level(const GeometryState& p, int level) +{ + // throw error if the requested level is too deep for the geometry + if (level > model::n_coord_levels) { + fatal_error(fmt::format("Cell instance at level {} requested, but only {} " + "levels exist in the geometry.", + level, p.n_coord())); + } + + // determine the cell instance + Cell& c {*model::cells[p.coord(level).cell()]}; + + // quick exit if this cell doesn't have distribcell instances + if (c.distribcell_index_ == C_NONE) + return C_NONE; + + // compute the cell's instance + int instance = 0; + for (int i = 0; i < level; i++) { + const auto& c_i {*model::cells[p.coord(i).cell()]}; + if (c_i.type_ == Fill::UNIVERSE) { + instance += c_i.offset_[c.distribcell_index_]; + } else if (c_i.type_ == Fill::LATTICE) { + instance += c_i.offset_[c.distribcell_index_]; + auto& lat {*model::lattices[p.coord(i + 1).lattice()]}; + const auto& i_xyz {p.coord(i + 1).lattice_index()}; + if (lat.are_valid_indices(i_xyz)) { + instance += lat.offset(c.distribcell_index_, i_xyz); + } + } + } + return instance; +} + +//============================================================================== + +bool find_cell_inner( + GeometryState& p, const NeighborList* neighbor_list, bool verbose) +{ + // Find which cell of this universe the particle is in. Use the neighbor list + // to shorten the search if one was provided. + bool found = false; + int32_t i_cell = C_NONE; + if (neighbor_list) { + for (auto it = neighbor_list->cbegin(); it != neighbor_list->cend(); ++it) { + i_cell = *it; + + // Make sure the search cell is in the same universe. + int i_universe = p.lowest_coord().universe(); + if (model::cells[i_cell]->universe_ != i_universe) + continue; + + // Check if this cell contains the particle. + Position r {p.r_local()}; + Direction u {p.u_local()}; + auto surf = p.surface(); + if (model::cells[i_cell]->contains(r, u, surf)) { + p.lowest_coord().cell() = i_cell; + found = true; + break; + } + } + + // If we're attempting a neighbor list search and fail, we + // now know we should return false. This will trigger an + // exhaustive search from neighbor_list_find_cell and make + // the result from that be appended to the neighbor list. + if (!found) { + return found; + } + } + + // Check successively lower coordinate levels until finding material fill + for (;; ++p.n_coord()) { + // If we did not attempt to use neighbor lists, i_cell is still C_NONE. In + // that case, we should now do an exhaustive search to find the right value + // of i_cell. + // + // Alternatively, neighbor list searches could have succeeded, but we found + // that the fill of the neighbor cell was another universe. As such, in the + // code below this conditional, we set i_cell back to C_NONE to indicate + // that. + if (i_cell == C_NONE) { + int i_universe = p.lowest_coord().universe(); + const auto& univ {model::universes[i_universe]}; + found = univ->find_cell(p); + } + + if (!found) { + return found; + } + i_cell = p.lowest_coord().cell(); + + // Announce the cell that the particle is entering. + if (found && verbose) { + auto msg = fmt::format(" Entering cell {}", model::cells[i_cell]->id_); + write_message(msg, 1); + } + + Cell& c {*model::cells[i_cell]}; + if (c.type_ == Fill::MATERIAL) { + // Found a material cell which means this is the lowest coord level. + + p.cell_instance() = 0; + // Find the distribcell instance number. + if (c.distribcell_index_ >= 0) { + p.cell_instance() = cell_instance_at_level(p, p.n_coord() - 1); + } + + // Set the material, temperature and density multiplier. + p.material_last() = p.material(); + p.material() = c.material(p.cell_instance()); + p.sqrtkT_last() = p.sqrtkT(); + p.sqrtkT() = c.sqrtkT(p.cell_instance()); + p.density_mult_last() = p.density_mult(); + p.density_mult() = c.density_mult(p.cell_instance()); + + return true; + + } else if (c.type_ == Fill::UNIVERSE) { + //======================================================================== + //! Found a lower universe, update this coord level then search the next. + + // Set the lower coordinate level universe. + auto& coord {p.coord(p.n_coord())}; + coord.universe() = c.fill_; + + // Set the position and direction. + coord.r() = p.r_local(); + coord.u() = p.u_local(); + + // Apply translation. + coord.r() -= c.translation_; + + // Apply rotation. + if (!c.rotation_.empty()) { + coord.rotate(c.rotation_); + } + + } else if (c.type_ == Fill::LATTICE) { + //======================================================================== + //! Found a lower lattice, update this coord level then search the next. + + Lattice& lat {*model::lattices[c.fill_]}; + + // Set the position and direction. + auto& coord {p.coord(p.n_coord())}; + coord.r() = p.r_local(); + coord.u() = p.u_local(); + + // Apply translation. + coord.r() -= c.translation_; + + // Apply rotation. + if (!c.rotation_.empty()) { + coord.rotate(c.rotation_); + } + + // Determine lattice indices. + auto& i_xyz {coord.lattice_index()}; + lat.get_indices(coord.r(), coord.u(), i_xyz); + + // Get local position in appropriate lattice cell + coord.r() = lat.get_local_position(coord.r(), i_xyz); + + // Set lattice indices. + coord.lattice() = c.fill_; + + // Set the lower coordinate level universe. + if (lat.are_valid_indices(i_xyz)) { + coord.universe() = lat[i_xyz]; + } else { + if (lat.outer_ != NO_OUTER_UNIVERSE) { + coord.universe() = lat.outer_; + } else { + p.mark_as_lost(fmt::format( + "Particle {} left lattice {}, but it has no outer definition.", + p.id(), lat.id_)); + } + } + } + i_cell = C_NONE; // trip non-neighbor cell search at next iteration + found = false; + } + + return found; +} + +//============================================================================== + +bool neighbor_list_find_cell(GeometryState& p, bool verbose) +{ + + // Reset all the deeper coordinate levels. + for (int i = p.n_coord(); i < model::n_coord_levels; i++) { + p.coord(i).reset(); + } + + // Get the cell this particle was in previously. + auto coord_lvl = p.n_coord() - 1; + auto i_cell = p.coord(coord_lvl).cell(); + Cell& c {*model::cells[i_cell]}; + + // Search for the particle in that cell's neighbor list. Return if we + // found the particle. + bool found = find_cell_inner(p, &c.neighbors_, verbose); + if (found) + return found; + + // The particle could not be found in the neighbor list. Try searching all + // cells in this universe, and update the neighbor list if we find a new + // neighboring cell. + found = find_cell_inner(p, nullptr, verbose); + if (found) + c.neighbors_.push_back(p.coord(coord_lvl).cell()); + return found; +} + +bool exhaustive_find_cell(GeometryState& p, bool verbose) +{ + int i_universe = p.lowest_coord().universe(); + if (i_universe == C_NONE) { + p.coord(0).universe() = model::root_universe; + p.n_coord() = 1; + i_universe = model::root_universe; + } + // Reset all the deeper coordinate levels. + for (int i = p.n_coord(); i < model::n_coord_levels; i++) { + p.coord(i).reset(); + } + return find_cell_inner(p, nullptr, verbose); +} + +//============================================================================== + +void cross_lattice(GeometryState& p, const BoundaryInfo& boundary, bool verbose) +{ + auto& coord {p.lowest_coord()}; + auto& lat {*model::lattices[coord.lattice()]}; + + if (verbose) { + write_message( + fmt::format(" Crossing lattice {}. Current position ({},{},{}). r={}", + lat.id_, coord.lattice_index()[0], coord.lattice_index()[1], + coord.lattice_index()[2], p.r()), + 1); + } + + // Set the lattice indices. + coord.lattice_index()[0] += boundary.lattice_translation()[0]; + coord.lattice_index()[1] += boundary.lattice_translation()[1]; + coord.lattice_index()[2] += boundary.lattice_translation()[2]; + + // Set the new coordinate position. + const auto& upper_coord {p.coord(p.n_coord() - 2)}; + const auto& cell {model::cells[upper_coord.cell()]}; + Position r = upper_coord.r(); + r -= cell->translation_; + if (!cell->rotation_.empty()) { + r = r.rotate(cell->rotation_); + } + p.r_local() = lat.get_local_position(r, coord.lattice_index()); + + if (!lat.are_valid_indices(coord.lattice_index())) { + // The particle is outside the lattice. Search for it from the base coords. + p.n_coord() = 1; + bool found = exhaustive_find_cell(p); + + if (!found) { + p.mark_as_lost(fmt::format("Particle {} could not be located after " + "crossing a boundary of lattice {}", + p.id(), lat.id_)); + } + + } else { + // Find cell in next lattice element. + p.lowest_coord().universe() = lat[coord.lattice_index()]; + bool found = exhaustive_find_cell(p); + + if (!found) { + // A particle crossing the corner of a lattice tile may not be found. In + // this case, search for it from the base coords. + p.n_coord() = 1; + bool found = exhaustive_find_cell(p); + if (!found) { + p.mark_as_lost(fmt::format("Particle {} could not be located after " + "crossing a boundary of lattice {}", + p.id(), lat.id_)); + } + } + } +} + +//============================================================================== + +BoundaryInfo distance_to_boundary(GeometryState& p) +{ + BoundaryInfo info; + double d_lat = INFINITY; + double d_surf = INFINITY; + int32_t level_surf_cross; + array level_lat_trans {}; + + // Loop over each coordinate level. + for (int i = 0; i < p.n_coord(); i++) { + const auto& coord {p.coord(i)}; + const Position& r {coord.r()}; + const Direction& u {coord.u()}; + Cell& c {*model::cells[coord.cell()]}; + + // Find the oncoming surface in this cell and the distance to it. + auto surface_distance = c.distance(r, u, p.surface(), &p); + d_surf = surface_distance.first; + level_surf_cross = surface_distance.second; + + // Find the distance to the next lattice tile crossing. + if (coord.lattice() != C_NONE) { + auto& lat {*model::lattices[coord.lattice()]}; + // TODO: refactor so both lattice use the same position argument (which + // also means the lat.type attribute can be removed) + std::pair> lattice_distance; + switch (lat.type_) { + case LatticeType::rect: + lattice_distance = lat.distance(r, u, coord.lattice_index()); + break; + case LatticeType::hex: + auto& cell_above {model::cells[p.coord(i - 1).cell()]}; + Position r_hex {p.coord(i - 1).r()}; + r_hex -= cell_above->translation_; + if (coord.rotated()) { + r_hex = r_hex.rotate(cell_above->rotation_); + } + r_hex.z = coord.r().z; + lattice_distance = lat.distance(r_hex, u, coord.lattice_index()); + break; + } + d_lat = lattice_distance.first; + level_lat_trans = lattice_distance.second; + + if (d_lat < 0) { + p.mark_as_lost(fmt::format("Particle {} had a negative distance " + "to a lattice boundary.", + p.id())); + } + } + + // If the boundary on this coordinate level is coincident with a boundary on + // a higher level then we need to make sure that the higher level boundary + // is selected. This logic must consider floating point precision. + double& d = info.distance(); + if (d_surf < d_lat - FP_COINCIDENT) { + if (d == INFINITY || (d - d_surf) / d >= FP_REL_PRECISION) { + // Update closest distance + d = d_surf; + + // If the cell is not simple, it is possible that both the negative and + // positive half-space were given in the region specification. Thus, we + // have to explicitly check which half-space the particle would be + // traveling into if the surface is crossed + if (c.is_simple() || d == INFTY) { + info.surface() = level_surf_cross; + } else { + Position r_hit = r + d_surf * u; + Surface& surf {*model::surfaces[std::abs(level_surf_cross) - 1]}; + Direction norm = surf.normal(r_hit); + if (u.dot(norm) > 0) { + info.surface() = std::abs(level_surf_cross); + } else { + info.surface() = -std::abs(level_surf_cross); + } + } + + info.lattice_translation()[0] = 0; + info.lattice_translation()[1] = 0; + info.lattice_translation()[2] = 0; + info.coord_level() = i + 1; + } + } else { + if (d == INFINITY || (d - d_lat) / d >= FP_REL_PRECISION) { + d = d_lat; + info.surface() = SURFACE_NONE; + info.lattice_translation() = level_lat_trans; + info.coord_level() = i + 1; + } + } + } + return info; +} + +//============================================================================== +// C API +//============================================================================== + +extern "C" int openmc_find_cell( + const double* xyz, int32_t* index, int32_t* instance) +{ + GeometryState geom_state; + + geom_state.r() = Position {xyz}; + geom_state.u() = {0.0, 0.0, 1.0}; + + if (!exhaustive_find_cell(geom_state)) { + set_errmsg( + fmt::format("Could not find cell at position {}.", geom_state.r())); + return OPENMC_E_GEOMETRY; + } + + *index = geom_state.lowest_coord().cell(); + *instance = geom_state.cell_instance(); + return 0; +} + +extern "C" int openmc_global_bounding_box(double* llc, double* urc) +{ + auto bbox = model::universes.at(model::root_universe)->bounding_box(); + + // set lower left corner values + llc[0] = bbox.xmin; + llc[1] = bbox.ymin; + llc[2] = bbox.zmin; + + // set upper right corner values + urc[0] = bbox.xmax; + urc[1] = bbox.ymax; + urc[2] = bbox.zmax; + + return 0; +} + +} // namespace openmc diff --git a/tests/conftest.py b/tests/conftest.py index fa6718502d8..71dd5ebf5d4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -29,12 +29,29 @@ def run_in_tmpdir(tmpdir): yield finally: orig.chdir() - + @pytest.fixture(scope="module") def endf_data(): - return os.environ['OPENMC_ENDF_DATA'] + return os.environ['OPENMC_ENDF_DATA'] @pytest.fixture(scope='session', autouse=True) def resolve_paths(): with openmc.config.patch('resolve_paths', False): yield + + +@pytest.fixture(scope='session', autouse=True) +def disable_depletion_multiprocessing_under_mpi(): + """Fork-based depletion multiprocessing may deadlock if MPI is active.""" + if not regression_config['mpi']: + yield + return + + from openmc.deplete import pool + + original_setting = pool.USE_MULTIPROCESSING + pool.USE_MULTIPROCESSING = False + try: + yield + finally: + pool.USE_MULTIPROCESSING = original_setting diff --git a/tests/cpp_unit_tests/CMakeLists.txt b/tests/cpp_unit_tests/CMakeLists.txt index 8fedc2daa57..5f87db9eac2 100644 --- a/tests/cpp_unit_tests/CMakeLists.txt +++ b/tests/cpp_unit_tests/CMakeLists.txt @@ -5,6 +5,7 @@ set(TEST_NAMES test_interpolate test_math test_mcpl_stat_sum + test_mesh # Add additional unit test files here ) diff --git a/tests/cpp_unit_tests/test_mesh.cpp b/tests/cpp_unit_tests/test_mesh.cpp new file mode 100644 index 00000000000..24c4f77373f --- /dev/null +++ b/tests/cpp_unit_tests/test_mesh.cpp @@ -0,0 +1,257 @@ +#include +#include +#include + +#include +#include + +#include "openmc/hdf5_interface.h" +#include "openmc/mesh.h" + +using namespace openmc; + +TEST_CASE("Test mesh hdf5 roundtrip - regular") +{ + // The XML data as a string + std::string xml_string = R"( + + 3 4 5 + -2 -3 -5 + 2 3 5 + + )"; + + // Create a pugixml document object + pugi::xml_document doc; + + // Load the XML from the string + pugi::xml_parse_result result = doc.load_string(xml_string.c_str()); + + pugi::xml_node root = doc.child("mesh"); + + auto mesh = RegularMesh(root); + + hid_t file_id = file_open("mesh.h5", 'w'); + + mesh.to_hdf5(file_id); + + file_close(file_id); + + hid_t file_id2 = file_open("mesh.h5", 'r'); + + hid_t group = open_group(file_id2, "mesh 1"); + + auto mesh2 = RegularMesh(group); + + file_close(file_id2); + + remove("mesh.h5"); + + REQUIRE(mesh2.shape_ == mesh.shape_); + + REQUIRE(mesh2.lower_left() == mesh.lower_left()); + + REQUIRE(mesh2.upper_right() == mesh.upper_right()); +} + +TEST_CASE("Test mesh hdf5 roundtrip - rectilinear") +{ + // The XML data as a string + std::string xml_string = R"( + + 0.0 1.0 5.0 10.0 + -10.0 -5.0 0.0 + -100.0 0.0 100.0 + + )"; + + // Create a pugixml document object + pugi::xml_document doc; + + // Load the XML from the string + pugi::xml_parse_result result = doc.load_string(xml_string.c_str()); + + pugi::xml_node root = doc.child("mesh"); + + auto mesh = RectilinearMesh(root); + + hid_t file_id = file_open("mesh.h5", 'w'); + + mesh.to_hdf5(file_id); + + file_close(file_id); + + hid_t file_id2 = file_open("mesh.h5", 'r'); + + hid_t group = open_group(file_id2, "mesh 1"); + + auto mesh2 = RectilinearMesh(group); + + file_close(file_id2); + + remove("mesh.h5"); + + REQUIRE(mesh2.shape_ == mesh.shape_); + + REQUIRE(mesh2.grid_ == mesh.grid_); +} + +TEST_CASE("Test mesh hdf5 roundtrip - cylindrical") +{ + // The XML data as a string + std::string xml_string = R"( + + 0.1 0.2 0.5 1.0 + 0.0 6.283185307179586 + 0.1 0.2 0.4 0.6 1.0 + 0 0 0 + + )"; + + // Create a pugixml document object + pugi::xml_document doc; + + // Load the XML from the string + pugi::xml_parse_result result = doc.load_string(xml_string.c_str()); + + pugi::xml_node root = doc.child("mesh"); + + auto mesh = CylindricalMesh(root); + + hid_t file_id = file_open("mesh.h5", 'w'); + + mesh.to_hdf5(file_id); + + file_close(file_id); + + hid_t file_id2 = file_open("mesh.h5", 'r'); + + hid_t group = open_group(file_id2, "mesh 1"); + + auto mesh2 = CylindricalMesh(group); + + file_close(file_id2); + + remove("mesh.h5"); + + REQUIRE(mesh2.shape_ == mesh.shape_); + + REQUIRE(mesh2.grid_ == mesh.grid_); +} + +TEST_CASE("Test mesh hdf5 roundtrip - spherical") +{ + // The XML data as a string + std::string xml_string = R"( + + 0.1 0.2 0.5 1.0 + 0.0 3.141592653589793 + 0.0 6.283185307179586 + 0.0 0.0 0.0 + ' + )"; + + // Create a pugixml document object + pugi::xml_document doc; + + // Load the XML from the string + pugi::xml_parse_result result = doc.load_string(xml_string.c_str()); + + pugi::xml_node root = doc.child("mesh"); + + auto mesh = SphericalMesh(root); + + hid_t file_id = file_open("mesh.h5", 'w'); + + mesh.to_hdf5(file_id); + + file_close(file_id); + + hid_t file_id2 = file_open("mesh.h5", 'r'); + + hid_t group = open_group(file_id2, "mesh 1"); + + auto mesh2 = SphericalMesh(group); + + file_close(file_id2); + + remove("mesh.h5"); + + REQUIRE(mesh2.shape_ == mesh.shape_); + + REQUIRE(mesh2.grid_ == mesh.grid_); +} + +TEST_CASE("Test multiple meshes HDF5 roundtrip - spherical") +{ + // The XML data as a string + std::string xml_string = R"( + + + 0.1 0.2 0.5 1.0 + 0.0 3.141592653589793 + 0.0 6.283185307179586 + 0.0 0.0 0.0 + + + 3 4 5 + -2 -3 -5 + 2 3 5 + + + )"; + + // Create a pugixml document object + pugi::xml_document doc; + + // Load the XML from the string + pugi::xml_parse_result result = doc.load_string(xml_string.c_str()); + + pugi::xml_node root = doc.child("meshes"); + + read_meshes(root); + + const auto spherical_mesh_xml = + dynamic_cast(model::meshes[0].get()); + const auto regular_mesh_xml = + dynamic_cast(model::meshes[1].get()); + + hid_t file_id = file_open("meshes.h5", 'w'); + + hid_t root_group = create_group(file_id, "root"); + + open_group(file_id, "root"); + + meshes_to_hdf5(root_group); + + close_group(root_group); + + file_close(file_id); + + hid_t file_id2 = file_open("meshes.h5", 'r'); + + hid_t root_group_read = open_group(file_id2, "root"); + + hid_t mesh_group_read = open_group(root_group_read, "meshes"); + + read_meshes(mesh_group_read); + + // increment mesh IDs to avoid collision during read + for (auto& mesh : model::meshes) { + mesh->set_id(mesh->id() + 10); + } + + const auto spherical_mesh_hdf5 = dynamic_cast( + model::meshes[model::mesh_map[spherical_mesh_xml->id_]].get()); + const auto regular_mesh_hdf5 = dynamic_cast( + model::meshes[model::mesh_map[regular_mesh_xml->id_]].get()); + + remove("meshes.h5"); + + REQUIRE(spherical_mesh_hdf5->shape_ == spherical_mesh_xml->shape_); + REQUIRE(spherical_mesh_hdf5->grid_ == spherical_mesh_xml->grid_); + + REQUIRE(regular_mesh_hdf5->shape_ == regular_mesh_xml->shape_); + REQUIRE(regular_mesh_hdf5->lower_left() == regular_mesh_xml->lower_left()); + REQUIRE(regular_mesh_hdf5->upper_right() == regular_mesh_xml->upper_right()); +} diff --git a/tests/regression_tests/adj_cell_rotation/results_true.dat b/tests/regression_tests/adj_cell_rotation/results_true.dat index b3df12e71fe..ddb1546b5b9 100644 --- a/tests/regression_tests/adj_cell_rotation/results_true.dat +++ b/tests/regression_tests/adj_cell_rotation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -4.403987E-01 1.514158E-03 +4.368327E-01 1.953533E-03 diff --git a/tests/regression_tests/albedo_box/results_true.dat b/tests/regression_tests/albedo_box/results_true.dat index 0f571f2459d..dca80abcd8e 100644 --- a/tests/regression_tests/albedo_box/results_true.dat +++ b/tests/regression_tests/albedo_box/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.590800E+00 4.251788E-03 +1.593206E+00 2.925742E-03 diff --git a/tests/regression_tests/asymmetric_lattice/results_true.dat b/tests/regression_tests/asymmetric_lattice/results_true.dat index 741327d80b3..3d6b610a69d 100644 --- a/tests/regression_tests/asymmetric_lattice/results_true.dat +++ b/tests/regression_tests/asymmetric_lattice/results_true.dat @@ -1 +1 @@ -b0ca1fb0436732188b1a199b3250ca9a33782f8fc379b0f7ff9c582e0c794b0a0470df063cafd0b05e802b26f61eaaf9ff5c0a8a672a933246acf49eed3ebf9f \ No newline at end of file +cc76769636be4f681137598cf366e978d7347425a1dfa1b293d17a28381b2b62595fb7f0d2f126dd06972ff9e79089a18dd53aba45fa2b1f316515b91fe6495a \ No newline at end of file diff --git a/tests/regression_tests/cmfd_feed/results_true.dat b/tests/regression_tests/cmfd_feed/results_true.dat index f5f22d9acd1..1ef9624d4c6 100644 --- a/tests/regression_tests/cmfd_feed/results_true.dat +++ b/tests/regression_tests/cmfd_feed/results_true.dat @@ -1,117 +1,117 @@ k-combined: -1.164262E+00 9.207592E-03 +1.181723E+00 9.944883E-03 tally 1: -1.156972E+01 -1.339924E+01 -2.136306E+01 -4.567185E+01 -2.859527E+01 -8.195821E+01 -3.470754E+01 -1.207851E+02 -3.766403E+01 -1.422263E+02 -3.778821E+01 -1.432660E+02 -3.573197E+01 -1.278854E+02 -2.849979E+01 -8.135515E+01 -2.073803E+01 -4.303374E+01 -1.112117E+01 -1.242944E+01 +1.169899E+01 +1.373251E+01 +2.142380E+01 +4.605511E+01 +2.968085E+01 +8.838716E+01 +3.561418E+01 +1.271206E+02 +3.777783E+01 +1.428817E+02 +3.805832E+01 +1.450213E+02 +3.439836E+01 +1.184892E+02 +2.852438E+01 +8.161896E+01 +2.088423E+01 +4.376204E+01 +1.076670E+01 +1.168108E+01 tally 2: -2.388054E+01 -2.875255E+01 -1.667791E+01 -1.403426E+01 -4.224771E+01 -8.942109E+01 -2.993088E+01 -4.490335E+01 -5.689839E+01 -1.625557E+02 -4.043633E+01 -8.212299E+01 -6.764024E+01 -2.297126E+02 -4.807902E+01 -1.161468E+02 -7.314835E+01 -2.684645E+02 -5.203584E+01 -1.359261E+02 -7.375727E+01 -2.733105E+02 -5.252944E+01 -1.386205E+02 -6.909571E+01 -2.397721E+02 -4.922548E+01 -1.217465E+02 -5.685978E+01 -1.621746E+02 -4.051938E+01 -8.237277E+01 -4.185562E+01 -8.784067E+01 -2.983570E+01 -4.467414E+01 -2.238373E+01 -2.520356E+01 -1.566758E+01 -1.234103E+01 +2.321241E+01 +2.702156E+01 +1.620912E+01 +1.317752E+01 +4.197404E+01 +8.845008E+01 +2.982666E+01 +4.469221E+01 +5.810089E+01 +1.695857E+02 +4.134123E+01 +8.588866E+01 +6.982488E+01 +2.447068E+02 +4.966939E+01 +1.238763E+02 +7.428421E+01 +2.767613E+02 +5.287955E+01 +1.403163E+02 +7.447402E+01 +2.785012E+02 +5.324628E+01 +1.423393E+02 +6.895164E+01 +2.381937E+02 +4.916366E+01 +1.211701E+02 +5.679253E+01 +1.617881E+02 +4.043125E+01 +8.204061E+01 +4.218618E+01 +8.933666E+01 +2.978592E+01 +4.456592E+01 +2.196426E+01 +2.435867E+01 +1.525576E+01 +1.175879E+01 tally 3: -1.609520E+01 -1.307542E+01 -1.033429E+00 -5.510889E-02 -2.877073E+01 -4.149542E+01 -1.964219E+00 -1.954692E-01 -3.896816E+01 -7.629752E+01 -2.484053E+00 -3.103733E-01 -4.634285E+01 -1.079367E+02 -2.974750E+00 -4.468223E-01 -5.007964E+01 -1.259202E+02 -3.181802E+00 -5.103621E-01 -5.058915E+01 -1.286193E+02 -3.249442E+00 -5.337712E-01 -4.744464E+01 -1.131026E+02 -3.067644E+00 -4.736335E-01 -3.900632E+01 -7.634433E+01 -2.443552E+00 -3.028060E-01 -2.874166E+01 -4.146375E+01 -1.810421E+00 -1.671667E-01 -1.509222E+01 -1.145579E+01 -1.014919E+00 -5.391053E-02 +1.563788E+01 +1.226528E+01 +1.053289E+00 +5.666942E-02 +2.870755E+01 +4.139654E+01 +1.838017E+00 +1.710528E-01 +3.978616E+01 +7.955764E+01 +2.560657E+00 +3.334449E-01 +4.780385E+01 +1.147770E+02 +3.139243E+00 +4.967628E-01 +5.106650E+01 +1.308704E+02 +3.170056E+00 +5.078920E-01 +5.123992E+01 +1.318586E+02 +3.211706E+00 +5.205979E-01 +4.729862E+01 +1.121695E+02 +3.068662E+00 +4.749488E-01 +3.898816E+01 +7.630564E+01 +2.516911E+00 +3.199696E-01 +2.865357E+01 +4.125742E+01 +1.852314E+00 +1.741116E-01 +1.467340E+01 +1.088460E+01 +9.268633E-01 +4.450662E-02 tally 4: -3.148231E+00 -4.974555E-01 +3.029754E+00 +4.613561E-01 0.000000E+00 0.000000E+00 -2.805439E+00 -3.982239E-01 -5.574031E+00 -1.561105E+00 +2.832501E+00 +4.049252E-01 +5.517243E+00 +1.527794E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -128,14 +128,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.574031E+00 -1.561105E+00 -2.805439E+00 -3.982239E-01 -5.171038E+00 -1.344877E+00 -7.372031E+00 -2.725420E+00 +5.517243E+00 +1.527794E+00 +2.832501E+00 +4.049252E-01 +5.117178E+00 +1.316972E+00 +7.333303E+00 +2.701677E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -152,14 +152,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.372031E+00 -2.725420E+00 -5.171038E+00 -1.344877E+00 -6.946847E+00 -2.424850E+00 -8.496610E+00 -3.627542E+00 +7.333303E+00 +2.701677E+00 +5.117178E+00 +1.316972E+00 +7.248464E+00 +2.641591E+00 +8.817788E+00 +3.905530E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -176,14 +176,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.496610E+00 -3.627542E+00 -6.946847E+00 -2.424850E+00 -8.479501E+00 -3.607280E+00 -9.261869E+00 -4.305912E+00 +8.817788E+00 +3.905530E+00 +7.248464E+00 +2.641591E+00 +8.646465E+00 +3.749847E+00 +9.460948E+00 +4.495388E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -200,14 +200,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.261869E+00 -4.305912E+00 -8.479501E+00 -3.607280E+00 -9.232858E+00 -4.278432E+00 -9.306384E+00 -4.348594E+00 +9.460948E+00 +4.495388E+00 +8.646465E+00 +3.749847E+00 +9.379341E+00 +4.415049E+00 +9.278640E+00 +4.320720E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -224,14 +224,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.306384E+00 -4.348594E+00 -9.232858E+00 -4.278432E+00 -9.299764E+00 -4.347828E+00 -8.511976E+00 -3.639893E+00 +9.278640E+00 +4.320720E+00 +9.379341E+00 +4.415049E+00 +9.465746E+00 +4.498591E+00 +8.656146E+00 +3.760545E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -248,14 +248,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.511976E+00 -3.639893E+00 -9.299764E+00 -4.347828E+00 -8.726086E+00 -3.819567E+00 -7.147277E+00 -2.562747E+00 +8.656146E+00 +3.760545E+00 +9.465746E+00 +4.498591E+00 +8.589782E+00 +3.700308E+00 +6.996002E+00 +2.456935E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -272,14 +272,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.147277E+00 -2.562747E+00 -8.726086E+00 -3.819567E+00 -7.218790E+00 -2.612243E+00 -5.018287E+00 -1.263077E+00 +6.996002E+00 +2.456935E+00 +8.589782E+00 +3.700308E+00 +7.352050E+00 +2.714808E+00 +5.105164E+00 +1.312559E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -296,14 +296,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.018287E+00 -1.263077E+00 -7.218790E+00 -2.612243E+00 -5.443494E+00 -1.487018E+00 -2.732334E+00 -3.773047E-01 +5.105164E+00 +1.312559E+00 +7.352050E+00 +2.714808E+00 +5.442756E+00 +1.486776E+00 +2.697305E+00 +3.675580E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -320,12 +320,12 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.732334E+00 -3.773047E-01 -5.443494E+00 -1.487018E+00 -3.044773E+00 -4.655756E-01 +2.697305E+00 +3.675580E-01 +5.442756E+00 +1.486776E+00 +3.017025E+00 +4.571443E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -345,144 +345,144 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -1.609029E+01 -1.306718E+01 -2.230601E+00 -2.559496E-01 -2.876780E+01 -4.148686E+01 -3.835952E+00 -7.456562E-01 -3.895738E+01 -7.625344E+01 -4.841024E+00 -1.197335E+00 -4.633595E+01 -1.079043E+02 -6.236821E+00 -1.963311E+00 -5.007472E+01 -1.258967E+02 -6.749745E+00 -2.297130E+00 -5.058336E+01 -1.285894E+02 -6.727612E+00 -2.315656E+00 -4.743869E+01 -1.130735E+02 -6.338193E+00 -2.042159E+00 -3.899838E+01 -7.631289E+01 -5.187573E+00 -1.359733E+00 -2.873434E+01 -4.144233E+01 -3.815610E+00 -7.367619E-01 -1.509020E+01 -1.145268E+01 -2.125767E+00 -2.341894E-01 +1.563588E+01 +1.226217E+01 +2.209027E+00 +2.507131E-01 +2.870034E+01 +4.137550E+01 +3.726620E+00 +7.021948E-01 +3.977762E+01 +7.952285E+01 +5.304975E+00 +1.427333E+00 +4.779747E+01 +1.147456E+02 +6.528302E+00 +2.151715E+00 +5.105366E+01 +1.308037E+02 +6.986782E+00 +2.467487E+00 +5.123380E+01 +1.318264E+02 +6.845633E+00 +2.383542E+00 +4.729296E+01 +1.121433E+02 +6.252695E+00 +1.977351E+00 +3.898236E+01 +7.628315E+01 +5.461495E+00 +1.528579E+00 +2.864576E+01 +4.123538E+01 +3.857301E+00 +7.581323E-01 +1.467047E+01 +1.088031E+01 +2.277024E+00 +2.679801E-01 cmfd indices 1.000000E+01 1.000000E+00 1.000000E+00 1.000000E+00 k cmfd -1.129918E+00 -1.143848E+00 -1.147976E+00 -1.151534E+00 -1.152378E+00 -1.148219E+00 -1.150402E+00 -1.154647E+00 -1.156159E+00 -1.160048E+00 -1.167441E+00 -1.168163E+00 -1.168629E+00 -1.164120E+00 -1.165051E+00 -1.169177E+00 +1.169107E+00 +1.175079E+00 +1.173912E+00 +1.175368E+00 +1.174026E+00 +1.181745E+00 +1.182261E+00 +1.183559E+00 +1.178691E+00 +1.179222E+00 +1.179017E+00 +1.172979E+00 +1.175043E+00 +1.173458E+00 +1.174152E+00 +1.171451E+00 cmfd entropy -3.224769E+00 -3.225945E+00 -3.227421E+00 -3.226174E+00 -3.224429E+00 -3.227049E+00 -3.230710E+00 -3.230315E+00 -3.226825E+00 -3.226655E+00 -3.226588E+00 -3.224155E+00 -3.223246E+00 -3.222640E+00 -3.223920E+00 -3.222838E+00 +3.207640E+00 +3.210547E+00 +3.212218E+00 +3.209573E+00 +3.211619E+00 +3.212126E+00 +3.213163E+00 +3.214288E+00 +3.215737E+00 +3.213677E+00 +3.214925E+00 +3.215612E+00 +3.216708E+00 +3.221454E+00 +3.219048E+00 +3.218387E+00 cmfd balance -3.90454E-03 -4.08089E-03 -3.46511E-03 -4.09535E-03 -2.62009E-03 -2.23559E-03 -2.54033E-03 -2.12799E-03 -2.25864E-03 -1.85766E-03 -1.49916E-03 -1.63471E-03 -1.48377E-03 -1.59800E-03 -1.37354E-03 -1.32853E-03 +4.88208E-03 +4.75139E-03 +3.15783E-03 +3.67091E-03 +2.99797E-03 +2.91060E-03 +2.06576E-03 +1.83482E-03 +1.56292E-03 +1.58659E-03 +2.32986E-03 +1.47376E-03 +1.46673E-03 +1.22627E-03 +1.31963E-03 +1.26456E-03 cmfd dominance ratio -5.539E-01 -5.537E-01 -5.536E-01 -5.515E-01 -5.512E-01 -5.514E-01 -5.518E-01 -5.507E-01 -5.500E-01 -5.497E-01 -5.477E-01 -5.461E-01 -5.444E-01 -5.445E-01 -5.454E-01 +5.467E-01 +5.453E-01 +5.458E-01 +5.436E-01 +5.442E-01 +5.406E-01 +5.401E-01 +5.413E-01 +4.995E-01 +5.396E-01 +5.409E-01 +5.414E-01 +5.423E-01 +5.456E-01 +5.442E-01 5.441E-01 cmfd openmc source comparison -9.875240E-03 -1.106163E-02 -9.847628E-03 -6.065921E-03 -5.772039E-03 -4.615656E-03 -4.244331E-03 -3.694299E-03 -3.545814E-03 -3.213063E-03 -3.467537E-03 -3.383489E-03 -3.697591E-03 -3.937358E-03 -3.369124E-03 -3.190359E-03 +9.587418E-03 +8.150978E-03 +6.677661E-03 +6.334727E-03 +5.153692E-03 +5.082964E-03 +4.633153E-03 +4.037383E-03 +3.528742E-03 +4.559089E-03 +3.517370E-03 +3.306117E-03 +2.913809E-03 +1.906045E-03 +1.932794E-03 +1.711341E-03 cmfd source -4.360494E-02 -8.397599E-02 -1.074181E-01 -1.294531E-01 -1.385611E-01 -1.407934E-01 -1.325191E-01 -1.044311E-01 -7.660359E-02 -4.263941E-02 +4.496492E-02 +7.869674E-02 +1.100280E-01 +1.354045E-01 +1.363339E-01 +1.380533E-01 +1.314512E-01 +1.077480E-01 +7.847306E-02 +3.884630E-02 diff --git a/tests/regression_tests/cmfd_feed_2g/results_true.dat b/tests/regression_tests/cmfd_feed_2g/results_true.dat index 2b61d9f4e81..e66eae13c45 100644 --- a/tests/regression_tests/cmfd_feed_2g/results_true.dat +++ b/tests/regression_tests/cmfd_feed_2g/results_true.dat @@ -1,112 +1,112 @@ k-combined: -1.035567E+00 9.463160E-03 +1.027434E+00 6.509170E-03 tally 1: -1.146535E+02 -1.315267E+03 -1.157458E+02 -1.340166E+03 -1.140491E+02 -1.301364E+03 -1.146589E+02 -1.315433E+03 +1.162758E+02 +1.352562E+03 +1.138125E+02 +1.295815E+03 +1.143712E+02 +1.308316E+03 +1.150293E+02 +1.323834E+03 tally 2: -4.319968E+01 -9.360083E+01 -6.373035E+01 -2.038056E+02 -1.889646E+02 -1.812892E+03 -1.024866E+02 -5.254528E+02 -4.323262E+01 -9.360200E+01 -6.363111E+01 -2.028178E+02 -1.849746E+02 -1.711533E+03 -1.034532E+02 -5.352768E+02 -4.296541E+01 -9.249656E+01 -6.346919E+01 -2.018659E+02 -1.888697E+02 -1.812037E+03 -1.025707E+02 -5.262261E+02 -4.691085E+01 -1.269707E+02 -6.299377E+01 -1.990497E+02 -1.853864E+02 -1.719984E+03 -1.023015E+02 -5.235858E+02 +4.284580E+01 +9.207089E+01 +6.335165E+01 +2.014931E+02 +1.894187E+02 +1.818190E+03 +1.033212E+02 +5.340768E+02 +4.282771E+01 +9.186295E+01 +6.295029E+01 +1.983895E+02 +1.834276E+02 +1.684375E+03 +1.022482E+02 +5.228403E+02 +4.330690E+01 +9.402038E+01 +6.395965E+01 +2.053163E+02 +1.851113E+02 +1.714198E+03 +1.030809E+02 +5.314535E+02 +4.337097E+01 +9.426435E+01 +6.417590E+01 +2.063443E+02 +1.846817E+02 +1.706518E+03 +1.027233E+02 +5.279582E+02 tally 3: -6.034963E+01 -1.827718E+02 +5.992726E+01 +1.803120E+02 0.000000E+00 0.000000E+00 -1.865665E-02 -4.244195E-05 -4.170941E+00 -8.769372E-01 -3.453368E+00 -5.989168E-01 +2.172646E-02 +4.414237E-05 +4.181401E+00 +8.912796E-01 +3.536506E+00 +6.287425E-01 0.000000E+00 0.000000E+00 -9.743205E+01 -4.749420E+02 -8.570316E-01 -3.807993E-02 -6.005903E+01 -1.807233E+02 +9.824432E+01 +4.828691E+02 +9.116848E-01 +4.231247E-02 +5.955090E+01 +1.775522E+02 0.000000E+00 0.000000E+00 -1.885450E-02 -3.653402E-05 -4.323863E+00 -9.447512E-01 -3.465465E+00 -6.022861E-01 +1.893222E-02 +3.288000E-05 +4.048183E+00 +8.291130E-01 +3.384041E+00 +5.742363E-01 0.000000E+00 0.000000E+00 -9.843481E+01 -4.846158E+02 -9.048150E-01 -4.205551E-02 -5.996660E+01 -1.802150E+02 +9.734253E+01 +4.738861E+02 +9.157632E-01 +4.329280E-02 +6.045835E+01 +1.835255E+02 0.000000E+00 0.000000E+00 -1.221444E-02 -2.263445E-05 -4.301287E+00 -9.309882E-01 -3.456076E+00 -5.992144E-01 +1.501842E-02 +1.896931E-05 +4.289989E+00 +9.251538E-01 +3.481357E+00 +6.071667E-01 0.000000E+00 0.000000E+00 -9.761231E+01 -4.765834E+02 -8.434644E-01 -3.728180E-02 -5.961891E+01 -1.783106E+02 +9.799829E+01 +4.803591E+02 +8.899390E-01 +4.078750E-02 +6.064531E+01 +1.842746E+02 0.000000E+00 0.000000E+00 -1.500709E-02 -3.541280E-05 -4.155669E+00 -8.713442E-01 -3.455342E+00 -6.006426E-01 +1.495496E-02 +3.082640E-05 +4.321537E+00 +9.371611E-01 +3.453767E+00 +5.983727E-01 0.000000E+00 0.000000E+00 -9.726798E+01 -4.733393E+02 -9.202611E-01 -4.390503E-02 +9.771776E+01 +4.777781E+02 +8.975444E-01 +4.157471E-02 tally 4: 0.000000E+00 0.000000E+00 @@ -116,14 +116,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.943264E+00 -4.008855E+00 -3.661063E+01 -6.704808E+01 -8.945553E+00 -4.011707E+00 -3.696832E+01 -6.835286E+01 +8.840487E+00 +3.915792E+00 +3.700362E+01 +6.851588E+01 +8.756789E+00 +3.844443E+00 +3.672366E+01 +6.747174E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -132,14 +132,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.844569E+00 -3.924591E+00 -3.666726E+01 -6.726522E+01 -8.769637E+00 -3.855006E+00 -3.654115E+01 -6.680777E+01 +8.860460E+00 +3.940908E+00 +3.704658E+01 +6.864069E+01 +8.832046E+00 +3.916611E+00 +3.736239E+01 +6.982147E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -156,14 +156,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.945553E+00 -4.011707E+00 -3.696832E+01 -6.835286E+01 -8.943264E+00 -4.008855E+00 -3.661063E+01 -6.704808E+01 +8.756789E+00 +3.844443E+00 +3.672366E+01 +6.747174E+01 +8.840487E+00 +3.915792E+00 +3.700362E+01 +6.851588E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -180,14 +180,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.648474E+00 -3.752219E+00 -3.689442E+01 -6.808997E+01 -8.757378E+00 -3.850408E+00 -3.716920E+01 -6.909715E+01 +8.892576E+00 +3.964978E+00 +3.703525E+01 +6.860645E+01 +8.824229E+00 +3.906925E+00 +3.685909E+01 +6.796123E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -212,22 +212,22 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.783669E+00 -3.870748E+00 -3.687358E+01 -6.802581E+01 -8.755250E+00 -3.846298E+00 -3.660278E+01 -6.704349E+01 -8.769637E+00 -3.855006E+00 -3.654115E+01 -6.680777E+01 -8.844569E+00 -3.924591E+00 -3.666726E+01 -6.726522E+01 +9.050876E+00 +4.111409E+00 +3.656082E+01 +6.687580E+01 +9.042402E+00 +4.105842E+00 +3.687247E+01 +6.801050E+01 +8.832046E+00 +3.916611E+00 +3.736239E+01 +6.982147E+01 +8.860460E+00 +3.940908E+00 +3.704658E+01 +6.864069E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -252,14 +252,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.755250E+00 -3.846298E+00 -3.660278E+01 -6.704349E+01 -8.783669E+00 -3.870748E+00 -3.687358E+01 -6.802581E+01 +9.042402E+00 +4.105842E+00 +3.687247E+01 +6.801050E+01 +9.050876E+00 +4.111409E+00 +3.656082E+01 +6.687580E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -268,14 +268,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.757378E+00 -3.850408E+00 -3.716920E+01 -6.909715E+01 -8.648474E+00 -3.752219E+00 -3.689442E+01 -6.808997E+01 +8.824229E+00 +3.906925E+00 +3.685909E+01 +6.796123E+01 +8.892576E+00 +3.964978E+00 +3.703525E+01 +6.860645E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -301,133 +301,133 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -6.036829E+01 -1.828885E+02 -1.008777E+02 -5.091033E+02 -1.353211E+01 -9.188155E+00 -4.618716E+01 -1.067410E+02 -6.007789E+01 -1.808371E+02 -1.018892E+02 -5.192269E+02 -1.357961E+01 -9.247052E+00 -4.618560E+01 -1.067058E+02 -5.997882E+01 -1.802895E+02 -1.010597E+02 -5.108478E+02 -1.374955E+01 -9.502494E+00 -4.619500E+01 -1.067547E+02 -5.963392E+01 -1.783999E+02 -1.007134E+02 -5.074700E+02 -1.319398E+01 -8.734106E+00 -4.586295E+01 -1.052870E+02 +5.994898E+01 +1.804403E+02 +1.017670E+02 +5.181130E+02 +1.354160E+01 +9.220935E+00 +4.648971E+01 +1.081636E+02 +5.956983E+01 +1.776668E+02 +1.007226E+02 +5.073592E+02 +1.347883E+01 +9.120344E+00 +4.609907E+01 +1.063127E+02 +6.047337E+01 +1.836168E+02 +1.014777E+02 +5.150557E+02 +1.390508E+01 +9.722899E+00 +4.629251E+01 +1.072027E+02 +6.066027E+01 +1.843661E+02 +1.011648E+02 +5.120629E+02 +1.365982E+01 +9.372236E+00 +4.602994E+01 +1.060579E+02 cmfd indices 2.000000E+00 2.000000E+00 1.000000E+00 2.000000E+00 k cmfd -1.018115E+00 -1.022665E+00 -1.020323E+00 -1.020653E+00 -1.021036E+00 -1.020623E+00 -1.021482E+00 -1.025450E+00 -1.027292E+00 -1.028065E+00 -1.027065E+00 -1.024275E+00 -1.025309E+00 -1.026039E+00 -1.026700E+00 -1.023865E+00 +1.013488E+00 +1.024396E+00 +1.015533E+00 +1.009319E+00 +1.012726E+00 +1.014831E+00 +1.021757E+00 +1.022002E+00 +1.023619E+00 +1.020953E+00 +1.023910E+00 +1.027657E+00 +1.024501E+00 +1.023838E+00 +1.025464E+00 +1.022802E+00 cmfd entropy -1.998965E+00 -1.999214E+00 -1.999348E+00 -1.999366E+00 -1.999564E+00 -1.999453E+00 -1.999533E+00 -1.999630E+00 -1.999739E+00 -1.999588E+00 -1.999581E+00 -1.999719E+00 -1.999773E+00 -1.999764E+00 -1.999821E+00 -1.999843E+00 +1.998974E+00 +1.998742E+00 +1.999128E+00 +1.998952E+00 +1.998951E+00 +1.999439E+00 +1.999626E+00 +1.999826E+00 +1.999513E+00 +1.999451E+00 +1.999514E+00 +1.999590E+00 +1.999563E+00 +1.999604E+00 +1.999742E+00 +1.999736E+00 cmfd balance -5.73174E-04 -7.55398E-04 -1.46671E-03 -6.39625E-04 -8.19008E-04 -1.93449E-03 -1.15900E-03 -1.01690E-03 -5.62788E-04 -6.90450E-04 -6.01060E-04 -5.73418E-04 -4.37190E-04 -4.82966E-04 -4.09700E-04 -3.45096E-04 +9.79896E-04 +4.24873E-04 +8.05696E-04 +1.92071E-03 +3.70731E-04 +2.81424E-04 +8.28991E-04 +6.12217E-04 +5.29185E-04 +4.97799E-04 +3.09154E-04 +1.73703E-04 +2.56689E-04 +2.64938E-04 +1.96305E-04 +1.82702E-04 cmfd dominance ratio -6.264E-03 -6.142E-03 -5.987E-03 -6.082E-03 -5.895E-03 -5.939E-03 -5.910E-03 -5.948E-03 -6.013E-03 -6.017E-03 -6.024E-03 -6.008E-03 -5.976E-03 -5.987E-03 -5.967E-03 -5.929E-03 +6.304E-03 +6.246E-03 +6.159E-03 +6.249E-03 +6.101E-03 +6.155E-03 +6.010E-03 +6.177E-03 +6.349E-03 +6.241E-03 +6.244E-03 +6.249E-03 +6.270E-03 +6.272E-03 +6.278E-03 +6.290E-03 cmfd openmc source comparison -4.832872E-05 -6.552342E-05 -7.516800E-05 -7.916087E-05 -9.022260E-05 -8.574478E-05 -7.891622E-05 -7.281636E-05 -7.750571E-05 -6.565408E-05 -6.078665E-05 -5.834343E-05 -4.758176E-05 -5.723990E-05 -4.994116E-05 -4.116808E-05 +4.046094E-05 +5.979431E-05 +3.836521E-05 +4.577591E-05 +5.012911E-05 +2.114677E-05 +2.074571E-05 +3.042280E-05 +2.408163E-05 +2.434542E-05 +1.190699E-05 +9.499301E-06 +2.354221E-05 +2.937924E-05 +1.889875E-05 +1.913866E-05 cmfd source -2.455663E-01 -2.553511E-01 -2.512257E-01 -2.478570E-01 +2.489706E-01 +2.426801E-01 +2.532142E-01 +2.551351E-01 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/regression_tests/cmfd_feed_expanding_window/results_true.dat b/tests/regression_tests/cmfd_feed_expanding_window/results_true.dat index 8fd8cdbb845..b39f82f96ea 100644 --- a/tests/regression_tests/cmfd_feed_expanding_window/results_true.dat +++ b/tests/regression_tests/cmfd_feed_expanding_window/results_true.dat @@ -1,117 +1,117 @@ k-combined: -1.167865E+00 7.492213E-03 +1.170835E+00 5.423480E-03 tally 1: -1.146860E+01 -1.318884E+01 -2.161527E+01 -4.685283E+01 -2.951158E+01 -8.733566E+01 -3.521610E+01 -1.242821E+02 -3.774236E+01 -1.426501E+02 -3.727918E+01 -1.391158E+02 -3.377176E+01 -1.143839E+02 -2.904497E+01 -8.452907E+01 -2.090871E+01 -4.384549E+01 -1.078642E+01 -1.168086E+01 +1.205100E+01 +1.456707E+01 +2.183882E+01 +4.781179E+01 +2.844010E+01 +8.102358E+01 +3.356334E+01 +1.130832E+02 +3.660829E+01 +1.344973E+02 +3.697740E+01 +1.371500E+02 +3.400119E+01 +1.160196E+02 +2.839868E+01 +8.083199E+01 +2.140398E+01 +4.615447E+01 +1.118179E+01 +1.262942E+01 tally 2: -1.136810E+00 -1.292338E+00 -7.987303E-01 -6.379700E-01 -2.266938E+00 -5.139009E+00 -1.613483E+00 -2.603328E+00 -3.046349E+00 -9.280239E+00 -2.182459E+00 -4.763126E+00 -3.568068E+00 -1.273111E+01 -2.532456E+00 -6.413333E+00 -3.989504E+00 -1.591614E+01 -2.848301E+00 -8.112818E+00 -3.853133E+00 -1.484663E+01 -2.718493E+00 -7.390202E+00 -3.478138E+00 -1.209745E+01 -2.467281E+00 -6.087476E+00 -2.952220E+00 -8.715605E+00 -2.103261E+00 -4.423706E+00 -1.917459E+00 -3.676649E+00 -1.378369E+00 -1.899902E+00 -1.048240E+00 -1.098807E+00 -7.511947E-01 -5.642934E-01 +1.218245E+00 +1.484121E+00 +8.387442E-01 +7.034918E-01 +2.142134E+00 +4.588738E+00 +1.526727E+00 +2.330895E+00 +2.736157E+00 +7.486556E+00 +1.973921E+00 +3.896363E+00 +3.606244E+00 +1.300500E+01 +2.537580E+00 +6.439313E+00 +3.668958E+00 +1.346126E+01 +2.599095E+00 +6.755294E+00 +3.647982E+00 +1.330777E+01 +2.539750E+00 +6.450332E+00 +3.118921E+00 +9.727669E+00 +2.186447E+00 +4.780549E+00 +2.881110E+00 +8.300795E+00 +2.042635E+00 +4.172360E+00 +2.045602E+00 +4.184486E+00 +1.458384E+00 +2.126884E+00 +1.022124E+00 +1.044738E+00 +7.112678E-01 +5.059018E-01 tally 3: -7.701233E-01 -5.930898E-01 -4.481585E-02 -2.008461E-03 -1.547307E+00 -2.394158E+00 -1.226539E-01 -1.504398E-02 -2.106373E+00 -4.436806E+00 -1.450618E-01 -2.104294E-02 -2.437654E+00 -5.942157E+00 -1.521380E-01 -2.314598E-02 -2.754639E+00 -7.588038E+00 -1.745460E-01 -3.046629E-02 -2.623852E+00 -6.884601E+00 -1.851602E-01 -3.428432E-02 -2.376886E+00 -5.649588E+00 -1.615729E-01 -2.610582E-02 -2.021856E+00 -4.087900E+00 -1.533174E-01 -2.350622E-02 -1.333190E+00 -1.777397E+00 -7.076188E-02 -5.007243E-03 -7.258527E-01 -5.268622E-01 -3.656030E-02 -1.336656E-03 +8.048428E-01 +6.477720E-01 +6.603741E-02 +4.360940E-03 +1.466886E+00 +2.151755E+00 +1.002354E-01 +1.004713E-02 +1.909238E+00 +3.645189E+00 +1.202824E-01 +1.446786E-02 +2.443130E+00 +5.968886E+00 +1.627351E-01 +2.648270E-02 +2.492602E+00 +6.213064E+00 +1.910368E-01 +3.649506E-02 +2.437262E+00 +5.940245E+00 +1.568389E-01 +2.459843E-02 +2.104091E+00 +4.427200E+00 +1.450465E-01 +2.103848E-02 +1.965900E+00 +3.864762E+00 +1.367918E-01 +1.871199E-02 +1.402871E+00 +1.968047E+00 +1.061316E-01 +1.126391E-02 +6.832689E-01 +4.668565E-01 +4.599034E-02 +2.115112E-03 tally 4: -1.667432E-01 -2.780328E-02 +1.497312E-01 +2.241943E-02 0.000000E+00 0.000000E+00 -1.292567E-01 -1.670730E-02 -2.813370E-01 -7.915052E-02 +1.535839E-01 +2.358801E-02 +2.882052E-01 +8.306225E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -128,14 +128,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.813370E-01 -7.915052E-02 -1.292567E-01 -1.670730E-02 -2.670549E-01 -7.131835E-02 -4.055324E-01 -1.644566E-01 +2.882052E-01 +8.306225E-02 +1.535839E-01 +2.358801E-02 +2.526805E-01 +6.384743E-02 +3.616220E-01 +1.307705E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -152,14 +152,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.055324E-01 -1.644566E-01 -2.670549E-01 -7.131835E-02 -3.848125E-01 -1.480807E-01 -4.809430E-01 -2.313062E-01 +3.616220E-01 +1.307705E-01 +2.526805E-01 +6.384743E-02 +3.594306E-01 +1.291904E-01 +4.229730E-01 +1.789062E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -176,14 +176,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.809430E-01 -2.313062E-01 -3.848125E-01 -1.480807E-01 -4.543918E-01 -2.064719E-01 -5.106133E-01 -2.607260E-01 +4.229730E-01 +1.789062E-01 +3.594306E-01 +1.291904E-01 +3.973299E-01 +1.578711E-01 +4.255879E-01 +1.811250E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -200,14 +200,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.106133E-01 -2.607260E-01 -4.543918E-01 -2.064719E-01 -4.543120E-01 -2.063994E-01 -4.626328E-01 -2.140291E-01 +4.255879E-01 +1.811250E-01 +3.973299E-01 +1.578711E-01 +4.633933E-01 +2.147333E-01 +4.672837E-01 +2.183540E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -224,14 +224,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.626328E-01 -2.140291E-01 -4.543120E-01 -2.063994E-01 -4.827759E-01 -2.330726E-01 -4.442622E-01 -1.973689E-01 +4.672837E-01 +2.183540E-01 +4.633933E-01 +2.147333E-01 +4.251073E-01 +1.807162E-01 +3.842922E-01 +1.476805E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -248,14 +248,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.442622E-01 -1.973689E-01 -4.827759E-01 -2.330726E-01 -4.630420E-01 -2.144079E-01 -3.886524E-01 -1.510507E-01 +3.842922E-01 +1.476805E-01 +4.251073E-01 +1.807162E-01 +4.045096E-01 +1.636280E-01 +3.192860E-01 +1.019436E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -272,14 +272,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.886524E-01 -1.510507E-01 -4.630420E-01 -2.144079E-01 -3.535870E-01 -1.250237E-01 -2.530312E-01 -6.402478E-02 +3.192860E-01 +1.019436E-01 +4.045096E-01 +1.636280E-01 +3.738326E-01 +1.397508E-01 +2.598153E-01 +6.750398E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -296,14 +296,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.530312E-01 -6.402478E-02 -3.535870E-01 -1.250237E-01 -2.465524E-01 -6.078808E-02 -1.197152E-01 -1.433173E-02 +2.598153E-01 +6.750398E-02 +3.738326E-01 +1.397508E-01 +2.453191E-01 +6.018146E-02 +1.098964E-01 +1.207721E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -320,12 +320,12 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -1.197152E-01 -1.433173E-02 -2.465524E-01 -6.078808E-02 -1.369631E-01 -1.875888E-02 +1.098964E-01 +1.207721E-02 +2.453191E-01 +6.018146E-02 +1.458094E-01 +2.126039E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -345,119 +345,119 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -7.701233E-01 -5.930898E-01 -1.386250E-01 -1.921688E-02 -1.547307E+00 -2.394158E+00 -2.630277E-01 -6.918357E-02 -2.106373E+00 -4.436806E+00 -2.807880E-01 -7.884187E-02 -2.435849E+00 -5.933361E+00 -3.322060E-01 -1.103608E-01 -2.753634E+00 -7.582501E+00 -3.825922E-01 -1.463768E-01 -2.623852E+00 -6.884601E+00 -3.888710E-01 -1.512206E-01 -2.376886E+00 -5.649588E+00 -3.196217E-01 -1.021581E-01 -2.021856E+00 -4.087900E+00 -2.897881E-01 -8.397715E-02 -1.333190E+00 -1.777397E+00 -1.627110E-01 -2.647486E-02 -7.258527E-01 -5.268622E-01 -9.348666E-02 -8.739755E-03 +8.048428E-01 +6.477720E-01 +1.018934E-01 +1.038226E-02 +1.466886E+00 +2.151755E+00 +1.414681E-01 +2.001322E-02 +1.909238E+00 +3.645189E+00 +2.450211E-01 +6.003535E-02 +2.443130E+00 +5.968886E+00 +3.360056E-01 +1.128997E-01 +2.492602E+00 +6.213064E+00 +3.266277E-01 +1.066856E-01 +2.437262E+00 +5.940245E+00 +2.878100E-01 +8.283461E-02 +2.104091E+00 +4.427200E+00 +3.440457E-01 +1.183675E-01 +1.965900E+00 +3.864762E+00 +2.880615E-01 +8.297945E-02 +1.401955E+00 +1.965478E+00 +1.646479E-01 +2.710892E-02 +6.832689E-01 +4.668565E-01 +1.147413E-01 +1.316557E-02 cmfd indices 1.000000E+01 1.000000E+00 1.000000E+00 1.000000E+00 k cmfd -1.149077E+00 -1.156751E+00 -1.158648E+00 -1.159506E+00 -1.156567E+00 -1.160259E+00 -1.150345E+00 -1.149846E+00 -1.151606E+00 -1.164544E+00 -1.174648E+00 +1.181376E+00 +1.176656E+00 +1.161939E+00 +1.163552E+00 +1.163035E+00 +1.170382E+00 +1.160597E+00 +1.154301E+00 +1.159007E+00 +1.148290E+00 +1.157088E+00 cmfd entropy -3.216173E+00 -3.228717E+00 -3.220402E+00 -3.214352E+00 -3.215636E+00 -3.213599E+00 -3.212854E+00 -3.213131E+00 -3.213196E+00 -3.205474E+00 -3.202869E+00 +3.246419E+00 +3.246511E+00 +3.252247E+00 +3.240919E+00 +3.237600E+00 +3.233990E+00 +3.234226E+00 +3.229356E+00 +3.224272E+00 +3.225381E+00 +3.226778E+00 cmfd balance -3.08825E-03 -1.42345E-03 -1.21253E-03 -1.17694E-03 -1.05901E-03 -9.29611E-04 -1.35587E-03 -1.13579E-03 -1.14964E-03 -1.29313E-03 -1.46566E-03 +4.18486E-03 +1.72126E-03 +1.10899E-03 +1.88170E-03 +1.31646E-03 +1.34128E-03 +1.57944E-03 +2.11251E-03 +1.79912E-03 +1.86000E-03 +1.47765E-03 cmfd dominance ratio 5.524E-01 -5.614E-01 -5.522E-01 -5.487E-01 -5.482E-01 -5.446E-01 -5.437E-01 -5.429E-01 -5.407E-01 -5.380E-01 -5.377E-01 +5.597E-01 +5.622E-01 +5.544E-01 +5.541E-01 +5.519E-01 +5.532E-01 +5.550E-01 +5.484E-01 +5.497E-01 +5.500E-01 cmfd openmc source comparison -1.586045E-02 -6.953134E-03 -6.860419E-03 -6.198467E-03 -5.142854E-03 -4.373354E-03 -5.564831E-03 -4.184765E-03 -1.867780E-03 -2.734784E-03 -2.523985E-03 +1.905464E-03 +4.145126E-03 +2.465876E-03 +2.346755E-03 +1.848120E-03 +3.263822E-03 +3.641639E-03 +4.031509E-03 +4.999010E-03 +6.640746E-03 +5.691414E-03 cmfd source -4.241440E-02 -8.226026E-02 -1.180811E-01 -1.328433E-01 -1.412410E-01 -1.424902E-01 -1.269340E-01 -1.096490E-01 -6.953251E-02 -3.455422E-02 +4.951338E-02 +8.478025E-02 +1.083132E-01 +1.301432E-01 +1.341190E-01 +1.445825E-01 +1.255119E-01 +1.063303E-01 +7.830158E-02 +3.840469E-02 diff --git a/tests/regression_tests/cmfd_feed_ng/results_true.dat b/tests/regression_tests/cmfd_feed_ng/results_true.dat index 153238bfeb5..4ea1515f184 100644 --- a/tests/regression_tests/cmfd_feed_ng/results_true.dat +++ b/tests/regression_tests/cmfd_feed_ng/results_true.dat @@ -1,208 +1,208 @@ k-combined: -1.005987E+00 1.354263E-02 +1.008852E+00 9.028695E-03 tally 1: -1.140273E+02 -1.301245E+03 -1.147962E+02 -1.319049E+03 -1.151426E+02 -1.326442E+03 -1.149265E+02 -1.321518E+03 +1.151271E+02 +1.325871E+03 +1.143934E+02 +1.309051E+03 +1.142507E+02 +1.306616E+03 +1.140242E+02 +1.300786E+03 tally 2: -3.462748E+01 -7.542476E+01 -5.129219E+01 -1.658142E+02 -1.034704E+01 -6.730603E+00 -8.672967E+00 -4.715295E+00 -1.344669E+02 -1.132019E+03 -7.262519E+01 -3.300787E+02 -3.447358E+01 -7.459545E+01 -5.075836E+01 -1.619570E+02 -1.080516E+01 -7.366369E+00 -8.908065E+00 -4.991975E+00 -1.354224E+02 -1.146824E+03 -7.300078E+01 -3.332531E+02 -3.432298E+01 -7.388666E+01 -5.096378E+01 -1.627979E+02 -1.053664E+01 -7.029789E+00 -8.826624E+00 -4.904429E+00 -1.388389E+02 -1.207280E+03 -7.376623E+01 -3.403211E+02 -4.383841E+01 -1.943331E+02 -5.165881E+01 -1.675923E+02 -1.059646E+01 -7.048052E+00 -8.763673E+00 -4.823505E+00 -1.378179E+02 -1.188104E+03 -7.431708E+01 -3.453746E+02 +3.403617E+01 +7.260478E+01 +5.031678E+01 +1.588977E+02 +1.003700E+01 +6.373741E+00 +8.514575E+00 +4.571811E+00 +1.413036E+02 +1.264708E+03 +7.321799E+01 +3.353408E+02 +3.354839E+01 +7.052647E+01 +4.895930E+01 +1.501243E+02 +9.972495E+00 +6.271276E+00 +8.436263E+00 +4.481319E+00 +1.353506E+02 +1.146040E+03 +7.309382E+01 +3.341751E+02 +3.389861E+01 +7.205501E+01 +5.005946E+01 +1.571210E+02 +1.041650E+01 +6.810868E+00 +8.839753E+00 +4.897617E+00 +1.344145E+02 +1.130242E+03 +7.270373E+01 +3.307223E+02 +3.347928E+01 +7.040185E+01 +4.940585E+01 +1.535767E+02 +9.898649E+00 +6.175319E+00 +8.406032E+00 +4.442856E+00 +1.374544E+02 +1.182191E+03 +7.334301E+01 +3.365399E+02 tally 3: -4.858880E+01 -1.488705E+02 +4.755532E+01 +1.419592E+02 0.000000E+00 0.000000E+00 -8.148667E-03 -1.337050E-05 +1.628248E-02 +3.680742E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.347376E+00 -7.045574E-01 -2.433484E+00 -3.727266E-01 +3.347160E+00 +7.104290E-01 +2.453669E+00 +3.797470E-01 0.000000E+00 0.000000E+00 -6.095478E+00 -2.332622E+00 +5.925795E+00 +2.220734E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.235421E-01 -1.205155E-03 -3.647699E-01 -8.953589E-03 +9.542527E-02 +1.118856E-03 +3.018759E-01 +6.371059E-03 0.000000E+00 0.000000E+00 -2.673965E+00 -4.517972E-01 +2.501316E+00 +3.938401E-01 0.000000E+00 0.000000E+00 -6.841105E+01 -2.929195E+02 -5.902473E-01 -2.307683E-02 -4.792291E+01 -1.444397E+02 +6.926265E+01 +3.001504E+02 +6.765221E-01 +2.991787E-02 +4.605523E+01 +1.328435E+02 0.000000E+00 0.000000E+00 -2.183275E-02 -8.061011E-05 +1.687782E-02 +3.921162E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.435826E+00 -7.480244E-01 -2.450829E+00 -3.800327E-01 +3.481608E+00 +7.705602E-01 +2.439374E+00 +3.779705E-01 0.000000E+00 0.000000E+00 -6.331358E+00 -2.530492E+00 +5.855806E+00 +2.162361E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.012941E-01 -8.217580E-04 -2.981274E-01 -5.863186E-03 +1.016677E-01 +9.263706E-04 +3.264878E-01 +7.385168E-03 0.000000E+00 0.000000E+00 -2.535628E+00 -4.048310E-01 +2.519730E+00 +3.986182E-01 0.000000E+00 0.000000E+00 -6.912003E+01 -2.987684E+02 -5.984862E-01 -2.386115E-02 -4.822881E+01 -1.458309E+02 +6.920950E+01 +2.996184E+02 +5.985719E-01 +2.368062E-02 +4.730723E+01 +1.403550E+02 0.000000E+00 0.000000E+00 -1.525590E-02 -3.794082E-05 +6.800415E-03 +1.163614E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.314494E+00 -6.944527E-01 -2.424209E+00 -3.691360E-01 +3.347607E+00 +7.085691E-01 +2.556997E+00 +4.109118E-01 0.000000E+00 0.000000E+00 -6.254897E+00 -2.474317E+00 +6.171063E+00 +2.391770E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.112542E-01 -1.051688E-03 -3.234880E-01 -7.156753E-03 +7.942016E-02 +5.628747E-04 +3.456912E-01 +7.940086E-03 0.000000E+00 0.000000E+00 -2.474142E+00 -3.837496E-01 +2.684459E+00 +4.546338E-01 0.000000E+00 0.000000E+00 -6.987095E+01 -3.053358E+02 -5.928782E-01 -2.368116E-02 -4.885415E+01 -1.499856E+02 +6.850588E+01 +2.936078E+02 +6.458806E-01 +2.672541E-02 +4.673301E+01 +1.374202E+02 0.000000E+00 0.000000E+00 -1.262416E-02 -2.486286E-05 +1.504681E-02 +4.202606E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.426826E+00 -7.480396E-01 -2.487209E+00 -3.903882E-01 +3.139138E+00 +6.206027E-01 +2.341735E+00 +3.454035E-01 0.000000E+00 0.000000E+00 -6.127303E+00 -2.364605E+00 +5.923755E+00 +2.216341E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.439007E-02 -1.082564E-03 -2.963491E-01 -5.652952E-03 +7.030156E-02 +4.283974E-04 +3.247594E-01 +7.133772E-03 0.000000E+00 0.000000E+00 -2.620696E+00 -4.311792E-01 +2.559691E+00 +4.119674E-01 0.000000E+00 0.000000E+00 -7.030725E+01 -3.091241E+02 -5.986966E-01 -2.352487E-02 +6.938051E+01 +3.012078E+02 +5.159565E-01 +1.730381E-02 tally 4: 0.000000E+00 0.000000E+00 @@ -216,18 +216,18 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.028624E+00 -3.105990E+00 -2.154648E+00 -2.948865E-01 -2.714077E+01 -4.607926E+01 -7.035506E+00 -3.118549E+00 -2.085916E+00 -2.730884E-01 -2.750091E+01 -4.731304E+01 +7.028166E+00 +3.103666E+00 +2.028371E+00 +2.606104E-01 +2.715466E+01 +4.614452E+01 +6.981028E+00 +3.059096E+00 +2.032450E+00 +2.610410E-01 +2.734281E+01 +4.675062E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -240,18 +240,18 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.170567E+00 -3.240715E+00 -2.131758E+00 -2.862355E-01 -2.747702E+01 -4.722977E+01 -7.068817E+00 -3.139275E+00 -2.095865E+00 -2.762179E-01 -2.737835E+01 -4.688689E+01 +6.969559E+00 +3.054867E+00 +2.042871E+00 +2.624815E-01 +2.766332E+01 +4.787778E+01 +7.022610E+00 +3.098329E+00 +2.109973E+00 +2.824233E-01 +2.733826E+01 +4.676309E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -276,18 +276,18 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.035506E+00 -3.118549E+00 -2.085916E+00 -2.730884E-01 -2.750091E+01 -4.731304E+01 -7.028624E+00 -3.105990E+00 -2.154648E+00 -2.948865E-01 -2.714077E+01 -4.607926E+01 +6.981028E+00 +3.059096E+00 +2.032450E+00 +2.610410E-01 +2.734281E+01 +4.675062E+01 +7.028166E+00 +3.103666E+00 +2.028371E+00 +2.606104E-01 +2.715466E+01 +4.614452E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -312,18 +312,18 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.103896E+00 -3.171147E+00 -2.095666E+00 -2.756673E-01 -2.711842E+01 -4.600196E+01 -7.197270E+00 -3.255501E+00 -2.046179E+00 -2.630301E-01 -2.729901E+01 -4.662030E+01 +6.782152E+00 +2.885448E+00 +1.951138E+00 +2.400912E-01 +2.739652E+01 +4.697696E+01 +6.873220E+00 +2.965563E+00 +1.999066E+00 +2.521586E-01 +2.732700E+01 +4.670990E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -360,30 +360,30 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.240906E+00 -3.296285E+00 -2.130816E+00 -2.850713E-01 -2.761433E+01 -4.771548E+01 -7.126427E+00 -3.199209E+00 -2.177254E+00 -2.998765E-01 -2.754936E+01 -4.748447E+01 -7.068817E+00 -3.139275E+00 -2.095865E+00 -2.762179E-01 -2.737835E+01 -4.688689E+01 -7.170567E+00 -3.240715E+00 -2.131758E+00 -2.862355E-01 -2.747702E+01 -4.722977E+01 +6.933695E+00 +3.028826E+00 +2.080336E+00 +2.719620E-01 +2.726925E+01 +4.650782E+01 +6.836291E+00 +2.935998E+00 +2.124868E+00 +2.841370E-01 +2.709685E+01 +4.591604E+01 +7.022610E+00 +3.098329E+00 +2.109973E+00 +2.824233E-01 +2.733826E+01 +4.676309E+01 +6.969559E+00 +3.054867E+00 +2.042871E+00 +2.624815E-01 +2.766332E+01 +4.787778E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -420,18 +420,18 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.126427E+00 -3.199209E+00 -2.177254E+00 -2.998765E-01 -2.754936E+01 -4.748447E+01 -7.240906E+00 -3.296285E+00 -2.130816E+00 -2.850713E-01 -2.761433E+01 -4.771548E+01 +6.836291E+00 +2.935998E+00 +2.124868E+00 +2.841370E-01 +2.709685E+01 +4.591604E+01 +6.933695E+00 +3.028826E+00 +2.080336E+00 +2.719620E-01 +2.726925E+01 +4.650782E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -444,18 +444,18 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.197270E+00 -3.255501E+00 -2.046179E+00 -2.630301E-01 -2.729901E+01 -4.662030E+01 -7.103896E+00 -3.171147E+00 -2.095666E+00 -2.756673E-01 -2.711842E+01 -4.600196E+01 +6.873220E+00 +2.965563E+00 +1.999066E+00 +2.521586E-01 +2.732700E+01 +4.670990E+01 +6.782152E+00 +2.885448E+00 +1.951138E+00 +2.400912E-01 +2.739652E+01 +4.697696E+01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -493,124 +493,124 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -4.859695E+01 -1.489217E+02 -8.528963E+00 -4.561881E+00 -7.144500E+01 -3.194467E+02 -1.120265E+01 -7.944038E+00 -4.009821E+00 -1.012575E+00 -3.235456E+01 -6.558658E+01 -4.794474E+01 -1.445671E+02 -8.782187E+00 -4.852477E+00 -7.195036E+01 -3.237389E+02 -1.075572E+01 -7.333822E+00 -4.084680E+00 -1.054714E+00 -3.267154E+01 -6.675266E+01 -4.824407E+01 -1.459220E+02 -8.679106E+00 -4.742342E+00 -7.266858E+01 -3.302641E+02 -1.094872E+01 -7.536318E+00 -3.935828E+00 -9.749543E-01 -3.319517E+01 -6.894791E+01 -4.886677E+01 -1.500624E+02 -8.614512E+00 -4.662618E+00 -7.321408E+01 -3.352172E+02 -1.095123E+01 -7.574359E+00 -3.885927E+00 -9.539315E-01 -3.334065E+01 -6.953215E+01 +4.757160E+01 +1.420561E+02 +8.379464E+00 +4.426892E+00 +7.205748E+01 +3.248178E+02 +1.047742E+01 +6.922945E+00 +3.879420E+00 +9.517577E-01 +3.297227E+01 +6.802001E+01 +4.607211E+01 +1.329402E+02 +8.295180E+00 +4.334618E+00 +7.205259E+01 +3.247324E+02 +1.059307E+01 +7.039382E+00 +3.783039E+00 +9.030658E-01 +3.288052E+01 +6.762048E+01 +4.731403E+01 +1.403940E+02 +8.728060E+00 +4.774750E+00 +7.152809E+01 +3.200993E+02 +1.074636E+01 +7.270116E+00 +4.007351E+00 +1.010562E+00 +3.249303E+01 +6.611829E+01 +4.674806E+01 +1.375015E+02 +8.265491E+00 +4.296947E+00 +7.226174E+01 +3.267127E+02 +1.079228E+01 +7.340408E+00 +3.843888E+00 +9.273339E-01 +3.300391E+01 +6.823122E+01 cmfd indices 2.000000E+00 2.000000E+00 1.000000E+00 3.000000E+00 k cmfd -1.026473E+00 -1.024183E+00 -1.023151E+00 -1.025047E+00 -1.019801E+00 -1.020492E+00 -1.015249E+00 -1.016714E+00 -1.016047E+00 -1.019687E+00 -1.020955E+00 +1.011190E+00 +1.010705E+00 +1.014132E+00 +1.015900E+00 +1.019132E+00 +1.022616E+00 +1.023007E+00 +1.022300E+00 +1.014692E+00 +1.007628E+00 +1.006204E+00 cmfd entropy -1.999640E+00 -1.999556E+00 -1.999484E+00 -1.999718E+00 -1.999697E+00 -1.999657E+00 -1.999883E+00 -1.999902E+00 -1.999977E+00 -1.999977E+00 -1.999906E+00 +1.999167E+00 +1.999076E+00 +1.998507E+00 +1.997924E+00 +1.997814E+00 +1.997752E+00 +1.997882E+00 +1.998074E+00 +1.998109E+00 +1.998301E+00 +1.998581E+00 cmfd balance -8.10090E-04 -1.28103E-03 -7.97200E-04 -5.82188E-04 -7.20670E-04 -7.31475E-04 -5.71904E-04 -6.14057E-04 -6.00142E-04 -5.47870E-04 -3.53604E-04 +9.30124E-04 +2.56632E-04 +3.62598E-04 +4.17543E-04 +5.25720E-04 +4.90208E-04 +3.61304E-04 +2.24090E-04 +1.86602E-04 +1.78395E-04 +6.42497E-05 cmfd dominance ratio -3.977E-03 -4.018E-03 -3.950E-03 -3.866E-03 -3.840E-03 -3.888E-03 -3.867E-03 -3.896E-03 -3.924E-03 -3.885E-03 -3.913E-03 +4.194E-03 +4.234E-03 +4.149E-03 +4.209E-03 +4.185E-03 +4.197E-03 +4.175E-03 +4.105E-03 +4.056E-03 +4.122E-03 +4.113E-03 cmfd openmc source comparison -4.787501E-05 -4.450525E-05 -2.532345E-05 -3.844307E-05 -4.821504E-05 -4.840760E-05 -3.739246E-05 -3.957960E-05 -4.521480E-05 -4.072007E-05 -2.532636E-05 +2.078995E-05 +2.415218E-05 +3.311536E-05 +3.598613E-05 +3.156455E-05 +2.737017E-05 +2.468500E-05 +2.514215E-05 +1.601626E-05 +1.424027E-05 +4.201148E-06 cmfd source -2.486236E-01 -2.531628E-01 -2.460219E-01 -2.521918E-01 +2.558585E-01 +2.597562E-01 +2.529866E-01 +2.313986E-01 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/regression_tests/cmfd_feed_rectlin/results_true.dat b/tests/regression_tests/cmfd_feed_rectlin/results_true.dat index 600b5d1528d..a98f3fbd383 100644 --- a/tests/regression_tests/cmfd_feed_rectlin/results_true.dat +++ b/tests/regression_tests/cmfd_feed_rectlin/results_true.dat @@ -1,149 +1,149 @@ k-combined: -1.160561E+00 1.029736E-02 +1.157362E+00 9.651846E-03 tally 1: -1.089904E+01 -1.193573E+01 -2.026534E+01 -4.113383E+01 -2.723584E+01 -7.440537E+01 -3.309956E+01 -1.101184E+02 -3.659327E+01 -1.341221E+02 -3.780158E+01 -1.430045E+02 -3.520883E+01 -1.241772E+02 -2.961801E+01 -8.784675E+01 -2.182029E+01 -4.781083E+01 -1.180347E+01 -1.399970E+01 +1.160989E+01 +1.351117E+01 +2.127132E+01 +4.540172E+01 +2.903242E+01 +8.450044E+01 +3.443549E+01 +1.188763E+02 +3.678332E+01 +1.355586E+02 +3.760088E+01 +1.418740E+02 +3.433077E+01 +1.181837E+02 +2.861986E+01 +8.231285E+01 +2.182277E+01 +4.792086E+01 +1.138713E+01 +1.304425E+01 tally 2: -8.794706E+00 -3.939413E+00 -6.131113E+00 -1.913116E+00 -3.265522E+01 -5.364042E+01 -2.304238E+01 -2.672742E+01 -2.250225E+01 -2.541491E+01 -1.601668E+01 -1.288405E+01 -5.525355E+01 -1.531915E+02 -3.929637E+01 -7.748545E+01 -3.222711E+01 -5.216630E+01 -2.285375E+01 -2.623641E+01 -7.051908E+01 -2.495413E+02 -5.010064E+01 -1.259701E+02 -3.728726E+01 -6.974440E+01 -2.652872E+01 -3.530919E+01 -3.747306E+01 -7.058235E+01 -2.681415E+01 -3.613314E+01 -7.296802E+01 -2.669214E+02 -5.202502E+01 -1.356733E+02 -3.333947E+01 -5.579355E+01 -2.361733E+01 -2.800800E+01 -5.785916E+01 -1.680561E+02 -4.093282E+01 -8.410711E+01 -2.377151E+01 -2.842464E+01 -1.681789E+01 -1.423646E+01 -3.422028E+01 -5.880493E+01 -2.415199E+01 -2.930240E+01 -8.890608E+00 -3.986356E+00 -6.140159E+00 -1.897764E+00 +8.861425E+00 +3.953963E+00 +6.090757E+00 +1.866235E+00 +3.309260E+01 +5.493482E+01 +2.330765E+01 +2.725350E+01 +2.295343E+01 +2.647375E+01 +1.629166E+01 +1.334081E+01 +5.714234E+01 +1.640293E+02 +4.054051E+01 +8.261123E+01 +3.331786E+01 +5.565082E+01 +2.366345E+01 +2.807637E+01 +7.034800E+01 +2.485209E+02 +5.001286E+01 +1.256087E+02 +3.651223E+01 +6.686058E+01 +2.606851E+01 +3.408881E+01 +3.729833E+01 +6.997492E+01 +2.657970E+01 +3.553107E+01 +7.212382E+01 +2.611253E+02 +5.124647E+01 +1.318756E+02 +3.304529E+01 +5.486643E+01 +2.347504E+01 +2.771353E+01 +5.711252E+01 +1.640619E+02 +4.060288E+01 +8.298231E+01 +2.384078E+01 +2.855909E+01 +1.684046E+01 +1.426180E+01 +3.329487E+01 +5.573544E+01 +2.349871E+01 +2.776487E+01 +8.676886E+00 +3.814132E+00 +5.980976E+00 +1.815143E+00 tally 3: -5.925339E+00 -1.788596E+00 -3.912632E-01 -8.061838E-03 -2.215544E+01 -2.471404E+01 -1.465191E+00 -1.092622E-01 -1.542988E+01 -1.195626E+01 -1.022876E+00 -5.356825E-02 -3.792029E+01 -7.218149E+01 -2.370476E+00 -2.839465E-01 -2.200154E+01 -2.432126E+01 -1.360836E+00 -9.402424E-02 -4.824980E+01 -1.168447E+02 -3.124366E+00 -4.907460E-01 -2.557420E+01 -3.282066E+01 -1.725855E+00 -1.519830E-01 -2.577963E+01 -3.341077E+01 -1.654042E+00 -1.386845E-01 -5.008220E+01 -1.257610E+02 -3.223857E+00 -5.237360E-01 -2.273380E+01 -2.595325E+01 -1.438369E+00 -1.050840E-01 -3.938822E+01 -7.789691E+01 -2.648324E+00 -3.559703E-01 -1.623604E+01 -1.327214E+01 -1.058882E+00 -5.680630E-02 -2.325730E+01 -2.717892E+01 -1.584276E+00 -1.275868E-01 -5.937929E+00 -1.774847E+00 -3.866918E-01 -7.994353E-03 +5.847135E+00 +1.719612E+00 +3.960040E-01 +8.297721E-03 +2.245534E+01 +2.530222E+01 +1.468678E+00 +1.094031E-01 +1.571194E+01 +1.240597E+01 +1.004169E+00 +5.156464E-02 +3.901605E+01 +7.652715E+01 +2.648696E+00 +3.571840E-01 +2.275978E+01 +2.597555E+01 +1.456067E+00 +1.075035E-01 +4.821184E+01 +1.167725E+02 +3.105774E+00 +4.859873E-01 +2.519281E+01 +3.183845E+01 +1.595498E+00 +1.292133E-01 +2.560583E+01 +3.297409E+01 +1.673871E+00 +1.429651E-01 +4.930025E+01 +1.220909E+02 +3.206604E+00 +5.220919E-01 +2.255825E+01 +2.560134E+01 +1.422870E+00 +1.027151E-01 +3.910818E+01 +7.698933E+01 +2.568903E+00 +3.333385E-01 +1.620292E+01 +1.321173E+01 +1.068678E+00 +5.798793E-02 +2.264343E+01 +2.578648E+01 +1.503553E+00 +1.158411E-01 +5.751110E+00 +1.676910E+00 +3.450582E-01 +6.411784E-03 tally 4: -3.063235E+00 -4.714106E-01 +3.051764E+00 +4.671879E-01 0.000000E+00 0.000000E+00 -1.425705E+00 -1.043616E-01 -4.355515E+00 -9.538346E-01 +1.407008E+00 +1.004485E-01 +4.354708E+00 +9.506434E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -160,14 +160,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.355515E+00 -9.538346E-01 -1.425705E+00 -1.043616E-01 -3.859174E+00 -7.519499E-01 -6.350310E+00 -2.024214E+00 +4.354708E+00 +9.506434E-01 +1.407008E+00 +1.004485E-01 +3.852730E+00 +7.498016E-01 +6.382605E+00 +2.043123E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -184,14 +184,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -6.350310E+00 -2.024214E+00 -3.859174E+00 -7.519499E-01 -4.993073E+00 -1.258264E+00 -7.194275E+00 -2.596886E+00 +6.382605E+00 +2.043123E+00 +3.852730E+00 +7.498016E-01 +5.061607E+00 +1.288306E+00 +7.281209E+00 +2.659444E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -208,14 +208,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.194275E+00 -2.596886E+00 -4.993073E+00 -1.258264E+00 -6.786617E+00 -2.312259E+00 -8.306978E+00 -3.459668E+00 +7.281209E+00 +2.659444E+00 +5.061607E+00 +1.288306E+00 +7.096602E+00 +2.527474E+00 +8.632232E+00 +3.736665E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -232,14 +232,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.306978E+00 -3.459668E+00 -6.786617E+00 -2.312259E+00 -7.603410E+00 -2.905228E+00 -8.791222E+00 -3.882935E+00 +8.632232E+00 +3.736665E+00 +7.096602E+00 +2.527474E+00 +7.759456E+00 +3.019026E+00 +8.968687E+00 +4.037738E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -256,14 +256,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.791222E+00 -3.882935E+00 -7.603410E+00 -2.905228E+00 -8.867113E+00 -3.938503E+00 -9.302808E+00 -4.340042E+00 +8.968687E+00 +4.037738E+00 +7.759456E+00 +3.019026E+00 +8.749025E+00 +3.839161E+00 +9.126289E+00 +4.176440E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -280,14 +280,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.302808E+00 -4.340042E+00 -8.867113E+00 -3.938503E+00 -9.270113E+00 -4.306513E+00 -9.263471E+00 -4.302184E+00 +9.126289E+00 +4.176440E+00 +8.749025E+00 +3.839161E+00 +9.259277E+00 +4.304020E+00 +9.165726E+00 +4.216173E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -304,14 +304,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.263471E+00 -4.302184E+00 -9.270113E+00 -4.306513E+00 -9.348712E+00 -4.388570E+00 -8.977713E+00 -4.047349E+00 +9.165726E+00 +4.216173E+00 +9.259277E+00 +4.304020E+00 +9.433925E+00 +4.473551E+00 +8.910566E+00 +3.991458E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -328,14 +328,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.977713E+00 -4.047349E+00 -9.348712E+00 -4.388570E+00 -9.234380E+00 -4.280666E+00 -8.036978E+00 -3.239853E+00 +8.910566E+00 +3.991458E+00 +9.433925E+00 +4.473551E+00 +9.099397E+00 +4.154062E+00 +7.770126E+00 +3.029928E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -352,14 +352,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.036978E+00 -3.239853E+00 -9.234380E+00 -4.280666E+00 -8.713633E+00 -3.808850E+00 -7.160878E+00 -2.572915E+00 +7.770126E+00 +3.029928E+00 +9.099397E+00 +4.154062E+00 +8.575842E+00 +3.694998E+00 +6.934243E+00 +2.418570E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -376,14 +376,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.160878E+00 -2.572915E+00 -8.713633E+00 -3.808850E+00 -7.378538E+00 -2.732122E+00 -5.145728E+00 -1.329190E+00 +6.934243E+00 +2.418570E+00 +8.575842E+00 +3.694998E+00 +7.437526E+00 +2.780629E+00 +5.136923E+00 +1.331553E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -400,14 +400,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.145728E+00 -1.329190E+00 -7.378538E+00 -2.732122E+00 -6.660125E+00 -2.228506E+00 -4.087925E+00 -8.435381E-01 +5.136923E+00 +1.331553E+00 +7.437526E+00 +2.780629E+00 +6.648582E+00 +2.216687E+00 +4.050691E+00 +8.279789E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -424,14 +424,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.087925E+00 -8.435381E-01 -6.660125E+00 -2.228506E+00 -4.466295E+00 -1.002320E+00 -1.468481E+00 -1.099604E-01 +4.050691E+00 +8.279789E-01 +6.648582E+00 +2.216687E+00 +4.390906E+00 +9.686686E-01 +1.391624E+00 +9.861955E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -448,12 +448,12 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -1.468481E+00 -1.099604E-01 -4.466295E+00 -1.002320E+00 -3.139355E+00 -4.955456E-01 +1.391624E+00 +9.861955E-02 +4.390906E+00 +9.686686E-01 +3.113477E+00 +4.874296E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -473,164 +473,164 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -5.925339E+00 -1.788596E+00 -8.954773E-01 -4.217679E-02 -2.215054E+01 -2.470273E+01 -2.944747E+00 -4.443186E-01 -1.542658E+01 -1.195085E+01 -1.950262E+00 -1.946340E-01 -3.791137E+01 -7.214779E+01 -4.955741E+00 -1.254830E+00 -2.200054E+01 -2.431894E+01 -3.031040E+00 -4.685971E-01 -4.823946E+01 -1.167941E+02 -6.226321E+00 -1.956308E+00 -2.556930E+01 -3.280828E+01 -3.582546E+00 -6.505962E-01 -2.577249E+01 -3.339204E+01 -3.316825E+00 -5.676842E-01 -5.007249E+01 -1.257124E+02 -6.462364E+00 -2.120157E+00 -2.273285E+01 -2.595106E+01 -2.960964E+00 -4.496277E-01 -3.937362E+01 -7.783849E+01 -5.339336E+00 -1.449257E+00 -1.623315E+01 -1.326746E+01 -2.289661E+00 -2.698618E-01 -2.325250E+01 -2.716827E+01 -3.253010E+00 -5.413837E-01 -5.937929E+00 -1.774847E+00 -9.208589E-01 -4.421403E-02 +5.846103E+00 +1.718959E+00 +8.952028E-01 +4.184063E-02 +2.245226E+01 +2.529524E+01 +3.092645E+00 +4.848878E-01 +1.571095E+01 +1.240426E+01 +2.178244E+00 +2.438479E-01 +3.900638E+01 +7.648853E+01 +5.265574E+00 +1.401505E+00 +2.275895E+01 +2.597348E+01 +3.067909E+00 +4.810969E-01 +4.820213E+01 +1.167232E+02 +6.403602E+00 +2.070034E+00 +2.519091E+01 +3.183360E+01 +3.463531E+00 +6.097568E-01 +2.560388E+01 +3.296889E+01 +3.456252E+00 +6.101655E-01 +4.929539E+01 +1.220666E+02 +6.629094E+00 +2.223366E+00 +2.255498E+01 +2.559363E+01 +2.833426E+00 +4.150907E-01 +3.909813E+01 +7.694976E+01 +5.582222E+00 +1.584757E+00 +1.620082E+01 +1.320814E+01 +2.282196E+00 +2.703156E-01 +2.263498E+01 +2.576758E+01 +3.162736E+00 +5.145038E-01 +5.750110E+00 +1.676357E+00 +9.181679E-01 +4.562885E-02 cmfd indices 1.400000E+01 1.000000E+00 1.000000E+00 1.000000E+00 k cmfd -1.125528E+00 -1.145509E+00 -1.158948E+00 -1.171983E+00 -1.180649E+00 -1.184072E+00 -1.188112E+00 -1.183095E+00 -1.182269E+00 -1.175467E+00 -1.175184E+00 -1.172637E+00 -1.171593E+00 -1.175439E+00 -1.174650E+00 -1.176474E+00 +1.166740E+00 +1.184008E+00 +1.166534E+00 +1.155559E+00 +1.164960E+00 +1.163229E+00 +1.165897E+00 +1.170104E+00 +1.170207E+00 +1.168091E+00 +1.170940E+00 +1.174589E+00 +1.174609E+00 +1.171505E+00 +1.174456E+00 +1.178370E+00 cmfd entropy -3.607059E+00 -3.604890E+00 -3.601329E+00 -3.597776E+00 -3.597360E+00 -3.597387E+00 -3.595379E+00 -3.596995E+00 -3.600901E+00 -3.601832E+00 -3.601426E+00 -3.604521E+00 -3.602848E+00 -3.603875E+00 -3.605213E+00 -3.606699E+00 +3.594757E+00 +3.587018E+00 +3.590385E+00 +3.595101E+00 +3.592151E+00 +3.600294E+00 +3.602102E+00 +3.604941E+00 +3.605897E+00 +3.604880E+00 +3.601658E+00 +3.602551E+00 +3.600160E+00 +3.604540E+00 +3.604094E+00 +3.602509E+00 cmfd balance -4.46212E-03 -4.66648E-03 -5.04274E-03 -5.21553E-03 -3.92498E-03 -2.97185E-03 -2.79785E-03 -2.66951E-03 -2.17472E-03 -1.98009E-03 -1.77035E-03 -1.51281E-03 -1.52807E-03 -1.33341E-03 -1.18155E-03 -1.07752E-03 +5.52960E-03 +5.42154E-03 +3.62152E-03 +2.92850E-03 +4.08642E-03 +2.07444E-03 +2.03704E-03 +2.06886E-03 +2.09646E-03 +1.94256E-03 +2.02728E-03 +1.89830E-03 +1.83910E-03 +1.48140E-03 +1.47034E-03 +1.64452E-03 cmfd dominance ratio -6.136E-01 -6.127E-01 -6.137E-01 -6.102E-01 -6.067E-01 -6.061E-01 -6.031E-01 6.046E-01 -6.071E-01 -6.089E-01 -6.073E-01 -6.080E-01 -6.080E-01 +6.015E-01 +6.059E-01 +6.060E-01 +6.061E-01 +6.109E-01 +6.110E-01 +6.108E-01 +6.120E-01 +6.124E-01 +6.109E-01 6.090E-01 -6.092E-01 -6.094E-01 +6.116E-01 +6.137E-01 +6.117E-01 +6.131E-01 cmfd openmc source comparison -1.043027E-02 -1.278226E-02 -1.184867E-02 -1.017186E-02 -1.099696E-02 -7.955341E-03 -8.360344E-03 -6.875508E-03 -4.824018E-03 -4.915363E-03 -5.371647E-03 -4.593100E-03 -4.894955E-03 -4.928253E-03 -4.292171E-03 -4.018545E-03 +1.035187E-02 +9.394886E-03 +6.879487E-03 +7.236029E-03 +6.543528E-03 +3.600620E-03 +2.859638E-03 +2.230047E-03 +2.180643E-03 +1.638534E-03 +1.764349E-03 +1.621487E-03 +1.221762E-03 +1.626297E-03 +1.951813E-03 +9.584126E-04 cmfd source -1.600876E-02 -6.000305E-02 -4.248071E-02 -9.935789E-02 -5.768092E-02 -1.338593E-01 -7.417398E-02 -7.102984E-02 -1.382563E-01 -6.181889E-02 -1.142473E-01 -4.571447E-02 -6.864655E-02 -1.672206E-02 +1.677059E-02 +6.229453E-02 +4.278394E-02 +1.134852E-01 +6.231020E-02 +1.327286E-01 +6.808362E-02 +7.130954E-02 +1.362127E-01 +6.048013E-02 +1.094460E-01 +4.546687E-02 +6.403310E-02 +1.459510E-02 diff --git a/tests/regression_tests/cmfd_feed_ref_d/results_true.dat b/tests/regression_tests/cmfd_feed_ref_d/results_true.dat index 9cc26b8cff8..34cde1a46e6 100644 --- a/tests/regression_tests/cmfd_feed_ref_d/results_true.dat +++ b/tests/regression_tests/cmfd_feed_ref_d/results_true.dat @@ -1,117 +1,117 @@ k-combined: -1.167869E+00 7.492916E-03 +1.162249E+00 5.812620E-03 tally 1: -1.146821E+01 -1.318787E+01 -2.161476E+01 -4.685066E+01 -2.951084E+01 -8.733116E+01 -3.521523E+01 -1.242762E+02 -3.774181E+01 -1.426460E+02 -3.727924E+01 -1.391162E+02 -3.377236E+01 -1.143877E+02 -2.904590E+01 -8.453427E+01 -2.090941E+01 -4.384824E+01 -1.078680E+01 -1.168172E+01 +1.153831E+01 +1.338142E+01 +2.155552E+01 +4.659071E+01 +2.813997E+01 +7.941672E+01 +3.270996E+01 +1.073664E+02 +3.639852E+01 +1.329148E+02 +3.729637E+01 +1.393474E+02 +3.443129E+01 +1.186461E+02 +2.832690E+01 +8.040998E+01 +2.177527E+01 +4.771147E+01 +1.146822E+01 +1.328252E+01 tally 2: -1.136805E+00 -1.292326E+00 -7.987282E-01 -6.379667E-01 -2.266961E+00 -5.139112E+00 -1.613498E+00 -2.603376E+00 -3.046379E+00 -9.280427E+00 -2.182480E+00 -4.763219E+00 -3.568101E+00 -1.273134E+01 -2.532478E+00 -6.413444E+00 -3.989532E+00 -1.591637E+01 -2.848319E+00 -8.112921E+00 -3.853139E+00 -1.484668E+01 -2.718497E+00 -7.390223E+00 -3.478134E+00 -1.209742E+01 -2.467279E+00 -6.087465E+00 -2.952214E+00 -8.715569E+00 -2.103257E+00 -4.423688E+00 -1.917446E+00 -3.676599E+00 -1.378361E+00 -1.899878E+00 -1.048230E+00 -1.098785E+00 -7.511876E-01 -5.642828E-01 +1.024353E+00 +1.049299E+00 +6.991057E-01 +4.887487E-01 +2.200432E+00 +4.841901E+00 +1.561655E+00 +2.438768E+00 +2.910400E+00 +8.470426E+00 +2.095155E+00 +4.389674E+00 +3.466006E+00 +1.201320E+01 +2.480456E+00 +6.152662E+00 +3.711781E+00 +1.377732E+01 +2.646019E+00 +7.001418E+00 +3.953648E+00 +1.563133E+01 +2.832759E+00 +8.024524E+00 +3.597870E+00 +1.294467E+01 +2.555396E+00 +6.530048E+00 +2.860871E+00 +8.184585E+00 +2.032282E+00 +4.130169E+00 +2.006740E+00 +4.027007E+00 +1.408150E+00 +1.982886E+00 +1.035163E+00 +1.071562E+00 +7.084068E-01 +5.018402E-01 tally 3: -7.701212E-01 -5.930866E-01 -4.481580E-02 -2.008456E-03 -1.547321E+00 -2.394203E+00 -1.226538E-01 -1.504395E-02 -2.106393E+00 -4.436893E+00 -1.450617E-01 -2.104289E-02 -2.437675E+00 -5.942260E+00 -1.521379E-01 -2.314593E-02 -2.754657E+00 -7.588135E+00 -1.745458E-01 -3.046622E-02 -2.623856E+00 -6.884619E+00 -1.851600E-01 -3.428423E-02 -2.376884E+00 -5.649579E+00 -1.615728E-01 -2.610576E-02 -2.021851E+00 -4.087882E+00 -1.533172E-01 -2.350617E-02 -1.333182E+00 -1.777374E+00 -7.076179E-02 -5.007231E-03 -7.258458E-01 -5.268521E-01 -3.656026E-02 -1.336653E-03 +6.713566E-01 +4.507196E-01 +5.581718E-02 +3.115557E-03 +1.508976E+00 +2.277009E+00 +1.139601E-01 +1.298690E-02 +2.035529E+00 +4.143377E+00 +1.221001E-01 +1.490843E-02 +2.385217E+00 +5.689262E+00 +1.500087E-01 +2.250260E-02 +2.546286E+00 +6.483574E+00 +1.546601E-01 +2.391975E-02 +2.726427E+00 +7.433407E+00 +1.686144E-01 +2.843081E-02 +2.466613E+00 +6.084179E+00 +1.558230E-01 +2.428079E-02 +1.951251E+00 +3.807379E+00 +1.197744E-01 +1.434590E-02 +1.347903E+00 +1.816842E+00 +9.419149E-02 +8.872037E-03 +6.840490E-01 +4.679231E-01 +5.000289E-02 +2.500289E-03 tally 4: -1.667426E-01 -2.780308E-02 +1.561665E-01 +2.438798E-02 0.000000E+00 0.000000E+00 -1.292556E-01 -1.670700E-02 -2.813401E-01 -7.915227E-02 +1.307011E-01 +1.708276E-02 +2.703168E-01 +7.307115E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -128,14 +128,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.813401E-01 -7.915227E-02 -1.292556E-01 -1.670700E-02 -2.670582E-01 -7.132006E-02 -4.055365E-01 -1.644599E-01 +2.703168E-01 +7.307115E-02 +1.307011E-01 +1.708276E-02 +2.637619E-01 +6.957033E-02 +3.685390E-01 +1.358210E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -152,14 +152,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.055365E-01 -1.644599E-01 -2.670582E-01 -7.132006E-02 -3.848164E-01 -1.480837E-01 -4.809472E-01 -2.313102E-01 +3.685390E-01 +1.358210E-01 +2.637619E-01 +6.957033E-02 +3.887017E-01 +1.510890E-01 +4.439407E-01 +1.970834E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -176,14 +176,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.809472E-01 -2.313102E-01 -3.848164E-01 -1.480837E-01 -4.543959E-01 -2.064756E-01 -5.106174E-01 -2.607301E-01 +4.439407E-01 +1.970834E-01 +3.887017E-01 +1.510890E-01 +4.456116E-01 +1.985697E-01 +4.737035E-01 +2.243950E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -200,14 +200,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.106174E-01 -2.607301E-01 -4.543959E-01 -2.064756E-01 -4.543155E-01 -2.064026E-01 -4.626331E-01 -2.140294E-01 +4.737035E-01 +2.243950E-01 +4.456116E-01 +1.985697E-01 +4.760577E-01 +2.266309E-01 +4.703245E-01 +2.212052E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -224,14 +224,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.626331E-01 -2.140294E-01 -4.543155E-01 -2.064026E-01 -4.827763E-01 -2.330729E-01 -4.442611E-01 -1.973679E-01 +4.703245E-01 +2.212052E-01 +4.760577E-01 +2.266309E-01 +4.878056E-01 +2.379543E-01 +4.373120E-01 +1.912418E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -248,14 +248,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.442611E-01 -1.973679E-01 -4.827763E-01 -2.330729E-01 -4.630415E-01 -2.144074E-01 -3.886521E-01 -1.510505E-01 +4.373120E-01 +1.912418E-01 +4.878056E-01 +2.379543E-01 +4.262194E-01 +1.816630E-01 +3.334152E-01 +1.111657E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -272,14 +272,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.886521E-01 -1.510505E-01 -4.630415E-01 -2.144074E-01 -3.535862E-01 -1.250232E-01 -2.530293E-01 -6.402384E-02 +3.334152E-01 +1.111657E-01 +4.262194E-01 +1.816630E-01 +3.560156E-01 +1.267471E-01 +2.409954E-01 +5.807879E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -296,14 +296,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.530293E-01 -6.402384E-02 -3.535862E-01 -1.250232E-01 -2.465508E-01 -6.078730E-02 -1.197139E-01 -1.433141E-02 +2.409954E-01 +5.807879E-02 +3.560156E-01 +1.267471E-01 +2.646501E-01 +7.003965E-02 +1.327244E-01 +1.761576E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -320,12 +320,12 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -1.197139E-01 -1.433141E-02 -2.465508E-01 -6.078730E-02 -1.369614E-01 -1.875841E-02 +1.327244E-01 +1.761576E-02 +2.646501E-01 +7.003965E-02 +1.480567E-01 +2.192079E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -345,119 +345,119 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -7.701212E-01 -5.930866E-01 -1.386254E-01 -1.921700E-02 -1.547321E+00 -2.394203E+00 -2.630318E-01 -6.918571E-02 -2.106393E+00 -4.436893E+00 -2.807911E-01 -7.884363E-02 -2.435870E+00 -5.933464E+00 -3.322093E-01 -1.103630E-01 -2.753652E+00 -7.582597E+00 -3.825961E-01 -1.463797E-01 -2.623856E+00 -6.884619E+00 -3.888719E-01 -1.512213E-01 -2.376884E+00 -5.649579E+00 -3.196211E-01 -1.021576E-01 -2.021851E+00 -4.087882E+00 -2.897873E-01 -8.397667E-02 -1.333182E+00 -1.777374E+00 -1.627096E-01 -2.647441E-02 -7.258458E-01 -5.268521E-01 -9.348575E-02 -8.739586E-03 +6.713566E-01 +4.507196E-01 +9.805793E-02 +9.615358E-03 +1.508976E+00 +2.277009E+00 +1.968348E-01 +3.874394E-02 +2.032573E+00 +4.131353E+00 +2.120922E-01 +4.498309E-02 +2.385217E+00 +5.689262E+00 +2.863031E-01 +8.196946E-02 +2.545200E+00 +6.478041E+00 +3.278920E-01 +1.075131E-01 +2.726427E+00 +7.433407E+00 +3.770758E-01 +1.421861E-01 +2.466613E+00 +6.084179E+00 +3.593230E-01 +1.291130E-01 +1.951251E+00 +3.807379E+00 +2.474112E-01 +6.121229E-02 +1.347903E+00 +1.816842E+00 +2.127109E-01 +4.524594E-02 +6.823620E-01 +4.656179E-01 +1.249863E-01 +1.562159E-02 cmfd indices 1.000000E+01 1.000000E+00 1.000000E+00 1.000000E+00 k cmfd -1.149087E+00 -1.156777E+00 -1.158641E+00 -1.159507E+00 -1.156564E+00 -1.160257E+00 -1.150344E+00 -1.149854E+00 -1.151616E+00 -1.164575E+00 -1.174683E+00 +1.181365E+00 +1.176693E+00 +1.161946E+00 +1.163565E+00 +1.163043E+00 +1.169908E+00 +1.149155E+00 +1.142379E+00 +1.152957E+00 +1.137602E+00 +1.141883E+00 cmfd entropy -3.216202E+00 -3.228703E+00 -3.220414E+00 -3.214361E+00 -3.215642E+00 -3.213607E+00 -3.212862E+00 -3.213128E+00 -3.213189E+00 -3.205465E+00 -3.202859E+00 +3.246422E+00 +3.246496E+00 +3.252238E+00 +3.240920E+00 +3.237606E+00 +3.234301E+00 +3.234103E+00 +3.229918E+00 +3.226983E+00 +3.221321E+00 +3.223622E+00 cmfd balance -3.08825E-03 -1.42554E-03 -1.21448E-03 -1.17859E-03 -1.06034E-03 -9.30949E-04 -1.35713E-03 -1.13694E-03 -1.14938E-03 -1.29296E-03 -1.46518E-03 +4.18486E-03 +1.72126E-03 +1.10906E-03 +1.88158E-03 +1.31626E-03 +1.30818E-03 +1.77315E-03 +2.16148E-03 +1.67789E-03 +2.31333E-03 +1.94932E-03 cmfd dominance ratio -5.503E-01 -5.596E-01 5.505E-01 -5.471E-01 -5.468E-01 -5.427E-01 -5.421E-01 -5.412E-01 -5.389E-01 -5.371E-01 -5.329E-01 +5.580E-01 +5.610E-01 +5.526E-01 +5.519E-01 +5.499E-01 +5.504E-01 +5.504E-01 +5.475E-01 +5.465E-01 +5.477E-01 cmfd openmc source comparison -1.571006E-02 -6.945629E-03 -6.838511E-03 -6.183655E-03 -5.138825E-03 -4.362701E-03 -5.558586E-03 -4.188314E-03 -1.837101E-03 -2.737321E-03 -2.529244E-03 +1.902234E-03 +4.110960E-03 +2.452031E-03 +2.337951E-03 +1.838979E-03 +3.138637E-03 +2.684401E-03 +2.912891E-03 +2.823494E-03 +6.391584E-03 +5.904139E-03 cmfd source -4.240947E-02 -8.226746E-02 -1.180848E-01 -1.328470E-01 -1.412449E-01 -1.424870E-01 -1.269297E-01 -1.096476E-01 -6.953001E-02 -3.455212E-02 +4.488002E-02 +8.895136E-02 +1.085930E-01 +1.229651E-01 +1.330479E-01 +1.497140E-01 +1.309102E-01 +1.028556E-01 +7.738878E-02 +4.069397E-02 diff --git a/tests/regression_tests/cmfd_feed_rolling_window/results_true.dat b/tests/regression_tests/cmfd_feed_rolling_window/results_true.dat index 5ff4a132fd6..2e31b35bab5 100644 --- a/tests/regression_tests/cmfd_feed_rolling_window/results_true.dat +++ b/tests/regression_tests/cmfd_feed_rolling_window/results_true.dat @@ -1,117 +1,117 @@ k-combined: -1.173626E+00 1.098719E-02 +1.158333E+00 1.402684E-02 tally 1: -1.101892E+01 -1.218768E+01 -2.036233E+01 -4.152577E+01 -2.937587E+01 -8.637268E+01 -3.502389E+01 -1.231700E+02 -3.804803E+01 -1.453948E+02 -3.822561E+01 -1.465677E+02 -3.456290E+01 -1.198651E+02 -2.904088E+01 -8.470264E+01 -2.111529E+01 -4.463713E+01 -1.147633E+01 -1.326012E+01 +1.169478E+01 +1.373162E+01 +2.192038E+01 +4.844559E+01 +2.913292E+01 +8.542569E+01 +3.446069E+01 +1.201782E+02 +3.624088E+01 +1.320213E+02 +3.569791E+01 +1.278170E+02 +3.340601E+01 +1.119165E+02 +2.908648E+01 +8.514603E+01 +2.175458E+01 +4.767916E+01 +1.171268E+01 +1.378033E+01 tally 2: -1.010478E+00 -1.021066E+00 -6.902031E-01 -4.763804E-01 -1.899891E+00 -3.609584E+00 -1.322615E+00 -1.749312E+00 -2.756419E+00 -7.597845E+00 -1.955934E+00 -3.825676E+00 -3.818740E+00 -1.458278E+01 -2.704746E+00 -7.315652E+00 -3.920857E+00 -1.537312E+01 -2.843144E+00 -8.083470E+00 -3.835060E+00 -1.470768E+01 -2.728705E+00 -7.445831E+00 -3.510590E+00 -1.232424E+01 -2.497237E+00 -6.236191E+00 -2.717388E+00 -7.384198E+00 -1.903638E+00 -3.623837E+00 -2.207863E+00 -4.874659E+00 -1.563588E+00 -2.444808E+00 -1.289027E+00 -1.661591E+00 -9.022714E-01 -8.140937E-01 +1.132414E+00 +1.282361E+00 +7.822980E-01 +6.119901E-01 +2.124428E+00 +4.513196E+00 +1.490832E+00 +2.222581E+00 +3.158472E+00 +9.975946E+00 +2.221665E+00 +4.935795E+00 +3.994786E+00 +1.595831E+01 +2.828109E+00 +7.998199E+00 +3.491035E+00 +1.218732E+01 +2.461223E+00 +6.057617E+00 +3.461784E+00 +1.198395E+01 +2.473337E+00 +6.117398E+00 +3.027132E+00 +9.163527E+00 +2.150455E+00 +4.624458E+00 +2.471217E+00 +6.106911E+00 +1.737168E+00 +3.017752E+00 +1.880969E+00 +3.538044E+00 +1.316574E+00 +1.733367E+00 +1.233103E+00 +1.520543E+00 +8.543318E-01 +7.298828E-01 tally 3: -6.593197E-01 -4.347024E-01 -5.216387E-02 -2.721069E-03 -1.266446E+00 -1.603885E+00 -8.298797E-02 -6.887003E-03 -1.888709E+00 -3.567222E+00 -1.398940E-01 -1.957033E-02 -2.616078E+00 -6.843867E+00 -1.588627E-01 -2.523735E-02 -2.733300E+00 -7.470927E+00 -1.944290E-01 -3.780262E-02 -2.643656E+00 -6.988917E+00 -1.612338E-01 -2.599633E-02 -2.410643E+00 -5.811199E+00 -1.754603E-01 -3.078631E-02 -1.838012E+00 -3.378288E+00 -1.126265E-01 -1.268473E-02 -1.500033E+00 -2.250100E+00 -1.102554E-01 -1.215626E-02 -8.750096E-01 -7.656418E-01 -6.757592E-02 -4.566505E-03 +7.540113E-01 +5.685330E-01 +6.367610E-02 +4.054646E-03 +1.436984E+00 +2.064922E+00 +8.961822E-02 +8.031425E-03 +2.132240E+00 +4.546449E+00 +1.356065E-01 +1.838913E-02 +2.726356E+00 +7.433016E+00 +1.780572E-01 +3.170438E-02 +2.379700E+00 +5.662970E+00 +1.544735E-01 +2.386206E-02 +2.383471E+00 +5.680933E+00 +1.568319E-01 +2.459624E-02 +2.047271E+00 +4.191318E+00 +1.662654E-01 +2.764418E-02 +1.673107E+00 +2.799287E+00 +1.132020E-01 +1.281468E-02 +1.271576E+00 +1.616906E+00 +7.546797E-02 +5.695415E-03 +8.249906E-01 +6.806094E-01 +5.660098E-02 +3.203671E-03 tally 4: -1.490605E-01 -2.221904E-02 +1.551630E-01 +2.407556E-02 0.000000E+00 0.000000E+00 -1.139233E-01 -1.297851E-02 -2.549497E-01 -6.499934E-02 +1.487992E-01 +2.214121E-02 +2.878091E-01 +8.283409E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -128,14 +128,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.549497E-01 -6.499934E-02 -1.139233E-01 -1.297851E-02 -2.191337E-01 -4.801958E-02 -3.295187E-01 -1.085826E-01 +2.878091E-01 +8.283409E-02 +1.487992E-01 +2.214121E-02 +2.936596E-01 +8.623595E-02 +3.954149E-01 +1.563529E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -152,14 +152,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.295187E-01 -1.085826E-01 -2.191337E-01 -4.801958E-02 -3.872400E-01 -1.499548E-01 -4.595835E-01 -2.112170E-01 +3.954149E-01 +1.563529E-01 +2.936596E-01 +8.623595E-02 +3.991153E-01 +1.592930E-01 +4.758410E-01 +2.264247E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -176,14 +176,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.595835E-01 -2.112170E-01 -3.872400E-01 -1.499548E-01 -4.668106E-01 -2.179121E-01 -5.112307E-01 -2.613569E-01 +4.758410E-01 +2.264247E-01 +3.991153E-01 +1.592930E-01 +4.850882E-01 +2.353106E-01 +5.210840E-01 +2.715285E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -200,14 +200,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.112307E-01 -2.613569E-01 -4.668106E-01 -2.179121E-01 -4.716605E-01 -2.224636E-01 -4.916148E-01 -2.416851E-01 +5.210840E-01 +2.715285E-01 +4.850882E-01 +2.353106E-01 +4.790245E-01 +2.294645E-01 +4.570092E-01 +2.088574E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -224,14 +224,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.916148E-01 -2.416851E-01 -4.716605E-01 -2.224636E-01 -4.696777E-01 -2.205972E-01 -4.365150E-01 -1.905453E-01 +4.570092E-01 +2.088574E-01 +4.790245E-01 +2.294645E-01 +4.505886E-01 +2.030301E-01 +3.884038E-01 +1.508575E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -248,14 +248,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -4.365150E-01 -1.905453E-01 -4.696777E-01 -2.205972E-01 -4.179902E-01 -1.747158E-01 -3.350564E-01 -1.122628E-01 +3.884038E-01 +1.508575E-01 +4.505886E-01 +2.030301E-01 +3.986999E-01 +1.589616E-01 +3.220889E-01 +1.037412E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -272,14 +272,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.350564E-01 -1.122628E-01 -4.179902E-01 -1.747158E-01 -3.743487E-01 -1.401370E-01 -2.400661E-01 -5.763172E-02 +3.220889E-01 +1.037412E-01 +3.986999E-01 +1.589616E-01 +3.319083E-01 +1.101631E-01 +2.101261E-01 +4.415297E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -296,14 +296,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.400661E-01 -5.763172E-02 -3.743487E-01 -1.401370E-01 -3.063657E-01 -9.385994E-02 -1.605078E-01 -2.576275E-02 +2.101261E-01 +4.415297E-02 +3.319083E-01 +1.101631E-01 +2.795459E-01 +7.814588E-02 +1.306499E-01 +1.706938E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -320,12 +320,12 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -1.605078E-01 -2.576275E-02 -3.063657E-01 -9.385994E-02 -1.700639E-01 -2.892174E-02 +1.306499E-01 +1.706938E-02 +2.795459E-01 +7.814588E-02 +1.585507E-01 +2.513833E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -345,119 +345,119 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -6.593197E-01 -4.347024E-01 -1.314196E-01 -1.727112E-02 -1.266446E+00 -1.603885E+00 -2.002491E-01 -4.009970E-02 -1.888709E+00 -3.567222E+00 -2.444522E-01 -5.975686E-02 -2.616078E+00 -6.843867E+00 -3.234935E-01 -1.046481E-01 -2.733300E+00 -7.470927E+00 -3.309500E-01 -1.095279E-01 -2.643656E+00 -6.988917E+00 -4.025014E-01 -1.620074E-01 -2.410643E+00 -5.811199E+00 -3.050040E-01 -9.302747E-02 -1.838012E+00 -3.378288E+00 -2.800764E-01 -7.844279E-02 -1.500033E+00 -2.250100E+00 -2.324765E-01 -5.404531E-02 -8.750096E-01 -7.656418E-01 -1.256919E-01 -1.579844E-02 +7.530237E-01 +5.670447E-01 +1.178984E-01 +1.390004E-02 +1.436984E+00 +2.064922E+00 +1.458395E-01 +2.126916E-02 +2.132240E+00 +4.546449E+00 +2.950109E-01 +8.703141E-02 +2.726356E+00 +7.433016E+00 +3.397288E-01 +1.154157E-01 +2.379700E+00 +5.662970E+00 +3.113206E-01 +9.692053E-02 +2.383471E+00 +5.680933E+00 +3.455611E-01 +1.194125E-01 +2.047271E+00 +4.191318E+00 +2.910986E-01 +8.473841E-02 +1.673107E+00 +2.799287E+00 +2.381996E-01 +5.673907E-02 +1.270672E+00 +1.614606E+00 +1.795241E-01 +3.222889E-02 +8.249906E-01 +6.806094E-01 +1.201397E-01 +1.443354E-02 cmfd indices 1.000000E+01 1.000000E+00 1.000000E+00 1.000000E+00 k cmfd -1.166297E+00 -1.148237E+00 -1.162472E+00 -1.187078E+00 -1.188411E+00 -1.194879E+00 -1.216739E+00 -1.216829E+00 -1.196596E+00 -1.199223E+00 -1.211817E+00 +1.184474E+00 +1.188170E+00 +1.165127E+00 +1.135010E+00 +1.145439E+00 +1.158451E+00 +1.154420E+00 +1.179615E+00 +1.197843E+00 +1.181252E+00 +1.186316E+00 cmfd entropy -3.215349E+00 -3.225577E+00 -3.223357E+00 -3.208828E+00 -3.211072E+00 -3.206578E+00 -3.195799E+00 -3.198236E+00 -3.220074E+00 -3.230249E+00 -3.238015E+00 +3.243654E+00 +3.244091E+00 +3.249203E+00 +3.249952E+00 +3.245538E+00 +3.240838E+00 +3.238919E+00 +3.223131E+00 +3.216002E+00 +3.220324E+00 +3.224804E+00 cmfd balance -2.07468E-03 -2.39687E-03 -1.51020E-03 -2.07618E-03 -1.89367E-03 -2.00902E-03 -2.54856E-03 -2.43636E-03 -2.48527E-03 -3.07775E-03 -3.37967E-03 +4.21104E-03 +1.38052E-03 +1.34642E-03 +2.39255E-03 +2.07426E-03 +1.27927E-03 +2.26249E-03 +2.72103E-03 +2.71504E-03 +2.19156E-03 +1.91989E-03 cmfd dominance ratio -5.505E-01 -5.558E-01 -5.584E-01 -5.477E-01 -5.477E-01 -5.426E-01 -5.335E-01 -5.305E-01 -5.427E-01 +5.520E-01 +5.535E-01 +5.628E-01 +5.696E-01 +5.723E-01 +5.651E-01 +5.648E-01 +5.555E-01 +5.448E-01 +5.488E-01 5.484E-01 -5.465E-01 cmfd openmc source comparison -5.598628E-03 -1.162952E-02 -1.083004E-02 -1.037470E-02 -5.649750E-03 -5.137914E-03 -3.868209E-03 -1.208756E-02 -5.398131E-03 -8.119598E-03 -4.573105E-03 +1.713810E-03 +2.429503E-03 +4.526209E-03 +7.978149E-03 +3.320012E-03 +3.880041E-03 +1.580215E-02 +1.663452E-02 +1.878103E-02 +7.436342E-03 +3.724478E-03 cmfd source -4.219187E-02 -8.692096E-02 -1.061389E-01 -1.199181E-01 -1.377328E-01 -1.326161E-01 -1.345872E-01 -1.112871E-01 -7.569533E-02 -5.291175E-02 +4.688167E-02 +9.066303E-02 +1.150679E-01 +1.430247E-01 +1.370466E-01 +1.267615E-01 +1.244218E-01 +1.048774E-01 +7.083441E-02 +4.042108E-02 diff --git a/tests/regression_tests/cmfd_nofeed/results_true.dat b/tests/regression_tests/cmfd_nofeed/results_true.dat index 756aa457016..ea1a0230b93 100644 --- a/tests/regression_tests/cmfd_nofeed/results_true.dat +++ b/tests/regression_tests/cmfd_nofeed/results_true.dat @@ -1,117 +1,117 @@ k-combined: -1.172893E+00 8.095197E-03 +1.169143E+00 7.248013E-03 tally 1: -1.156995E+01 -1.347019E+01 -2.120053E+01 -4.531200E+01 -2.995993E+01 -8.997889E+01 -3.498938E+01 -1.226414E+02 -3.794510E+01 -1.442188E+02 -3.798115E+01 -1.446436E+02 -3.415954E+01 -1.171635E+02 -2.960329E+01 -8.785532E+01 -2.182231E+01 -4.782353E+01 -1.147379E+01 -1.321150E+01 +1.115130E+01 +1.249933E+01 +2.147608E+01 +4.643964E+01 +2.923697E+01 +8.598273E+01 +3.439175E+01 +1.189653E+02 +3.729169E+01 +1.395456E+02 +3.709975E+01 +1.380839E+02 +3.415420E+01 +1.168226E+02 +2.895696E+01 +8.419764E+01 +2.140382E+01 +4.646784E+01 +1.125483E+01 +1.275812E+01 tally 2: -2.345900E+01 -2.783672E+01 -1.627300E+01 -1.339749E+01 -4.127267E+01 -8.563716E+01 -2.934800E+01 -4.334439E+01 -5.742644E+01 -1.658158E+02 -4.092600E+01 -8.423842E+01 -6.740126E+01 -2.279288E+02 -4.796500E+01 -1.154602E+02 -7.340327E+01 -2.701349E+02 -5.235900E+01 -1.374186E+02 -7.387392E+01 -2.740829E+02 -5.277400E+01 -1.398425E+02 -6.733428E+01 -2.274414E+02 -4.800100E+01 -1.156206E+02 -5.794970E+01 -1.685421E+02 -4.124600E+01 -8.540686E+01 -4.257013E+01 -9.092401E+01 -3.014500E+01 -4.566369E+01 -2.300274E+01 -2.659051E+01 -1.613400E+01 -1.307448E+01 +2.275147E+01 +2.604974E+01 +1.587800E+01 +1.271197E+01 +4.191959E+01 +8.846441E+01 +2.966500E+01 +4.430669E+01 +5.699815E+01 +1.637359E+02 +4.037600E+01 +8.219353E+01 +6.656851E+01 +2.228703E+02 +4.718000E+01 +1.119941E+02 +7.334215E+01 +2.701014E+02 +5.223500E+01 +1.370726E+02 +7.394394E+01 +2.748295E+02 +5.273400E+01 +1.397334E+02 +6.931604E+01 +2.406234E+02 +4.949000E+01 +1.226886E+02 +5.799672E+01 +1.687992E+02 +4.142300E+01 +8.612116E+01 +4.320102E+01 +9.402138E+01 +3.068300E+01 +4.749148E+01 +2.295257E+01 +2.657057E+01 +1.606200E+01 +1.301453E+01 tally 3: -1.564900E+01 -1.239852E+01 -1.086873E+00 -6.047264E-02 -2.821700E+01 -4.006730E+01 -1.855830E+00 -1.755984E-01 -3.946300E+01 -7.833997E+01 -2.523142E+00 -3.210725E-01 -4.622500E+01 -1.072588E+02 -2.919735E+00 -4.340292E-01 -5.033400E+01 -1.270010E+02 -3.243022E+00 -5.318534E-01 -5.082400E+01 -1.297502E+02 -3.313898E+00 -5.546608E-01 -4.623700E+01 -1.072944E+02 -2.887766E+00 -4.203084E-01 -3.975000E+01 -7.934279E+01 -2.567158E+00 -3.333121E-01 -2.903500E+01 -4.237270E+01 -1.852070E+00 -1.733821E-01 -1.557800E+01 -1.219084E+01 -9.951884E-01 -5.121758E-02 +1.528200E+01 +1.177982E+01 +1.040687E+00 +5.586386E-02 +2.857900E+01 +4.113603E+01 +1.871515E+00 +1.774689E-01 +3.888800E+01 +7.626262E+01 +2.534433E+00 +3.274088E-01 +4.541400E+01 +1.037867E+02 +2.926509E+00 +4.319780E-01 +5.034500E+01 +1.273517E+02 +3.215813E+00 +5.215716E-01 +5.076100E+01 +1.295218E+02 +3.194424E+00 +5.165993E-01 +4.768100E+01 +1.138949E+02 +3.058255E+00 +4.732131E-01 +3.995800E+01 +8.015691E+01 +2.454286E+00 +3.044948E-01 +2.957000E+01 +4.412743E+01 +1.938963E+00 +1.908501E-01 +1.544000E+01 +1.202869E+01 +1.038073E+00 +5.487827E-02 tally 4: -3.111000E+00 -4.872850E-01 +3.086000E+00 +4.780160E-01 0.000000E+00 0.000000E+00 -2.794000E+00 -3.972060E-01 -5.520000E+00 -1.535670E+00 +2.739000E+00 +3.790990E-01 +5.478000E+00 +1.505928E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -128,14 +128,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.520000E+00 -1.535670E+00 -2.794000E+00 -3.972060E-01 -5.071000E+00 -1.305697E+00 -7.303000E+00 -2.685365E+00 +5.478000E+00 +1.505928E+00 +2.739000E+00 +3.790990E-01 +5.094000E+00 +1.310476E+00 +7.282000E+00 +2.669810E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -152,14 +152,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.303000E+00 -2.685365E+00 -5.071000E+00 -1.305697E+00 -7.015000E+00 -2.471981E+00 -8.545000E+00 -3.670539E+00 +7.282000E+00 +2.669810E+00 +5.094000E+00 +1.310476E+00 +6.987000E+00 +2.461137E+00 +8.487000E+00 +3.624153E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -176,14 +176,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.545000E+00 -3.670539E+00 -7.015000E+00 -2.471981E+00 -8.431000E+00 -3.570057E+00 -9.224000E+00 -4.268004E+00 +8.487000E+00 +3.624153E+00 +6.987000E+00 +2.461137E+00 +8.250000E+00 +3.421824E+00 +9.022000E+00 +4.088536E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -200,14 +200,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.224000E+00 -4.268004E+00 -8.431000E+00 -3.570057E+00 -9.217000E+00 -4.259749E+00 -9.305000E+00 -4.340149E+00 +9.022000E+00 +4.088536E+00 +8.250000E+00 +3.421824E+00 +9.300000E+00 +4.344142E+00 +9.262000E+00 +4.308946E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -224,14 +224,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.305000E+00 -4.340149E+00 -9.217000E+00 -4.259749E+00 -9.374000E+00 -4.415290E+00 -8.611000E+00 -3.718227E+00 +9.262000E+00 +4.308946E+00 +9.300000E+00 +4.344142E+00 +9.267000E+00 +4.310941E+00 +8.487000E+00 +3.613257E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -248,14 +248,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.611000E+00 -3.718227E+00 -9.374000E+00 -4.415290E+00 -8.515000E+00 -3.639945E+00 -7.056000E+00 -2.501658E+00 +8.487000E+00 +3.613257E+00 +9.267000E+00 +4.310941E+00 +8.682000E+00 +3.778194E+00 +7.123000E+00 +2.544345E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -272,14 +272,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.056000E+00 -2.501658E+00 -8.515000E+00 -3.639945E+00 -7.385000E+00 -2.737677E+00 -5.194000E+00 -1.356022E+00 +7.123000E+00 +2.544345E+00 +8.682000E+00 +3.778194E+00 +7.421000E+00 +2.773897E+00 +5.198000E+00 +1.369216E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -296,14 +296,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.194000E+00 -1.356022E+00 -7.385000E+00 -2.737677E+00 -5.436000E+00 -1.481654E+00 -2.756000E+00 -3.843860E-01 +5.198000E+00 +1.369216E+00 +7.421000E+00 +2.773897E+00 +5.567000E+00 +1.561013E+00 +2.763000E+00 +3.882750E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -320,12 +320,12 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.756000E+00 -3.843860E-01 -5.436000E+00 -1.481654E+00 -3.030000E+00 -4.643920E-01 +2.763000E+00 +3.882750E-01 +5.567000E+00 +1.561013E+00 +3.106000E+00 +4.853380E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -345,144 +345,144 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -1.564300E+01 -1.238861E+01 -2.090227E+00 -2.262627E-01 -2.821400E+01 -4.005826E+01 -3.870834E+00 -7.614623E-01 -3.945400E+01 -7.830326E+01 -5.290557E+00 -1.422339E+00 -4.621500E+01 -1.072116E+02 -6.144745E+00 -1.903309E+00 -5.032900E+01 -1.269756E+02 -6.867524E+00 -2.373593E+00 -5.081000E+01 -1.296784E+02 -6.456283E+00 -2.130767E+00 -4.623000E+01 -1.072613E+02 -5.931623E+00 -1.776451E+00 -3.974500E+01 -7.932288E+01 -5.339603E+00 -1.456812E+00 -2.902800E+01 -4.235232E+01 -4.102240E+00 -8.519551E-01 -1.557800E+01 -1.219084E+01 -2.137954E+00 -2.347770E-01 +1.527700E+01 +1.177204E+01 +2.285003E+00 +2.661382E-01 +2.857200E+01 +4.111506E+01 +4.126099E+00 +8.737996E-01 +3.887800E+01 +7.622094E+01 +5.121343E+00 +1.333837E+00 +4.540600E+01 +1.037492E+02 +6.160114E+00 +1.913665E+00 +5.033400E+01 +1.272949E+02 +6.859861E+00 +2.384476E+00 +5.075800E+01 +1.295055E+02 +6.929393E+00 +2.443364E+00 +4.767500E+01 +1.138658E+02 +6.385463E+00 +2.080293E+00 +3.995300E+01 +8.013651E+01 +5.620641E+00 +1.603844E+00 +2.956200E+01 +4.410395E+01 +3.952701E+00 +7.877105E-01 +1.543500E+01 +1.202080E+01 +2.203583E+00 +2.512936E-01 cmfd indices 1.000000E+01 1.000000E+00 1.000000E+00 1.000000E+00 k cmfd -1.129918E+00 -1.148352E+00 -1.143137E+00 -1.145795E+00 -1.147285E+00 -1.148588E+00 -1.148151E+00 -1.162118E+00 -1.165380E+00 -1.162851E+00 -1.163379E+00 -1.166986E+00 -1.167838E+00 -1.171743E+00 -1.170398E+00 -1.169773E+00 +1.169107E+00 +1.173852E+00 +1.181921E+00 +1.187733E+00 +1.185766E+00 +1.177020E+00 +1.181200E+00 +1.180088E+00 +1.180676E+00 +1.174948E+00 +1.174167E+00 +1.174935E+00 +1.169912E+00 +1.169058E+00 +1.170366E+00 +1.169774E+00 cmfd entropy -3.224769E+00 -3.222795E+00 -3.221174E+00 -3.222164E+00 -3.221025E+00 -3.220967E+00 -3.223497E+00 -3.219213E+00 -3.221679E+00 -3.222084E+00 -3.222281E+00 -3.222540E+00 -3.224614E+00 -3.224193E+00 -3.224925E+00 -3.224367E+00 +3.207640E+00 +3.212075E+00 +3.215463E+00 +3.219545E+00 +3.225225E+00 +3.227103E+00 +3.229048E+00 +3.228263E+00 +3.229077E+00 +3.229932E+00 +3.229351E+00 +3.228195E+00 +3.228493E+00 +3.227823E+00 +3.225830E+00 +3.227270E+00 cmfd balance -3.90454E-03 -4.33180E-03 -3.77057E-03 -3.16391E-03 -3.11765E-03 -2.59886E-03 -2.81060E-03 -3.25473E-03 -2.68544E-03 -2.01716E-03 -1.89350E-03 -1.79159E-03 -1.51353E-03 -1.48514E-03 -1.50207E-03 -1.44045E-03 +4.88208E-03 +4.63702E-03 +3.41158E-03 +2.99755E-03 +2.78360E-03 +3.31542E-03 +2.64344E-03 +2.04609E-03 +1.84340E-03 +1.65450E-03 +1.70816E-03 +1.69952E-03 +1.51417E-03 +1.32738E-03 +1.41435E-03 +1.01462E-03 cmfd dominance ratio -5.539E-01 -5.522E-01 -5.491E-01 -5.511E-01 -5.506E-01 -5.523E-01 -5.523E-01 +5.467E-01 +5.468E-01 +5.448E-01 +5.457E-01 +5.457E-01 +5.485E-01 +5.500E-01 +5.497E-01 +5.495E-01 +5.499E-01 +5.502E-01 +5.485E-01 +5.492E-01 +5.483E-01 5.473E-01 -5.478E-01 -5.461E-01 -5.462E-01 -5.459E-01 -5.475E-01 -5.463E-01 5.466E-01 -5.469E-01 cmfd openmc source comparison -9.875240E-03 -1.119358E-02 -8.513903E-03 -7.728971E-03 -5.993771E-03 -5.837301E-03 -4.861789E-03 -5.624038E-03 -4.297229E-03 -4.029732E-03 -3.669197E-03 -3.598834E-03 -3.023310E-03 -3.347346E-03 -2.943658E-03 -2.764986E-03 +9.587418E-03 +7.785087E-03 +6.798967E-03 +5.947641E-03 +4.980801E-03 +4.272665E-03 +4.073759E-03 +4.305612E-03 +3.572759E-03 +3.785830E-03 +3.766828E-03 +3.495462E-03 +3.017281E-03 +2.857633E-03 +2.858606E-03 +2.449010E-03 cmfd source -4.561921E-02 -7.896381E-02 -1.084687E-01 -1.264057E-01 -1.408942E-01 -1.438180E-01 -1.247333E-01 -1.100896E-01 -7.897187E-02 -4.203556E-02 +4.390084E-02 +7.966902E-02 +1.087889E-01 +1.263915E-01 +1.394331E-01 +1.383156E-01 +1.319970E-01 +1.051339E-01 +8.248244E-02 +4.388774E-02 diff --git a/tests/regression_tests/cmfd_restart/results_true.dat b/tests/regression_tests/cmfd_restart/results_true.dat index f5f22d9acd1..1ef9624d4c6 100644 --- a/tests/regression_tests/cmfd_restart/results_true.dat +++ b/tests/regression_tests/cmfd_restart/results_true.dat @@ -1,117 +1,117 @@ k-combined: -1.164262E+00 9.207592E-03 +1.181723E+00 9.944883E-03 tally 1: -1.156972E+01 -1.339924E+01 -2.136306E+01 -4.567185E+01 -2.859527E+01 -8.195821E+01 -3.470754E+01 -1.207851E+02 -3.766403E+01 -1.422263E+02 -3.778821E+01 -1.432660E+02 -3.573197E+01 -1.278854E+02 -2.849979E+01 -8.135515E+01 -2.073803E+01 -4.303374E+01 -1.112117E+01 -1.242944E+01 +1.169899E+01 +1.373251E+01 +2.142380E+01 +4.605511E+01 +2.968085E+01 +8.838716E+01 +3.561418E+01 +1.271206E+02 +3.777783E+01 +1.428817E+02 +3.805832E+01 +1.450213E+02 +3.439836E+01 +1.184892E+02 +2.852438E+01 +8.161896E+01 +2.088423E+01 +4.376204E+01 +1.076670E+01 +1.168108E+01 tally 2: -2.388054E+01 -2.875255E+01 -1.667791E+01 -1.403426E+01 -4.224771E+01 -8.942109E+01 -2.993088E+01 -4.490335E+01 -5.689839E+01 -1.625557E+02 -4.043633E+01 -8.212299E+01 -6.764024E+01 -2.297126E+02 -4.807902E+01 -1.161468E+02 -7.314835E+01 -2.684645E+02 -5.203584E+01 -1.359261E+02 -7.375727E+01 -2.733105E+02 -5.252944E+01 -1.386205E+02 -6.909571E+01 -2.397721E+02 -4.922548E+01 -1.217465E+02 -5.685978E+01 -1.621746E+02 -4.051938E+01 -8.237277E+01 -4.185562E+01 -8.784067E+01 -2.983570E+01 -4.467414E+01 -2.238373E+01 -2.520356E+01 -1.566758E+01 -1.234103E+01 +2.321241E+01 +2.702156E+01 +1.620912E+01 +1.317752E+01 +4.197404E+01 +8.845008E+01 +2.982666E+01 +4.469221E+01 +5.810089E+01 +1.695857E+02 +4.134123E+01 +8.588866E+01 +6.982488E+01 +2.447068E+02 +4.966939E+01 +1.238763E+02 +7.428421E+01 +2.767613E+02 +5.287955E+01 +1.403163E+02 +7.447402E+01 +2.785012E+02 +5.324628E+01 +1.423393E+02 +6.895164E+01 +2.381937E+02 +4.916366E+01 +1.211701E+02 +5.679253E+01 +1.617881E+02 +4.043125E+01 +8.204061E+01 +4.218618E+01 +8.933666E+01 +2.978592E+01 +4.456592E+01 +2.196426E+01 +2.435867E+01 +1.525576E+01 +1.175879E+01 tally 3: -1.609520E+01 -1.307542E+01 -1.033429E+00 -5.510889E-02 -2.877073E+01 -4.149542E+01 -1.964219E+00 -1.954692E-01 -3.896816E+01 -7.629752E+01 -2.484053E+00 -3.103733E-01 -4.634285E+01 -1.079367E+02 -2.974750E+00 -4.468223E-01 -5.007964E+01 -1.259202E+02 -3.181802E+00 -5.103621E-01 -5.058915E+01 -1.286193E+02 -3.249442E+00 -5.337712E-01 -4.744464E+01 -1.131026E+02 -3.067644E+00 -4.736335E-01 -3.900632E+01 -7.634433E+01 -2.443552E+00 -3.028060E-01 -2.874166E+01 -4.146375E+01 -1.810421E+00 -1.671667E-01 -1.509222E+01 -1.145579E+01 -1.014919E+00 -5.391053E-02 +1.563788E+01 +1.226528E+01 +1.053289E+00 +5.666942E-02 +2.870755E+01 +4.139654E+01 +1.838017E+00 +1.710528E-01 +3.978616E+01 +7.955764E+01 +2.560657E+00 +3.334449E-01 +4.780385E+01 +1.147770E+02 +3.139243E+00 +4.967628E-01 +5.106650E+01 +1.308704E+02 +3.170056E+00 +5.078920E-01 +5.123992E+01 +1.318586E+02 +3.211706E+00 +5.205979E-01 +4.729862E+01 +1.121695E+02 +3.068662E+00 +4.749488E-01 +3.898816E+01 +7.630564E+01 +2.516911E+00 +3.199696E-01 +2.865357E+01 +4.125742E+01 +1.852314E+00 +1.741116E-01 +1.467340E+01 +1.088460E+01 +9.268633E-01 +4.450662E-02 tally 4: -3.148231E+00 -4.974555E-01 +3.029754E+00 +4.613561E-01 0.000000E+00 0.000000E+00 -2.805439E+00 -3.982239E-01 -5.574031E+00 -1.561105E+00 +2.832501E+00 +4.049252E-01 +5.517243E+00 +1.527794E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -128,14 +128,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.574031E+00 -1.561105E+00 -2.805439E+00 -3.982239E-01 -5.171038E+00 -1.344877E+00 -7.372031E+00 -2.725420E+00 +5.517243E+00 +1.527794E+00 +2.832501E+00 +4.049252E-01 +5.117178E+00 +1.316972E+00 +7.333303E+00 +2.701677E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -152,14 +152,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.372031E+00 -2.725420E+00 -5.171038E+00 -1.344877E+00 -6.946847E+00 -2.424850E+00 -8.496610E+00 -3.627542E+00 +7.333303E+00 +2.701677E+00 +5.117178E+00 +1.316972E+00 +7.248464E+00 +2.641591E+00 +8.817788E+00 +3.905530E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -176,14 +176,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.496610E+00 -3.627542E+00 -6.946847E+00 -2.424850E+00 -8.479501E+00 -3.607280E+00 -9.261869E+00 -4.305912E+00 +8.817788E+00 +3.905530E+00 +7.248464E+00 +2.641591E+00 +8.646465E+00 +3.749847E+00 +9.460948E+00 +4.495388E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -200,14 +200,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.261869E+00 -4.305912E+00 -8.479501E+00 -3.607280E+00 -9.232858E+00 -4.278432E+00 -9.306384E+00 -4.348594E+00 +9.460948E+00 +4.495388E+00 +8.646465E+00 +3.749847E+00 +9.379341E+00 +4.415049E+00 +9.278640E+00 +4.320720E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -224,14 +224,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -9.306384E+00 -4.348594E+00 -9.232858E+00 -4.278432E+00 -9.299764E+00 -4.347828E+00 -8.511976E+00 -3.639893E+00 +9.278640E+00 +4.320720E+00 +9.379341E+00 +4.415049E+00 +9.465746E+00 +4.498591E+00 +8.656146E+00 +3.760545E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -248,14 +248,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -8.511976E+00 -3.639893E+00 -9.299764E+00 -4.347828E+00 -8.726086E+00 -3.819567E+00 -7.147277E+00 -2.562747E+00 +8.656146E+00 +3.760545E+00 +9.465746E+00 +4.498591E+00 +8.589782E+00 +3.700308E+00 +6.996002E+00 +2.456935E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -272,14 +272,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -7.147277E+00 -2.562747E+00 -8.726086E+00 -3.819567E+00 -7.218790E+00 -2.612243E+00 -5.018287E+00 -1.263077E+00 +6.996002E+00 +2.456935E+00 +8.589782E+00 +3.700308E+00 +7.352050E+00 +2.714808E+00 +5.105164E+00 +1.312559E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -296,14 +296,14 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -5.018287E+00 -1.263077E+00 -7.218790E+00 -2.612243E+00 -5.443494E+00 -1.487018E+00 -2.732334E+00 -3.773047E-01 +5.105164E+00 +1.312559E+00 +7.352050E+00 +2.714808E+00 +5.442756E+00 +1.486776E+00 +2.697305E+00 +3.675580E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -320,12 +320,12 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.732334E+00 -3.773047E-01 -5.443494E+00 -1.487018E+00 -3.044773E+00 -4.655756E-01 +2.697305E+00 +3.675580E-01 +5.442756E+00 +1.486776E+00 +3.017025E+00 +4.571443E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -345,144 +345,144 @@ tally 4: 0.000000E+00 0.000000E+00 tally 5: -1.609029E+01 -1.306718E+01 -2.230601E+00 -2.559496E-01 -2.876780E+01 -4.148686E+01 -3.835952E+00 -7.456562E-01 -3.895738E+01 -7.625344E+01 -4.841024E+00 -1.197335E+00 -4.633595E+01 -1.079043E+02 -6.236821E+00 -1.963311E+00 -5.007472E+01 -1.258967E+02 -6.749745E+00 -2.297130E+00 -5.058336E+01 -1.285894E+02 -6.727612E+00 -2.315656E+00 -4.743869E+01 -1.130735E+02 -6.338193E+00 -2.042159E+00 -3.899838E+01 -7.631289E+01 -5.187573E+00 -1.359733E+00 -2.873434E+01 -4.144233E+01 -3.815610E+00 -7.367619E-01 -1.509020E+01 -1.145268E+01 -2.125767E+00 -2.341894E-01 +1.563588E+01 +1.226217E+01 +2.209027E+00 +2.507131E-01 +2.870034E+01 +4.137550E+01 +3.726620E+00 +7.021948E-01 +3.977762E+01 +7.952285E+01 +5.304975E+00 +1.427333E+00 +4.779747E+01 +1.147456E+02 +6.528302E+00 +2.151715E+00 +5.105366E+01 +1.308037E+02 +6.986782E+00 +2.467487E+00 +5.123380E+01 +1.318264E+02 +6.845633E+00 +2.383542E+00 +4.729296E+01 +1.121433E+02 +6.252695E+00 +1.977351E+00 +3.898236E+01 +7.628315E+01 +5.461495E+00 +1.528579E+00 +2.864576E+01 +4.123538E+01 +3.857301E+00 +7.581323E-01 +1.467047E+01 +1.088031E+01 +2.277024E+00 +2.679801E-01 cmfd indices 1.000000E+01 1.000000E+00 1.000000E+00 1.000000E+00 k cmfd -1.129918E+00 -1.143848E+00 -1.147976E+00 -1.151534E+00 -1.152378E+00 -1.148219E+00 -1.150402E+00 -1.154647E+00 -1.156159E+00 -1.160048E+00 -1.167441E+00 -1.168163E+00 -1.168629E+00 -1.164120E+00 -1.165051E+00 -1.169177E+00 +1.169107E+00 +1.175079E+00 +1.173912E+00 +1.175368E+00 +1.174026E+00 +1.181745E+00 +1.182261E+00 +1.183559E+00 +1.178691E+00 +1.179222E+00 +1.179017E+00 +1.172979E+00 +1.175043E+00 +1.173458E+00 +1.174152E+00 +1.171451E+00 cmfd entropy -3.224769E+00 -3.225945E+00 -3.227421E+00 -3.226174E+00 -3.224429E+00 -3.227049E+00 -3.230710E+00 -3.230315E+00 -3.226825E+00 -3.226655E+00 -3.226588E+00 -3.224155E+00 -3.223246E+00 -3.222640E+00 -3.223920E+00 -3.222838E+00 +3.207640E+00 +3.210547E+00 +3.212218E+00 +3.209573E+00 +3.211619E+00 +3.212126E+00 +3.213163E+00 +3.214288E+00 +3.215737E+00 +3.213677E+00 +3.214925E+00 +3.215612E+00 +3.216708E+00 +3.221454E+00 +3.219048E+00 +3.218387E+00 cmfd balance -3.90454E-03 -4.08089E-03 -3.46511E-03 -4.09535E-03 -2.62009E-03 -2.23559E-03 -2.54033E-03 -2.12799E-03 -2.25864E-03 -1.85766E-03 -1.49916E-03 -1.63471E-03 -1.48377E-03 -1.59800E-03 -1.37354E-03 -1.32853E-03 +4.88208E-03 +4.75139E-03 +3.15783E-03 +3.67091E-03 +2.99797E-03 +2.91060E-03 +2.06576E-03 +1.83482E-03 +1.56292E-03 +1.58659E-03 +2.32986E-03 +1.47376E-03 +1.46673E-03 +1.22627E-03 +1.31963E-03 +1.26456E-03 cmfd dominance ratio -5.539E-01 -5.537E-01 -5.536E-01 -5.515E-01 -5.512E-01 -5.514E-01 -5.518E-01 -5.507E-01 -5.500E-01 -5.497E-01 -5.477E-01 -5.461E-01 -5.444E-01 -5.445E-01 -5.454E-01 +5.467E-01 +5.453E-01 +5.458E-01 +5.436E-01 +5.442E-01 +5.406E-01 +5.401E-01 +5.413E-01 +4.995E-01 +5.396E-01 +5.409E-01 +5.414E-01 +5.423E-01 +5.456E-01 +5.442E-01 5.441E-01 cmfd openmc source comparison -9.875240E-03 -1.106163E-02 -9.847628E-03 -6.065921E-03 -5.772039E-03 -4.615656E-03 -4.244331E-03 -3.694299E-03 -3.545814E-03 -3.213063E-03 -3.467537E-03 -3.383489E-03 -3.697591E-03 -3.937358E-03 -3.369124E-03 -3.190359E-03 +9.587418E-03 +8.150978E-03 +6.677661E-03 +6.334727E-03 +5.153692E-03 +5.082964E-03 +4.633153E-03 +4.037383E-03 +3.528742E-03 +4.559089E-03 +3.517370E-03 +3.306117E-03 +2.913809E-03 +1.906045E-03 +1.932794E-03 +1.711341E-03 cmfd source -4.360494E-02 -8.397599E-02 -1.074181E-01 -1.294531E-01 -1.385611E-01 -1.407934E-01 -1.325191E-01 -1.044311E-01 -7.660359E-02 -4.263941E-02 +4.496492E-02 +7.869674E-02 +1.100280E-01 +1.354045E-01 +1.363339E-01 +1.380533E-01 +1.314512E-01 +1.077480E-01 +7.847306E-02 +3.884630E-02 diff --git a/tests/regression_tests/statepoint_batch/__init__.py b/tests/regression_tests/collision_track/__init__.py similarity index 100% rename from tests/regression_tests/statepoint_batch/__init__.py rename to tests/regression_tests/collision_track/__init__.py diff --git a/tests/regression_tests/collision_track/case_1_Reactions/inputs_true.dat b/tests/regression_tests/collision_track/case_1_Reactions/inputs_true.dat new file mode 100644 index 00000000000..7533616c059 --- /dev/null +++ b/tests/regression_tests/collision_track/case_1_Reactions/inputs_true.dat @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 5 + 1 + + + -2.0 -2.0 -2.0 2.0 2.0 2.0 + + + true + + + + (n,fission) 101 + 300 + + 1 + + diff --git a/tests/regression_tests/collision_track/case_1_Reactions/results_true.dat b/tests/regression_tests/collision_track/case_1_Reactions/results_true.dat new file mode 100644 index 00000000000..d4d1d1e5ad4 --- /dev/null +++ b/tests/regression_tests/collision_track/case_1_Reactions/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_2_Cell_ID/inputs_true.dat b/tests/regression_tests/collision_track/case_2_Cell_ID/inputs_true.dat new file mode 100644 index 00000000000..55fb835de03 --- /dev/null +++ b/tests/regression_tests/collision_track/case_2_Cell_ID/inputs_true.dat @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 5 + 1 + + + -2.0 -2.0 -2.0 2.0 2.0 2.0 + + + true + + + + 22 + 300 + + 1 + + diff --git a/tests/regression_tests/collision_track/case_2_Cell_ID/results_true.dat b/tests/regression_tests/collision_track/case_2_Cell_ID/results_true.dat new file mode 100644 index 00000000000..d4d1d1e5ad4 --- /dev/null +++ b/tests/regression_tests/collision_track/case_2_Cell_ID/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_3_Material_ID/inputs_true.dat b/tests/regression_tests/collision_track/case_3_Material_ID/inputs_true.dat new file mode 100644 index 00000000000..61890414bab --- /dev/null +++ b/tests/regression_tests/collision_track/case_3_Material_ID/inputs_true.dat @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 5 + 1 + + + -2.0 -2.0 -2.0 2.0 2.0 2.0 + + + true + + + + 1 + 300 + + 1 + + diff --git a/tests/regression_tests/collision_track/case_3_Material_ID/results_true.dat b/tests/regression_tests/collision_track/case_3_Material_ID/results_true.dat new file mode 100644 index 00000000000..d4d1d1e5ad4 --- /dev/null +++ b/tests/regression_tests/collision_track/case_3_Material_ID/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_4_Nuclide_ID/inputs_true.dat b/tests/regression_tests/collision_track/case_4_Nuclide_ID/inputs_true.dat new file mode 100644 index 00000000000..8960dde5cbd --- /dev/null +++ b/tests/regression_tests/collision_track/case_4_Nuclide_ID/inputs_true.dat @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 5 + 1 + + + -2.0 -2.0 -2.0 2.0 2.0 2.0 + + + true + + + + O16 U235 + 300 + + 1 + + diff --git a/tests/regression_tests/collision_track/case_4_Nuclide_ID/results_true.dat b/tests/regression_tests/collision_track/case_4_Nuclide_ID/results_true.dat new file mode 100644 index 00000000000..d4d1d1e5ad4 --- /dev/null +++ b/tests/regression_tests/collision_track/case_4_Nuclide_ID/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_5_Universe_ID/inputs_true.dat b/tests/regression_tests/collision_track/case_5_Universe_ID/inputs_true.dat new file mode 100644 index 00000000000..8c0d7aa8ee6 --- /dev/null +++ b/tests/regression_tests/collision_track/case_5_Universe_ID/inputs_true.dat @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 5 + 1 + + + -2.0 -2.0 -2.0 2.0 2.0 2.0 + + + true + + + + 22 + 77 + 300 + + 1 + + diff --git a/tests/regression_tests/collision_track/case_5_Universe_ID/results_true.dat b/tests/regression_tests/collision_track/case_5_Universe_ID/results_true.dat new file mode 100644 index 00000000000..d4d1d1e5ad4 --- /dev/null +++ b/tests/regression_tests/collision_track/case_5_Universe_ID/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/inputs_true.dat b/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/inputs_true.dat new file mode 100644 index 00000000000..5173dc35cf1 --- /dev/null +++ b/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/inputs_true.dat @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 5 + 1 + + + -2.0 -2.0 -2.0 2.0 2.0 2.0 + + + true + + + + 550000.0 + 300 + + 1 + + diff --git a/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/results_true.dat b/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/results_true.dat new file mode 100644 index 00000000000..d4d1d1e5ad4 --- /dev/null +++ b/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_7_all_parameters_used_together/inputs_true.dat b/tests/regression_tests/collision_track/case_7_all_parameters_used_together/inputs_true.dat new file mode 100644 index 00000000000..005d9feb271 --- /dev/null +++ b/tests/regression_tests/collision_track/case_7_all_parameters_used_together/inputs_true.dat @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 5 + 1 + + + -2.0 -2.0 -2.0 2.0 2.0 2.0 + + + true + + + + 22 33 + elastic 18 (n,disappear) + 77 + 1 11 + U238 U235 H1 U234 + 100000.0 + 300 + + 1 + + diff --git a/tests/regression_tests/collision_track/case_7_all_parameters_used_together/results_true.dat b/tests/regression_tests/collision_track/case_7_all_parameters_used_together/results_true.dat new file mode 100644 index 00000000000..d4d1d1e5ad4 --- /dev/null +++ b/tests/regression_tests/collision_track/case_7_all_parameters_used_together/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_8_2threads/inputs_true.dat b/tests/regression_tests/collision_track/case_8_2threads/inputs_true.dat new file mode 100644 index 00000000000..514932c1a69 --- /dev/null +++ b/tests/regression_tests/collision_track/case_8_2threads/inputs_true.dat @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 5 + 1 + + + -2.0 -2.0 -2.0 2.0 2.0 2.0 + + + true + + + + 200 + + 1 + + diff --git a/tests/regression_tests/collision_track/case_8_2threads/results_true.dat b/tests/regression_tests/collision_track/case_8_2threads/results_true.dat new file mode 100644 index 00000000000..d4d1d1e5ad4 --- /dev/null +++ b/tests/regression_tests/collision_track/case_8_2threads/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/test.py b/tests/regression_tests/collision_track/test.py new file mode 100644 index 00000000000..00e1e3de410 --- /dev/null +++ b/tests/regression_tests/collision_track/test.py @@ -0,0 +1,255 @@ +"""Test the 'collision_track' setting. + +Results +------- + +All results are generated using only 1 MPI process. + +All results are generated using 1 thread except for "test_consistency_low_realization_number". +This specific test verifies that when the number of realization (i.e., point being candidate +to be stored) is lower than the capacity, results are reproducible even with multiple +threads (i.e., there is no potential thread competition that would produce different +results in that case). + +All results are generated using the history-based mode except for cases e01 to e03. + +All results are visually verified using the '_visualize.py' script in the regression test folder. + +OpenMC models +------------- + +Four OpenMC models with CSG-only geometries are used to cover the transmission, vacuum, +reflective and periodic Boundary Conditions (BC): + +- model_1: cylindrical core in 2 boxes (vacuum and transmission BC), + +# Test cases for simulation parameters using CSG-only geometries +# ============================================================ +# Each test case is defined by a combination of folder name, model name, and specific parameters. +# Below is a summary of the parameters used in the test cases: +# +# - max_collisions: Maximum number of particles to track in the simulation. +# - reactions: List of MT numbers (reaction types- 2 for scattering, 18 for fission, 101 for absorbtion). +# - cell_ids: IDs of specific cells in the model. +# - mat_ids: Material IDs for filtering particles. +# - nuclides: Nuclides for filtering particles. +# - univ_ids: Universe IDs for filtering particles. +# - E_threshold: Energy threshold for filtering particles (optional). +# +# The test cases are designed to validate the behavior of the simulation under various configurations. + +*: BC stands for Boundary Conditions, T for Transmission, R for Reflective, and V for Vacuum. + +An additional case, called 'case-a01', is used to check that the results are comparable when +the number of threads is set to 2 if the number of realization is lower than the capacity. + + +*: BC stands for Boundary Conditions, T for Transmission, and V for Vacuum. + +Notes: + +- The test cases list is non-exhaustive compared to the number of possible combinations. + Test cases have been selected based on use and internal code logic. + + + +TODO: + +- Test with a lattice. + +""" + +import os + +import openmc +import openmc.lib +import pytest + +from tests.testing_harness import CollisionTrackTestHarness +from tests.regression_tests import config + + +@pytest.fixture(scope="function") +def two_threads(monkeypatch): + """Set the number of OMP threads to 2 for the test.""" + monkeypatch.setenv("OMP_NUM_THREADS", "2") + + +@pytest.fixture(scope="function") +def single_process(monkeypatch): + """Set the number of MPI process to 1 for the test.""" + monkeypatch.setitem(config, "mpi_np", "1") + + +@pytest.fixture(scope="module") +def model_1(): + """Cylindrical core contained in a first box which is contained in a larger box. + A lower universe is used to describe the interior of the first box which + contains the core and its surrounding space. + + """ + openmc.reset_auto_ids() + model = openmc.Model() + + # ============================================================================= + # Materials + # ============================================================================= + + fuel = openmc.Material(material_id=1) + fuel.add_nuclide("U234", 0.0004524) + fuel.add_nuclide("U235", 0.0506068) + fuel.add_nuclide("U238", 0.9487090) + fuel.add_nuclide("U236", 0.0002318) + fuel.add_nuclide("O16", 2.0) + fuel.set_density("g/cm3", 11.0) + + water = openmc.Material(material_id=11) + water.add_nuclide("H1", 2.0) + water.add_nuclide("O16", 1.0) + water.set_density("g/cm3", 1.0) + + # ============================================================================= + # Geometry + # ============================================================================= + + # ----------------------------------------------------------------------------- + # Cylindrical core + # ----------------------------------------------------------------------------- + + # Parameters + core_radius = 2.0 + core_height = 4.0 + + # Surfaces + core_cylinder = openmc.ZCylinder(r=core_radius) + core_lower_plane = openmc.ZPlane(-core_height / 2.0) + core_upper_plane = openmc.ZPlane(core_height / 2.0) + + # Region + core_region = -core_cylinder & +core_lower_plane & -core_upper_plane + + # Cells + core = openmc.Cell(fill=fuel, region=core_region, cell_id=22) + outside_core_region = +core_cylinder | -core_lower_plane | +core_upper_plane + outside_core = openmc.Cell( + fill=water, region=outside_core_region, cell_id=33) + + # Universe + inside_box1_universe = openmc.Universe( + cells=[core, outside_core], universe_id=77) + + # ----------------------------------------------------------------------------- + # Box 1 + # ----------------------------------------------------------------------------- + + # Parameters + box1_size = 6.0 + + # Surfaces + box1_rpp = openmc.model.RectangularParallelepiped( + -box1_size / 2.0, box1_size / 2.0, + -box1_size / 2.0, box1_size / 2.0, + -box1_size / 2.0, box1_size / 2.0, + ) + + # Cell + box1 = openmc.Cell(fill=inside_box1_universe, region=-box1_rpp, cell_id=5) + + # ----------------------------------------------------------------------------- + # Box 2 + # ----------------------------------------------------------------------------- + + # Parameters + box2_size = 8 + + # Surfaces + box2_rpp = openmc.model.RectangularParallelepiped( + -box2_size / 2.0, box2_size / 2.0, + -box2_size / 2.0, box2_size / 2.0, + -box2_size / 2.0, box2_size / 2.0, + boundary_type="vacuum" + ) + + # Cell + box2 = openmc.Cell(fill=water, region=-box2_rpp & +box1_rpp, cell_id=8) + + # Register geometry + model.geometry = openmc.Geometry([box1, box2]) + + # ============================================================================= + # Settings + # ============================================================================= + + model.settings = openmc.Settings() + model.settings.particles = 100 + model.settings.batches = 5 + model.settings.inactive = 1 + model.settings.seed = 1 + + bounds = [ + -core_radius, + -core_radius, + -core_height / 2.0, + core_radius, + core_radius, + core_height / 2.0, + ] + distribution = openmc.stats.Box(bounds[:3], bounds[3:]) + model.settings.source = openmc.IndependentSource( + space=distribution, constraints={'fissionable': True}) + + return model + + +@pytest.mark.parametrize( + "folder, model_name, parameter", + [("case_1_Reactions", "model_1", {"max_collisions": 300, "reactions": ["(n,fission)", 101]}), + ("case_2_Cell_ID", "model_1", { + "max_collisions": 300, "cell_ids": [22]}), + ("case_3_Material_ID", "model_1", { + "max_collisions": 300, "material_ids": [1]}), + ("case_4_Nuclide_ID", "model_1", { + "max_collisions": 300, "nuclides": ["O16", "U235"]}), + ("case_5_Universe_ID", "model_1", { + "max_collisions": 300, "cell_ids": [22], "universe_ids": [77]}), + ("case_6_deposited_energy_threshold", "model_1", { + "max_collisions": 300, "deposited_E_threshold": 5.5e5}), + ("case_7_all_parameters_used_together", "model_1", { + "max_collisions": 300, + "reactions": ["elastic", 18, "(n,disappear)"], + "material_ids": [1, 11], + "universe_ids": [77], + "nuclides": ["U238", "U235", "H1", "U234"], + "cell_ids": [22, 33], + "deposited_E_threshold": 1e5}) + ], +) +def test_collision_track_several_cases( + folder, model_name, parameter, request +): + # Since for these tests the actual number of collisions recorded is < max_collisions, + # we can run them with 1 or 2 threads, and in history or event mode. + model = request.getfixturevalue(model_name) + model.settings.collision_track = parameter + harness = CollisionTrackTestHarness( + "statepoint.5.h5", model=model, workdir=folder + ) + harness.main() + + +@pytest.mark.skipif(config["event"], reason="Results from history-based mode.") +def test_collision_track_2threads(model_1, two_threads, single_process): + # This test checks that the `max_collisions` setting is honored: + # no collisions beyond the specified limit should be recorded. + # + # For the result to be reproducible, the number of threads and + # the transport mode (history vs. event) must remain fixed. + assert os.environ["OMP_NUM_THREADS"] == "2" + assert config["mpi_np"] == "1" + model_1.settings.collision_track = { + "max_collisions": 200 + } + harness = CollisionTrackTestHarness( + "statepoint.5.h5", model=model_1, workdir="case_8_2threads" + ) + harness.main() diff --git a/tests/regression_tests/complex_cell/results_true.dat b/tests/regression_tests/complex_cell/results_true.dat index 3ce3d7cbc7f..ddedb07ff05 100644 --- a/tests/regression_tests/complex_cell/results_true.dat +++ b/tests/regression_tests/complex_cell/results_true.dat @@ -1,11 +1,11 @@ k-combined: -2.564169E-01 4.095378E-03 +2.603220E-01 1.429366E-03 tally 1: -2.607144E+00 -1.360414E+00 -2.681079E+00 -1.439354E+00 -9.627534E-01 -1.855496E-01 -1.123751E-01 +2.624819E+00 +1.378200E+00 +2.730035E+00 +1.492361E+00 +1.013707E+00 +2.055807E-01 +1.123257E-01 2.530233E-03 diff --git a/tests/regression_tests/confidence_intervals/results_true.dat b/tests/regression_tests/confidence_intervals/results_true.dat index 6a906d07e74..8ca25662499 100644 --- a/tests/regression_tests/confidence_intervals/results_true.dat +++ b/tests/regression_tests/confidence_intervals/results_true.dat @@ -1,5 +1,5 @@ k-combined: -2.759923E-01 6.988588E-03 +2.850178E-01 9.646334E-03 tally 1: -6.167984E+01 -4.772717E+02 +6.234169E+01 +4.884167E+02 diff --git a/tests/regression_tests/cpp_driver/driver.cpp b/tests/regression_tests/cpp_driver/driver.cpp index 48ed7f3171b..a99c97b64e4 100644 --- a/tests/regression_tests/cpp_driver/driver.cpp +++ b/tests/regression_tests/cpp_driver/driver.cpp @@ -15,14 +15,16 @@ using namespace openmc; -int main(int argc, char** argv) { +int main(int argc, char** argv) +{ #ifdef OPENMC_MPI MPI_Comm world {MPI_COMM_WORLD}; int err = openmc_init(argc, argv, &world); #else int err = openmc_init(argc, argv, nullptr); #endif - if (err) fatal_error(openmc_err_msg); + if (err) + fatal_error(openmc_err_msg); // create a new cell filter auto cell_filter = Filter::create(); @@ -30,7 +32,7 @@ int main(int argc, char** argv) { // add all cells to the cell filter std::vector cell_indices; for (auto& entry : openmc::model::cell_map) { - cell_indices.push_back(entry.second); + cell_indices.push_back(entry.second); } // enable distribcells offsets for all cells prepare_distribcell(&cell_indices); @@ -39,7 +41,6 @@ int main(int argc, char** argv) { std::sort(cell_indices.begin(), cell_indices.end()); cell_filter->set_cells(cell_indices); - // create a new tally auto tally = Tally::create(); std::vector filters = {cell_filter}; @@ -60,14 +61,19 @@ int main(int argc, char** argv) { } } - // set a higher temperature for only one of the lattice cells (ID is 4 in the model) + // set a higher temperature for only one of the lattice cells (ID is 4 in the + // model) model::cells[model::cell_map[4]]->set_temperature(400.0, 3, true); + // set the density of another lattice cell to 2 + model::cells[model::cell_map[4]]->set_density(2.0, 2, true); + // the summary file will be used to check that // temperatures were set correctly so clear // error output can be provided #ifdef OPENMC_MPI - if (openmc::mpi::master) openmc::write_summary(); + if (openmc::mpi::master) + openmc::write_summary(); #else openmc::write_summary(); #endif diff --git a/tests/regression_tests/cpp_driver/results_true.dat b/tests/regression_tests/cpp_driver/results_true.dat index c2b0b8d6f36..09f188db6b7 100644 --- a/tests/regression_tests/cpp_driver/results_true.dat +++ b/tests/regression_tests/cpp_driver/results_true.dat @@ -1,13 +1,13 @@ k-combined: -1.933305E+00 1.300360E-02 +1.874924E+00 2.180236E-02 tally 1: -9.552846E+01 -1.019358E+03 -2.887973E+01 -9.308509E+01 -9.732441E+01 -1.059022E+03 -2.217326E+02 -5.486892E+03 -2.217326E+02 -5.486892E+03 +9.484447E+01 +1.002269E+03 +2.746252E+01 +8.406603E+01 +9.833099E+01 +1.076376E+03 +2.206380E+02 +5.417609E+03 +2.206380E+02 +5.417609E+03 diff --git a/tests/regression_tests/dagmc/external/main.cpp b/tests/regression_tests/dagmc/external/main.cpp index 3765cf79ae2..e78ab03fa2f 100644 --- a/tests/regression_tests/dagmc/external/main.cpp +++ b/tests/regression_tests/dagmc/external/main.cpp @@ -100,6 +100,9 @@ int main(int argc, char* argv[]) } } + // Finalize cell densities + openmc::finalize_cell_densities(); + // Run OpenMC openmc_err = openmc_run(); if (openmc_err) diff --git a/tests/regression_tests/dagmc/external/results_true.dat b/tests/regression_tests/dagmc/external/results_true.dat index cda65693787..9a6b481b7f5 100644 --- a/tests/regression_tests/dagmc/external/results_true.dat +++ b/tests/regression_tests/dagmc/external/results_true.dat @@ -1,5 +1,5 @@ k-combined: -9.118190E-01 3.615552E-02 +1.083415E+00 5.991738E-02 tally 1: -8.430103E+00 -1.442878E+01 +8.862860E+00 +1.602117E+01 diff --git a/tests/regression_tests/dagmc/legacy/results_true.dat b/tests/regression_tests/dagmc/legacy/results_true.dat index cda65693787..9a6b481b7f5 100644 --- a/tests/regression_tests/dagmc/legacy/results_true.dat +++ b/tests/regression_tests/dagmc/legacy/results_true.dat @@ -1,5 +1,5 @@ k-combined: -9.118190E-01 3.615552E-02 +1.083415E+00 5.991738E-02 tally 1: -8.430103E+00 -1.442878E+01 +8.862860E+00 +1.602117E+01 diff --git a/tests/regression_tests/dagmc/refl/results_true.dat b/tests/regression_tests/dagmc/refl/results_true.dat index 533c62a9024..b49a4a7a499 100644 --- a/tests/regression_tests/dagmc/refl/results_true.dat +++ b/tests/regression_tests/dagmc/refl/results_true.dat @@ -1,5 +1,5 @@ k-combined: -2.035173E+00 3.967029E-02 +2.047107E+00 8.605767E-02 tally 1: -1.064492E+01 -2.301019E+01 +1.145034E+01 +2.636875E+01 diff --git a/tests/regression_tests/dagmc/universes/inputs_true.dat b/tests/regression_tests/dagmc/universes/inputs_true.dat index 2fa79d831e6..be1a17383c3 100644 --- a/tests/regression_tests/dagmc/universes/inputs_true.dat +++ b/tests/regression_tests/dagmc/universes/inputs_true.dat @@ -48,6 +48,14 @@ 100 10 5 + + + -10.0 -10.0 -24.0 10.0 10.0 24.0 + + + true + + false diff --git a/tests/regression_tests/dagmc/universes/results_true.dat b/tests/regression_tests/dagmc/universes/results_true.dat index 76cbc9db0cf..aacb7d1ab5a 100644 --- a/tests/regression_tests/dagmc/universes/results_true.dat +++ b/tests/regression_tests/dagmc/universes/results_true.dat @@ -1,13 +1,13 @@ k-combined: -9.887663E-01 1.510336E-02 +9.719586E-01 3.630894E-02 tally 1: -4.340758E+00 -4.265459E+00 -4.712319E+00 -4.654778E+00 -4.151897E+00 -3.588090E+00 -2.965925E+00 -1.852746E+00 +4.463288E+00 +4.136647E+00 +4.769631E+00 +4.622840E+00 +4.315273E+00 +3.871129E+00 +4.091804E+00 +3.582192E+00 0.000000E+00 0.000000E+00 diff --git a/tests/regression_tests/dagmc/universes/test.py b/tests/regression_tests/dagmc/universes/test.py index 057a7b0d477..d68c6b11cfa 100644 --- a/tests/regression_tests/dagmc/universes/test.py +++ b/tests/regression_tests/dagmc/universes/test.py @@ -11,81 +11,87 @@ reason="DAGMC CAD geometry is not enabled.") -class DAGMCUniverseTest(PyAPITestHarness): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - ### MATERIALS ### - fuel = openmc.Material(name='no-void fuel') - fuel.set_density('g/cc', 10.29769) - fuel.add_nuclide('U234', 0.93120485) - fuel.add_nuclide('U235', 0.00055815) - fuel.add_nuclide('U238', 0.022408) - fuel.add_nuclide('O16', 0.045829) - - cladding = openmc.Material(name='clad') - cladding.set_density('g/cc', 6.55) - cladding.add_nuclide('Zr90', 0.021827) - cladding.add_nuclide('Zr91', 0.00476) - cladding.add_nuclide('Zr92', 0.0072758) - cladding.add_nuclide('Zr94', 0.0073734) - cladding.add_nuclide('Zr96', 0.0011879) - - water = openmc.Material(name='water') - water.set_density('g/cc', 0.740582) - water.add_nuclide('H1', 0.049457) - water.add_nuclide('O16', 0.024672) - water.add_nuclide('B10', 8.0042e-06) - water.add_nuclide('B11', 3.2218e-05) - water.add_s_alpha_beta('c_H_in_H2O') - - self._model.materials = openmc.Materials([fuel, cladding, water]) - - ### GEOMETRY ### - # create the DAGMC universe - pincell_univ = openmc.DAGMCUniverse(filename='dagmc.h5m', auto_geom_ids=True) - - # creates another DAGMC universe, this time with within a bounded cell - bound_pincell_universe = openmc.DAGMCUniverse(filename='dagmc.h5m').bounded_universe() - # uses the bound_dag_cell as the root argument to test the type checks in openmc.Geometry - bound_pincell_geometry = openmc.Geometry(root=bound_pincell_universe) - # assigns the bound_dag_geometry to the model to test the type checks in model.Geometry setter - self._model.geometry = bound_pincell_geometry - - # create a 2 x 2 lattice using the DAGMC pincell - pitch = np.asarray((24.0, 24.0)) - lattice = openmc.RectLattice() - lattice.pitch = pitch - lattice.universes = [[pincell_univ] * 2] * 2 - lattice.lower_left = -pitch - - left = openmc.XPlane(x0=-pitch[0], name='left', boundary_type='reflective') - right = openmc.XPlane(x0=pitch[0], name='right', boundary_type='reflective') - front = openmc.YPlane(y0=-pitch[1], name='front', boundary_type='reflective') - back = openmc.YPlane(y0=pitch[1], name='back', boundary_type='reflective') - # clip the DAGMC geometry at +/- 10 cm w/ CSG planes - bottom = openmc.ZPlane(z0=-10.0, name='bottom', boundary_type='reflective') - top = openmc.ZPlane(z0=10.0, name='top', boundary_type='reflective') - - bounding_region = +left & -right & +front & -back & +bottom & -top - bounding_cell = openmc.Cell(fill=lattice, region=bounding_region) - - self._model.geometry = openmc.Geometry([bounding_cell]) - - # add a cell instance tally - tally = openmc.Tally(name='cell instance tally') - # using scattering - cell_instance_filter = openmc.CellInstanceFilter(((4, 0), (4, 1), (4, 2), (4, 3), (4, 4))) - tally.filters = [cell_instance_filter] - tally.scores = ['scatter'] - self._model.tallies = [tally] - - # settings - self._model.settings.particles = 100 - self._model.settings.batches = 10 - self._model.settings.inactive = 5 - self._model.settings.output = {'summary' : False} - -def test_univ(): - harness = DAGMCUniverseTest('statepoint.10.h5', model=openmc.Model()) +@pytest.fixture +def pin_lattice_model(): + ### MATERIALS ### + fuel = openmc.Material(name='no-void fuel') + fuel.set_density('g/cc', 10.29769) + fuel.add_nuclide('U234', 0.93120485) + fuel.add_nuclide('U235', 0.00055815) + fuel.add_nuclide('U238', 0.022408) + fuel.add_nuclide('O16', 0.045829) + + cladding = openmc.Material(name='clad') + cladding.set_density('g/cc', 6.55) + cladding.add_nuclide('Zr90', 0.021827) + cladding.add_nuclide('Zr91', 0.00476) + cladding.add_nuclide('Zr92', 0.0072758) + cladding.add_nuclide('Zr94', 0.0073734) + cladding.add_nuclide('Zr96', 0.0011879) + + water = openmc.Material(name='water') + water.set_density('g/cc', 0.740582) + water.add_nuclide('H1', 0.049457) + water.add_nuclide('O16', 0.024672) + water.add_nuclide('B10', 8.0042e-06) + water.add_nuclide('B11', 3.2218e-05) + water.add_s_alpha_beta('c_H_in_H2O') + + model = openmc.Model() + model.materials = openmc.Materials([fuel, cladding, water]) + + ### GEOMETRY ### + # create the DAGMC universe + pincell_univ = openmc.DAGMCUniverse(filename='dagmc.h5m', auto_geom_ids=True) + + # creates another DAGMC universe, this time with within a bounded cell + bound_pincell_universe = openmc.DAGMCUniverse(filename='dagmc.h5m').bounded_universe() + # uses the bound_dag_cell as the root argument to test the type checks in openmc.Geometry + bound_pincell_geometry = openmc.Geometry(root=bound_pincell_universe) + # assigns the bound_dag_geometry to the model to test the type checks in model.Geometry setter + model.geometry = bound_pincell_geometry + + # create a 2 x 2 lattice using the DAGMC pincell + pitch = np.asarray((24.0, 24.0)) + lattice = openmc.RectLattice() + lattice.pitch = pitch + lattice.universes = [[pincell_univ] * 2] * 2 + lattice.lower_left = -pitch + + left = openmc.XPlane(x0=-pitch[0], name='left', boundary_type='reflective') + right = openmc.XPlane(x0=pitch[0], name='right', boundary_type='reflective') + front = openmc.YPlane(y0=-pitch[1], name='front', boundary_type='reflective') + back = openmc.YPlane(y0=pitch[1], name='back', boundary_type='reflective') + # clip the DAGMC geometry at +/- 10 cm w/ CSG planes + bottom = openmc.ZPlane(z0=-10.0, name='bottom', boundary_type='reflective') + top = openmc.ZPlane(z0=10.0, name='top', boundary_type='reflective') + + bounding_region = +left & -right & +front & -back & +bottom & -top + bounding_cell = openmc.Cell(fill=lattice, region=bounding_region) + + model.geometry = openmc.Geometry([bounding_cell]) + + # add a cell instance tally + tally = openmc.Tally(name='cell instance tally') + # using scattering + cell_instance_filter = openmc.CellInstanceFilter(((4, 0), (4, 1), (4, 2), (4, 3), (4, 4))) + tally.filters = [cell_instance_filter] + tally.scores = ['scatter'] + model.tallies = [tally] + + # settings + model.settings.particles = 100 + model.settings.batches = 10 + model.settings.inactive = 5 + model.settings.output = {'summary' : False} + model.settings.source = openmc.IndependentSource( + space=openmc.stats.Box((-10., -10., -24.), (10., 10., 24.)), + constraints={'fissionable': True}, + ) + + return model + + +def test_univ(pin_lattice_model): + harness = PyAPITestHarness('statepoint.10.h5', model=pin_lattice_model) harness.main() diff --git a/tests/regression_tests/density/results_true.dat b/tests/regression_tests/density/results_true.dat index c8e3b1ede81..42dc0c19f35 100644 --- a/tests/regression_tests/density/results_true.dat +++ b/tests/regression_tests/density/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.110057E+00 1.303260E-02 +1.082191E+00 3.064029E-02 diff --git a/tests/regression_tests/deplete_no_transport/test.py b/tests/regression_tests/deplete_no_transport/test.py index 63ae584e116..5550ad04814 100644 --- a/tests/regression_tests/deplete_no_transport/test.py +++ b/tests/regression_tests/deplete_no_transport/test.py @@ -76,6 +76,8 @@ def test_against_self(run_in_tmpdir, dt = [360] # single step # Perform simulation using the predictor algorithm + if config['mpi'] and multiproc: + pytest.skip("Multiprocessing depletion is disabled when MPI is enabled.") openmc.deplete.pool.USE_MULTIPROCESSING = multiproc openmc.deplete.PredictorIntegrator(op, dt, @@ -135,6 +137,8 @@ def test_against_coupled(run_in_tmpdir, dt = [dt] # single step # Perform simulation using the predictor algorithm + if config['mpi'] and multiproc: + pytest.skip("Multiprocessing depletion is disabled when MPI is enabled.") openmc.deplete.pool.USE_MULTIPROCESSING = multiproc openmc.deplete.PredictorIntegrator( op, dt, power=174, timestep_units=time_units).integrate() diff --git a/tests/regression_tests/deplete_no_transport/test_reference_coupled_days.h5 b/tests/regression_tests/deplete_no_transport/test_reference_coupled_days.h5 index 5fdc656d97018b596147839415fa967031dc18e5..9757c9791be0030366544aaf515276409d1fec03 100644 GIT binary patch delta 250 zcmcaGlj*`trVUlrj7*!Wt>qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjW=*d?y` zFYxU3nKj~e3{cP}m3HXDWp;ZQ|M6taZh67#+!d;#c}L-@u1=2ZR_A0{v}>>PF&Det zlRLYuO&NUR?cWNmlWYt(c4j-fH;1`J$+;ti>$Gcesk6$S$Q3iM2RR3sJUGpA`=-;= zV?T^!9e+68n*6g{T~Y7AoEsW%5O)4tZG4Bhc#18|4Ra?u_Ly^Sn|{DEJm$8o#^lBx PamG`VXZ9Ggfb0YSug+EV delta 250 zcmcaGlj*`trVUlrj0~Hrt>qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjQ;*d?y` zH}LHBnKj~e3{cQ2m3HXDWp;ZQ|Hov_Zh66~+!d;#c}L-@u1t>XR_A11v}>>PF&DdC zlRLYuO&!E5?B5EllWYt(c4j@hH;1`J$+<0s>$Gcesk8c?$Q3iM2RZwiJUGpA`=-qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjW=*d?y` zFYxU3nKj~e3{cP}m3HXDWp;ZQ|M6taZh67#+!d;#c}L-@u1=2ZR_A0{v}>>PF&Det zlRLYu>lyCF+pq3wQB~R_E^iCuVisI&aZ$eh-#V=p;i{&mlVlfMLAZ*i zcGk70aZ_wzuG|%HJ?z%+%YWelx*P5-K9A(!tx38kO(WUi9@uv4t=wD@W4mje6ISIo o-nPx&qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjQ;*d?y` zH}LHBnKj~e3{cQ2m3HXDWp;ZQ|Hov_Zh66~+!d;#c}L-@u1t>XR_A11v}>>PF&DdC zlRLYu>l*?q>{oTQs4DG|au%HSDR_n8PbZ7nH)UqLlyv61{8gv7;*`^aBQ6b7lBYS{ zml2t{=haH5N7EiuNwN#BAY7$X zJL}rhxGAZ<-c$Ny$$ykpGR`=wj|w?rjhJ$5A3-0R&K6{vE7Z%39E7( nZ`qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjW=*d?y` zFYxU3nKj~e3{cP}m3HXDWp;ZQ|M6taZh67#+!d;#c}L-@u1=2ZR_A0{v}>>PF&Det zlRLYu>lyUp?SF;#t$8eR%Bdn>ppW_6Bqtr|eBSpVhn>!tPi9~9L&}LgoAa@zjgu26 z+ot(adqSK#J{iqlr+(2{L`*-;;IFNV#)?CS7F=y{xjXUl=Xpr3I@6T;@hXz5q&IA5 zv5cEy3v*>}jbPZ>f0zEk1!f#mJ}-&n;B)b8Tk<2=;U0J`D{lW=*w{{A@qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjQ;*d?y` zH}LHBnKj~e3{cQ2m3HXDWp;ZQ|Hov_Zh66~+!d;#c}L-@u1t>XR_A11v}>>PF&DdC zlRLYu>l;KX?0<&#t$8eR%BeJ8ppW_6Bqtr|eBSpVhn-HDPi9~9L&}LgoAa@zjgu2Q z+ot(adqSK#KN-zmr+(2{L`*-;;IFNV>WV{$7F=y{xi|6h=Xpr3I@^@`@hXz5j5cg% zv5cEy3v*?EjbPZ>f0zEk1!f&nJ}-&n;PdfpTk<2=;U0J+D{lW=*x1fc@qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjW=*d?y` zFYxU3nKj~e3{cP}m3HXDWp;ZQ|M6taZh67#+!d;#c}L-@u1=2ZR_A0{v}>>PF&Det zlRLYu>lrHJ>@OZrx4it+(77d2Va;+yMdwS-ExQ#Ab~|ry6VrX~Fww<=Rzg{#936T=d0$i|OP^!tI-SS7z0$Gn{Z& z?G;d7zJ+(1EzFh03~XU(X{rox4TkGo{)(6!hx6MSk9z-e@j8mc?|$K8+AJX delta 353 zcmcaGlj*`trVUlrj0~Hrt>qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjQ;*d?y` zH}LHBnKj~e3{cQ2m3HXDWp;ZQ|Hov_Zh66~+!d;#c}L-@u1t>XR_A11v}>>PF&DdC zlRLYu>l=2L*`Gb2Zh85sp>s>5!kXoZiq4muTXriL>~>z~CZ_w|VWzXD+1qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjW=*d?y` zFYxU3nKj~e3{cP}m3HXDWp;ZQ|M6taZh67#+!d;#c}L-@u1=2ZR_A0{v}>>PF&Det zlRLX@>Mz9E{|fC}^H}7RQ$@Z&AM>|KPCC;0yzfH}JDo9~%)aJ_loNY4=VMJ9Cnrv} zP4lJpggAA4GMc|m{i3son0}hUUt1TA6^9NjxZ2`!cjD#G^N<{MrYZH~RU}7AZ`jUa z88^ii=E&X}!Ly-Tzuv-2S()v7Nr;jr>-J+qR`) j(yL_tDB4Ng-0b85^bzNuqbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjQ;*d?y` zH}LHBnKj~e3{cQ2m3HXDWp;ZQ|Hov_Zh66~+!d;#c}L-@u1t>XR_A11v}>>PF&DdC zlRLX@>RHO|e}?w0c`S0usWe}pkNMjqCmrd0-uEGgolcogW?%C|%85Oj^RcFllM_4J zrukBPLYz838O>j(e$iP(Oh3)wudR#fibIDMTy1f=H}Uf4c}R{r+m!n8Dw3m&Hf(3H zjGJN$b7X&w;MvfBm;S;9W*t*LFNx&d^YLt3@*~*c?tddIZvR`@*v?S$Mt-ZqZQHUi j=~Xg+6z!yMZg%nj`iS#S@_F-%&u!mNp4nr<4D=ZQKjU?D diff --git a/tests/regression_tests/deplete_no_transport/test_reference_source_rate.h5 b/tests/regression_tests/deplete_no_transport/test_reference_source_rate.h5 index 3f3b4aa2ac5c2040059adee2acda433177ff4464..c9c7e9e363421792108b928ada201f80d20a67df 100644 GIT binary patch delta 188 zcmcaGlj*`trVUlrj7*!Wt>qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjW=*d@-m zezIVXJY(x*!=9GOYrDB48NlF!J&0-uNw7aWZO=1T#?MZNPPLr+IDMB>ljZ$sYkc20 z9cH@0p%UoqH0#fzmm)1$PCV*@9!JdUoTM&I%U!2_(Yb&_G=l%Ht;>!}JlhsrZE-=^ J(=UK-2LSZmL|y;@ delta 188 zcmcaGlj*`trVUlrj0~Hrt>qbk)NGsiKx(qJ-G3m*+MXZ8@pb@lyd9T%GRjQ;*d@-m zZn9vHJmZqdhCMBl*LHJ9wv+}kSoI1xGXTMX`f~dt)Al@bW&G^4?^MgFkJEQKHCo=E zw#N63(_y9?94dj%PP6_jdMVP9<;1Bj=yAln&PnppwA^*-7o7_@L?ihB+PZAM#ItR| O)fN|oJ^cdcb^rj;XGiV; diff --git a/tests/regression_tests/deplete_with_transfer_rates/ref_depletion_with_ext_source.h5 b/tests/regression_tests/deplete_with_transfer_rates/ref_depletion_with_ext_source.h5 index aa09e1bcf4e352f94798f2cc266718b5f77fcec1..2f9951a42aaa0613c0b4a20351ae2c0df985b0bc 100644 GIT binary patch delta 579 zcmcbxnCZe|rVS2#j53oQ`{L`jC9l$uo6Bd%00mo5bLh;i`vB*6-8Fg^aZnEDSCGZgT$oSkZ##*b?W8 zpRHB}n|C;`FG`wzZp#ekhx>LJ>OP2be!oBIOa1v==OF!p7y4lVF25hldhq-G0hg6Q z4-5*w8oEwA=uv;cy8FVVY9Y9%=G;}9H#5{9&c7()aLL{GmklfsGCqmFxxFL}E`RC5 zy6fuSC&KyvJ@~`*7@FYxYnFVX6N(#cpTBTEJkhhk_R;aSm64BIZP)x%$#wppWW9#wnxqx-e0GqZufJc zIREJ-Ey3w!&QQJ~14G*jwu8+)7H|cV z#A5pGn{?s)Z364HeOo`;-&p#fs@H$^)JG((kZNfWg?mcVq$~8n;Q%;)!mejpGt++Czye{S#~l3@rA)Z|V=aY* zoyC*k{IB*Kz8yc&4Ch}}5u8_jrpb2Ko;e%KqZ@29b3UKCncr?3Ejf`(%5R0BZNR7e t=&4#2wtE^((v{;qY$qO^!2fAm>*D?QZrPvB7SK#n>z=%RqAUx@;{e9K!oC0i diff --git a/tests/regression_tests/deplete_with_transfer_rates/ref_depletion_with_feed.h5 b/tests/regression_tests/deplete_with_transfer_rates/ref_depletion_with_feed.h5 index 284d5cbe4ed05d7404222e70200aa0e0318cf2ad..25ab31041c44c0235b70cd855d10e9d6e93195f2 100644 GIT binary patch delta 723 zcmcbxnCZe|rVS2#j53oQ`{L`5B(Ktto6Bd%00mo5bLh;i`vB+9ziad?A<9Gwl@uqMMu~xzztx@&yn6*$7~OC0RQR_|FjJj zz#SyJ&GYmA75Z@X7k=|f*xcI(=U2MqN?*Kg3g_=&d>`t4&J)TvWMHV+t-bZ#1WULA z?L9jE#yKW%zAtyTp!|go_8VVsdSJbK-sJQBvfk#oN9|b;-xEJpW8iGxdh8jyvYvCE z>dJNfzx|z+G~)MYwrM;6dhzzjlr5*6to*AS*W}-EI(d%KvswM3GsniCcXocab=mOC zOLY3xmdOj*OvPB8bw{jEKy!FA_j&1Hk`S+9m*{+k`CtZI^-R`>nyLC5S03$+8 zGBW$ry#Kb>WfngC{_?8rmzqUIh6fbk2Ar9GeXUCsJ3J!lJ!f(!pF%`Lb(#K($lVAF z_wJonq_*%7T)%(TMww^Xh=@>?Xx7U$4~EJEBf@gyT?M;67H|!j&&66xT8!ZQvd>2X Y?^b=ZUmYE>?Ci%mlh;p_WdTJ50OEq<`v3p{ delta 723 zcmcbxnCZe|rVS2#jIxs*`{L`XC!LXqTgh+700pLee>$t%6q zV)^$$0xrK}T zp<*%p_D#BQ{x*U2+P$yAMt^60t{(HuwK~p?wW?oqcJVR`UHjeE<Vai zg1pPK5fQO$*6PK^dvxIP4^v#FznwC%+nO_L$|1&owm0vz2H1yd*zHODSUu|>Fd~+4 zKh|kG^WV0DW9h@s`B!c4eBQseUIq~nKiBT6QC!OekBIjojA<9Gws#GVMMu~xzzyKa&yn6*$7~OC0Qc$-|FjJj zz#a5utLNwaEA-*&zy9Wxu(`Jn&i8Q1mA-i06wcqn_&(J8oF|lT$iPs(TYKxf36^jL zv3qp-jdM)k{BZ7WLHP?G>`y$~^uT)eyvgVLWxe?{Pua5^z9)XH#=to`kne7SoQm_M z7c(wdzOr%-J3O2Bgqw=_TiZ3Rh}4+m_19LgRd=W7Q4PDg*(+F#Wt{5m znEmut*Hrws{ndSX^MsREYz@334pzA;!3`+;ckj-InQZWgxa`E>$CkAa?x1w3<3?Mr zs>0PP9*tOOqjV6?pTru#y>z}6oX>06WFLGo1j+|SM8vsEjLWYgB0{c1=)lZBh?qP1 bezt$}^pEzxM7lQKnzDHE`iZhEpojnf!Z6=o delta 723 zcmcbxnCZe|rVS2#jIxs*`{L{CC!LXqTgh+700k<1e>$qT>M zV)^$$0xrLMm3{cf_MdrD`@?ltZNvWGi&yATfE%#j4w8w{Oyg^S27D*Y<7wXg_h;gQ{Nt*^|%r%X-HL9%2TSXGNVWCJZ|(MB0_kz%Z^Qsh=`cKGP@^z5h5aF!d@>?{w)r7ro}A( zwaI6e!}$jJ=}zoss&M{<3jz}};%x1%`gZhfyzs|%(XR*UkBv3#R0Eu3j*2_g+XdCE z-@pFTKU=Be2JF`#U9tUte3ohECndN6QCwB+_1SFjh&bVs=`u@eDLf*KZ_G1$Hy;sk zD}K}$tvYlBuD>nc%W-;z5uD#Wr-Da2HUP>8Mnt~B51UX=OSpoxiAVPqKQ)E(m$J;d YDX{6Iz4Ia?)2yEhC$FC<%L0lB0HE;Sv;Y7A diff --git a/tests/regression_tests/deplete_with_transfer_rates/ref_depletion_with_transfer.h5 b/tests/regression_tests/deplete_with_transfer_rates/ref_depletion_with_transfer.h5 index 25365f6f3a486e7cc6ffa3ce844d4ed3fa17a95c..2a4c227bb656bcd631e26dca5b32ce8d124d7922 100644 GIT binary patch delta 752 zcmcbxnCZe|rVS2#j53oQ`{L`5B(Ktto6Bd%00jq6bLh;i`vB)}ziad?>A<9Gwl55hMMu~xzzq<{&yn6*$7~OCfZFO0|FjJj zz#ZhZ&GYmA75Z@X8-Mdk*xcI(=TCFVmA-i06wd$6_&(J8oF|lT$iPszTYKxf36^jL z!FzQ2jdM)kd_V4PLHP?G?4N(y^uT)eyvgVLWpfe)s_mH%-xEJpW8fSf$agnEPR04g ziy4dA zUZT^lwz$ANmLT1?Zs&pTPPN${3vX`Man=>hImKlA*=gcIje3_q*_(`i@x$HpEUrl@ zZZ0C0l%`)47I-Yxo!NBa|8qnv>8`S$BhRV@SHDg)RCinWK{$V#_AP^NnZ|JbokZ#L`fmcE xd|)gYEzR9~paKy~)^c|gUX>fdH9T5#x_OqsNBcELRc2a5&zZb_qAUw2mH-Z_=?4G+ delta 752 zcmcbxnCZe|rVS2#jIxs*`{L_sCY_OpTgh+700m}ze>$;-Xg zV)^$$0xrLH#UsrSyr3R{-)xrsA;R(W^&4D+WLi2FTdV)lAL^LSF8F(XBRKC(6!%fT`rvx zE1!O~#RcZEf_o3O8#euLdM|MG{-y;w&buq0DHz=O>@@M9M*Z_N{%g7!d~i3dYY!Lj zzWo}`UoVu~79}td9w_b_ulcj5ioxYYWPCQopFqTt@@|Xcf{XRw@(D~jDIX&3?84GQ z_E|6dXKT;DBf?xl({6XbuUjkj0b}W!c=NT1TmRWk*mL1w$@OctH@iH~q(~v6S?1`6 z*zkRbSh^;aoT)x*A>2XwYDrrIj1htAoS>$&{^9|+1F~}tPY7f*f%CT<7kYhZyDO9r wjHPQC2Lg8$Si%)ZUJ@>Qa06kWN9)T;Q!+l;|I=A#b3kF? - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + diff --git a/tests/regression_tests/deplete_with_transport/test.py b/tests/regression_tests/deplete_with_transport/test.py index 0f7ebf00f31..a2be22c5658 100644 --- a/tests/regression_tests/deplete_with_transport/test.py +++ b/tests/regression_tests/deplete_with_transport/test.py @@ -65,6 +65,8 @@ def test_full(run_in_tmpdir, problem, multiproc): power = 2.337e15*4*JOULE_PER_EV*1e6 # MeV/second cm from CASMO # Perform simulation using the predictor algorithm + if config['mpi'] and multiproc: + pytest.skip("Multiprocessing depletion is disabled when MPI is enabled.") openmc.deplete.pool.USE_MULTIPROCESSING = multiproc openmc.deplete.PredictorIntegrator(op, dt, power).integrate() diff --git a/tests/regression_tests/deplete_with_transport/test_reference.h5 b/tests/regression_tests/deplete_with_transport/test_reference.h5 index e8478250be6497c4d6ada14ca8fd20ae217b4fc6..cc616e79102ff6121285cff1ecaecf84b7f932ce 100644 GIT binary patch literal 163736 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
soe6>?;W*IS5G<{kw%O8uQvW&aKBrTQC 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%0D>17(icZ91W!%}Q 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 bH@ + + + + + + + + + + + + + + fixed source + 10000 + 1 + + + 10000000.0 1.0 + + + + 1000.0 + + + + + heating + + + diff --git a/tests/regression_tests/electron_heating/results_true.dat b/tests/regression_tests/electron_heating/results_true.dat new file mode 100644 index 00000000000..4f54ceaa4d5 --- /dev/null +++ b/tests/regression_tests/electron_heating/results_true.dat @@ -0,0 +1,3 @@ +tally 1: +1.000000E+07 +1.000000E+14 diff --git a/tests/regression_tests/electron_heating/test.py b/tests/regression_tests/electron_heating/test.py new file mode 100644 index 00000000000..e7a58560c49 --- /dev/null +++ b/tests/regression_tests/electron_heating/test.py @@ -0,0 +1,40 @@ +import pytest +import openmc + +from tests.testing_harness import PyAPITestHarness + + +@pytest.fixture +def water_model(): + # Define materals and geometry + water = openmc.Material() + water.add_nuclide("H1", 2.0) + water.add_nuclide("O16", 1.0) + water.set_density("g/cc", 1.0) + sphere = openmc.Sphere(r=1.0, boundary_type="reflective") + sph = openmc.Cell(fill=water, region=-sphere) + geometry = openmc.Geometry([sph]) + source = openmc.IndependentSource( + energy=openmc.stats.delta_function(10.0e6), + particle="electron" + ) + + # Define settings + settings = openmc.Settings() + settings.particles = 10000 + settings.batches = 1 + settings.cutoff = {"energy_photon": 1000.0} + settings.run_mode = "fixed source" + settings.source = source + + # Define tallies + tally = openmc.Tally() + tally.scores = ["heating"] + tallies = openmc.Tallies([tally]) + + return openmc.Model(geometry=geometry, settings=settings, tallies=tallies) + + +def test_electron_heating_calc(water_model): + harness = PyAPITestHarness("statepoint.1.h5", water_model) + harness.main() diff --git a/tests/regression_tests/energy_grid/results_true.dat b/tests/regression_tests/energy_grid/results_true.dat index deab1e28be5..3a042d882b0 100644 --- a/tests/regression_tests/energy_grid/results_true.dat +++ b/tests/regression_tests/energy_grid/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.152586E-01 1.458068E-03 +3.218009E-01 4.687417E-03 diff --git a/tests/regression_tests/energy_laws/results_true.dat b/tests/regression_tests/energy_laws/results_true.dat index 534a299b561..78027868381 100644 --- a/tests/regression_tests/energy_laws/results_true.dat +++ b/tests/regression_tests/energy_laws/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.444000E+00 1.044626E-02 +2.458770E+00 9.422203E-03 diff --git a/tests/regression_tests/entropy/results_true.dat b/tests/regression_tests/entropy/results_true.dat index 1c8b2908bc6..92d7f091dff 100644 --- a/tests/regression_tests/entropy/results_true.dat +++ b/tests/regression_tests/entropy/results_true.dat @@ -1,13 +1,13 @@ k-combined: -3.070134E-01 3.900396E-03 +2.940336E-01 7.338463E-04 entropy: 7.688862E+00 -8.237960E+00 -8.314772E+00 -8.285254E+00 -8.271486E+00 -8.291355E+00 -8.253349E+00 -8.336726E+00 -8.284741E+00 -8.328102E+00 +8.226316E+00 +8.308355E+00 +8.243413E+00 +8.369345E+00 +8.304865E+00 +8.230689E+00 +8.338304E+00 +8.270630E+00 +8.386598E+00 diff --git a/tests/regression_tests/filter_cellfrom/results_true.dat b/tests/regression_tests/filter_cellfrom/results_true.dat index 5dd43e1f33b..408a4965b1d 100644 --- a/tests/regression_tests/filter_cellfrom/results_true.dat +++ b/tests/regression_tests/filter_cellfrom/results_true.dat @@ -1,53 +1,53 @@ k-combined: -9.640806E-02 2.655206E-03 +9.035025E-02 2.654309E-03 tally 1: -6.025999E+00 -3.635317E+00 +5.994069E+00 +3.594398E+00 tally 2: -4.523606E-04 -2.051522E-08 +4.559707E-04 +2.080739E-08 tally 3: -6.026452E+00 -3.635862E+00 +5.994525E+00 +3.594945E+00 tally 4: 0.000000E+00 0.000000E+00 tally 5: -1.530903E+00 -2.357048E-01 +1.473892E+00 +2.187509E-01 tally 6: -4.992646E-05 -2.600391E-10 +5.223875E-05 +2.992861E-10 tally 7: -1.530953E+00 -2.357201E-01 +1.473945E+00 +2.187663E-01 tally 8: -1.889115E+01 -3.574727E+01 +1.885798E+01 +3.558423E+01 tally 9: -7.556902E+00 -5.717680E+00 +7.467961E+00 +5.580255E+00 tally 10: -5.022871E-04 -2.531352E-08 +5.082094E-04 +2.584432E-08 tally 11: -7.557405E+00 -5.718440E+00 +7.468470E+00 +5.581014E+00 tally 12: -1.889115E+01 -3.574727E+01 +1.885798E+01 +3.558423E+01 tally 13: 0.000000E+00 0.000000E+00 tally 14: -2.663407E-04 -7.161725E-09 +2.739543E-04 +7.600983E-09 tally 15: -2.663407E-04 -7.161725E-09 +2.739543E-04 +7.600983E-09 tally 16: -8.025710E+01 -6.459305E+02 +7.881296E+01 +6.221087E+02 tally 17: -1.067059E+02 -1.140939E+03 +1.051397E+02 +1.106292E+03 diff --git a/tests/regression_tests/filter_cellinstance/results_true.dat b/tests/regression_tests/filter_cellinstance/results_true.dat index 079b7d3d256..1529865954f 100644 --- a/tests/regression_tests/filter_cellinstance/results_true.dat +++ b/tests/regression_tests/filter_cellinstance/results_true.dat @@ -1,84 +1,84 @@ k-combined: -1.050139E+00 1.886614E-02 +1.097679E+00 8.074294E-03 tally 1: -9.724996E-02 -2.784804E-03 -1.146976E-01 -3.173782E-03 -1.698297E-01 -6.569993E-03 -1.158802E-01 -2.959280E-03 -2.533354E-01 -1.539905E-02 -1.908717E-01 -8.360058E-03 -1.738899E-01 -6.713494E-03 -3.172247E-01 -2.124184E-02 -1.363012E-01 -4.653519E-03 -1.698720E-01 -6.753819E-03 -9.934671E-02 -2.371660E-03 -6.038075E-02 -1.204656E-03 -1.038793E+01 -2.590382E+01 -2.841397E+01 -1.865709E+02 -2.786916E+01 -1.923869E+02 -1.085149E+01 -2.907194E+01 -1.038793E+01 -2.590382E+01 -2.841397E+01 -1.865709E+02 -2.786916E+01 -1.923869E+02 -1.085149E+01 -2.907194E+01 +7.125168E-02 +1.412152E-03 +1.254059E-01 +4.145686E-03 +1.609454E-01 +6.174116E-03 +1.444278E-01 +4.523981E-03 +3.363588E-01 +2.342988E-02 +1.751677E-01 +7.108034E-03 +1.384074E-01 +3.949804E-03 +2.856450E-01 +1.824185E-02 +9.680810E-02 +2.256338E-03 +1.691663E-01 +6.456530E-03 +1.160968E-01 +3.233815E-03 +7.334131E-02 +1.456688E-03 +1.168548E+01 +3.210924E+01 +2.860162E+01 +1.876786E+02 +2.857267E+01 +1.996553E+02 +1.050245E+01 +2.569953E+01 +1.168548E+01 +3.210924E+01 +2.860162E+01 +1.876786E+02 +2.857267E+01 +1.996553E+02 +1.050245E+01 +2.569953E+01 tally 2: -1.085149E+01 -2.907194E+01 -2.786916E+01 -1.923869E+02 -2.841397E+01 -1.865709E+02 -1.038793E+01 -2.590382E+01 -1.085149E+01 -2.907194E+01 -2.786916E+01 -1.923869E+02 -2.841397E+01 -1.865709E+02 -1.038793E+01 -2.590382E+01 -6.038075E-02 -1.204656E-03 -9.934671E-02 -2.371660E-03 -1.698720E-01 -6.753819E-03 -1.363012E-01 -4.653519E-03 -3.172247E-01 -2.124184E-02 -1.738899E-01 -6.713494E-03 -1.908717E-01 -8.360058E-03 -2.533354E-01 -1.539905E-02 -1.158802E-01 -2.959280E-03 -1.698297E-01 -6.569993E-03 -1.146976E-01 -3.173782E-03 -9.724996E-02 -2.784804E-03 +1.050245E+01 +2.569953E+01 +2.857267E+01 +1.996553E+02 +2.860162E+01 +1.876786E+02 +1.168548E+01 +3.210924E+01 +1.050245E+01 +2.569953E+01 +2.857267E+01 +1.996553E+02 +2.860162E+01 +1.876786E+02 +1.168548E+01 +3.210924E+01 +7.334131E-02 +1.456688E-03 +1.160968E-01 +3.233815E-03 +1.691663E-01 +6.456530E-03 +9.680810E-02 +2.256338E-03 +2.856450E-01 +1.824185E-02 +1.384074E-01 +3.949804E-03 +1.751677E-01 +7.108034E-03 +3.363588E-01 +2.342988E-02 +1.444278E-01 +4.523981E-03 +1.609454E-01 +6.174116E-03 +1.254059E-01 +4.145686E-03 +7.125168E-02 +1.412152E-03 diff --git a/tests/regression_tests/filter_distribcell/case-3/results_true.dat b/tests/regression_tests/filter_distribcell/case-3/results_true.dat index f30e858f06d..77f2a2a8731 100644 --- a/tests/regression_tests/filter_distribcell/case-3/results_true.dat +++ b/tests/regression_tests/filter_distribcell/case-3/results_true.dat @@ -1 +1 @@ -1d09084dc41305687d53d1e800fb3d0ac3949aa4e1cb0bfbb327d0ec1ad4b74fc97ee73da84b910529296b858aab9b8a5d0924d17ca2cc373625e1a9e197aa94 \ No newline at end of file +93c1efbc586874a715982d26609e9e79232de25a0b73093a00938d658440644f0ee6bb823902a6ef1b7a2a855e67b2da0a0e767ef550f9ffa4dea723e35af6f5 \ No newline at end of file diff --git a/tests/regression_tests/filter_distribcell/case-4/results_true.dat b/tests/regression_tests/filter_distribcell/case-4/results_true.dat index 228456c58bd..ed84838ee42 100644 --- a/tests/regression_tests/filter_distribcell/case-4/results_true.dat +++ b/tests/regression_tests/filter_distribcell/case-4/results_true.dat @@ -1,12 +1,12 @@ k-combined: -1.068596E-01 INF +1.069692E-01 INF tally 1: 1.812612E-02 3.285561E-04 2.870442E-02 8.239436E-04 -1.807689E-02 -3.267740E-04 +1.824058E-02 +3.327188E-04 2.660796E-02 7.079835E-04 1.961572E-02 diff --git a/tests/regression_tests/filter_energyfun/results_true.dat b/tests/regression_tests/filter_energyfun/results_true.dat index 0aadac82e94..d64de58a694 100644 --- a/tests/regression_tests/filter_energyfun/results_true.dat +++ b/tests/regression_tests/filter_energyfun/results_true.dat @@ -1,10 +1,10 @@ energyfunction nuclide score mean std. dev. -0 448ee8dfd19c4f Am241 ((n,gamma) / (n,gamma)) 1.74e-01 6.83e-03 +0 448ee8dfd19c4f Am241 ((n,gamma) / (n,gamma)) 1.74e-01 5.44e-03 energyfunction nuclide score mean std. dev. -0 37e006ae6b2e74 Am241 (n,gamma) 8.16e-02 2.24e-03 +0 37e006ae6b2e74 Am241 (n,gamma) 8.35e-02 1.83e-03 energyfunction nuclide score mean std. dev. -0 b4e2ac84068d2d Am241 (n,gamma) 8.19e-02 2.25e-03 +0 b4e2ac84068d2d Am241 (n,gamma) 8.39e-02 1.84e-03 energyfunction nuclide score mean std. dev. -0 dacf88242512ea Am241 (n,gamma) 7.95e-02 2.19e-03 +0 dacf88242512ea Am241 (n,gamma) 8.14e-02 1.78e-03 energyfunction nuclide score mean std. dev. -0 fe168c70d9e078 Am241 (n,gamma) 1.06e-01 2.96e-03 +0 fe168c70d9e078 Am241 (n,gamma) 1.09e-01 2.41e-03 diff --git a/tests/regression_tests/filter_mesh/results_true.dat b/tests/regression_tests/filter_mesh/results_true.dat index a91eadb3563..34e99c17e24 100644 --- a/tests/regression_tests/filter_mesh/results_true.dat +++ b/tests/regression_tests/filter_mesh/results_true.dat @@ -1 +1 @@ -bd55ee25094f9ad04fda4439f58ef0fed718632c88b9fde411a484dc624dedcd45dee643e14d8b107d8b92757737b8bb3d9a667de5482457d6d8346afffdf657 \ No newline at end of file +e07ed2bc8893c69721abf61b123336f1f6128a3bee6ec63b84d1f549f31707a74a6ce885091ccc0eac6b7f16f7cab39ede4784584c08825829e108de878ea5fb \ No newline at end of file diff --git a/tests/regression_tests/filter_musurface/results_true.dat b/tests/regression_tests/filter_musurface/results_true.dat index 39c9f2b925a..4cdd7dbf50e 100644 --- a/tests/regression_tests/filter_musurface/results_true.dat +++ b/tests/regression_tests/filter_musurface/results_true.dat @@ -1,11 +1,11 @@ k-combined: -1.157005E-01 7.587090E-03 +1.202075E-01 1.113188E-02 tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.770000E-01 -1.608710E-01 -3.909000E+00 -3.063035E+00 +9.230000E-01 +1.791510E-01 +3.869000E+00 +3.002523E+00 diff --git a/tests/regression_tests/filter_translations/results_true.dat b/tests/regression_tests/filter_translations/results_true.dat index d257d71a691..a63586d2dd9 100644 --- a/tests/regression_tests/filter_translations/results_true.dat +++ b/tests/regression_tests/filter_translations/results_true.dat @@ -1,342 +1,342 @@ k-combined: -2.298294E-01 3.256961E-01 +7.729082E-01 3.775399E-02 tally 1: -4.880089E-02 -4.894233E-04 -8.221192E-02 -1.373712E-03 -5.205261E-02 -5.584673E-04 -1.272758E-01 -3.371623E-03 -3.599375E-01 -2.655645E-02 -1.377572E-01 -3.835778E-03 -1.646205E-01 -5.916595E-03 -3.806765E-01 -2.947576E-02 -1.470573E-01 -4.360385E-03 -5.568294E-02 -6.368003E-04 -6.775790E-02 -9.447074E-04 -5.580909E-02 -6.303584E-04 -6.674847E-02 -9.080853E-04 -9.747628E-02 -1.934325E-03 -6.824062E-02 -9.908844E-04 -1.891692E-01 -7.211874E-03 -5.976566E-01 -7.206211E-02 -1.805640E-01 -6.599680E-03 -2.114692E-01 -9.202185E-03 -6.514433E-01 -8.523087E-02 -1.905740E-01 -7.287607E-03 -7.633486E-02 -1.216488E-03 -1.117747E-01 -2.538705E-03 -7.438042E-02 -1.127109E-03 -7.356007E-02 -1.090617E-03 -1.161258E-01 -2.734941E-03 -6.745417E-02 -9.371031E-04 -2.153323E-01 -9.293477E-03 -9.414362E-01 -2.261845E-01 -2.016933E-01 -8.270477E-03 -2.370758E-01 -1.150628E-02 -9.973982E-01 -2.489516E-01 -2.152505E-01 -9.424546E-03 -7.502684E-02 -1.208304E-03 -1.244515E-01 -3.168682E-03 -7.515812E-02 -1.151397E-03 -6.355178E-02 -8.423316E-04 -1.040915E-01 -2.224064E-03 -6.902234E-02 -9.843766E-04 -1.978591E-01 -7.894161E-03 -5.162186E-01 -5.357742E-02 -1.897326E-01 -7.231935E-03 -1.827950E-01 -6.839560E-03 -5.780661E-01 -6.799910E-02 -1.881215E-01 -7.093746E-03 -6.083700E-02 -7.861240E-04 -9.978991E-02 -2.022733E-03 -6.004653E-02 -7.428556E-04 -4.951220E-02 -4.952385E-04 -7.401227E-02 -1.124154E-03 -5.151090E-02 -5.339359E-04 -1.356118E-01 -3.711749E-03 -3.400140E-01 -2.367518E-02 -1.385305E-01 -4.060592E-03 -1.438711E-01 -4.191824E-03 -3.276170E-01 -2.210924E-02 -1.279501E-01 -3.435254E-03 -4.852204E-02 -4.919417E-04 -7.229090E-02 -1.062894E-03 -4.344414E-02 -3.825354E-04 +5.296804E-02 +5.661701E-04 +8.356446E-02 +1.412139E-03 +5.041335E-02 +5.143568E-04 +1.299348E-01 +3.467618E-03 +3.929702E-01 +3.147038E-02 +1.379707E-01 +3.888484E-03 +1.405034E-01 +4.473799E-03 +3.785796E-01 +2.940585E-02 +1.422010E-01 +4.113723E-03 +5.647073E-02 +6.735251E-04 +7.911154E-02 +1.329137E-03 +5.160755E-02 +5.361448E-04 +6.669424E-02 +9.090832E-04 +1.008621E-01 +2.134534E-03 +6.808932E-02 +9.355993E-04 +1.873006E-01 +7.135961E-03 +6.221575E-01 +7.819842E-02 +1.856653E-01 +6.954762E-03 +2.014929E-01 +8.327845E-03 +5.853251E-01 +6.945708E-02 +1.709645E-01 +5.917124E-03 +7.214913E-02 +1.058962E-03 +1.027720E-01 +2.138475E-03 +6.099853E-02 +7.493941E-04 +6.892071E-02 +9.630680E-04 +1.035459E-01 +2.173883E-03 +6.973870E-02 +9.904237E-04 +2.125703E-01 +9.112659E-03 +9.012205E-01 +2.163546E-01 +2.066426E-01 +8.617414E-03 +2.258950E-01 +1.039607E-02 +9.476792E-01 +2.350708E-01 +2.225585E-01 +1.017898E-02 +7.111503E-02 +1.036847E-03 +1.117012E-01 +2.530040E-03 +6.870474E-02 +9.551035E-04 +5.738897E-02 +6.699030E-04 +9.522335E-02 +1.835769E-03 +6.570917E-02 +8.656870E-04 +1.945592E-01 +7.593336E-03 +5.514753E-01 +6.122981E-02 +2.144202E-01 +9.421739E-03 +1.971631E-01 +7.944046E-03 +6.088996E-01 +7.442954E-02 +1.965447E-01 +7.765628E-03 +7.005494E-02 +1.012891E-03 +1.010633E-01 +2.084095E-03 +6.145926E-02 +7.694351E-04 +4.999479E-02 +5.129164E-04 +7.238243E-02 +1.062921E-03 +4.902309E-02 +4.852193E-04 +1.324655E-01 +3.642431E-03 +3.305312E-01 +2.265726E-02 +1.332993E-01 +3.728385E-03 +1.547469E-01 +4.894837E-03 +3.625944E-01 +2.747313E-02 +1.435761E-01 +4.334405E-03 +5.789603E-02 +7.065383E-04 +7.589559E-02 +1.205386E-03 +5.210018E-02 +5.790843E-04 tally 2: -2.379877E-01 -1.141258E-02 -2.376600E-01 -1.137350E-02 -6.546514E-01 -8.852321E-02 -5.823862E-01 -6.810779E-02 -2.692631E-01 -1.479426E-02 -2.360469E-01 -1.124950E-02 -3.534788E-01 -2.528363E-02 -3.247931E-01 -2.160130E-02 -1.181513E+00 -2.959140E-01 -1.078874E+00 -2.467321E-01 -3.743375E-01 -2.859905E-02 -3.468123E-01 -2.427809E-02 -3.203903E-01 -2.109786E-02 -3.315547E-01 -2.216053E-02 -1.039077E+00 -2.294722E-01 -1.091786E+00 -2.572834E-01 -3.615960E-01 -2.678347E-02 -3.323317E-01 -2.226424E-02 -2.519726E-01 -1.279098E-02 -2.332385E-01 -1.101251E-02 -5.587247E-01 -6.293355E-02 -5.426859E-01 -6.010041E-02 -2.332981E-01 -1.097940E-02 -2.239951E-01 -1.043440E-02 +2.572693E-01 +1.338921E-02 +2.567576E-01 +1.333558E-02 +6.127899E-01 +7.781914E-02 +6.163075E-01 +7.600273E-02 +2.566545E-01 +1.372553E-02 +2.509744E-01 +1.286275E-02 +3.366720E-01 +2.282560E-02 +3.216175E-01 +2.103222E-02 +1.118187E+00 +2.697988E-01 +1.050003E+00 +2.391098E-01 +3.407360E-01 +2.332214E-02 +3.150094E-01 +2.006040E-02 +3.130223E-01 +2.001074E-02 +3.238651E-01 +2.101351E-02 +1.061186E+00 +2.372828E-01 +1.099461E+00 +2.597134E-01 +3.445524E-01 +2.400393E-02 +3.429055E-01 +2.372392E-02 +2.299776E-01 +1.064851E-02 +2.208901E-01 +9.829109E-03 +6.015657E-01 +7.399276E-02 +5.851229E-01 +7.165716E-02 +2.583609E-01 +1.364046E-02 +2.456380E-01 +1.257735E-02 tally 3: -4.880089E-02 -4.894233E-04 -8.221192E-02 -1.373712E-03 -5.205261E-02 -5.584673E-04 -1.272758E-01 -3.371623E-03 -3.599375E-01 -2.655645E-02 -1.377572E-01 -3.835778E-03 -1.646205E-01 -5.916595E-03 -3.806765E-01 -2.947576E-02 -1.470573E-01 -4.360385E-03 -5.568294E-02 -6.368003E-04 -6.775790E-02 -9.447074E-04 -5.580909E-02 -6.303584E-04 -6.674847E-02 -9.080853E-04 -9.747628E-02 -1.934325E-03 -6.824062E-02 -9.908844E-04 -1.891692E-01 -7.211874E-03 -5.976566E-01 -7.206211E-02 -1.805640E-01 -6.599680E-03 -2.114692E-01 -9.202185E-03 -6.514433E-01 -8.523087E-02 -1.905740E-01 -7.287607E-03 -7.633486E-02 -1.216488E-03 -1.117747E-01 -2.538705E-03 -7.438042E-02 -1.127109E-03 -7.356007E-02 -1.090617E-03 -1.161258E-01 -2.734941E-03 -6.745417E-02 -9.371031E-04 -2.153323E-01 -9.293477E-03 -9.414362E-01 -2.261845E-01 -2.016933E-01 -8.270477E-03 -2.370758E-01 -1.150628E-02 -9.973982E-01 -2.489516E-01 -2.152505E-01 -9.424546E-03 -7.502684E-02 -1.208304E-03 -1.244515E-01 -3.168682E-03 -7.515812E-02 -1.151397E-03 -6.355178E-02 -8.423316E-04 -1.040915E-01 -2.224064E-03 -6.902234E-02 -9.843766E-04 -1.978591E-01 -7.894161E-03 -5.162186E-01 -5.357742E-02 -1.897326E-01 -7.231935E-03 -1.827950E-01 -6.839560E-03 -5.780661E-01 -6.799910E-02 -1.881215E-01 -7.093746E-03 -6.083700E-02 -7.861240E-04 -9.978991E-02 -2.022733E-03 -6.004653E-02 -7.428556E-04 -4.951220E-02 -4.952385E-04 -7.401227E-02 -1.124154E-03 -5.151090E-02 -5.339359E-04 -1.356118E-01 -3.711749E-03 -3.400140E-01 -2.367518E-02 -1.385305E-01 -4.060592E-03 -1.438711E-01 -4.191824E-03 -3.276170E-01 -2.210924E-02 -1.279501E-01 -3.435254E-03 -4.852204E-02 -4.919417E-04 -7.229090E-02 -1.062894E-03 -4.344414E-02 -3.825354E-04 +5.296804E-02 +5.661701E-04 +8.356446E-02 +1.412139E-03 +5.041335E-02 +5.143568E-04 +1.299348E-01 +3.467618E-03 +3.929702E-01 +3.147038E-02 +1.379707E-01 +3.888484E-03 +1.405034E-01 +4.473799E-03 +3.785796E-01 +2.940585E-02 +1.422010E-01 +4.113723E-03 +5.647073E-02 +6.735251E-04 +7.911154E-02 +1.329137E-03 +5.160755E-02 +5.361448E-04 +6.669424E-02 +9.090832E-04 +1.008621E-01 +2.134534E-03 +6.808932E-02 +9.355993E-04 +1.873006E-01 +7.135961E-03 +6.221575E-01 +7.819842E-02 +1.856653E-01 +6.954762E-03 +2.014929E-01 +8.327845E-03 +5.853251E-01 +6.945708E-02 +1.709645E-01 +5.917124E-03 +7.214913E-02 +1.058962E-03 +1.027720E-01 +2.138475E-03 +6.099853E-02 +7.493941E-04 +6.892071E-02 +9.630680E-04 +1.035459E-01 +2.173883E-03 +6.973870E-02 +9.904237E-04 +2.125703E-01 +9.112659E-03 +9.012205E-01 +2.163546E-01 +2.066426E-01 +8.617414E-03 +2.258950E-01 +1.039607E-02 +9.476792E-01 +2.350708E-01 +2.225585E-01 +1.017898E-02 +7.111503E-02 +1.036847E-03 +1.117012E-01 +2.530040E-03 +6.870474E-02 +9.551035E-04 +5.738897E-02 +6.699030E-04 +9.522335E-02 +1.835769E-03 +6.570917E-02 +8.656870E-04 +1.945592E-01 +7.593336E-03 +5.514753E-01 +6.122981E-02 +2.144202E-01 +9.421739E-03 +1.971631E-01 +7.944046E-03 +6.088996E-01 +7.442954E-02 +1.965447E-01 +7.765628E-03 +7.005494E-02 +1.012891E-03 +1.010633E-01 +2.084095E-03 +6.145926E-02 +7.694351E-04 +4.999479E-02 +5.129164E-04 +7.238243E-02 +1.062921E-03 +4.902309E-02 +4.852193E-04 +1.324655E-01 +3.642431E-03 +3.305312E-01 +2.265726E-02 +1.332993E-01 +3.728385E-03 +1.547469E-01 +4.894837E-03 +3.625944E-01 +2.747313E-02 +1.435761E-01 +4.334405E-03 +5.789603E-02 +7.065383E-04 +7.589559E-02 +1.205386E-03 +5.210018E-02 +5.790843E-04 tally 4: -2.379877E-01 -1.141258E-02 -2.376600E-01 -1.137350E-02 -6.546514E-01 -8.852321E-02 -5.823862E-01 -6.810779E-02 -2.692631E-01 -1.479426E-02 -2.360469E-01 -1.124950E-02 -3.534788E-01 -2.528363E-02 -3.247931E-01 -2.160130E-02 -1.181513E+00 -2.959140E-01 -1.078874E+00 -2.467321E-01 -3.743375E-01 -2.859905E-02 -3.468123E-01 -2.427809E-02 -3.203903E-01 -2.109786E-02 -3.315547E-01 -2.216053E-02 -1.039077E+00 -2.294722E-01 -1.091786E+00 -2.572834E-01 -3.615960E-01 -2.678347E-02 -3.323317E-01 -2.226424E-02 -2.519726E-01 -1.279098E-02 -2.332385E-01 -1.101251E-02 -5.587247E-01 -6.293355E-02 -5.426859E-01 -6.010041E-02 -2.332981E-01 -1.097940E-02 -2.239951E-01 -1.043440E-02 +2.572693E-01 +1.338921E-02 +2.567576E-01 +1.333558E-02 +6.127899E-01 +7.781914E-02 +6.163075E-01 +7.600273E-02 +2.566545E-01 +1.372553E-02 +2.509744E-01 +1.286275E-02 +3.366720E-01 +2.282560E-02 +3.216175E-01 +2.103222E-02 +1.118187E+00 +2.697988E-01 +1.050003E+00 +2.391098E-01 +3.407360E-01 +2.332214E-02 +3.150094E-01 +2.006040E-02 +3.130223E-01 +2.001074E-02 +3.238651E-01 +2.101351E-02 +1.061186E+00 +2.372828E-01 +1.099461E+00 +2.597134E-01 +3.445524E-01 +2.400393E-02 +3.429055E-01 +2.372392E-02 +2.299776E-01 +1.064851E-02 +2.208901E-01 +9.829109E-03 +6.015657E-01 +7.399276E-02 +5.851229E-01 +7.165716E-02 +2.583609E-01 +1.364046E-02 +2.456380E-01 +1.257735E-02 diff --git a/tests/regression_tests/ifp/groupwise/__init__.py b/tests/regression_tests/ifp/groupwise/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/regression_tests/ifp/groupwise/inputs_true.dat b/tests/regression_tests/ifp/groupwise/inputs_true.dat new file mode 100644 index 00000000000..6d7e20717b9 --- /dev/null +++ b/tests/regression_tests/ifp/groupwise/inputs_true.dat @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + eigenvalue + 1000 + 20 + 5 + + + -10.0 -10.0 -10.0 10.0 10.0 10.0 + + + true + + + 5 + + + + 1 2 3 4 5 6 + + + ifp-time-numerator + + + 1 + ifp-beta-numerator + + + ifp-denominator + + + diff --git a/tests/regression_tests/ifp/groupwise/results_true.dat b/tests/regression_tests/ifp/groupwise/results_true.dat new file mode 100644 index 00000000000..ea66a8de3c9 --- /dev/null +++ b/tests/regression_tests/ifp/groupwise/results_true.dat @@ -0,0 +1,21 @@ +k-combined: +1.006559E+00 5.389391E-03 +tally 1: +9.109384E-08 +5.667165E-16 +tally 2: +3.000000E-03 +9.000000E-06 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.370000E-04 +2.800000E-02 +2.220000E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +tally 3: +1.489000E+01 +1.480036E+01 diff --git a/tests/regression_tests/ifp/groupwise/test.py b/tests/regression_tests/ifp/groupwise/test.py new file mode 100644 index 00000000000..a1a0ebefb8d --- /dev/null +++ b/tests/regression_tests/ifp/groupwise/test.py @@ -0,0 +1,40 @@ +"""Test the Iterated Fission Probability (IFP) method to compute adjoint-weighted +kinetics parameters using dedicated tallies.""" + +import openmc +import pytest + +from tests.testing_harness import PyAPITestHarness + +@pytest.fixture() +def ifp_model(): + # Material + material = openmc.Material(name="core") + material.add_nuclide("U235", 1.0) + material.set_density('g/cm3', 16.0) + + # Geometry + radius = 10.0 + sphere = openmc.Sphere(r=radius, boundary_type="vacuum") + cell = openmc.Cell(region=-sphere, fill=material) + geometry = openmc.Geometry([cell]) + + # Settings + settings = openmc.Settings() + settings.particles = 1000 + settings.batches = 20 + settings.inactive = 5 + settings.ifp_n_generation = 5 + + model = openmc.Model(settings=settings, geometry=geometry) + + space = openmc.stats.Box(*cell.bounding_box) + model.settings.source = openmc.IndependentSource( + space=space, constraints={'fissionable': True}) + model.add_kinetics_parameters_tallies(num_groups=6) + return model + + +def test_iterated_fission_probability(ifp_model): + harness = PyAPITestHarness("statepoint.20.h5", model=ifp_model) + harness.main() diff --git a/tests/regression_tests/ifp/results_true.dat b/tests/regression_tests/ifp/results_true.dat deleted file mode 100644 index a74e2bd78bc..00000000000 --- a/tests/regression_tests/ifp/results_true.dat +++ /dev/null @@ -1,9 +0,0 @@ -k-combined: -1.007452E+00 5.705278E-03 -tally 1: -8.996235E-08 -5.461421E-16 -4.800000E-02 -4.680000E-04 -1.512000E+01 -1.526063E+01 diff --git a/tests/regression_tests/ifp/total/__init__.py b/tests/regression_tests/ifp/total/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/regression_tests/ifp/inputs_true.dat b/tests/regression_tests/ifp/total/inputs_true.dat similarity index 100% rename from tests/regression_tests/ifp/inputs_true.dat rename to tests/regression_tests/ifp/total/inputs_true.dat diff --git a/tests/regression_tests/ifp/total/results_true.dat b/tests/regression_tests/ifp/total/results_true.dat new file mode 100644 index 00000000000..466ca1f015e --- /dev/null +++ b/tests/regression_tests/ifp/total/results_true.dat @@ -0,0 +1,9 @@ +k-combined: +1.006559E+00 5.389391E-03 +tally 1: +9.109384E-08 +5.667165E-16 +5.200000E-02 +5.420000E-04 +1.489000E+01 +1.480036E+01 diff --git a/tests/regression_tests/ifp/test.py b/tests/regression_tests/ifp/total/test.py similarity index 99% rename from tests/regression_tests/ifp/test.py rename to tests/regression_tests/ifp/total/test.py index 6969a54c49d..18b89cfc0b7 100644 --- a/tests/regression_tests/ifp/test.py +++ b/tests/regression_tests/ifp/total/test.py @@ -6,7 +6,6 @@ from tests.testing_harness import PyAPITestHarness - @pytest.fixture() def ifp_model(): model = openmc.Model() diff --git a/tests/regression_tests/infinite_cell/results_true.dat b/tests/regression_tests/infinite_cell/results_true.dat index 2c4ce082d51..4cdbcaf887a 100644 --- a/tests/regression_tests/infinite_cell/results_true.dat +++ b/tests/regression_tests/infinite_cell/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.589951E-02 8.489144E-04 +9.603664E-02 1.050772E-03 diff --git a/tests/regression_tests/iso_in_lab/results_true.dat b/tests/regression_tests/iso_in_lab/results_true.dat index aaef2262342..0378ec86dcc 100644 --- a/tests/regression_tests/iso_in_lab/results_true.dat +++ b/tests/regression_tests/iso_in_lab/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.015537E-01 1.086850E-01 +9.365837E-01 5.366122E-02 diff --git a/tests/regression_tests/lattice/results_true.dat b/tests/regression_tests/lattice/results_true.dat index f3e937b36ea..dca84bd6a55 100644 --- a/tests/regression_tests/lattice/results_true.dat +++ b/tests/regression_tests/lattice/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.610829E-01 2.522714E-02 +9.182679E-01 5.270201E-02 diff --git a/tests/regression_tests/lattice_distribmat/False/results_true.dat b/tests/regression_tests/lattice_distribmat/False/results_true.dat index 45a9ddb0a69..9ebbb43b839 100644 --- a/tests/regression_tests/lattice_distribmat/False/results_true.dat +++ b/tests/regression_tests/lattice_distribmat/False/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.863277E+00 1.289821E-02 +1.848895E+00 1.480242E-02 diff --git a/tests/regression_tests/lattice_distribmat/True/results_true.dat b/tests/regression_tests/lattice_distribmat/True/results_true.dat index 45a9ddb0a69..9ebbb43b839 100644 --- a/tests/regression_tests/lattice_distribmat/True/results_true.dat +++ b/tests/regression_tests/lattice_distribmat/True/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.863277E+00 1.289821E-02 +1.848895E+00 1.480242E-02 diff --git a/tests/regression_tests/lattice_distribrho/__init__.py b/tests/regression_tests/lattice_distribrho/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/regression_tests/lattice_distribrho/inputs_true.dat b/tests/regression_tests/lattice_distribrho/inputs_true.dat new file mode 100644 index 00000000000..5031bea6e28 --- /dev/null +++ b/tests/regression_tests/lattice_distribrho/inputs_true.dat @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + 1.0 1.0 + 2 2 + -1.0 -1.0 + +1 1 +1 1 + + + + + + + + + eigenvalue + 1000 + 10 + 5 + + diff --git a/tests/regression_tests/lattice_distribrho/results_true.dat b/tests/regression_tests/lattice_distribrho/results_true.dat new file mode 100644 index 00000000000..f7f3da8e651 --- /dev/null +++ b/tests/regression_tests/lattice_distribrho/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +1.900249E+00 8.157834E-03 diff --git a/tests/regression_tests/lattice_distribrho/test.py b/tests/regression_tests/lattice_distribrho/test.py new file mode 100644 index 00000000000..ec94fe96b81 --- /dev/null +++ b/tests/regression_tests/lattice_distribrho/test.py @@ -0,0 +1,51 @@ +import openmc +import pytest + +from tests.testing_harness import PyAPITestHarness + + +@pytest.fixture +def model(): + model = openmc.Model() + + uo2 = openmc.Material(name='UO2') + uo2.set_density('g/cm3', 10.0) + uo2.add_nuclide('U235', 1.0) + uo2.add_nuclide('O16', 2.0) + water = openmc.Material(name='light water') + water.add_nuclide('H1', 2.0) + water.add_nuclide('O16', 1.0) + water.set_density('g/cm3', 1.0) + water.add_s_alpha_beta('c_H_in_H2O') + model.materials.extend([uo2, water]) + + cyl = openmc.ZCylinder(r=0.4) + pin = openmc.model.pin([cyl], [uo2, water]) + d = 1.0 + + lattice = openmc.RectLattice() + lattice.lower_left = (-d, -d) + lattice.pitch = (d, d) + lattice.universes = [[pin, pin], + [pin, pin]] + box = openmc.model.RectangularPrism( + 2.0 * d, 2.0 * d, + origin=(0.0, 0.0), + boundary_type='reflective' + ) + + pin.cells[1].density = [10.0, 20.0, 10.0, 20.0] + + model.geometry = openmc.Geometry([openmc.Cell(fill=lattice, region=-box)]) + model.geometry.merge_surfaces = True + + model.settings.batches = 10 + model.settings.inactive = 5 + model.settings.particles = 1000 + + return model + + +def test_lattice_checkerboard(model): + harness = PyAPITestHarness('statepoint.10.h5', model) + harness.main() diff --git a/tests/regression_tests/lattice_hex/results_true.dat b/tests/regression_tests/lattice_hex/results_true.dat index 789bacc4045..46db641ebe3 100644 --- a/tests/regression_tests/lattice_hex/results_true.dat +++ b/tests/regression_tests/lattice_hex/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.566607E-01 9.207770E-03 +2.595598E-01 9.089294E-03 diff --git a/tests/regression_tests/lattice_hex_coincident/results_true.dat b/tests/regression_tests/lattice_hex_coincident/results_true.dat index c134e123f91..c798b66e405 100644 --- a/tests/regression_tests/lattice_hex_coincident/results_true.dat +++ b/tests/regression_tests/lattice_hex_coincident/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.917792E+00 4.329425E-02 +1.931086E+00 5.968486E-02 diff --git a/tests/regression_tests/lattice_hex_x/results_true.dat b/tests/regression_tests/lattice_hex_x/results_true.dat index 174dc70cd4e..44f947283cc 100644 --- a/tests/regression_tests/lattice_hex_x/results_true.dat +++ b/tests/regression_tests/lattice_hex_x/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.367975E+00 2.264887E-02 +1.326294E+00 1.193578E-02 diff --git a/tests/regression_tests/lattice_multiple/results_true.dat b/tests/regression_tests/lattice_multiple/results_true.dat index 7a06551bd84..0866932d2ab 100644 --- a/tests/regression_tests/lattice_multiple/results_true.dat +++ b/tests/regression_tests/lattice_multiple/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.859911E+00 8.282311E-03 +1.843982E+00 5.815875E-03 diff --git a/tests/regression_tests/lattice_rotated/results_true.dat b/tests/regression_tests/lattice_rotated/results_true.dat index eeaa268fb17..9a96a92594b 100644 --- a/tests/regression_tests/lattice_rotated/results_true.dat +++ b/tests/regression_tests/lattice_rotated/results_true.dat @@ -1,2 +1,2 @@ k-combined: -4.426784E-01 6.627506E-03 +4.515246E-01 2.358354E-02 diff --git a/tests/regression_tests/mg_basic/results_true.dat b/tests/regression_tests/mg_basic/results_true.dat index 15a9f218688..16980732db0 100644 --- a/tests/regression_tests/mg_basic/results_true.dat +++ b/tests/regression_tests/mg_basic/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.009864E+00 1.107115E-02 +1.004679E+00 1.329350E-02 diff --git a/tests/regression_tests/mg_basic_delayed/results_true.dat b/tests/regression_tests/mg_basic_delayed/results_true.dat index 6f7c79c1b24..f150030b9b8 100644 --- a/tests/regression_tests/mg_basic_delayed/results_true.dat +++ b/tests/regression_tests/mg_basic_delayed/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.024610E+00 9.643746E-03 +1.017078E+00 1.181139E-02 diff --git a/tests/regression_tests/mg_convert/results_true.dat b/tests/regression_tests/mg_convert/results_true.dat index ff3d7bb913c..f8f748cc7cb 100644 --- a/tests/regression_tests/mg_convert/results_true.dat +++ b/tests/regression_tests/mg_convert/results_true.dat @@ -1,24 +1,24 @@ k-combined: -9.984888E-01 1.558301E-03 +9.926427E-01 3.067527E-03 k-combined: -1.001035E+00 7.622447E-04 +9.932868E-01 2.780271E-03 k-combined: -9.984888E-01 1.558301E-03 +9.926427E-01 3.067527E-03 k-combined: -9.991101E-01 2.776191E-03 +1.000000E+00 0.000000E+00 k-combined: -9.965954E-01 5.185046E-03 +9.902969E-01 1.654717E-02 k-combined: -9.987613E-01 4.806845E-04 +9.882796E-01 1.929843E-03 k-combined: -9.991101E-01 2.776191E-03 +1.000000E+00 0.000000E+00 k-combined: -9.965954E-01 5.185315E-03 +9.902953E-01 1.654291E-02 k-combined: -9.987610E-01 4.791528E-04 +9.882814E-01 1.927488E-03 k-combined: -9.944808E-01 4.458524E-03 +9.893153E-01 7.576652E-03 k-combined: -9.984888E-01 1.558301E-03 +9.926427E-01 3.067527E-03 k-combined: -9.984888E-01 1.558301E-03 +9.926427E-01 3.067527E-03 diff --git a/tests/regression_tests/mg_convert/test.py b/tests/regression_tests/mg_convert/test.py index 8099c89a29c..0e50f3a744c 100755 --- a/tests/regression_tests/mg_convert/test.py +++ b/tests/regression_tests/mg_convert/test.py @@ -1,3 +1,4 @@ +from math import isnan import os import hashlib @@ -142,10 +143,13 @@ def _run_openmc(self): openmc.run(openmc_exec=config['exe']) with openmc.StatePoint('statepoint.{}.h5'.format(batches)) as sp: + # Sometimes NaN results are produced; convert these to 0.0 + std_dev = 0.0 if isnan(sp.keff.s) else sp.keff.s + # Write out k-combined. outstr += 'k-combined:\n' form = '{:12.6E} {:12.6E}\n' - outstr += form.format(sp.keff.n, sp.keff.s) + outstr += form.format(sp.keff.n, std_dev) return outstr diff --git a/tests/regression_tests/mg_legendre/results_true.dat b/tests/regression_tests/mg_legendre/results_true.dat index e2989469c84..04d9c9874be 100644 --- a/tests/regression_tests/mg_legendre/results_true.dat +++ b/tests/regression_tests/mg_legendre/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.003646E+00 9.134747E-03 +1.009220E+00 9.571832E-03 diff --git a/tests/regression_tests/mg_max_order/results_true.dat b/tests/regression_tests/mg_max_order/results_true.dat index e2989469c84..04d9c9874be 100644 --- a/tests/regression_tests/mg_max_order/results_true.dat +++ b/tests/regression_tests/mg_max_order/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.003646E+00 9.134747E-03 +1.009220E+00 9.571832E-03 diff --git a/tests/regression_tests/mg_survival_biasing/results_true.dat b/tests/regression_tests/mg_survival_biasing/results_true.dat index cddbdaceb3e..4b26978ada6 100644 --- a/tests/regression_tests/mg_survival_biasing/results_true.dat +++ b/tests/regression_tests/mg_survival_biasing/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.878738E-01 8.326224E-03 +9.889968E-01 9.144186E-03 diff --git a/tests/regression_tests/mg_tallies/results_true.dat b/tests/regression_tests/mg_tallies/results_true.dat index 7484dd24851..07fe22ce503 100644 --- a/tests/regression_tests/mg_tallies/results_true.dat +++ b/tests/regression_tests/mg_tallies/results_true.dat @@ -1,1324 +1,1324 @@ k-combined: -1.003646E+00 9.134747E-03 +1.012390E+00 9.679132E-03 tally 1: -5.220000E-01 -5.995400E-02 -1.400000E-02 -4.000000E-05 -6.718865E-03 -9.371695E-06 -1.106435E-02 -3.119729E-05 -1.216992E-07 -3.699412E-15 -1.106435E-02 -3.119729E-05 +1.342000E+00 +4.291640E-01 +7.000000E-02 +1.158000E-03 +2.919844E-02 +1.953371E-04 +5.372246E-02 +6.734832E-04 +2.939310E-07 +2.375686E-14 +5.372246E-02 +6.734832E-04 0.000000E+00 0.000000E+00 -1.343773E+06 -3.748678E+11 -5.220000E-01 -5.995400E-02 +5.839688E+06 +7.813485E+12 +1.342000E+00 +4.291640E-01 0.000000E+00 0.000000E+00 -1.520872E+00 -5.121226E-01 -2.564000E+00 -1.338762E+00 -1.160000E-01 -2.738000E-03 -4.593685E-02 -4.275719E-04 -1.360763E-01 -3.951569E-03 -8.079937E-07 -1.577355E-13 -1.350645E-01 -3.872739E-03 -1.011813E-03 -1.023765E-06 -9.187371E+06 -1.710288E+13 -2.564000E+00 -1.338762E+00 -8.595248E-04 -7.387829E-07 -7.412367E+00 -1.121746E+01 -2.184000E+00 -9.895940E-01 -1.080000E-01 -2.394000E-03 -4.782785E-02 -4.787428E-04 -1.140806E-01 -2.886440E-03 -6.242229E-07 -9.307161E-14 -1.130687E-01 -2.811706E-03 -1.011813E-03 -1.023765E-06 -9.565570E+06 -1.914971E+13 -2.184000E+00 -9.895940E-01 -3.312574E-05 -1.097314E-09 -6.331465E+00 -8.328826E+00 -5.970000E-01 -8.325100E-02 -3.500000E-02 -3.150000E-04 -1.514871E-02 -5.131352E-05 -3.795718E-02 -3.631435E-04 -2.299730E-07 -1.295603E-14 -3.795718E-02 -3.631435E-04 +3.915206E+00 +3.646810E+00 +2.701000E+00 +1.486587E+00 +1.340000E-01 +3.598000E-03 +5.583136E-02 +6.266530E-04 +1.267275E-01 +3.349463E-03 +7.209619E-07 +1.153253E-13 +1.267275E-01 +3.349463E-03 0.000000E+00 0.000000E+00 -3.029741E+06 -2.052541E+12 -5.970000E-01 -8.325100E-02 +1.116627E+07 +2.506612E+13 +2.701000E+00 +1.486587E+00 0.000000E+00 0.000000E+00 -1.714353E+00 -6.970480E-01 -1.852000E+00 -7.973360E-01 -7.900000E-02 -1.689000E-03 -2.755187E-02 -2.091740E-04 -5.453423E-02 -7.484037E-04 -2.368001E-07 -1.753710E-14 -5.453423E-02 -7.484037E-04 +7.844332E+00 +1.252301E+01 +2.791000E+00 +1.658877E+00 +1.240000E-01 +3.282000E-03 +5.173865E-02 +5.560435E-04 +1.292971E-01 +3.436301E-03 +6.920456E-07 +9.917496E-14 +1.263311E-01 +3.290664E-03 +2.965960E-03 +4.837204E-06 +1.034773E+07 +2.224174E+13 +2.791000E+00 +1.658877E+00 +7.133747E-04 +3.640977E-07 +8.120311E+00 +1.408288E+01 +3.169000E+00 +2.031747E+00 +1.620000E-01 +5.364000E-03 +6.707115E-02 +9.171975E-04 +1.648345E-01 +5.547084E-03 +1.008876E-06 +2.201766E-13 +1.638199E-01 +5.463700E-03 +1.014608E-03 +1.029429E-06 +1.341423E+07 +3.668790E+13 +3.169000E+00 +2.031747E+00 +8.618993E-04 +7.428703E-07 +9.158565E+00 +1.699756E+01 +3.660000E+00 +2.796494E+00 +1.580000E-01 +5.158000E-03 +6.719242E-02 +9.422093E-04 +1.591500E-01 +5.615224E-03 +8.020080E-07 +1.480166E-13 +1.581743E-01 +5.540021E-03 +9.756761E-04 +9.519438E-07 +1.343848E+07 +3.768837E+13 +3.660000E+00 +2.796494E+00 +2.954152E-04 +8.727014E-08 +1.067773E+01 +2.376726E+01 +2.527000E+00 +1.452369E+00 +1.140000E-01 +2.834000E-03 +4.984389E-02 +5.325247E-04 +1.111356E-01 +2.793586E-03 +7.289084E-07 +1.302125E-13 +1.111356E-01 +2.793586E-03 0.000000E+00 0.000000E+00 -5.510374E+06 -8.366961E+12 -1.852000E+00 -7.973360E-01 +9.968777E+06 +2.130099E+13 +2.527000E+00 +1.452369E+00 0.000000E+00 0.000000E+00 -5.449659E+00 -6.908544E+00 -4.177000E+00 -3.780409E+00 -1.760000E-01 -6.584000E-03 -7.049310E-02 -1.047700E-03 -2.082153E-01 -9.154274E-03 -1.090026E-06 -2.590031E-13 -2.082153E-01 -9.154274E-03 +7.323996E+00 +1.221424E+01 +3.204000E+00 +2.092834E+00 +1.500000E-01 +4.600000E-03 +6.029165E-02 +7.387235E-04 +1.410668E-01 +4.414885E-03 +8.384625E-07 +1.602532E-13 +1.400911E-01 +4.332066E-03 +9.756761E-04 +9.519438E-07 +1.205833E+07 +2.954894E+13 +3.204000E+00 +2.092834E+00 +3.194266E-05 +1.020333E-09 +9.309783E+00 +1.769870E+01 +3.463000E+00 +2.477679E+00 +1.670000E-01 +5.837000E-03 +6.829328E-02 +9.882225E-04 +1.758063E-01 +6.470636E-03 +9.887100E-07 +2.199856E-13 +1.737856E-01 +6.307226E-03 +2.020620E-03 +2.041459E-06 +1.365866E+07 +3.952890E+13 +3.463000E+00 +2.477679E+00 +4.276023E-04 +1.081885E-07 +1.003961E+01 +2.083120E+01 +2.970000E-01 +4.491300E-02 +1.500000E-02 +9.100000E-05 +4.215863E-03 +6.275840E-06 +6.040786E-03 +1.401662E-05 +2.142282E-08 +4.361920E-16 +6.040786E-03 +1.401662E-05 0.000000E+00 0.000000E+00 -1.409862E+07 -4.190799E+13 -4.177000E+00 -3.780409E+00 +8.431726E+05 +2.510336E+11 +2.970000E-01 +4.491300E-02 0.000000E+00 0.000000E+00 -1.213785E+01 -3.197979E+01 -2.287000E+00 -1.059809E+00 -1.040000E-01 -2.254000E-03 -4.025632E-02 -3.309459E-04 -9.479325E-02 -1.956154E-03 -4.705869E-07 -4.509695E-14 -9.479325E-02 -1.956154E-03 +8.785109E-01 +3.967096E-01 +1.250000E-01 +5.357000E-03 +2.000000E-03 +2.000000E-06 +4.888503E-04 +1.194873E-07 +2.028292E-03 +2.059943E-06 +8.582314E-09 +7.099216E-17 +2.028292E-03 +2.059943E-06 0.000000E+00 0.000000E+00 -8.051265E+06 -1.323783E+13 -2.287000E+00 -1.059809E+00 +9.777007E+04 +4.779493E+09 +1.250000E-01 +5.357000E-03 0.000000E+00 0.000000E+00 -6.680550E+00 -9.051488E+00 -6.398000E+00 -8.323220E+00 -2.580000E-01 -1.356600E-02 -1.070205E-01 -2.345401E-03 -2.825180E-01 -1.658268E-02 -1.510574E-06 -5.135513E-13 -2.805357E-01 -1.633928E-02 -1.982273E-03 -1.965559E-06 -2.140411E+07 -9.381603E+13 -6.398000E+00 -8.323220E+00 -6.001927E-04 -1.801940E-07 -1.863566E+01 -7.066273E+01 -1.167000E+00 -4.778410E-01 -5.100000E-02 -9.290000E-04 -1.851002E-02 -1.273765E-04 -3.405873E-02 -6.277248E-04 -1.688115E-07 -1.480555E-14 -3.195431E-02 -5.302962E-04 -2.104418E-03 -4.428574E-06 -3.702005E+06 -5.095061E+12 -1.167000E+00 -4.778410E-01 -3.530361E-04 -1.246345E-07 -3.428588E+00 -4.115657E+00 -3.630000E+00 -2.765806E+00 -1.490000E-01 -4.587000E-03 -5.894825E-02 -7.367371E-04 -1.434581E-01 -4.305327E-03 -7.603618E-07 -1.250071E-13 -1.414758E-01 -4.212618E-03 -1.982273E-03 -1.965559E-06 -1.178965E+07 -2.946948E+13 -3.630000E+00 -2.765806E+00 -4.160428E-04 -1.012741E-07 -1.059988E+01 -2.359174E+01 +3.698633E-01 +4.679347E-02 tally 2: -5.033991E-01 -5.701830E-02 -2.304219E-02 -1.162005E-04 -9.376617E-03 -1.933443E-05 -2.344154E-02 -1.208402E-04 -1.277674E-07 -3.888071E-15 -2.329292E-02 -1.193128E-04 -1.486195E-04 -4.857250E-09 -1.875323E+06 -7.733771E+11 -5.220000E-01 -5.995400E-02 -6.963583E-05 -1.066362E-09 -1.463809E+00 -4.840945E-01 -2.621546E+00 -1.396717E+00 -1.276380E-01 -3.311549E-03 -5.565805E-02 -6.598224E-04 -1.391451E-01 -4.123890E-03 -8.331879E-07 -1.660597E-13 -1.382629E-01 -4.071765E-03 -8.821806E-04 -1.657624E-07 -1.113161E+07 -2.639289E+13 -2.581000E+00 -1.357455E+00 -4.133468E-04 -3.639153E-08 -7.576783E+00 -1.169599E+01 -2.230626E+00 -1.033217E+00 -1.065165E-01 -2.416670E-03 -4.549248E-02 -4.740035E-04 -1.137312E-01 -2.962522E-03 -6.630810E-07 -1.170893E-13 -1.130101E-01 -2.925076E-03 -7.210562E-04 -1.190805E-07 -9.098495E+06 -1.896014E+13 -2.202000E+00 -1.007194E+00 -3.378518E-04 -2.614296E-08 -6.459596E+00 -8.662758E+00 -5.565395E-01 -7.242839E-02 -2.955239E-02 -1.840142E-04 -1.400990E-02 -4.103227E-05 -3.502476E-02 -2.564517E-04 -2.308081E-07 -1.205491E-14 -3.480270E-02 -2.532102E-04 -2.220571E-04 -1.030824E-08 -2.801981E+06 -1.641291E+12 -6.090000E-01 -8.636300E-02 -1.040451E-04 -2.263074E-09 -1.593637E+00 -6.040566E-01 -1.817267E+00 -7.710225E-01 -7.367627E-02 -1.267666E-03 -2.535616E-02 -1.551036E-04 -6.339039E-02 -9.693976E-04 -2.524798E-07 -1.896478E-14 -6.298850E-02 -9.571446E-04 -4.018954E-04 -3.896557E-08 -5.071232E+06 -6.204145E+12 -1.881000E+00 -8.206930E-01 -1.883086E-04 -8.554511E-09 -5.341905E+00 -6.666854E+00 -4.106914E+00 -3.704316E+00 -1.888617E-01 -7.777635E-03 -7.727973E-02 -1.309080E-03 -1.931993E-01 -8.181751E-03 -1.061590E-06 -2.554724E-13 -1.919744E-01 -8.078335E-03 -1.224884E-03 -3.288708E-07 -1.545595E+07 -5.236321E+13 -4.223000E+00 -3.850821E+00 -5.739211E-04 -7.220038E-08 -1.193698E+01 -3.133321E+01 -2.346339E+00 -1.119793E+00 -1.017476E-01 -2.080323E-03 -3.865443E-02 -3.024337E-04 -9.663608E-02 -1.890211E-03 -4.714003E-07 -4.853805E-14 -9.602340E-02 -1.866319E-03 -6.126731E-04 -7.597824E-08 -7.730886E+06 -1.209735E+13 -2.338000E+00 -1.106368E+00 -2.870687E-04 -1.668028E-08 -6.857029E+00 -9.581045E+00 -6.446883E+00 -8.447751E+00 -2.867793E-01 -1.670093E-02 -1.126541E-01 -2.611201E-03 -2.816352E-01 -1.632001E-02 -1.453669E-06 -4.585416E-13 -2.798496E-01 -1.611372E-02 -1.785568E-03 -6.559933E-07 -2.253081E+07 -1.044480E+14 -6.454000E+00 -8.471478E+00 -8.366302E-04 -1.440169E-07 -1.879692E+01 -7.185693E+01 -1.219419E+00 -5.127750E-01 -4.857020E-02 -8.389250E-04 -1.623897E-02 -1.008738E-04 -4.059741E-02 -6.304611E-04 -1.503579E-07 -1.146797E-14 -4.034003E-02 -6.224921E-04 -2.573878E-04 -2.534179E-08 -3.247793E+06 -4.034951E+12 -1.199000E+00 -4.975810E-01 -1.205994E-04 -5.563543E-09 -3.589772E+00 -4.434695E+00 -3.623361E+00 -2.780040E+00 -1.560708E-01 -5.162316E-03 -5.875078E-02 -7.419979E-04 -1.468770E-01 -4.637487E-03 -7.048177E-07 -1.136014E-13 -1.459458E-01 -4.578870E-03 -9.312005E-04 -1.864068E-07 -1.175016E+07 -2.967992E+13 -3.668000E+00 -2.824270E+00 -4.363151E-04 -4.092380E-08 -1.059543E+01 -2.377944E+01 +1.353006E+00 +4.298474E-01 +6.067126E-02 +9.182923E-04 +2.407597E-02 +1.589874E-04 +6.018994E-02 +9.936715E-04 +3.157310E-07 +3.268202E-14 +5.980833E-02 +9.811116E-04 +3.816044E-04 +3.994127E-08 +4.815195E+06 +6.359497E+12 +1.373000E+00 +4.448330E-01 +1.788012E-04 +8.768717E-09 +3.941968E+00 +3.631126E+00 +2.806910E+00 +1.600166E+00 +1.295488E-01 +3.449533E-03 +5.323702E-02 +5.945274E-04 +1.330925E-01 +3.715796E-03 +7.358638E-07 +1.182977E-13 +1.322487E-01 +3.668829E-03 +8.438073E-04 +1.493588E-07 +1.064740E+07 +2.378109E+13 +2.753000E+00 +1.542179E+00 +3.953669E-04 +3.279028E-08 +8.155605E+00 +1.349706E+01 +2.869647E+00 +1.739405E+00 +1.278179E-01 +3.407189E-03 +5.029332E-02 +5.252401E-04 +1.257333E-01 +3.282751E-03 +6.507109E-07 +8.979533E-14 +1.249362E-01 +3.241257E-03 +7.971497E-04 +1.319523E-07 +1.005866E+07 +2.100960E+13 +2.829000E+00 +1.702143E+00 +3.735055E-04 +2.896884E-08 +8.365907E+00 +1.480669E+01 +3.141043E+00 +1.981851E+00 +1.526263E-01 +4.699686E-03 +6.641498E-02 +9.211853E-04 +1.660374E-01 +5.757408E-03 +9.915981E-07 +2.229928E-13 +1.649848E-01 +5.684636E-03 +1.052678E-03 +2.314228E-07 +1.328300E+07 +3.684741E+13 +3.246000E+00 +2.132054E+00 +4.932336E-04 +5.080661E-08 +9.080077E+00 +1.658064E+01 +3.682383E+00 +2.808072E+00 +1.593265E-01 +5.346789E-03 +6.034523E-02 +7.901305E-04 +1.508631E-01 +4.938316E-03 +7.319663E-07 +1.246559E-13 +1.499066E-01 +4.875896E-03 +9.564725E-04 +1.984988E-07 +1.206905E+07 +3.160522E+13 +3.759000E+00 +2.944479E+00 +4.481564E-04 +4.357848E-08 +1.076370E+01 +2.396100E+01 +2.634850E+00 +1.584334E+00 +1.218122E-01 +3.391010E-03 +5.015643E-02 +5.871038E-04 +1.253911E-01 +3.669399E-03 +6.952485E-07 +1.202338E-13 +1.245961E-01 +3.623018E-03 +7.949798E-04 +1.474939E-07 +1.003129E+07 +2.348415E+13 +2.577000E+00 +1.509201E+00 +3.724888E-04 +3.238084E-08 +7.654439E+00 +1.338000E+01 +3.192584E+00 +2.071165E+00 +1.491327E-01 +4.485370E-03 +6.214556E-02 +7.933462E-04 +1.553639E-01 +4.958414E-03 +8.761442E-07 +1.691919E-13 +1.543789E-01 +4.895740E-03 +9.850078E-04 +1.993067E-07 +1.242911E+07 +3.173385E+13 +3.266000E+00 +2.172442E+00 +4.615266E-04 +4.375584E-08 +9.265396E+00 +1.747782E+01 +3.402213E+00 +2.415762E+00 +1.592235E-01 +5.219460E-03 +6.649290E-02 +9.066793E-04 +1.662323E-01 +5.666746E-03 +9.402303E-07 +1.840541E-13 +1.651783E-01 +5.595119E-03 +1.053913E-03 +2.277785E-07 +1.329858E+07 +3.626717E+13 +3.485000E+00 +2.510947E+00 +4.938123E-04 +5.000655E-08 +9.871966E+00 +2.037665E+01 +3.110378E-01 +5.227746E-02 +1.171121E-02 +6.542918E-05 +3.536640E-03 +5.149982E-06 +8.841599E-03 +3.218739E-05 +2.347065E-08 +5.243075E-16 +8.785544E-03 +3.178055E-05 +5.605578E-05 +1.293793E-09 +7.073280E+05 +2.059993E+11 +3.000000E-01 +4.514200E-02 +2.626500E-05 +2.840396E-10 +9.197485E-01 +4.619575E-01 +1.267544E-01 +5.491246E-03 +4.806410E-03 +8.161899E-06 +1.471497E-03 +8.779657E-07 +3.678743E-03 +5.487286E-06 +1.030812E-08 +1.028225E-16 +3.655420E-03 +5.417928E-06 +2.332325E-05 +2.205650E-10 +2.942995E+05 +3.511863E+10 +1.300000E-01 +5.822000E-03 +1.092814E-05 +4.842290E-11 +3.746117E-01 +4.790053E-02 tally 3: -1.092010E+02 -2.386227E+03 -4.975000E+00 -4.950147E+00 -2.009472E+00 -8.076733E-01 -5.000649E+00 -5.012321E+00 -2.728992E-05 -1.491241E-10 -4.964474E+00 -4.939215E+00 -3.617555E-02 -2.875519E-04 -4.018944E+08 -3.230693E+16 -1.092010E+02 -2.386227E+03 -1.333979E-02 -5.019969E-05 -3.176576E+02 -2.019260E+04 -1.042260E+02 -2.173864E+03 -1.042260E+02 -2.173864E+03 +1.098420E+02 +2.414277E+03 +4.993000E+00 +4.986021E+00 +2.023763E+00 +8.192234E-01 +5.037812E+00 +5.086734E+00 +2.745346E-05 +1.509092E-10 +5.002505E+00 +5.014944E+00 +3.530702E-02 +2.695026E-04 +4.047525E+08 +3.276894E+16 +1.098420E+02 +2.414277E+03 +1.059695E-02 +2.782849E-05 +3.195213E+02 +2.042961E+04 +1.048490E+02 +2.199887E+03 +1.048490E+02 +2.199887E+03 tally 4: -1.092010E+02 -2.386227E+03 -4.979068E+00 -4.959690E+00 -2.016700E+00 -8.137138E-01 -5.041749E+00 -5.085712E+00 -5.020635E-05 -5.047241E-10 -5.009785E+00 -5.021429E+00 -3.196471E-02 -2.044235E-04 -4.033399E+08 -3.254855E+16 -1.092010E+02 -2.386227E+03 -1.497710E-02 -4.487918E-05 -3.176576E+02 -2.019260E+04 +1.098420E+02 +2.414277E+03 +5.008447E+00 +5.018748E+00 +2.028674E+00 +8.234818E-01 +5.071684E+00 +5.146761E+00 +5.050718E-05 +5.107669E-10 +5.039530E+00 +5.081707E+00 +3.215450E-02 +2.068774E-04 +4.057347E+08 +3.293927E+16 +1.098420E+02 +2.414277E+03 +1.506603E-02 +4.541792E-05 +3.195213E+02 +2.042961E+04 tally 5: -1.097121E+02 -2.408636E+03 -5.009145E+00 -5.019563E+00 -2.032191E+00 -8.264420E-01 -5.080477E+00 -5.165263E+00 -2.756641E-05 -1.523527E-10 -5.048267E+00 -5.099975E+00 -3.221025E-02 -2.076211E-04 -4.064382E+08 -3.305768E+16 -1.093810E+02 -2.394075E+03 -1.509215E-02 -4.558119E-05 -3.191033E+02 -2.037736E+04 +1.103689E+02 +2.437562E+03 +5.035611E+00 +5.073005E+00 +2.041209E+00 +8.337913E-01 +5.103022E+00 +5.211196E+00 +2.765405E-05 +1.532759E-10 +5.070669E+00 +5.145327E+00 +3.235318E-02 +2.094674E-04 +4.082417E+08 +3.335165E+16 +1.098580E+02 +2.414983E+03 +1.515912E-02 +4.598653E-05 +3.210351E+02 +2.062463E+04 tally 6: -1.042260E+02 -2.173864E+03 -1.042260E+02 -2.173864E+03 -5.000649E+00 -5.012321E+00 +1.048490E+02 +2.199887E+03 +1.048490E+02 +2.199887E+03 +5.037812E+00 +5.086734E+00 tally 7: -6.507000E+00 -8.478423E+00 -1.444000E+00 -4.172780E-01 -1.146407E+00 -2.630079E-01 -2.867025E+00 -1.647980E+00 -2.707153E-05 -1.467503E-10 -2.848880E+00 -1.627146E+00 -1.814469E-02 -6.685238E-05 -2.292814E+08 -1.052031E+16 -6.507000E+00 -8.478423E+00 -9.467712E-03 -2.396878E-05 -1.191147E+01 -2.841087E+01 -5.063000E+00 -5.136983E+00 -5.063000E+00 -5.136983E+00 -1.026940E+02 -2.110535E+03 +6.546000E+00 +8.579894E+00 +1.462000E+00 +4.278220E-01 +1.160697E+00 +2.696537E-01 +2.879845E+00 +1.663297E+00 +2.723379E-05 +1.485067E-10 +2.862628E+00 +1.643479E+00 +1.721726E-02 +6.055382E-05 +2.321395E+08 +1.078615E+16 +6.546000E+00 +8.579894E+00 +6.709978E-03 +1.387848E-05 +1.198287E+01 +2.875089E+01 +5.084000E+00 +5.178800E+00 +5.084000E+00 +5.178800E+00 +1.032960E+02 +2.135240E+03 3.531000E+00 -2.493861E+00 +2.493943E+00 8.630652E-01 -1.489924E-01 -2.133624E+00 -9.150435E-01 -2.183901E-07 -9.544829E-15 -2.115593E+00 -8.991467E-01 -1.803087E-02 -8.677353E-05 +1.489973E-01 +2.157967E+00 +9.345420E-01 +2.196703E-07 +9.656558E-15 +2.139877E+00 +9.185178E-01 +1.808977E-02 +8.744581E-05 1.726130E+08 -5.959695E+15 -1.026940E+02 -2.110535E+03 -3.872081E-03 -5.919692E-06 -3.057461E+02 -1.870786E+04 -9.916300E+01 -1.968002E+03 -9.916300E+01 -1.968002E+03 +5.959891E+15 +1.032960E+02 +2.135240E+03 +3.886968E-03 +5.976458E-06 +3.075384E+02 +1.892685E+04 +9.976500E+01 +1.991860E+03 +9.976500E+01 +1.991860E+03 tally 8: -6.507000E+00 -8.478423E+00 -1.455344E+00 -4.241161E-01 -1.155413E+00 -2.673178E-01 -2.888532E+00 -1.670737E+00 -4.955615E-05 -4.917547E-10 -2.870219E+00 -1.649619E+00 -1.831331E-02 -6.715634E-05 -2.310826E+08 -1.069271E+16 -6.507000E+00 -8.478423E+00 -8.580723E-03 -1.474352E-05 -1.191147E+01 -2.841087E+01 -1.026940E+02 -2.110535E+03 -3.523724E+00 -2.484884E+00 -8.612868E-01 -1.484560E-01 -2.153217E+00 -9.278503E-01 -6.502027E-07 -8.460574E-14 -2.139566E+00 -9.161225E-01 -1.365140E-02 -3.729555E-05 -1.722574E+08 -5.938242E+15 -1.026940E+02 -2.110535E+03 -6.396382E-03 -8.187874E-06 -3.057461E+02 -1.870786E+04 +6.546000E+00 +8.579894E+00 +1.464067E+00 +4.291919E-01 +1.162338E+00 +2.705171E-01 +2.905845E+00 +1.690732E+00 +4.985316E-05 +4.976401E-10 +2.887422E+00 +1.669362E+00 +1.842307E-02 +6.796008E-05 +2.324676E+08 +1.082069E+16 +6.546000E+00 +8.579894E+00 +8.632151E-03 +1.491997E-05 +1.198287E+01 +2.875089E+01 +1.032960E+02 +2.135240E+03 +3.544380E+00 +2.513971E+00 +8.663357E-01 +1.501938E-01 +2.165839E+00 +9.387115E-01 +6.540142E-07 +8.559612E-14 +2.152108E+00 +9.268463E-01 +1.373143E-02 +3.773212E-05 +1.732671E+08 +6.007753E+15 +1.032960E+02 +2.135240E+03 +6.433878E-03 +8.283719E-06 +3.075384E+02 +1.892685E+04 tally 9: -6.573230E+00 -8.663027E+00 -1.470157E+00 -4.333505E-01 -1.167173E+00 -2.731383E-01 -2.917933E+00 -1.707114E+00 -2.734707E-05 -1.499456E-10 -2.899433E+00 -1.685536E+00 -1.849971E-02 -6.861856E-05 -2.334346E+08 -1.092553E+16 -6.518000E+00 -8.507644E+00 -8.668060E-03 -1.506454E-05 -1.203271E+01 -2.902947E+01 -1.031389E+02 -2.128993E+03 -3.538988E+00 -2.506616E+00 -8.650177E-01 -1.497544E-01 -2.162544E+00 -9.359650E-01 -2.193361E-07 -9.628305E-15 -2.148834E+00 -9.241346E-01 -1.371054E-02 -3.762172E-05 -1.730035E+08 -5.990176E+15 -1.028630E+02 -2.117467E+03 -6.424090E-03 -8.259483E-06 -3.070706E+02 -1.887148E+04 +6.593971E+00 +8.715030E+00 +1.474796E+00 +4.359519E-01 +1.170856E+00 +2.747779E-01 +2.927140E+00 +1.717362E+00 +2.743336E-05 +1.508457E-10 +2.908582E+00 +1.695655E+00 +1.855808E-02 +6.903047E-05 +2.341712E+08 +1.099112E+16 +6.547000E+00 +8.582573E+00 +8.695410E-03 +1.515497E-05 +1.207068E+01 +2.920373E+01 +1.037750E+02 +2.155274E+03 +3.560815E+00 +2.537559E+00 +8.703528E-01 +1.516031E-01 +2.175882E+00 +9.475192E-01 +2.206889E-07 +9.747163E-15 +2.162087E+00 +9.355427E-01 +1.379510E-02 +3.808615E-05 +1.740706E+08 +6.064123E+15 +1.033110E+02 +2.135863E+03 +6.463712E-03 +8.361443E-06 +3.089644E+02 +1.910444E+04 tally 10: -5.063000E+00 -5.136983E+00 -5.063000E+00 -5.136983E+00 +5.084000E+00 +5.178800E+00 +5.084000E+00 +5.178800E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.867025E+00 -1.647980E+00 -1.445000E+00 -4.178610E-01 -1.445000E+00 -4.178610E-01 +2.879845E+00 +1.663297E+00 +1.463000E+00 +4.284330E-01 +1.463000E+00 +4.284330E-01 0.000000E+00 0.000000E+00 -9.771800E+01 -1.911083E+03 -9.771800E+01 -1.911083E+03 -2.133624E+00 -9.150435E-01 +9.830200E+01 +1.933884E+03 +9.830200E+01 +1.933884E+03 +2.157967E+00 +9.345420E-01 tally 11: -5.220000E-01 -5.995400E-02 -1.400000E-02 -4.000000E-05 -6.718865E-03 -9.371695E-06 -1.106435E-02 -3.119729E-05 -1.216992E-07 -3.699412E-15 -1.106435E-02 -3.119729E-05 +1.342000E+00 +4.291640E-01 +7.000000E-02 +1.158000E-03 +2.919844E-02 +1.953371E-04 +5.372246E-02 +6.734832E-04 +2.939310E-07 +2.375686E-14 +5.372246E-02 +6.734832E-04 0.000000E+00 0.000000E+00 -1.343773E+06 -3.748678E+11 -5.220000E-01 -5.995400E-02 +5.839688E+06 +7.813485E+12 +1.342000E+00 +4.291640E-01 0.000000E+00 0.000000E+00 -2.564000E+00 -1.338762E+00 -1.160000E-01 -2.738000E-03 -4.593685E-02 -4.275719E-04 -1.360763E-01 -3.951569E-03 -8.079937E-07 -1.577355E-13 -1.350645E-01 -3.872739E-03 -1.011813E-03 -1.023765E-06 -9.187371E+06 -1.710288E+13 -2.564000E+00 -1.338762E+00 -8.595248E-04 -7.387829E-07 -2.184000E+00 -9.895940E-01 -1.080000E-01 -2.394000E-03 -4.782785E-02 -4.787428E-04 -1.140806E-01 -2.886440E-03 -6.242229E-07 -9.307161E-14 -1.130687E-01 -2.811706E-03 -1.011813E-03 -1.023765E-06 -9.565570E+06 -1.914971E+13 -2.184000E+00 -9.895940E-01 -3.312574E-05 -1.097314E-09 -5.970000E-01 -8.325100E-02 -3.500000E-02 -3.150000E-04 -1.514871E-02 -5.131352E-05 -3.795718E-02 -3.631435E-04 -2.299730E-07 -1.295603E-14 -3.795718E-02 -3.631435E-04 +2.701000E+00 +1.486587E+00 +1.340000E-01 +3.598000E-03 +5.583136E-02 +6.266530E-04 +1.267275E-01 +3.349463E-03 +7.209619E-07 +1.153253E-13 +1.267275E-01 +3.349463E-03 0.000000E+00 0.000000E+00 -3.029741E+06 -2.052541E+12 -5.970000E-01 -8.325100E-02 +1.116627E+07 +2.506612E+13 +2.701000E+00 +1.486587E+00 0.000000E+00 0.000000E+00 -1.852000E+00 -7.973360E-01 -7.900000E-02 -1.689000E-03 -2.755187E-02 -2.091740E-04 -5.453423E-02 -7.484037E-04 -2.368001E-07 -1.753710E-14 -5.453423E-02 -7.484037E-04 +2.791000E+00 +1.658877E+00 +1.240000E-01 +3.282000E-03 +5.173865E-02 +5.560435E-04 +1.292971E-01 +3.436301E-03 +6.920456E-07 +9.917496E-14 +1.263311E-01 +3.290664E-03 +2.965960E-03 +4.837204E-06 +1.034773E+07 +2.224174E+13 +2.791000E+00 +1.658877E+00 +7.133747E-04 +3.640977E-07 +3.169000E+00 +2.031747E+00 +1.620000E-01 +5.364000E-03 +6.707115E-02 +9.171975E-04 +1.648345E-01 +5.547084E-03 +1.008876E-06 +2.201766E-13 +1.638199E-01 +5.463700E-03 +1.014608E-03 +1.029429E-06 +1.341423E+07 +3.668790E+13 +3.169000E+00 +2.031747E+00 +8.618993E-04 +7.428703E-07 +3.660000E+00 +2.796494E+00 +1.580000E-01 +5.158000E-03 +6.719242E-02 +9.422093E-04 +1.591500E-01 +5.615224E-03 +8.020080E-07 +1.480166E-13 +1.581743E-01 +5.540021E-03 +9.756761E-04 +9.519438E-07 +1.343848E+07 +3.768837E+13 +3.660000E+00 +2.796494E+00 +2.954152E-04 +8.727014E-08 +2.527000E+00 +1.452369E+00 +1.140000E-01 +2.834000E-03 +4.984389E-02 +5.325247E-04 +1.111356E-01 +2.793586E-03 +7.289084E-07 +1.302125E-13 +1.111356E-01 +2.793586E-03 0.000000E+00 0.000000E+00 -5.510374E+06 -8.366961E+12 -1.852000E+00 -7.973360E-01 +9.968777E+06 +2.130099E+13 +2.527000E+00 +1.452369E+00 0.000000E+00 0.000000E+00 -4.177000E+00 -3.780409E+00 -1.760000E-01 -6.584000E-03 -7.049310E-02 -1.047700E-03 -2.082153E-01 -9.154274E-03 -1.090026E-06 -2.590031E-13 -2.082153E-01 -9.154274E-03 +3.204000E+00 +2.092834E+00 +1.500000E-01 +4.600000E-03 +6.029165E-02 +7.387235E-04 +1.410668E-01 +4.414885E-03 +8.384625E-07 +1.602532E-13 +1.400911E-01 +4.332066E-03 +9.756761E-04 +9.519438E-07 +1.205833E+07 +2.954894E+13 +3.204000E+00 +2.092834E+00 +3.194266E-05 +1.020333E-09 +3.463000E+00 +2.477679E+00 +1.670000E-01 +5.837000E-03 +6.829328E-02 +9.882225E-04 +1.758063E-01 +6.470636E-03 +9.887100E-07 +2.199856E-13 +1.737856E-01 +6.307226E-03 +2.020620E-03 +2.041459E-06 +1.365866E+07 +3.952890E+13 +3.463000E+00 +2.477679E+00 +4.276023E-04 +1.081885E-07 +2.970000E-01 +4.491300E-02 +1.500000E-02 +9.100000E-05 +4.215863E-03 +6.275840E-06 +6.040786E-03 +1.401662E-05 +2.142282E-08 +4.361920E-16 +6.040786E-03 +1.401662E-05 0.000000E+00 0.000000E+00 -1.409862E+07 -4.190799E+13 -4.177000E+00 -3.780409E+00 +8.431726E+05 +2.510336E+11 +2.970000E-01 +4.491300E-02 0.000000E+00 0.000000E+00 -2.287000E+00 -1.059809E+00 -1.040000E-01 -2.254000E-03 -4.025632E-02 -3.309459E-04 -9.479325E-02 -1.956154E-03 -4.705869E-07 -4.509695E-14 -9.479325E-02 -1.956154E-03 +1.250000E-01 +5.357000E-03 +2.000000E-03 +2.000000E-06 +4.888503E-04 +1.194873E-07 +2.028292E-03 +2.059943E-06 +8.582314E-09 +7.099216E-17 +2.028292E-03 +2.059943E-06 0.000000E+00 0.000000E+00 -8.051265E+06 -1.323783E+13 -2.287000E+00 -1.059809E+00 +9.777007E+04 +4.779493E+09 +1.250000E-01 +5.357000E-03 0.000000E+00 0.000000E+00 -6.398000E+00 -8.323220E+00 -2.580000E-01 -1.356600E-02 -1.070205E-01 -2.345401E-03 -2.825180E-01 -1.658268E-02 -1.510574E-06 -5.135513E-13 -2.805357E-01 -1.633928E-02 -1.982273E-03 -1.965559E-06 -2.140411E+07 -9.381603E+13 -6.398000E+00 -8.323220E+00 -6.001927E-04 -1.801940E-07 -1.167000E+00 -4.778410E-01 -5.100000E-02 -9.290000E-04 -1.851002E-02 -1.273765E-04 -3.405873E-02 -6.277248E-04 -1.688115E-07 -1.480555E-14 -3.195431E-02 -5.302962E-04 -2.104418E-03 -4.428574E-06 -3.702005E+06 -5.095061E+12 -1.167000E+00 -4.778410E-01 -3.530361E-04 -1.246345E-07 -3.630000E+00 -2.765806E+00 -1.490000E-01 -4.587000E-03 -5.894825E-02 -7.367371E-04 -1.434581E-01 -4.305327E-03 -7.603618E-07 -1.250071E-13 -1.414758E-01 -4.212618E-03 -1.982273E-03 -1.965559E-06 -1.178965E+07 -2.946948E+13 -3.630000E+00 -2.765806E+00 -4.160428E-04 -1.012741E-07 tally 12: -5.033991E-01 -5.701830E-02 -2.304219E-02 -1.162005E-04 -9.376617E-03 -1.933443E-05 -2.344154E-02 -1.208402E-04 -1.277674E-07 -3.888071E-15 -2.329292E-02 -1.193128E-04 -1.486195E-04 -4.857250E-09 -1.875323E+06 -7.733771E+11 -5.220000E-01 -5.995400E-02 -6.963583E-05 -1.066362E-09 -2.621546E+00 -1.396717E+00 -1.276380E-01 -3.311549E-03 -5.565805E-02 -6.598224E-04 -1.391451E-01 -4.123890E-03 -8.331879E-07 -1.660597E-13 -1.382629E-01 -4.071765E-03 -8.821806E-04 -1.657624E-07 -1.113161E+07 -2.639289E+13 -2.581000E+00 -1.357455E+00 -4.133468E-04 -3.639153E-08 -2.230626E+00 -1.033217E+00 -1.065165E-01 -2.416670E-03 -4.549248E-02 -4.740035E-04 -1.137312E-01 -2.962522E-03 -6.630810E-07 -1.170893E-13 -1.130101E-01 -2.925076E-03 -7.210562E-04 -1.190805E-07 -9.098495E+06 -1.896014E+13 -2.202000E+00 -1.007194E+00 -3.378518E-04 -2.614296E-08 -5.565395E-01 -7.242839E-02 -2.955239E-02 -1.840142E-04 -1.400990E-02 -4.103227E-05 -3.502476E-02 -2.564517E-04 -2.308081E-07 -1.205491E-14 -3.480270E-02 -2.532102E-04 -2.220571E-04 -1.030824E-08 -2.801981E+06 -1.641291E+12 -6.090000E-01 -8.636300E-02 -1.040451E-04 -2.263074E-09 -1.817267E+00 -7.710225E-01 -7.367627E-02 -1.267666E-03 -2.535616E-02 -1.551036E-04 -6.339039E-02 -9.693976E-04 -2.524798E-07 -1.896478E-14 -6.298850E-02 -9.571446E-04 -4.018954E-04 -3.896557E-08 -5.071232E+06 -6.204145E+12 -1.881000E+00 -8.206930E-01 -1.883086E-04 -8.554511E-09 -4.106914E+00 -3.704316E+00 -1.888617E-01 -7.777635E-03 -7.727973E-02 -1.309080E-03 -1.931993E-01 -8.181751E-03 -1.061590E-06 -2.554724E-13 -1.919744E-01 -8.078335E-03 -1.224884E-03 -3.288708E-07 -1.545595E+07 -5.236321E+13 -4.223000E+00 -3.850821E+00 -5.739211E-04 -7.220038E-08 -2.346339E+00 -1.119793E+00 -1.017476E-01 -2.080323E-03 -3.865443E-02 -3.024337E-04 -9.663608E-02 -1.890211E-03 -4.714003E-07 -4.853805E-14 -9.602340E-02 -1.866319E-03 -6.126731E-04 -7.597824E-08 -7.730886E+06 -1.209735E+13 -2.338000E+00 -1.106368E+00 -2.870687E-04 -1.668028E-08 -6.446883E+00 -8.447751E+00 -2.867793E-01 -1.670093E-02 -1.126541E-01 -2.611201E-03 -2.816352E-01 -1.632001E-02 -1.453669E-06 -4.585416E-13 -2.798496E-01 -1.611372E-02 -1.785568E-03 -6.559933E-07 -2.253081E+07 -1.044480E+14 -6.454000E+00 -8.471478E+00 -8.366302E-04 -1.440169E-07 -1.219419E+00 -5.127750E-01 -4.857020E-02 -8.389250E-04 -1.623897E-02 -1.008738E-04 -4.059741E-02 -6.304611E-04 -1.503579E-07 -1.146797E-14 -4.034003E-02 -6.224921E-04 -2.573878E-04 -2.534179E-08 -3.247793E+06 -4.034951E+12 -1.199000E+00 -4.975810E-01 -1.205994E-04 -5.563543E-09 -3.623361E+00 -2.780040E+00 -1.560708E-01 -5.162316E-03 -5.875078E-02 -7.419979E-04 -1.468770E-01 -4.637487E-03 -7.048177E-07 -1.136014E-13 -1.459458E-01 -4.578870E-03 -9.312005E-04 -1.864068E-07 -1.175016E+07 -2.967992E+13 -3.668000E+00 -2.824270E+00 -4.363151E-04 -4.092380E-08 +1.353006E+00 +4.298474E-01 +6.067126E-02 +9.182923E-04 +2.407597E-02 +1.589874E-04 +6.018994E-02 +9.936715E-04 +3.157310E-07 +3.268202E-14 +5.980833E-02 +9.811116E-04 +3.816044E-04 +3.994127E-08 +4.815195E+06 +6.359497E+12 +1.373000E+00 +4.448330E-01 +1.788012E-04 +8.768717E-09 +2.806910E+00 +1.600166E+00 +1.295488E-01 +3.449533E-03 +5.323702E-02 +5.945274E-04 +1.330925E-01 +3.715796E-03 +7.358638E-07 +1.182977E-13 +1.322487E-01 +3.668829E-03 +8.438073E-04 +1.493588E-07 +1.064740E+07 +2.378109E+13 +2.753000E+00 +1.542179E+00 +3.953669E-04 +3.279028E-08 +2.869647E+00 +1.739405E+00 +1.278179E-01 +3.407189E-03 +5.029332E-02 +5.252401E-04 +1.257333E-01 +3.282751E-03 +6.507109E-07 +8.979533E-14 +1.249362E-01 +3.241257E-03 +7.971497E-04 +1.319523E-07 +1.005866E+07 +2.100960E+13 +2.829000E+00 +1.702143E+00 +3.735055E-04 +2.896884E-08 +3.141043E+00 +1.981851E+00 +1.526263E-01 +4.699686E-03 +6.641498E-02 +9.211853E-04 +1.660374E-01 +5.757408E-03 +9.915981E-07 +2.229928E-13 +1.649848E-01 +5.684636E-03 +1.052678E-03 +2.314228E-07 +1.328300E+07 +3.684741E+13 +3.246000E+00 +2.132054E+00 +4.932336E-04 +5.080661E-08 +3.682383E+00 +2.808072E+00 +1.593265E-01 +5.346789E-03 +6.034523E-02 +7.901305E-04 +1.508631E-01 +4.938316E-03 +7.319663E-07 +1.246559E-13 +1.499066E-01 +4.875896E-03 +9.564725E-04 +1.984988E-07 +1.206905E+07 +3.160522E+13 +3.759000E+00 +2.944479E+00 +4.481564E-04 +4.357848E-08 +2.634850E+00 +1.584334E+00 +1.218122E-01 +3.391010E-03 +5.015643E-02 +5.871038E-04 +1.253911E-01 +3.669399E-03 +6.952485E-07 +1.202338E-13 +1.245961E-01 +3.623018E-03 +7.949798E-04 +1.474939E-07 +1.003129E+07 +2.348415E+13 +2.577000E+00 +1.509201E+00 +3.724888E-04 +3.238084E-08 +3.192584E+00 +2.071165E+00 +1.491327E-01 +4.485370E-03 +6.214556E-02 +7.933462E-04 +1.553639E-01 +4.958414E-03 +8.761442E-07 +1.691919E-13 +1.543789E-01 +4.895740E-03 +9.850078E-04 +1.993067E-07 +1.242911E+07 +3.173385E+13 +3.266000E+00 +2.172442E+00 +4.615266E-04 +4.375584E-08 +3.402213E+00 +2.415762E+00 +1.592235E-01 +5.219460E-03 +6.649290E-02 +9.066793E-04 +1.662323E-01 +5.666746E-03 +9.402303E-07 +1.840541E-13 +1.651783E-01 +5.595119E-03 +1.053913E-03 +2.277785E-07 +1.329858E+07 +3.626717E+13 +3.485000E+00 +2.510947E+00 +4.938123E-04 +5.000655E-08 +3.110378E-01 +5.227746E-02 +1.171121E-02 +6.542918E-05 +3.536640E-03 +5.149982E-06 +8.841599E-03 +3.218739E-05 +2.347065E-08 +5.243075E-16 +8.785544E-03 +3.178055E-05 +5.605578E-05 +1.293793E-09 +7.073280E+05 +2.059993E+11 +3.000000E-01 +4.514200E-02 +2.626500E-05 +2.840396E-10 +1.267544E-01 +5.491246E-03 +4.806410E-03 +8.161899E-06 +1.471497E-03 +8.779657E-07 +3.678743E-03 +5.487286E-06 +1.030812E-08 +1.028225E-16 +3.655420E-03 +5.417928E-06 +2.332325E-05 +2.205650E-10 +2.942995E+05 +3.511863E+10 +1.300000E-01 +5.822000E-03 +1.092814E-05 +4.842290E-11 tally 13: -1.092010E+02 -2.386227E+03 -4.975000E+00 -4.950147E+00 -2.009472E+00 -8.076733E-01 -5.000649E+00 -5.012321E+00 -2.728992E-05 -1.491241E-10 -4.964474E+00 -4.939215E+00 -3.617555E-02 -2.875519E-04 -4.018944E+08 -3.230693E+16 -1.092010E+02 -2.386227E+03 -1.333979E-02 -5.019969E-05 -1.042260E+02 -2.173864E+03 -1.042260E+02 -2.173864E+03 +1.098420E+02 +2.414277E+03 +4.993000E+00 +4.986021E+00 +2.023763E+00 +8.192234E-01 +5.037812E+00 +5.086734E+00 +2.745346E-05 +1.509092E-10 +5.002505E+00 +5.014944E+00 +3.530702E-02 +2.695026E-04 +4.047525E+08 +3.276894E+16 +1.098420E+02 +2.414277E+03 +1.059695E-02 +2.782849E-05 +1.048490E+02 +2.199887E+03 +1.048490E+02 +2.199887E+03 tally 14: -1.092010E+02 -2.386227E+03 -4.979068E+00 -4.959690E+00 -2.016700E+00 -8.137138E-01 -5.041749E+00 -5.085712E+00 -5.020635E-05 -5.047241E-10 -5.009785E+00 -5.021429E+00 -3.196471E-02 -2.044235E-04 -4.033399E+08 -3.254855E+16 -1.092010E+02 -2.386227E+03 -1.497710E-02 -4.487918E-05 +1.098420E+02 +2.414277E+03 +5.008447E+00 +5.018748E+00 +2.028674E+00 +8.234818E-01 +5.071684E+00 +5.146761E+00 +5.050718E-05 +5.107669E-10 +5.039530E+00 +5.081707E+00 +3.215450E-02 +2.068774E-04 +4.057347E+08 +3.293927E+16 +1.098420E+02 +2.414277E+03 +1.506603E-02 +4.541792E-05 tally 15: -1.097121E+02 -2.408636E+03 -5.009145E+00 -5.019563E+00 -2.032191E+00 -8.264420E-01 -5.080477E+00 -5.165263E+00 -2.756641E-05 -1.523527E-10 -5.048267E+00 -5.099975E+00 -3.221025E-02 -2.076211E-04 -4.064382E+08 -3.305768E+16 -1.093810E+02 -2.394075E+03 -1.509215E-02 -4.558119E-05 +1.103689E+02 +2.437562E+03 +5.035611E+00 +5.073005E+00 +2.041209E+00 +8.337913E-01 +5.103022E+00 +5.211196E+00 +2.765405E-05 +1.532759E-10 +5.070669E+00 +5.145327E+00 +3.235318E-02 +2.094674E-04 +4.082417E+08 +3.335165E+16 +1.098580E+02 +2.414983E+03 +1.515912E-02 +4.598653E-05 tally 16: -1.042260E+02 -2.173864E+03 -1.042260E+02 -2.173864E+03 -5.000649E+00 -5.012321E+00 +1.048490E+02 +2.199887E+03 +1.048490E+02 +2.199887E+03 +5.037812E+00 +5.086734E+00 tally 17: -6.507000E+00 -8.478423E+00 -1.444000E+00 -4.172780E-01 -1.146407E+00 -2.630079E-01 -2.867025E+00 -1.647980E+00 -2.707153E-05 -1.467503E-10 -2.848880E+00 -1.627146E+00 -1.814469E-02 -6.685238E-05 -2.292814E+08 -1.052031E+16 -6.507000E+00 -8.478423E+00 -9.467712E-03 -2.396878E-05 -5.063000E+00 -5.136983E+00 -5.063000E+00 -5.136983E+00 -1.026940E+02 -2.110535E+03 +6.546000E+00 +8.579894E+00 +1.462000E+00 +4.278220E-01 +1.160697E+00 +2.696537E-01 +2.879845E+00 +1.663297E+00 +2.723379E-05 +1.485067E-10 +2.862628E+00 +1.643479E+00 +1.721726E-02 +6.055382E-05 +2.321395E+08 +1.078615E+16 +6.546000E+00 +8.579894E+00 +6.709978E-03 +1.387848E-05 +5.084000E+00 +5.178800E+00 +5.084000E+00 +5.178800E+00 +1.032960E+02 +2.135240E+03 3.531000E+00 -2.493861E+00 +2.493943E+00 8.630652E-01 -1.489924E-01 -2.133624E+00 -9.150435E-01 -2.183901E-07 -9.544829E-15 -2.115593E+00 -8.991467E-01 -1.803087E-02 -8.677353E-05 +1.489973E-01 +2.157967E+00 +9.345420E-01 +2.196703E-07 +9.656558E-15 +2.139877E+00 +9.185178E-01 +1.808977E-02 +8.744581E-05 1.726130E+08 -5.959695E+15 -1.026940E+02 -2.110535E+03 -3.872081E-03 -5.919692E-06 -9.916300E+01 -1.968002E+03 -9.916300E+01 -1.968002E+03 +5.959891E+15 +1.032960E+02 +2.135240E+03 +3.886968E-03 +5.976458E-06 +9.976500E+01 +1.991860E+03 +9.976500E+01 +1.991860E+03 tally 18: -6.507000E+00 -8.478423E+00 -1.455344E+00 -4.241161E-01 -1.155413E+00 -2.673178E-01 -2.888532E+00 -1.670737E+00 -4.955615E-05 -4.917547E-10 -2.870219E+00 -1.649619E+00 -1.831331E-02 -6.715634E-05 -2.310826E+08 -1.069271E+16 -6.507000E+00 -8.478423E+00 -8.580723E-03 -1.474352E-05 -1.026940E+02 -2.110535E+03 -3.523724E+00 -2.484884E+00 -8.612868E-01 -1.484560E-01 -2.153217E+00 -9.278503E-01 -6.502027E-07 -8.460574E-14 -2.139566E+00 -9.161225E-01 -1.365140E-02 -3.729555E-05 -1.722574E+08 -5.938242E+15 -1.026940E+02 -2.110535E+03 -6.396382E-03 -8.187874E-06 +6.546000E+00 +8.579894E+00 +1.464067E+00 +4.291919E-01 +1.162338E+00 +2.705171E-01 +2.905845E+00 +1.690732E+00 +4.985316E-05 +4.976401E-10 +2.887422E+00 +1.669362E+00 +1.842307E-02 +6.796008E-05 +2.324676E+08 +1.082069E+16 +6.546000E+00 +8.579894E+00 +8.632151E-03 +1.491997E-05 +1.032960E+02 +2.135240E+03 +3.544380E+00 +2.513971E+00 +8.663357E-01 +1.501938E-01 +2.165839E+00 +9.387115E-01 +6.540142E-07 +8.559612E-14 +2.152108E+00 +9.268463E-01 +1.373143E-02 +3.773212E-05 +1.732671E+08 +6.007753E+15 +1.032960E+02 +2.135240E+03 +6.433878E-03 +8.283719E-06 tally 19: -6.573230E+00 -8.663027E+00 -1.470157E+00 -4.333505E-01 -1.167173E+00 -2.731383E-01 -2.917933E+00 -1.707114E+00 -2.734707E-05 -1.499456E-10 -2.899433E+00 -1.685536E+00 -1.849971E-02 -6.861856E-05 -2.334346E+08 -1.092553E+16 -6.518000E+00 -8.507644E+00 -8.668060E-03 -1.506454E-05 -1.031389E+02 -2.128993E+03 -3.538988E+00 -2.506616E+00 -8.650177E-01 -1.497544E-01 -2.162544E+00 -9.359650E-01 -2.193361E-07 -9.628305E-15 -2.148834E+00 -9.241346E-01 -1.371054E-02 -3.762172E-05 -1.730035E+08 -5.990176E+15 -1.028630E+02 -2.117467E+03 -6.424090E-03 -8.259483E-06 +6.593971E+00 +8.715030E+00 +1.474796E+00 +4.359519E-01 +1.170856E+00 +2.747779E-01 +2.927140E+00 +1.717362E+00 +2.743336E-05 +1.508457E-10 +2.908582E+00 +1.695655E+00 +1.855808E-02 +6.903047E-05 +2.341712E+08 +1.099112E+16 +6.547000E+00 +8.582573E+00 +8.695410E-03 +1.515497E-05 +1.037750E+02 +2.155274E+03 +3.560815E+00 +2.537559E+00 +8.703528E-01 +1.516031E-01 +2.175882E+00 +9.475192E-01 +2.206889E-07 +9.747163E-15 +2.162087E+00 +9.355427E-01 +1.379510E-02 +3.808615E-05 +1.740706E+08 +6.064123E+15 +1.033110E+02 +2.135863E+03 +6.463712E-03 +8.361443E-06 tally 20: -5.063000E+00 -5.136983E+00 -5.063000E+00 -5.136983E+00 +5.084000E+00 +5.178800E+00 +5.084000E+00 +5.178800E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.867025E+00 -1.647980E+00 -1.445000E+00 -4.178610E-01 -1.445000E+00 -4.178610E-01 +2.879845E+00 +1.663297E+00 +1.463000E+00 +4.284330E-01 +1.463000E+00 +4.284330E-01 0.000000E+00 0.000000E+00 -9.771800E+01 -1.911083E+03 -9.771800E+01 -1.911083E+03 -2.133624E+00 -9.150435E-01 +9.830200E+01 +1.933884E+03 +9.830200E+01 +1.933884E+03 +2.157967E+00 +9.345420E-01 diff --git a/tests/regression_tests/mg_temperature/results_true.dat b/tests/regression_tests/mg_temperature/results_true.dat index 19364e1d965..6de4c6bb13e 100644 --- a/tests/regression_tests/mg_temperature/results_true.dat +++ b/tests/regression_tests/mg_temperature/results_true.dat @@ -1,40 +1,40 @@ micro, method: nearest, t: 300.0, k-combined: -1.439563E+00 4.526076E-04 +1.439913E+00 4.285638E-04 kanalyt 1.440410E+00 micro, method: nearest, t: 600.0, k-combined: -1.409389E+00 4.684481E-04 +1.410750E+00 4.829834E-04 kanalyt 1.410164E+00 micro, method: nearest, t: 900.0, k-combined: -1.407593E+00 4.410387E-04 +1.408232E+00 4.946310E-04 kanalyt 1.407830E+00 micro, method: interpolation, t: 520.0, k-combined: -1.418259E+00 4.242856E-04 +1.418877E+00 4.651822E-04 kanalyt 1.418514E+00 micro, method: interpolation, t: 600.0, k-combined: -1.409389E+00 4.684481E-04 +1.410750E+00 4.829834E-04 kanalyt 1.410164E+00 macro, method: nearest, t: 300.0, k-combined: -1.439563E+00 4.526076E-04 +1.439913E+00 4.285638E-04 kanalyt 1.440410E+00 macro, method: nearest, t: 600.0, k-combined: -1.409389E+00 4.684481E-04 +1.410750E+00 4.829834E-04 kanalyt 1.410164E+00 macro, method: nearest, t: 900.0, k-combined: -1.407593E+00 4.410387E-04 +1.408232E+00 4.946310E-04 kanalyt 1.407830E+00 macro, method: interpolation, t: 520.0, k-combined: -1.418259E+00 4.242856E-04 +1.418877E+00 4.651822E-04 kanalyt 1.418514E+00 macro, method: interpolation, t: 600, k-combined: -1.409389E+00 4.684481E-04 +1.410750E+00 4.829834E-04 kanalyt 1.410164E+00 diff --git a/tests/regression_tests/mg_temperature_multi/results_true.dat b/tests/regression_tests/mg_temperature_multi/results_true.dat index 80c2f562250..3e2f990c8e0 100644 --- a/tests/regression_tests/mg_temperature_multi/results_true.dat +++ b/tests/regression_tests/mg_temperature_multi/results_true.dat @@ -1,8 +1,8 @@ k-combined: -1.337115E+00 7.221249E-03 +1.309371E+00 6.765039E-03 tally 1: -2.549066E+01 -1.299987E+02 +2.532303E+01 +1.282689E+02 tally 2: -9.276778E+01 -1.721791E+03 +9.336894E+01 +1.743765E+03 diff --git a/tests/regression_tests/mgxs_library_ce_to_mg/results_true.dat b/tests/regression_tests/mgxs_library_ce_to_mg/results_true.dat index d9565953458..7ce1063146a 100644 --- a/tests/regression_tests/mgxs_library_ce_to_mg/results_true.dat +++ b/tests/regression_tests/mgxs_library_ce_to_mg/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.158563E+00 3.354681E-02 +1.152065E+00 2.768158E-02 diff --git a/tests/regression_tests/mgxs_library_ce_to_mg/test.py b/tests/regression_tests/mgxs_library_ce_to_mg/test.py index 48a715997ae..075167f5884 100644 --- a/tests/regression_tests/mgxs_library_ce_to_mg/test.py +++ b/tests/regression_tests/mgxs_library_ce_to_mg/test.py @@ -28,7 +28,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Initialize a tallies file - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) def _run_openmc(self): # Initial run diff --git a/tests/regression_tests/mgxs_library_ce_to_mg_nuclides/results_true.dat b/tests/regression_tests/mgxs_library_ce_to_mg_nuclides/results_true.dat index a4e9dafcc02..50c8328c885 100644 --- a/tests/regression_tests/mgxs_library_ce_to_mg_nuclides/results_true.dat +++ b/tests/regression_tests/mgxs_library_ce_to_mg_nuclides/results_true.dat @@ -1,2 +1,2 @@ k-combined: -6.025533E-01 1.157401E-02 +4.139942E-01 1.181308E-02 diff --git a/tests/regression_tests/mgxs_library_ce_to_mg_nuclides/test.py b/tests/regression_tests/mgxs_library_ce_to_mg_nuclides/test.py index a77ad242965..489105f8f54 100644 --- a/tests/regression_tests/mgxs_library_ce_to_mg_nuclides/test.py +++ b/tests/regression_tests/mgxs_library_ce_to_mg_nuclides/test.py @@ -28,7 +28,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Initialize a tallies file - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) def _run_openmc(self): # Initial run diff --git a/tests/regression_tests/mgxs_library_condense/results_true.dat b/tests/regression_tests/mgxs_library_condense/results_true.dat index ae5bff6e35b..98b30932c31 100644 --- a/tests/regression_tests/mgxs_library_condense/results_true.dat +++ b/tests/regression_tests/mgxs_library_condense/results_true.dat @@ -1,362 +1,362 @@ mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.699306 0.028642 -2 1 2 1 1 total 0.687913 0.025966 -1 2 1 1 1 total 0.716035 0.018945 -3 2 2 1 1 total 0.702630 0.028574 +0 1 1 1 1 total 0.702881 0.026175 +2 1 2 1 1 total 0.706921 0.029169 +1 2 1 1 1 total 0.707809 0.024766 +3 2 2 1 1 total 0.717967 0.024008 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.443642 0.030984 -2 1 2 1 1 total 0.429968 0.028072 -1 2 1 1 1 total 0.461535 0.021345 -3 2 2 1 1 total 0.439454 0.031232 +0 1 1 1 1 total 0.431023 0.028803 +2 1 2 1 1 total 0.451864 0.030748 +1 2 1 1 1 total 0.456990 0.026359 +3 2 2 1 1 total 0.450621 0.026744 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.443642 0.030984 -2 1 2 1 1 total 0.429968 0.028072 -1 2 1 1 1 total 0.461535 0.021345 -3 2 2 1 1 total 0.439454 0.031232 +0 1 1 1 1 total 0.431023 0.028803 +2 1 2 1 1 total 0.451864 0.030748 +1 2 1 1 1 total 0.456990 0.026359 +3 2 2 1 1 total 0.450621 0.026744 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.021895 0.001041 -2 1 2 1 1 total 0.021903 0.001108 -1 2 1 1 1 total 0.024895 0.001401 -3 2 2 1 1 total 0.022105 0.001198 +0 1 1 1 1 total 0.022398 0.001401 +2 1 2 1 1 total 0.022325 0.001371 +1 2 1 1 1 total 0.022942 0.000990 +3 2 2 1 1 total 0.022705 0.001322 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.021883 0.001040 -2 1 2 1 1 total 0.021879 0.001108 -1 2 1 1 1 total 0.024875 0.001401 -3 2 2 1 1 total 0.022071 0.001197 +0 1 1 1 1 total 0.022394 0.001401 +2 1 2 1 1 total 0.022321 0.001371 +1 2 1 1 1 total 0.022935 0.000990 +3 2 2 1 1 total 0.022699 0.001322 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.011219 0.000958 -2 1 2 1 1 total 0.011437 0.001013 -1 2 1 1 1 total 0.012947 0.001437 -3 2 2 1 1 total 0.011756 0.001144 +0 1 1 1 1 total 0.011562 0.001544 +2 1 2 1 1 total 0.011852 0.001418 +1 2 1 1 1 total 0.012168 0.000958 +3 2 2 1 1 total 0.011986 0.001418 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.010676 0.000481 -2 1 2 1 1 total 0.010466 0.000446 -1 2 1 1 1 total 0.011948 0.000517 -3 2 2 1 1 total 0.010350 0.000547 +0 1 1 1 1 total 0.010836 0.000803 +2 1 2 1 1 total 0.010473 0.000591 +1 2 1 1 1 total 0.010774 0.000415 +3 2 2 1 1 total 0.010719 0.000688 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.026218 0.001180 -2 1 2 1 1 total 0.025724 0.001093 -1 2 1 1 1 total 0.029326 0.001262 -3 2 2 1 1 total 0.025451 0.001338 +0 1 1 1 1 total 0.026602 0.001957 +2 1 2 1 1 total 0.025695 0.001442 +1 2 1 1 1 total 0.026454 0.001015 +3 2 2 1 1 total 0.026310 0.001678 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 2.067337e+06 93152.452502 -2 1 2 1 1 total 2.026907e+06 86377.585629 -1 2 1 1 1 total 2.313358e+06 99980.823985 -3 2 2 1 1 total 2.004370e+06 105820.022073 +0 1 1 1 1 total 2.098256e+06 155243.612264 +2 1 2 1 1 total 2.027699e+06 114334.400924 +1 2 1 1 1 total 2.086255e+06 80325.567787 +3 2 2 1 1 total 2.075596e+06 133128.805680 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.677411 0.027731 -2 1 2 1 1 total 0.666009 0.025155 -1 2 1 1 1 total 0.691140 0.018119 -3 2 2 1 1 total 0.680525 0.027587 +0 1 1 1 1 total 0.680483 0.025407 +2 1 2 1 1 total 0.684597 0.028126 +1 2 1 1 1 total 0.684867 0.024133 +3 2 2 1 1 total 0.695262 0.023087 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.679832 0.030242 -2 1 2 1 1 total 0.663143 0.019259 -1 2 1 1 1 total 0.679503 0.027107 -3 2 2 1 1 total 0.681909 0.033506 +0 1 1 1 1 total 0.678017 0.026288 +2 1 2 1 1 total 0.674888 0.033989 +1 2 1 1 1 total 0.681736 0.025618 +3 2 2 1 1 total 0.683701 0.023788 mesh 1 group in group out legendre nuclide mean std. dev. x y z -0 1 1 1 1 1 P0 total 0.679832 0.030426 -1 1 1 1 1 1 P1 total 0.255665 0.011704 -2 1 1 1 1 1 P2 total 0.087020 0.005603 -3 1 1 1 1 1 P3 total 0.006425 0.005919 -8 1 2 1 1 1 P0 total 0.663143 0.019088 -9 1 2 1 1 1 P1 total 0.257945 0.010887 -10 1 2 1 1 1 P2 total 0.095395 0.006988 -11 1 2 1 1 1 P3 total 0.009816 0.003950 -4 2 1 1 1 1 P0 total 0.679503 0.026695 -5 2 1 1 1 1 P1 total 0.254500 0.009901 -6 2 1 1 1 1 P2 total 0.093289 0.005481 -7 2 1 1 1 1 P3 total 0.004631 0.004081 -12 2 2 1 1 1 P0 total 0.681909 0.032740 -13 2 2 1 1 1 P1 total 0.263176 0.012659 -14 2 2 1 1 1 P2 total 0.093102 0.006603 -15 2 2 1 1 1 P3 total 0.007938 0.005673 +0 1 1 1 1 1 P0 total 0.678017 0.026290 +1 1 1 1 1 1 P1 total 0.271858 0.011693 +2 1 1 1 1 1 P2 total 0.095219 0.002950 +3 1 1 1 1 1 P3 total 0.012808 0.004686 +8 1 2 1 1 1 P0 total 0.674888 0.033578 +9 1 2 1 1 1 P1 total 0.255058 0.009912 +10 1 2 1 1 1 P2 total 0.098001 0.005459 +11 1 2 1 1 1 P3 total 0.012058 0.005439 +4 2 1 1 1 1 P0 total 0.681736 0.025439 +5 2 1 1 1 1 P1 total 0.250820 0.009035 +6 2 1 1 1 1 P2 total 0.092563 0.006549 +7 2 1 1 1 1 P3 total 0.008511 0.003905 +12 2 2 1 1 1 P0 total 0.683701 0.024254 +13 2 2 1 1 1 P1 total 0.267345 0.011695 +14 2 2 1 1 1 P2 total 0.096222 0.005551 +15 2 2 1 1 1 P3 total 0.011515 0.003236 mesh 1 group in group out legendre nuclide mean std. dev. x y z -0 1 1 1 1 1 P0 total 0.679832 0.030426 -1 1 1 1 1 1 P1 total 0.255665 0.011704 -2 1 1 1 1 1 P2 total 0.087020 0.005603 -3 1 1 1 1 1 P3 total 0.006425 0.005919 -8 1 2 1 1 1 P0 total 0.663143 0.019088 -9 1 2 1 1 1 P1 total 0.257945 0.010887 -10 1 2 1 1 1 P2 total 0.095395 0.006988 -11 1 2 1 1 1 P3 total 0.009816 0.003950 -4 2 1 1 1 1 P0 total 0.679503 0.026695 -5 2 1 1 1 1 P1 total 0.254500 0.009901 -6 2 1 1 1 1 P2 total 0.093289 0.005481 -7 2 1 1 1 1 P3 total 0.004631 0.004081 -12 2 2 1 1 1 P0 total 0.681909 0.032740 -13 2 2 1 1 1 P1 total 0.263176 0.012659 -14 2 2 1 1 1 P2 total 0.093102 0.006603 -15 2 2 1 1 1 P3 total 0.007938 0.005673 +0 1 1 1 1 1 P0 total 0.678017 0.026290 +1 1 1 1 1 1 P1 total 0.271858 0.011693 +2 1 1 1 1 1 P2 total 0.095219 0.002950 +3 1 1 1 1 1 P3 total 0.012808 0.004686 +8 1 2 1 1 1 P0 total 0.674888 0.033578 +9 1 2 1 1 1 P1 total 0.255058 0.009912 +10 1 2 1 1 1 P2 total 0.098001 0.005459 +11 1 2 1 1 1 P3 total 0.012058 0.005439 +4 2 1 1 1 1 P0 total 0.681736 0.025439 +5 2 1 1 1 1 P1 total 0.250820 0.009035 +6 2 1 1 1 1 P2 total 0.092563 0.006549 +7 2 1 1 1 1 P3 total 0.008511 0.003905 +12 2 2 1 1 1 P0 total 0.683701 0.024254 +13 2 2 1 1 1 P1 total 0.267345 0.011695 +14 2 2 1 1 1 P2 total 0.096222 0.005551 +15 2 2 1 1 1 P3 total 0.011515 0.003236 mesh 1 group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 1.0 0.041183 -2 1 2 1 1 1 total 1.0 0.021636 -1 2 1 1 1 1 total 1.0 0.046661 -3 2 2 1 1 1 total 1.0 0.041512 +0 1 1 1 1 1 total 1.0 0.041785 +2 1 2 1 1 1 total 1.0 0.057717 +1 2 1 1 1 1 total 1.0 0.040074 +3 2 2 1 1 1 total 1.0 0.042758 mesh 1 group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.027090 0.002808 -2 1 2 1 1 1 total 0.031522 0.004261 -1 2 1 1 1 1 total 0.021855 0.001457 -3 2 2 1 1 1 total 0.028262 0.002358 +0 1 1 1 1 1 total 0.028438 0.003513 +2 1 2 1 1 1 total 0.022222 0.001560 +1 2 1 1 1 1 total 0.025698 0.002756 +3 2 2 1 1 1 total 0.026501 0.002315 mesh 1 group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 1.0 0.041183 -2 1 2 1 1 1 total 1.0 0.021636 -1 2 1 1 1 1 total 1.0 0.046661 -3 2 2 1 1 1 total 1.0 0.041512 +0 1 1 1 1 1 total 1.0 0.041785 +2 1 2 1 1 1 total 1.0 0.057717 +1 2 1 1 1 1 total 1.0 0.040074 +3 2 2 1 1 1 total 1.0 0.042758 mesh 1 group in group out legendre nuclide mean std. dev. x y z -0 1 1 1 1 1 P0 total 0.677411 0.039336 -1 1 1 1 1 1 P1 total 0.254754 0.014995 -2 1 1 1 1 1 P2 total 0.086711 0.006439 -3 1 1 1 1 1 P3 total 0.006402 0.005903 -8 1 2 1 1 1 P0 total 0.666009 0.028990 -9 1 2 1 1 1 P1 total 0.259060 0.013824 -10 1 2 1 1 1 P2 total 0.095807 0.007684 -11 1 2 1 1 1 P3 total 0.009858 0.003980 -4 2 1 1 1 1 P0 total 0.691140 0.036991 -5 2 1 1 1 1 P1 total 0.258859 0.013782 -6 2 1 1 1 1 P2 total 0.094887 0.006555 -7 2 1 1 1 1 P3 total 0.004710 0.004154 -12 2 2 1 1 1 P0 total 0.680525 0.039486 -13 2 2 1 1 1 P1 total 0.262642 0.015259 -14 2 2 1 1 1 P2 total 0.092913 0.007251 -15 2 2 1 1 1 P3 total 0.007921 0.005668 +0 1 1 1 1 1 P0 total 0.680483 0.038131 +1 1 1 1 1 1 P1 total 0.272847 0.016111 +2 1 1 1 1 1 P2 total 0.095565 0.004869 +3 1 1 1 1 1 P3 total 0.012854 0.004731 +8 1 2 1 1 1 P0 total 0.684597 0.048501 +9 1 2 1 1 1 P1 total 0.258727 0.016473 +10 1 2 1 1 1 P2 total 0.099411 0.007470 +11 1 2 1 1 1 P3 total 0.012231 0.005552 +4 2 1 1 1 1 P0 total 0.684867 0.036546 +5 2 1 1 1 1 P1 total 0.251972 0.013220 +6 2 1 1 1 1 P2 total 0.092988 0.007474 +7 2 1 1 1 1 P3 total 0.008550 0.003936 +12 2 2 1 1 1 P0 total 0.695262 0.037640 +13 2 2 1 1 1 P1 total 0.271866 0.016280 +14 2 2 1 1 1 P2 total 0.097849 0.006919 +15 2 2 1 1 1 P3 total 0.011710 0.003325 mesh 1 group in group out legendre nuclide mean std. dev. x y z -0 1 1 1 1 1 P0 total 0.677411 0.048224 -1 1 1 1 1 1 P1 total 0.254754 0.018301 -2 1 1 1 1 1 P2 total 0.086711 0.007363 -3 1 1 1 1 1 P3 total 0.006402 0.005909 -8 1 2 1 1 1 P0 total 0.666009 0.032374 -9 1 2 1 1 1 P1 total 0.259060 0.014917 -10 1 2 1 1 1 P2 total 0.095807 0.007958 -11 1 2 1 1 1 P3 total 0.009858 0.003985 -4 2 1 1 1 1 P0 total 0.691140 0.049075 -5 2 1 1 1 1 P1 total 0.258859 0.018326 -6 2 1 1 1 1 P2 total 0.094887 0.007910 -7 2 1 1 1 1 P3 total 0.004710 0.004160 -12 2 2 1 1 1 P0 total 0.680525 0.048551 -13 2 2 1 1 1 P1 total 0.262642 0.018754 -14 2 2 1 1 1 P2 total 0.092913 0.008213 -15 2 2 1 1 1 P3 total 0.007921 0.005677 +0 1 1 1 1 1 P0 total 0.680483 0.047566 +1 1 1 1 1 1 P1 total 0.272847 0.019737 +2 1 1 1 1 1 P2 total 0.095565 0.006297 +3 1 1 1 1 1 P3 total 0.012854 0.004762 +8 1 2 1 1 1 P0 total 0.684597 0.062559 +9 1 2 1 1 1 P1 total 0.258727 0.022234 +10 1 2 1 1 1 P2 total 0.099411 0.009420 +11 1 2 1 1 1 P3 total 0.012231 0.005597 +4 2 1 1 1 1 P0 total 0.684867 0.045704 +5 2 1 1 1 1 P1 total 0.251972 0.016635 +6 2 1 1 1 1 P2 total 0.092988 0.008352 +7 2 1 1 1 1 P3 total 0.008550 0.003951 +12 2 2 1 1 1 P0 total 0.695262 0.047964 +13 2 2 1 1 1 P1 total 0.271866 0.020004 +14 2 2 1 1 1 P2 total 0.097849 0.008086 +15 2 2 1 1 1 P3 total 0.011710 0.003363 mesh 1 group out nuclide mean std. dev. x y z -0 1 1 1 1 total 1.0 0.103333 -2 1 2 1 1 total 1.0 0.118582 -1 2 1 1 1 total 1.0 0.112144 -3 2 2 1 1 total 1.0 0.130701 +0 1 1 1 1 total 1.0 0.142430 +2 1 2 1 1 total 1.0 0.112715 +1 2 1 1 1 total 1.0 0.192385 +3 2 2 1 1 total 1.0 0.109836 mesh 1 group out nuclide mean std. dev. x y z -0 1 1 1 1 total 1.0 0.103333 -2 1 2 1 1 total 1.0 0.118582 -1 2 1 1 1 total 1.0 0.112144 -3 2 2 1 1 total 1.0 0.130701 +0 1 1 1 1 total 1.0 0.143959 +2 1 2 1 1 total 1.0 0.102504 +1 2 1 1 1 total 1.0 0.188381 +3 2 2 1 1 total 1.0 0.116230 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 5.304285e-07 2.560239e-08 -2 1 2 1 1 total 4.940321e-07 2.410417e-08 -1 2 1 1 1 total 5.587365e-07 3.382787e-08 -3 2 2 1 1 total 5.232210e-07 2.482800e-08 +0 1 1 1 1 total 5.060544e-07 3.651604e-08 +2 1 2 1 1 total 5.101988e-07 4.947639e-08 +1 2 1 1 1 total 5.206450e-07 2.814648e-08 +3 2 2 1 1 total 5.278759e-07 3.171554e-08 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.026032 0.001172 -2 1 2 1 1 total 0.025542 0.001086 -1 2 1 1 1 total 0.029121 0.001254 -3 2 2 1 1 total 0.025271 0.001329 +0 1 1 1 1 total 0.026414 0.001944 +2 1 2 1 1 total 0.025515 0.001432 +1 2 1 1 1 total 0.026267 0.001008 +3 2 2 1 1 total 0.026125 0.001667 mesh 1 group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.027090 0.002808 -2 1 2 1 1 1 total 0.031522 0.004261 -1 2 1 1 1 1 total 0.021855 0.001457 -3 2 2 1 1 1 total 0.028262 0.002358 +0 1 1 1 1 1 total 0.028220 0.003510 +2 1 2 1 1 1 total 0.021754 0.001519 +1 2 1 1 1 1 total 0.025487 0.002676 +3 2 2 1 1 1 total 0.026281 0.002263 mesh 1 group in nuclide mean std. dev. x y surf -3 1 1 x-max in 1 total 4.280 0.164469 -2 1 1 x-max out 1 total 4.250 0.107135 +3 1 1 x-max in 1 total 4.244 0.096333 +2 1 1 x-max out 1 total 4.378 0.107210 1 1 1 x-min in 1 total 0.000 0.000000 0 1 1 x-min out 1 total 0.000 0.000000 -7 1 1 y-max in 1 total 4.364 0.105622 -6 1 1 y-max out 1 total 4.412 0.158019 +7 1 1 y-max in 1 total 4.388 0.116508 +6 1 1 y-max out 1 total 4.284 0.129066 5 1 1 y-min in 1 total 0.000 0.000000 4 1 1 y-min out 1 total 0.000 0.000000 -19 1 2 x-max in 1 total 4.388 0.102470 -18 1 2 x-max out 1 total 4.428 0.140228 +19 1 2 x-max in 1 total 4.280 0.139971 +18 1 2 x-max out 1 total 4.152 0.117141 17 1 2 x-min in 1 total 0.000 0.000000 16 1 2 x-min out 1 total 0.000 0.000000 23 1 2 y-max in 1 total 0.000 0.000000 22 1 2 y-max out 1 total 0.000 0.000000 -21 1 2 y-min in 1 total 4.412 0.158019 -20 1 2 y-min out 1 total 4.364 0.105622 +21 1 2 y-min in 1 total 4.284 0.129066 +20 1 2 y-min out 1 total 4.388 0.116508 11 2 1 x-max in 1 total 0.000 0.000000 10 2 1 x-max out 1 total 0.000 0.000000 -9 2 1 x-min in 1 total 4.250 0.107135 -8 2 1 x-min out 1 total 4.280 0.164469 -15 2 1 y-max in 1 total 4.402 0.182565 -14 2 1 y-max out 1 total 4.346 0.148189 +9 2 1 x-min in 1 total 4.378 0.107210 +8 2 1 x-min out 1 total 4.244 0.096333 +15 2 1 y-max in 1 total 4.280 0.079070 +14 2 1 y-max out 1 total 4.416 0.093648 13 2 1 y-min in 1 total 0.000 0.000000 12 2 1 y-min out 1 total 0.000 0.000000 27 2 2 x-max in 1 total 0.000 0.000000 26 2 2 x-max out 1 total 0.000 0.000000 -25 2 2 x-min in 1 total 4.428 0.140228 -24 2 2 x-min out 1 total 4.388 0.102470 +25 2 2 x-min in 1 total 4.152 0.117141 +24 2 2 x-min out 1 total 4.280 0.139971 31 2 2 y-max in 1 total 0.000 0.000000 30 2 2 y-max out 1 total 0.000 0.000000 -29 2 2 y-min in 1 total 4.346 0.148189 -28 2 2 y-min out 1 total 4.402 0.182565 +29 2 2 y-min in 1 total 4.416 0.093648 +28 2 2 y-min out 1 total 4.280 0.079070 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.950616 0.095874 -2 1 2 1 1 total 0.932532 0.086323 -1 2 1 1 1 total 0.885723 0.041074 -3 2 2 1 1 total 0.951783 0.101570 +0 1 1 1 1 total 0.943198 0.067915 +2 1 2 1 1 total 0.895741 0.058714 +1 2 1 1 1 total 0.911011 0.068461 +3 2 2 1 1 total 0.927611 0.066426 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.950616 0.095874 -2 1 2 1 1 total 0.932532 0.086323 -1 2 1 1 1 total 0.885723 0.041074 -3 2 2 1 1 total 0.951783 0.101570 +0 1 1 1 1 total 0.943198 0.067915 +2 1 2 1 1 total 0.895741 0.058714 +1 2 1 1 1 total 0.911011 0.068461 +3 2 2 1 1 total 0.927611 0.066426 mesh 1 delayedgroup group in nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.000006 2.679142e-07 -1 1 1 1 2 1 total 0.000032 1.417723e-06 -2 1 1 1 3 1 total 0.000031 1.376260e-06 -3 1 1 1 4 1 total 0.000072 3.185580e-06 -4 1 1 1 5 1 total 0.000032 1.433425e-06 -5 1 1 1 6 1 total 0.000013 5.956400e-07 -12 1 2 1 1 1 total 0.000006 2.486865e-07 -13 1 2 1 2 1 total 0.000031 1.323941e-06 -14 1 2 1 3 1 total 0.000030 1.292803e-06 -15 1 2 1 4 1 total 0.000071 3.032740e-06 -16 1 2 1 5 1 total 0.000031 1.426193e-06 -17 1 2 1 6 1 total 0.000013 5.903673e-07 -6 2 1 1 1 1 total 0.000007 2.871910e-07 -7 2 1 1 2 1 total 0.000035 1.501590e-06 -8 2 1 1 3 1 total 0.000034 1.448170e-06 -9 2 1 1 4 1 total 0.000079 3.318195e-06 -10 2 1 1 5 1 total 0.000035 1.465737e-06 -11 2 1 1 6 1 total 0.000015 6.097547e-07 -18 2 2 1 1 1 total 0.000006 3.042761e-07 -19 2 2 1 2 1 total 0.000031 1.603780e-06 -20 2 2 1 3 1 total 0.000030 1.553523e-06 -21 2 2 1 4 1 total 0.000070 3.583849e-06 -22 2 2 1 5 1 total 0.000031 1.602620e-06 -23 2 2 1 6 1 total 0.000013 6.662067e-07 +0 1 1 1 1 1 total 0.000006 4.453421e-07 +1 1 1 1 2 1 total 0.000032 2.303082e-06 +2 1 1 1 3 1 total 0.000031 2.202789e-06 +3 1 1 1 4 1 total 0.000072 4.961025e-06 +4 1 1 1 5 1 total 0.000032 2.071919e-06 +5 1 1 1 6 1 total 0.000013 8.662934e-07 +12 1 2 1 1 1 total 0.000006 3.282329e-07 +13 1 2 1 2 1 total 0.000031 1.701766e-06 +14 1 2 1 3 1 total 0.000030 1.629615e-06 +15 1 2 1 4 1 total 0.000070 3.675759e-06 +16 1 2 1 5 1 total 0.000031 1.536226e-06 +17 1 2 1 6 1 total 0.000013 6.423838e-07 +6 2 1 1 1 1 total 0.000006 2.308186e-07 +7 2 1 1 2 1 total 0.000032 1.211112e-06 +8 2 1 1 3 1 total 0.000031 1.169911e-06 +9 2 1 1 4 1 total 0.000072 2.685832e-06 +10 2 1 1 5 1 total 0.000032 1.187072e-06 +11 2 1 1 6 1 total 0.000013 4.939053e-07 +18 2 2 1 1 1 total 0.000006 3.819684e-07 +19 2 2 1 2 1 total 0.000032 1.976073e-06 +20 2 2 1 3 1 total 0.000031 1.889748e-06 +21 2 2 1 4 1 total 0.000072 4.252207e-06 +22 2 2 1 5 1 total 0.000032 1.765565e-06 +23 2 2 1 6 1 total 0.000013 7.386890e-07 mesh 1 delayedgroup group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.0 0.0 -1 1 1 1 2 1 total 0.0 0.0 -2 1 1 1 3 1 total 0.0 0.0 -3 1 1 1 4 1 total 0.0 0.0 -4 1 1 1 5 1 total 0.0 0.0 -5 1 1 1 6 1 total 0.0 0.0 -12 1 2 1 1 1 total 0.0 0.0 -13 1 2 1 2 1 total 0.0 0.0 -14 1 2 1 3 1 total 0.0 0.0 -15 1 2 1 4 1 total 0.0 0.0 -16 1 2 1 5 1 total 0.0 0.0 -17 1 2 1 6 1 total 0.0 0.0 -6 2 1 1 1 1 total 0.0 0.0 -7 2 1 1 2 1 total 0.0 0.0 -8 2 1 1 3 1 total 0.0 0.0 -9 2 1 1 4 1 total 0.0 0.0 -10 2 1 1 5 1 total 0.0 0.0 -11 2 1 1 6 1 total 0.0 0.0 -18 2 2 1 1 1 total 0.0 0.0 -19 2 2 1 2 1 total 0.0 0.0 -20 2 2 1 3 1 total 0.0 0.0 -21 2 2 1 4 1 total 0.0 0.0 -22 2 2 1 5 1 total 0.0 0.0 -23 2 2 1 6 1 total 0.0 0.0 +0 1 1 1 1 1 total 0.0 0.000000 +1 1 1 1 2 1 total 0.0 0.000000 +2 1 1 1 3 1 total 0.0 0.000000 +3 1 1 1 4 1 total 1.0 1.414214 +4 1 1 1 5 1 total 0.0 0.000000 +5 1 1 1 6 1 total 0.0 0.000000 +12 1 2 1 1 1 total 0.0 0.000000 +13 1 2 1 2 1 total 0.0 0.000000 +14 1 2 1 3 1 total 0.0 0.000000 +15 1 2 1 4 1 total 1.0 0.869026 +16 1 2 1 5 1 total 0.0 0.000000 +17 1 2 1 6 1 total 0.0 0.000000 +6 2 1 1 1 1 total 0.0 0.000000 +7 2 1 1 2 1 total 0.0 0.000000 +8 2 1 1 3 1 total 0.0 0.000000 +9 2 1 1 4 1 total 1.0 1.414214 +10 2 1 1 5 1 total 0.0 0.000000 +11 2 1 1 6 1 total 0.0 0.000000 +18 2 2 1 1 1 total 0.0 0.000000 +19 2 2 1 2 1 total 0.0 0.000000 +20 2 2 1 3 1 total 0.0 0.000000 +21 2 2 1 4 1 total 1.0 1.414214 +22 2 2 1 5 1 total 0.0 0.000000 +23 2 2 1 6 1 total 0.0 0.000000 mesh 1 delayedgroup group in nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.000227 0.000011 -1 1 1 1 2 1 total 0.001212 0.000058 -2 1 1 1 3 1 total 0.001180 0.000057 -3 1 1 1 4 1 total 0.002734 0.000131 -4 1 1 1 5 1 total 0.001215 0.000059 -5 1 1 1 6 1 total 0.000506 0.000024 -12 1 2 1 1 1 total 0.000227 0.000010 -13 1 2 1 2 1 total 0.001213 0.000052 -14 1 2 1 3 1 total 0.001182 0.000051 -15 1 2 1 4 1 total 0.002744 0.000120 -16 1 2 1 5 1 total 0.001223 0.000056 -17 1 2 1 6 1 total 0.000509 0.000023 -6 2 1 1 1 1 total 0.000227 0.000013 -7 2 1 1 2 1 total 0.001207 0.000067 -8 2 1 1 3 1 total 0.001173 0.000065 -9 2 1 1 4 1 total 0.002710 0.000150 -10 2 1 1 5 1 total 0.001195 0.000066 -11 2 1 1 6 1 total 0.000498 0.000027 -18 2 2 1 1 1 total 0.000227 0.000014 -19 2 2 1 2 1 total 0.001212 0.000073 -20 2 2 1 3 1 total 0.001180 0.000071 -21 2 2 1 4 1 total 0.002740 0.000163 -22 2 2 1 5 1 total 0.001221 0.000073 -23 2 2 1 6 1 total 0.000508 0.000030 +0 1 1 1 1 1 total 0.000227 0.000023 +1 1 1 1 2 1 total 0.001210 0.000119 +2 1 1 1 3 1 total 0.001176 0.000114 +3 1 1 1 4 1 total 0.002722 0.000261 +4 1 1 1 5 1 total 0.001204 0.000112 +5 1 1 1 6 1 total 0.000501 0.000047 +12 1 2 1 1 1 total 0.000227 0.000017 +13 1 2 1 2 1 total 0.001208 0.000087 +14 1 2 1 3 1 total 0.001174 0.000084 +15 1 2 1 4 1 total 0.002710 0.000192 +16 1 2 1 5 1 total 0.001194 0.000082 +17 1 2 1 6 1 total 0.000497 0.000034 +6 2 1 1 1 1 total 0.000227 0.000010 +7 2 1 1 2 1 total 0.001210 0.000053 +8 2 1 1 3 1 total 0.001177 0.000052 +9 2 1 1 4 1 total 0.002726 0.000119 +10 2 1 1 5 1 total 0.001208 0.000053 +11 2 1 1 6 1 total 0.000503 0.000022 +18 2 2 1 1 1 total 0.000227 0.000019 +19 2 2 1 2 1 total 0.001211 0.000102 +20 2 2 1 3 1 total 0.001178 0.000098 +21 2 2 1 4 1 total 0.002726 0.000223 +22 2 2 1 5 1 total 0.001207 0.000096 +23 2 2 1 6 1 total 0.000503 0.000040 mesh 1 delayedgroup nuclide mean std. dev. x y z -0 1 1 1 1 total 0.013354 0.000674 -1 1 1 1 2 total 0.032612 0.001720 -2 1 1 1 3 total 0.121057 0.006579 -3 1 1 1 4 total 0.305656 0.017398 -4 1 1 1 5 total 0.861000 0.053768 -5 1 1 1 6 total 2.891889 0.179407 -12 1 2 1 1 total 0.013354 0.000497 -13 1 2 1 2 total 0.032605 0.001150 -14 1 2 1 3 total 0.121071 0.004175 -15 1 2 1 4 total 0.305792 0.010484 -16 1 2 1 5 total 0.861500 0.032627 -17 1 2 1 6 total 2.893589 0.108347 -6 2 1 1 1 total 0.013352 0.000663 -7 2 1 1 2 total 0.032625 0.001570 -8 2 1 1 3 total 0.121029 0.005721 -9 2 1 1 4 total 0.305375 0.014144 -10 2 1 1 5 total 0.859955 0.039608 -11 2 1 1 6 total 2.888337 0.132844 -18 2 2 1 1 total 0.013354 0.000892 -19 2 2 1 2 total 0.032606 0.002209 -20 2 2 1 3 total 0.121069 0.008302 -21 2 2 1 4 total 0.305776 0.021416 -22 2 2 1 5 total 0.861442 0.063571 -23 2 2 1 6 total 2.893392 0.212640 - mesh 1 delayedgroup group in group out nuclide mean std. dev. - x y z -0 1 1 1 1 1 1 total 0.0 0.0 -1 1 1 1 2 1 1 total 0.0 0.0 -2 1 1 1 3 1 1 total 0.0 0.0 -3 1 1 1 4 1 1 total 0.0 0.0 -4 1 1 1 5 1 1 total 0.0 0.0 -5 1 1 1 6 1 1 total 0.0 0.0 -12 1 2 1 1 1 1 total 0.0 0.0 -13 1 2 1 2 1 1 total 0.0 0.0 -14 1 2 1 3 1 1 total 0.0 0.0 -15 1 2 1 4 1 1 total 0.0 0.0 -16 1 2 1 5 1 1 total 0.0 0.0 -17 1 2 1 6 1 1 total 0.0 0.0 -6 2 1 1 1 1 1 total 0.0 0.0 -7 2 1 1 2 1 1 total 0.0 0.0 -8 2 1 1 3 1 1 total 0.0 0.0 -9 2 1 1 4 1 1 total 0.0 0.0 -10 2 1 1 5 1 1 total 0.0 0.0 -11 2 1 1 6 1 1 total 0.0 0.0 -18 2 2 1 1 1 1 total 0.0 0.0 -19 2 2 1 2 1 1 total 0.0 0.0 -20 2 2 1 3 1 1 total 0.0 0.0 -21 2 2 1 4 1 1 total 0.0 0.0 -22 2 2 1 5 1 1 total 0.0 0.0 -23 2 2 1 6 1 1 total 0.0 0.0 +0 1 1 1 1 total 0.013353 0.001345 +1 1 1 1 2 total 0.032619 0.003120 +2 1 1 1 3 total 0.121042 0.011142 +3 1 1 1 4 total 0.305503 0.026418 +4 1 1 1 5 total 0.860433 0.064665 +5 1 1 1 6 total 2.889963 0.219527 +12 1 2 1 1 total 0.013352 0.001049 +13 1 2 1 2 total 0.032626 0.002465 +14 1 2 1 3 total 0.121027 0.008891 +15 1 2 1 4 total 0.305351 0.021426 +16 1 2 1 5 total 0.859866 0.054490 +17 1 2 1 6 total 2.888034 0.184436 +6 2 1 1 1 total 0.013353 0.000612 +7 2 1 1 2 total 0.032616 0.001412 +8 2 1 1 3 total 0.121047 0.005039 +9 2 1 1 4 total 0.305559 0.012002 +10 2 1 1 5 total 0.860640 0.030707 +11 2 1 1 6 total 2.890664 0.103692 +18 2 2 1 1 total 0.013353 0.001132 +19 2 2 1 2 total 0.032617 0.002633 +20 2 2 1 3 total 0.121046 0.009426 +21 2 2 1 4 total 0.305545 0.022417 +22 2 2 1 5 total 0.860588 0.055030 +23 2 2 1 6 total 2.890489 0.186821 + mesh 1 delayedgroup group in group out nuclide mean std. dev. + x y z +0 1 1 1 1 1 1 total 0.000000 0.000000 +1 1 1 1 2 1 1 total 0.000000 0.000000 +2 1 1 1 3 1 1 total 0.000000 0.000000 +3 1 1 1 4 1 1 total 0.000219 0.000219 +4 1 1 1 5 1 1 total 0.000000 0.000000 +5 1 1 1 6 1 1 total 0.000000 0.000000 +12 1 2 1 1 1 1 total 0.000000 0.000000 +13 1 2 1 2 1 1 total 0.000000 0.000000 +14 1 2 1 3 1 1 total 0.000000 0.000000 +15 1 2 1 4 1 1 total 0.000467 0.000287 +16 1 2 1 5 1 1 total 0.000000 0.000000 +17 1 2 1 6 1 1 total 0.000000 0.000000 +6 2 1 1 1 1 1 total 0.000000 0.000000 +7 2 1 1 2 1 1 total 0.000000 0.000000 +8 2 1 1 3 1 1 total 0.000000 0.000000 +9 2 1 1 4 1 1 total 0.000211 0.000211 +10 2 1 1 5 1 1 total 0.000000 0.000000 +11 2 1 1 6 1 1 total 0.000000 0.000000 +18 2 2 1 1 1 1 total 0.000000 0.000000 +19 2 2 1 2 1 1 total 0.000000 0.000000 +20 2 2 1 3 1 1 total 0.000000 0.000000 +21 2 2 1 4 1 1 total 0.000219 0.000219 +22 2 2 1 5 1 1 total 0.000000 0.000000 +23 2 2 1 6 1 1 total 0.000000 0.000000 diff --git a/tests/regression_tests/mgxs_library_condense/test.py b/tests/regression_tests/mgxs_library_condense/test.py index a7e60617f08..bbc4c11bfa9 100644 --- a/tests/regression_tests/mgxs_library_condense/test.py +++ b/tests/regression_tests/mgxs_library_condense/test.py @@ -36,7 +36,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Add tallies - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) def _get_results(self, hash_output=False): """Digest info in the statepoint and return as a string.""" diff --git a/tests/regression_tests/mgxs_library_correction/results_true.dat b/tests/regression_tests/mgxs_library_correction/results_true.dat index ff4bd974634..b6aaad0441f 100644 --- a/tests/regression_tests/mgxs_library_correction/results_true.dat +++ b/tests/regression_tests/mgxs_library_correction/results_true.dat @@ -1,60 +1,60 @@ material group in group out nuclide mean std. dev. -3 1 1 1 total 0.342252 0.023795 -2 1 1 2 total 0.000695 0.000327 +3 1 1 1 total 0.353477 0.019952 +2 1 1 2 total 0.000522 0.000349 1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.388426 0.020840 +0 1 2 2 total 0.414134 0.029955 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.342252 0.023795 -2 1 1 2 total 0.000695 0.000327 +3 1 1 1 total 0.353477 0.019952 +2 1 1 2 total 0.000522 0.000349 1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.388426 0.020840 +0 1 2 2 total 0.414134 0.029955 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.343021 0.031016 -2 1 1 2 total 0.000697 0.000329 +3 1 1 1 total 0.356124 0.026110 +2 1 1 2 total 0.000526 0.000352 1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.376544 0.025156 +0 1 2 2 total 0.413622 0.044755 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.343021 0.039761 -2 1 1 2 total 0.000697 0.000566 +3 1 1 1 total 0.356124 0.033873 +2 1 1 2 total 0.000526 0.000608 1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.376544 0.032140 +0 1 2 2 total 0.413622 0.054899 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.271174 0.022374 +3 2 1 1 total 0.261901 0.016456 2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.295401 0.032831 +0 2 2 2 total 0.322376 0.044195 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.271174 0.022374 +3 2 1 1 total 0.261901 0.016456 2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.295401 0.032831 +0 2 2 2 total 0.322376 0.044195 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.264654 0.028288 +3 2 1 1 total 0.266612 0.021169 2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.295178 0.032530 +0 2 2 2 total 0.321966 0.054140 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.264654 0.036081 +3 2 1 1 total 0.266612 0.025384 2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.295178 0.044676 - material group in group out nuclide mean std. dev. -3 3 1 1 total 0.257831 0.014436 -2 3 1 2 total 0.030826 0.000973 -1 3 2 1 total 0.000467 0.000467 -0 3 2 2 total 1.443057 0.119909 - material group in group out nuclide mean std. dev. -3 3 1 1 total 0.257831 0.014436 -2 3 1 2 total 0.030826 0.000973 -1 3 2 1 total 0.000467 0.000467 -0 3 2 2 total 1.443057 0.119909 - material group in group out nuclide mean std. dev. -3 3 1 1 total 0.267025 0.029512 -2 3 1 2 total 0.031268 0.001416 -1 3 2 1 total 0.000466 0.000467 -0 3 2 2 total 1.440250 0.164573 - material group in group out nuclide mean std. dev. -3 3 1 1 total 0.267025 0.032860 -2 3 1 2 total 0.031268 0.001768 -1 3 2 1 total 0.000466 0.000808 -0 3 2 2 total 1.440250 0.212183 +0 2 2 2 total 0.321966 0.068014 + material group in group out nuclide mean std. dev. +3 3 1 1 total 0.259426 0.012116 +2 3 1 2 total 0.031650 0.000613 +1 3 2 1 total 0.000474 0.000475 +0 3 2 2 total 1.416407 0.162435 + material group in group out nuclide mean std. dev. +3 3 1 1 total 0.259426 0.012116 +2 3 1 2 total 0.031650 0.000613 +1 3 2 1 total 0.000474 0.000475 +0 3 2 2 total 1.416407 0.162435 + material group in group out nuclide mean std. dev. +3 3 1 1 total 0.266083 0.024503 +2 3 1 2 total 0.031973 0.001157 +1 3 2 1 total 0.000477 0.000480 +0 3 2 2 total 1.427932 0.269812 + material group in group out nuclide mean std. dev. +3 3 1 1 total 0.266083 0.027910 +2 3 1 2 total 0.031973 0.001391 +1 3 2 1 total 0.000477 0.000827 +0 3 2 2 total 1.427932 0.328026 diff --git a/tests/regression_tests/mgxs_library_correction/test.py b/tests/regression_tests/mgxs_library_correction/test.py index 05eedfef824..64e638e442f 100644 --- a/tests/regression_tests/mgxs_library_correction/test.py +++ b/tests/regression_tests/mgxs_library_correction/test.py @@ -29,7 +29,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Add tallies - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) def _get_results(self, hash_output=False): """Digest info in the statepoint and return as a string.""" diff --git a/tests/regression_tests/mgxs_library_distribcell/results_true.dat b/tests/regression_tests/mgxs_library_distribcell/results_true.dat index ef7cb2b96b6..127df75c1e6 100644 --- a/tests/regression_tests/mgxs_library_distribcell/results_true.dat +++ b/tests/regression_tests/mgxs_library_distribcell/results_true.dat @@ -1,97 +1,97 @@ sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.455527 0.009851 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.459656 0.010039 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.409242 0.011118 - sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.40929 0.011119 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.416327 0.01121 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.066934 0.002424 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.416327 0.01121 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.066764 0.002423 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.070545 0.002486 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.028358 0.002669 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.070348 0.002485 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.038576 0.001526 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.029374 0.002719 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.094817 0.003725 - sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 7.470225e+06 295170.385185 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.041172 0.001562 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.388593 0.008156 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.101218 0.003812 + sum(distribcell) group in nuclide mean std. dev. +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 7.972654e+06 302079.851251 + sum(distribcell) group in nuclide mean std. dev. +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.38911 0.00831 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.388874 0.013889 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.394876 0.014019 sum(distribcell) group in group out legendre nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P0 total 0.388711 0.013887 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P1 total 0.046285 0.005155 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P2 total 0.023632 0.003772 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P3 total 0.006997 0.003207 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P0 total 0.394876 0.014019 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P1 total 0.043329 0.004988 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P2 total 0.027490 0.003974 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P3 total 0.016004 0.003232 sum(distribcell) group in group out legendre nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P0 total 0.388874 0.013889 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P1 total 0.046237 0.005156 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P2 total 0.023571 0.003775 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P3 total 0.007058 0.003207 - sum(distribcell) group in group out nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 1.000418 0.036246 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P0 total 0.394876 0.014019 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P1 total 0.043329 0.004988 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P2 total 0.027490 0.003974 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P3 total 0.016004 0.003232 + sum(distribcell) group in group out nuclide mean std. dev. +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 1.0 0.036306 sum(distribcell) group in group out nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.092139 0.005956 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.097856 0.006191 sum(distribcell) group in group out nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 1.0 0.036242 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 1.0 0.036306 sum(distribcell) group in group out legendre nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P0 total 0.388593 0.016275 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P1 total 0.046271 0.005251 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P2 total 0.023624 0.003806 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P3 total 0.006995 0.003209 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P0 total 0.389110 0.016390 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P1 total 0.042696 0.005009 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P2 total 0.027088 0.003964 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P3 total 0.015770 0.003204 sum(distribcell) group in group out legendre nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P0 total 0.388755 0.021528 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P1 total 0.046290 0.005515 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P2 total 0.023634 0.003903 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P3 total 0.006998 0.003221 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P0 total 0.389110 0.021638 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P1 total 0.042696 0.005244 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P2 total 0.027088 0.004084 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 P3 total 0.015770 0.003255 sum(distribcell) group out nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 1.0 0.084366 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 1.0 0.082469 sum(distribcell) group out nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 1.0 0.084331 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 1.0 0.082587 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 5.253873e-07 2.168462e-08 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 5.626624e-07 2.235532e-08 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.094147 0.003701 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.100506 0.003787 sum(distribcell) group in group out nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.091593 0.005919 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.097658 0.006185 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.814514 0.022129 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.800653 0.021558 sum(distribcell) group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.814419 0.022125 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.800653 0.021558 sum(distribcell) delayedgroup group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.000021 8.473275e-07 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 1 total 0.000115 4.405467e-06 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 1 total 0.000112 4.225826e-06 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 1 total 0.000259 9.559952e-06 -4 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 5 1 total 0.000115 4.025369e-06 -5 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 6 1 total 0.000048 1.682226e-06 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.000023 8.667436e-07 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 1 total 0.000122 4.499059e-06 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 1 total 0.000119 4.311220e-06 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 1 total 0.000275 9.735290e-06 +4 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 5 1 total 0.000122 4.078954e-06 +5 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 6 1 total 0.000051 1.705327e-06 sum(distribcell) delayedgroup group out nuclide mean std. dev. 0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.0 0.000000 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 1 total 0.0 0.000000 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 1 total 1.0 1.000002 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 1 total 1.0 1.414214 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 1 total 1.0 1.414214 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 1 total 0.0 0.000000 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 1 total 0.0 0.000000 4 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 5 1 total 0.0 0.000000 5 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 6 1 total 0.0 0.000000 sum(distribcell) delayedgroup group in nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.000227 0.000012 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 1 total 0.001210 0.000062 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 1 total 0.001177 0.000060 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 1 total 0.002728 0.000136 -4 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 5 1 total 0.001211 0.000059 -5 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 6 1 total 0.000504 0.000025 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 total 0.000227 0.000011 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 1 total 0.001208 0.000059 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 1 total 0.001175 0.000056 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 1 total 0.002721 0.000129 +4 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 5 1 total 0.001206 0.000055 +5 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 6 1 total 0.000502 0.000023 sum(distribcell) delayedgroup nuclide mean std. dev. -0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.013353 0.000692 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 total 0.032613 0.001644 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 total 0.121054 0.005983 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 total 0.305630 0.014645 -4 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 5 total 0.860903 0.038693 -5 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 6 total 2.891558 0.130564 +0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 total 0.013353 0.000658 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 total 0.032616 0.001562 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 total 0.121048 0.005678 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 total 0.305568 0.013868 +4 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 5 total 0.860675 0.036434 +5 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 6 total 2.890786 0.122997 sum(distribcell) delayedgroup group in group out nuclide mean std. dev. 0 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 1 1 1 total 0.000000 0.000000 -1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 1 1 total 0.000000 0.000000 -2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 1 1 total 0.000362 0.000256 -3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 1 1 total 0.000185 0.000185 +1 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 2 1 1 total 0.000198 0.000198 +2 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 3 1 1 total 0.000000 0.000000 +3 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 4 1 1 total 0.000000 0.000000 4 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 5 1 1 total 0.000000 0.000000 5 ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...),) 6 1 1 total 0.000000 0.000000 diff --git a/tests/regression_tests/mgxs_library_distribcell/test.py b/tests/regression_tests/mgxs_library_distribcell/test.py index fd6c8e93866..464b309c002 100644 --- a/tests/regression_tests/mgxs_library_distribcell/test.py +++ b/tests/regression_tests/mgxs_library_distribcell/test.py @@ -36,7 +36,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Add tallies - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) self._model.tallies.export_to_xml() def _get_results(self, hash_output=False): diff --git a/tests/regression_tests/mgxs_library_hdf5/results_true.dat b/tests/regression_tests/mgxs_library_hdf5/results_true.dat index b2ef8eae921..14d7371fe6a 100644 --- a/tests/regression_tests/mgxs_library_hdf5/results_true.dat +++ b/tests/regression_tests/mgxs_library_hdf5/results_true.dat @@ -1,201 +1,201 @@ domain=1 type=total -[5.52629207e-01 1.46792426e+00] -[2.73983948e-02 9.30468557e-02] +[5.66580451e-01 1.44262943e+00] +[1.96770003e-02 1.46112369e-01] domain=1 type=transport -[3.09650231e-01 1.14528468e+00] -[2.96126059e-02 1.01957125e-01] +[3.14856281e-01 1.05346368e+00] +[2.15203447e-02 1.60562179e-01] domain=1 type=nu-transport -[3.09650231e-01 1.14528468e+00] -[2.96126059e-02 1.01957125e-01] +[3.14856281e-01 1.05346368e+00] +[2.15203447e-02 1.60562179e-01] domain=1 type=absorption -[7.90251362e-03 9.52195503e-02] -[7.77996866e-04 5.32017792e-03] +[8.63921263e-03 9.70718967e-02] +[7.09849180e-04 9.96697703e-03] domain=1 type=reduced absorption -[7.88836875e-03 9.52195503e-02] -[7.77877367e-04 5.32017792e-03] +[8.63459183e-03 9.70718967e-02] +[7.09826160e-04 9.96697703e-03] domain=1 type=capture -[5.66271991e-03 4.03380329e-02] -[7.65494411e-04 4.41129849e-03] +[6.29732743e-03 4.01344183e-02] +[7.03181817e-04 9.43458504e-03] domain=1 type=fission -[2.23979371e-03 5.48815174e-02] -[1.44808204e-04 3.21965557e-03] +[2.34188519e-03 5.69374784e-02] +[1.04006997e-04 6.19904834e-03] domain=1 type=nu-fission -[5.70078167e-03 1.33729794e-01] -[3.71908758e-04 7.84533474e-03] +[5.93985124e-03 1.38739554e-01] +[2.57215008e-04 1.51052211e-02] domain=1 type=kappa-fission -[4.36283087e+05 1.06143820e+07] -[2.81939099e+04 6.22698786e+05] +[4.55876276e+05 1.10120160e+07] +[2.00450394e+04 1.19892945e+06] domain=1 type=scatter -[5.44726693e-01 1.37270471e+00] -[2.67443307e-02 8.86578418e-02] +[5.57941239e-01 1.34555753e+00] +[1.96103602e-02 1.38008873e-01] domain=1 type=nu-scatter -[5.46058885e-01 1.38608802e+00] -[2.72733439e-02 9.59957737e-02] +[5.53883536e-01 1.40126963e+00] +[1.89917740e-02 1.62647765e-01] domain=1 type=scatter matrix -[[[5.25081070e-01 2.42978975e-01 9.65459393e-02 8.62265123e-03] - [2.09778151e-02 5.67750504e-03 -1.86093418e-03 -1.63034937e-03]] +[[[5.35878034e-01 2.51724170e-01 1.01011269e-01 1.03439439e-02] + [1.80055019e-02 5.80562809e-03 -1.57470166e-03 -2.27320020e-03]] [[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [1.38608802e+00 2.92665071e-01 4.65545679e-02 3.43129413e-03]]] -[[[2.68584158e-02 1.12354079e-02 5.95151250e-03 5.08213314e-03] - [1.69810442e-03 1.03379654e-03 3.35798077e-04 8.28775769e-04]] + [1.40126963e+00 3.55339640e-01 7.06453615e-02 4.04065595e-02]]] +[[[1.86010787e-02 8.71440749e-03 3.01351835e-03 5.22968320e-03] + [1.36795874e-03 6.67372701e-04 3.26122899e-04 8.68935369e-04]] [[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [9.59957737e-02 3.98634629e-02 1.79245433e-02 2.53788407e-02]]] + [1.62647765e-01 6.23420543e-02 9.61788834e-03 8.80966610e-03]]] domain=1 type=nu-scatter matrix -[[[5.25081070e-01 2.42978975e-01 9.65459393e-02 8.62265123e-03] - [2.09778151e-02 5.67750504e-03 -1.86093418e-03 -1.63034937e-03]] +[[[5.35878034e-01 2.51724170e-01 1.01011269e-01 1.03439439e-02] + [1.80055019e-02 5.80562809e-03 -1.57470166e-03 -2.27320020e-03]] [[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [1.38608802e+00 2.92665071e-01 4.65545679e-02 3.43129413e-03]]] -[[[2.68584158e-02 1.12354079e-02 5.95151250e-03 5.08213314e-03] - [1.69810442e-03 1.03379654e-03 3.35798077e-04 8.28775769e-04]] + [1.40126963e+00 3.55339640e-01 7.06453615e-02 4.04065595e-02]]] +[[[1.86010787e-02 8.71440749e-03 3.01351835e-03 5.22968320e-03] + [1.36795874e-03 6.67372701e-04 3.26122899e-04 8.68935369e-04]] [[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [9.59957737e-02 3.98634629e-02 1.79245433e-02 2.53788407e-02]]] + [1.62647765e-01 6.23420543e-02 9.61788834e-03 8.80966610e-03]]] domain=1 type=multiplicity matrix [[1.00000000e+00 1.00000000e+00] [0.00000000e+00 1.00000000e+00]] -[[4.49973217e-02 9.94834121e-02] - [0.00000000e+00 8.90267353e-02]] +[[3.27047397e-02 1.01015254e-01] + [0.00000000e+00 1.16966513e-01]] domain=1 type=nu-fission matrix -[[6.79725552e-03 0.00000000e+00] - [1.34226308e-01 0.00000000e+00]] -[[1.39232734e-03 0.00000000e+00] - [1.55126210e-02 0.00000000e+00]] +[[7.11392182e-03 0.00000000e+00] + [1.52683850e-01 0.00000000e+00]] +[[1.05605314e-03 0.00000000e+00] + [2.58713491e-02 0.00000000e+00]] domain=1 type=scatter probability matrix -[[9.61583236e-01 3.84167637e-02] +[[9.67492260e-01 3.25077399e-02] [0.00000000e+00 1.00000000e+00]] -[[4.25251594e-02 2.94881301e-03] - [0.00000000e+00 8.90267353e-02]] +[[3.12124830e-02 2.43439942e-03] + [0.00000000e+00 1.16966513e-01]] domain=1 type=consistent scatter matrix -[[[5.23800056e-01 2.42386192e-01 9.63104011e-02 8.60161499e-03] - [2.09266366e-02 5.66365392e-03 -1.85639416e-03 -1.62637189e-03]] +[[[5.39803830e-01 2.53568280e-01 1.01751269e-01 1.04197228e-02] + [1.81374087e-02 5.84815962e-03 -1.58623779e-03 -2.28985347e-03]] [[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [1.37270471e+00 2.89839256e-01 4.61050623e-02 3.39816342e-03]]] -[[[3.46115177e-02 1.51137129e-02 7.17487890e-03 5.08248710e-03] - [1.90677851e-03 1.05813829e-03 3.43862086e-04 8.29548315e-04]] + [1.34555753e+00 3.41211940e-01 6.78366221e-02 3.88000634e-02]]] +[[[2.57534994e-02 1.20804286e-02 4.50621873e-03 5.27902298e-03] + [1.50041314e-03 6.98980912e-04 3.32589287e-04 8.78503928e-04]] [[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [1.50979688e-01 4.66032426e-02 1.81833349e-02 2.51354735e-02]]] + [2.09324012e-01 6.95175402e-02 1.16044952e-02 9.36549883e-03]]] domain=1 type=consistent nu-scatter matrix -[[[5.23800056e-01 2.42386192e-01 9.63104011e-02 8.60161499e-03] - [2.09266366e-02 5.66365392e-03 -1.85639416e-03 -1.62637189e-03]] +[[[5.39803830e-01 2.53568280e-01 1.01751269e-01 1.04197228e-02] + [1.81374087e-02 5.84815962e-03 -1.58623779e-03 -2.28985347e-03]] [[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [1.37270471e+00 2.89839256e-01 4.61050623e-02 3.39816342e-03]]] -[[[4.18746126e-02 1.86381616e-02 8.38211969e-03 5.09720340e-03] - [2.82310416e-03 1.19879975e-03 3.90317811e-04 8.45179676e-04]] + [1.34555753e+00 3.41211940e-01 6.78366221e-02 3.88000634e-02]]] +[[[3.12235732e-02 1.46529414e-02 5.60177820e-03 5.29001047e-03] + [2.36812824e-03 9.15185125e-04 3.69175618e-04 9.08445666e-04]] [[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] - [1.94240879e-01 5.32698778e-02 1.86408495e-02 2.51372940e-02]]] + [2.61890501e-01 8.01593794e-02 1.40578233e-02 1.04071518e-02]]] domain=1 type=chi [1.00000000e+00 0.00000000e+00] -[1.03333203e-01 0.00000000e+00] +[1.42429813e-01 0.00000000e+00] domain=1 type=chi-prompt [1.00000000e+00 0.00000000e+00] -[1.03333203e-01 0.00000000e+00] +[1.43958515e-01 0.00000000e+00] domain=1 type=inverse-velocity -[5.72461488e-08 3.00999757e-06] -[2.80644407e-09 1.80993426e-07] +[6.05275939e-08 2.92408191e-06] +[4.98534008e-09 2.95326306e-07] domain=1 type=prompt-nu-fission -[5.64594959e-03 1.32859920e-01] -[3.68364598e-04 7.79430310e-03] +[5.88433433e-03 1.37837093e-01] +[2.56012352e-04 1.50069660e-02] domain=1 type=prompt-nu-fission matrix -[[6.79725552e-03 0.00000000e+00] - [1.34226308e-01 0.00000000e+00]] -[[1.39232734e-03 0.00000000e+00] - [1.55126210e-02 0.00000000e+00]] +[[7.11392182e-03 0.00000000e+00] + [1.51190909e-01 0.00000000e+00]] +[[1.05605314e-03 0.00000000e+00] + [2.57973847e-02 0.00000000e+00]] domain=1 type=current -[[[0.00000000e+00 0.00000000e+00 3.54200000e+00 3.59000000e+00 - 0.00000000e+00 0.00000000e+00 3.73400000e+00 3.69000000e+00] - [0.00000000e+00 0.00000000e+00 7.08000000e-01 6.90000000e-01 - 0.00000000e+00 0.00000000e+00 6.78000000e-01 6.74000000e-01]] - - [[3.59000000e+00 3.54200000e+00 0.00000000e+00 0.00000000e+00 - 0.00000000e+00 0.00000000e+00 3.65200000e+00 3.73800000e+00] - [6.90000000e-01 7.08000000e-01 0.00000000e+00 0.00000000e+00 - 0.00000000e+00 0.00000000e+00 6.94000000e-01 6.64000000e-01]] - - [[0.00000000e+00 0.00000000e+00 3.76000000e+00 3.66600000e+00 - 3.69000000e+00 3.73400000e+00 0.00000000e+00 0.00000000e+00] - [0.00000000e+00 0.00000000e+00 6.68000000e-01 7.22000000e-01 - 6.74000000e-01 6.78000000e-01 0.00000000e+00 0.00000000e+00]] - - [[3.66600000e+00 3.76000000e+00 0.00000000e+00 0.00000000e+00 - 3.73800000e+00 3.65200000e+00 0.00000000e+00 0.00000000e+00] - [7.22000000e-01 6.68000000e-01 0.00000000e+00 0.00000000e+00 - 6.64000000e-01 6.94000000e-01 0.00000000e+00 0.00000000e+00]]] -[[[0.00000000e+00 0.00000000e+00 1.04230514e-01 1.61183126e-01 - 0.00000000e+00 0.00000000e+00 1.50419414e-01 1.00498756e-01] - [0.00000000e+00 0.00000000e+00 2.47790234e-02 3.27108545e-02 - 0.00000000e+00 0.00000000e+00 4.84148737e-02 3.24961536e-02]] - - [[1.61183126e-01 1.04230514e-01 0.00000000e+00 0.00000000e+00 - 0.00000000e+00 0.00000000e+00 1.44201248e-01 1.81229137e-01] - [3.27108545e-02 2.47790234e-02 0.00000000e+00 0.00000000e+00 - 0.00000000e+00 0.00000000e+00 3.41467422e-02 2.20454077e-02]] - - [[0.00000000e+00 0.00000000e+00 1.39355660e-01 9.70875893e-02 - 1.00498756e-01 1.50419414e-01 0.00000000e+00 0.00000000e+00] - [0.00000000e+00 0.00000000e+00 1.56204994e-02 3.27719392e-02 - 3.24961536e-02 4.84148737e-02 0.00000000e+00 0.00000000e+00]] - - [[9.70875893e-02 1.39355660e-01 0.00000000e+00 0.00000000e+00 - 1.81229137e-01 1.44201248e-01 0.00000000e+00 0.00000000e+00] - [3.27719392e-02 1.56204994e-02 0.00000000e+00 0.00000000e+00 - 2.20454077e-02 3.41467422e-02 0.00000000e+00 0.00000000e+00]]] +[[[0.00000000e+00 0.00000000e+00 3.71800000e+00 3.58600000e+00 + 0.00000000e+00 0.00000000e+00 3.62200000e+00 3.71800000e+00] + [0.00000000e+00 0.00000000e+00 6.60000000e-01 6.58000000e-01 + 0.00000000e+00 0.00000000e+00 6.62000000e-01 6.70000000e-01]] + + [[3.58600000e+00 3.71800000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 3.71200000e+00 3.60600000e+00] + [6.58000000e-01 6.60000000e-01 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 7.04000000e-01 6.74000000e-01]] + + [[0.00000000e+00 0.00000000e+00 3.48600000e+00 3.60600000e+00 + 3.71800000e+00 3.62200000e+00 0.00000000e+00 0.00000000e+00] + [0.00000000e+00 0.00000000e+00 6.66000000e-01 6.74000000e-01 + 6.70000000e-01 6.62000000e-01 0.00000000e+00 0.00000000e+00]] + + [[3.60600000e+00 3.48600000e+00 0.00000000e+00 0.00000000e+00 + 3.60600000e+00 3.71200000e+00 0.00000000e+00 0.00000000e+00] + [6.74000000e-01 6.66000000e-01 0.00000000e+00 0.00000000e+00 + 6.74000000e-01 7.04000000e-01 0.00000000e+00 0.00000000e+00]]] +[[[0.00000000e+00 0.00000000e+00 9.96192752e-02 8.73269718e-02 + 0.00000000e+00 0.00000000e+00 1.22531629e-01 1.08369737e-01] + [0.00000000e+00 0.00000000e+00 3.96232255e-02 4.06693988e-02 + 0.00000000e+00 0.00000000e+00 4.05462699e-02 4.27784993e-02]] + + [[8.73269718e-02 9.96192752e-02 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 7.09506871e-02 5.27825729e-02] + [4.06693988e-02 3.96232255e-02 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 6.11228272e-02 5.88727441e-02]] + + [[0.00000000e+00 0.00000000e+00 1.00279609e-01 1.31209756e-01 + 1.08369737e-01 1.22531629e-01 0.00000000e+00 0.00000000e+00] + [0.00000000e+00 0.00000000e+00 6.05475020e-02 4.87442304e-02 + 4.27784993e-02 4.05462699e-02 0.00000000e+00 0.00000000e+00]] + + [[1.31209756e-01 1.00279609e-01 0.00000000e+00 0.00000000e+00 + 5.27825729e-02 7.09506871e-02 0.00000000e+00 0.00000000e+00] + [4.87442304e-02 6.05475020e-02 0.00000000e+00 0.00000000e+00 + 5.88727441e-02 6.11228272e-02 0.00000000e+00 0.00000000e+00]]] domain=1 type=diffusion-coefficient -[1.07648340e+00 2.91048451e-01] -[1.02946730e-01 2.59101197e-02] +[1.05868408e+00 3.16416542e-01] +[7.23607812e-02 4.82261806e-02] domain=1 type=nu-diffusion-coefficient -[1.07648340e+00 2.91048451e-01] -[1.02946730e-01 2.59101197e-02] +[1.05868408e+00 3.16416542e-01] +[7.23607812e-02 4.82261806e-02] domain=1 type=delayed-nu-fission -[[1.27862358e-06 3.04521075e-05] - [7.84219053e-06 1.57184471e-04] - [8.19703020e-06 1.50062017e-04] - [2.11585246e-05 3.36451683e-04] - [1.15983232e-05 1.37940708e-04] - [4.75823112e-06 5.77828684e-05]] -[[8.24665595e-08 1.78649023e-06] - [5.11270396e-07 9.22131636e-06] - [5.43215007e-07 8.80347339e-06] - [1.44919046e-06 1.97381285e-05] - [8.56858673e-07 8.09236929e-06] - [3.49663884e-07 3.38986452e-06]] +[[1.33370452e-06 3.15928985e-05] + [8.06563789e-06 1.63072885e-04] + [8.37555675e-06 1.55683610e-04] + [2.14225848e-05 3.49055766e-04] + [1.15633419e-05 1.43108212e-04] + [4.74849054e-06 5.99475175e-05]] +[[5.58190638e-08 3.43966581e-06] + [2.80924725e-07 1.77545031e-05] + [2.81900859e-07 1.69499982e-05] + [7.44207592e-07 3.80033227e-05] + [4.95821820e-07 1.55808550e-05] + [2.00315983e-07 6.52676436e-06]] domain=1 type=chi-delayed [[0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00] - [0.00000000e+00 0.00000000e+00] + [1.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00]] [[0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00] - [0.00000000e+00 0.00000000e+00] + [1.41421356e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00]] domain=1 type=beta -[[2.24289169e-04 2.27713711e-04] - [1.37563425e-03 1.17538857e-03] - [1.43787829e-03 1.12212853e-03] - [3.71151288e-03 2.51590669e-03] - [2.03451453e-03 1.03148823e-03] - [8.34662928e-04 4.32086724e-04]] -[[1.75760869e-05 1.28957660e-05] - [1.08591736e-04 6.65640010e-05] - [1.14785004e-04 6.35478047e-05] - [3.03169937e-04 1.42479528e-04] - [1.75476030e-04 5.84147049e-05] - [7.17094876e-05 2.44697107e-05]] +[[2.24535003e-04 2.27713710e-04] + [1.35788550e-03 1.17538857e-03] + [1.41006170e-03 1.12212852e-03] + [3.60658609e-03 2.51590665e-03] + [1.94673931e-03 1.03148820e-03] + [7.99429201e-04 4.32086711e-04]] +[[1.15072629e-05 2.77827007e-05] + [6.20475481e-05 1.43405806e-04] + [6.31808205e-05 1.36907698e-04] + [1.64551758e-04 3.06958585e-04] + [1.01406915e-04 1.25848924e-04] + [4.11875799e-05 5.27176635e-05]] domain=1 type=decay-rate -[1.33535692e-02 3.26115957e-02 1.21057117e-01 3.05655911e-01 - 8.60999995e-01 2.89188863e+00] -[6.74373067e-04 1.71978136e-03 6.57917554e-03 1.73982053e-02 - 5.37683207e-02 1.79407115e-01] +[1.33525569e-02 3.26187089e-02 1.21041926e-01 3.05503129e-01 + 8.60433350e-01 2.88996258e+00] +[1.34484408e-03 3.11955840e-03 1.11418058e-02 2.64184722e-02 + 6.46651447e-02 2.19526509e-01] domain=1 type=delayed-nu-fission matrix [[[0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00]] @@ -207,7 +207,7 @@ domain=1 type=delayed-nu-fission matrix [0.00000000e+00 0.00000000e+00]] [[0.00000000e+00 0.00000000e+00] - [0.00000000e+00 0.00000000e+00]] + [1.49294023e-03 0.00000000e+00]] [[0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00]] @@ -224,7 +224,7 @@ domain=1 type=delayed-nu-fission matrix [0.00000000e+00 0.00000000e+00]] [[0.00000000e+00 0.00000000e+00] - [0.00000000e+00 0.00000000e+00]] + [1.49788268e-03 0.00000000e+00]] [[0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00]] diff --git a/tests/regression_tests/mgxs_library_hdf5/test.py b/tests/regression_tests/mgxs_library_hdf5/test.py index 06625c25f9e..4fb4bf09369 100644 --- a/tests/regression_tests/mgxs_library_hdf5/test.py +++ b/tests/regression_tests/mgxs_library_hdf5/test.py @@ -40,7 +40,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Add tallies - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) def _get_results(self, hash_output=False): """Digest info in the statepoint and return as a string.""" diff --git a/tests/regression_tests/mgxs_library_histogram/results_true.dat b/tests/regression_tests/mgxs_library_histogram/results_true.dat index 2fa94cef589..f927d057ee9 100644 --- a/tests/regression_tests/mgxs_library_histogram/results_true.dat +++ b/tests/regression_tests/mgxs_library_histogram/results_true.dat @@ -1,18 +1,18 @@ material group in group out mu bin nuclide mean std. dev. -33 1 1 1 1 total 0.032861 0.003703 -34 1 1 1 2 total 0.026428 0.003637 -35 1 1 1 3 total 0.029210 0.001648 -36 1 1 1 4 total 0.032513 0.004770 -37 1 1 1 5 total 0.030949 0.003129 -38 1 1 1 6 total 0.027124 0.004029 -39 1 1 1 7 total 0.030079 0.002186 -40 1 1 1 8 total 0.037034 0.002198 -41 1 1 1 9 total 0.038251 0.003825 -42 1 1 1 10 total 0.039294 0.003626 -43 1 1 1 11 total 0.062593 0.005934 -22 1 1 2 1 total 0.000000 0.000000 -23 1 1 2 2 total 0.000174 0.000174 -24 1 1 2 3 total 0.000348 0.000213 +33 1 1 1 1 total 0.029945 0.003043 +34 1 1 1 2 total 0.028378 0.003793 +35 1 1 1 3 total 0.033079 0.002866 +36 1 1 1 4 total 0.030119 0.002259 +37 1 1 1 5 total 0.033601 0.003739 +38 1 1 1 6 total 0.035516 0.001929 +39 1 1 1 7 total 0.032382 0.001744 +40 1 1 1 8 total 0.031860 0.002565 +41 1 1 1 9 total 0.038302 0.004757 +42 1 1 1 10 total 0.041784 0.003047 +43 1 1 1 11 total 0.057453 0.003686 +22 1 1 2 1 total 0.000174 0.000174 +23 1 1 2 2 total 0.000000 0.000000 +24 1 1 2 3 total 0.000174 0.000174 25 1 1 2 4 total 0.000174 0.000174 26 1 1 2 5 total 0.000000 0.000000 27 1 1 2 6 total 0.000000 0.000000 @@ -32,32 +32,32 @@ 19 1 2 1 9 total 0.000000 0.000000 20 1 2 1 10 total 0.000000 0.000000 21 1 2 1 11 total 0.000000 0.000000 -0 1 2 2 1 total 0.032383 0.006826 -1 1 2 2 2 total 0.037146 0.001158 -2 1 2 2 3 total 0.036193 0.004463 -3 1 2 2 4 total 0.036193 0.007028 -4 1 2 2 5 total 0.038098 0.006769 -5 1 2 2 6 total 0.024764 0.004638 -6 1 2 2 7 total 0.034288 0.008049 -7 1 2 2 8 total 0.040003 0.007350 -8 1 2 2 9 total 0.032383 0.003211 -9 1 2 2 10 total 0.050480 0.005824 -10 1 2 2 11 total 0.045718 0.013291 +0 1 2 2 1 total 0.037212 0.004892 +1 1 2 2 2 total 0.039224 0.003682 +2 1 2 2 3 total 0.044253 0.005869 +3 1 2 2 4 total 0.043247 0.004970 +4 1 2 2 5 total 0.025144 0.006632 +5 1 2 2 6 total 0.037212 0.009199 +6 1 2 2 7 total 0.035201 0.008964 +7 1 2 2 8 total 0.041235 0.009733 +8 1 2 2 9 total 0.032184 0.002384 +9 1 2 2 10 total 0.026149 0.006714 +10 1 2 2 11 total 0.035201 0.008073 material group in group out mu bin nuclide mean std. dev. -33 1 1 1 1 total 0.032861 0.003703 -34 1 1 1 2 total 0.026428 0.003637 -35 1 1 1 3 total 0.029210 0.001648 -36 1 1 1 4 total 0.032513 0.004770 -37 1 1 1 5 total 0.030949 0.003129 -38 1 1 1 6 total 0.027124 0.004029 -39 1 1 1 7 total 0.030079 0.002186 -40 1 1 1 8 total 0.037034 0.002198 -41 1 1 1 9 total 0.038251 0.003825 -42 1 1 1 10 total 0.039294 0.003626 -43 1 1 1 11 total 0.062593 0.005934 -22 1 1 2 1 total 0.000000 0.000000 -23 1 1 2 2 total 0.000174 0.000174 -24 1 1 2 3 total 0.000348 0.000213 +33 1 1 1 1 total 0.029945 0.003043 +34 1 1 1 2 total 0.028378 0.003793 +35 1 1 1 3 total 0.033079 0.002866 +36 1 1 1 4 total 0.030119 0.002259 +37 1 1 1 5 total 0.033601 0.003739 +38 1 1 1 6 total 0.035516 0.001929 +39 1 1 1 7 total 0.032382 0.001744 +40 1 1 1 8 total 0.031860 0.002565 +41 1 1 1 9 total 0.038302 0.004757 +42 1 1 1 10 total 0.041784 0.003047 +43 1 1 1 11 total 0.057453 0.003686 +22 1 1 2 1 total 0.000174 0.000174 +23 1 1 2 2 total 0.000000 0.000000 +24 1 1 2 3 total 0.000174 0.000174 25 1 1 2 4 total 0.000174 0.000174 26 1 1 2 5 total 0.000000 0.000000 27 1 1 2 6 total 0.000000 0.000000 @@ -77,33 +77,33 @@ 19 1 2 1 9 total 0.000000 0.000000 20 1 2 1 10 total 0.000000 0.000000 21 1 2 1 11 total 0.000000 0.000000 -0 1 2 2 1 total 0.032383 0.006826 -1 1 2 2 2 total 0.037146 0.001158 -2 1 2 2 3 total 0.036193 0.004463 -3 1 2 2 4 total 0.036193 0.007028 -4 1 2 2 5 total 0.038098 0.006769 -5 1 2 2 6 total 0.024764 0.004638 -6 1 2 2 7 total 0.034288 0.008049 -7 1 2 2 8 total 0.040003 0.007350 -8 1 2 2 9 total 0.032383 0.003211 -9 1 2 2 10 total 0.050480 0.005824 -10 1 2 2 11 total 0.045718 0.013291 +0 1 2 2 1 total 0.037212 0.004892 +1 1 2 2 2 total 0.039224 0.003682 +2 1 2 2 3 total 0.044253 0.005869 +3 1 2 2 4 total 0.043247 0.004970 +4 1 2 2 5 total 0.025144 0.006632 +5 1 2 2 6 total 0.037212 0.009199 +6 1 2 2 7 total 0.035201 0.008964 +7 1 2 2 8 total 0.041235 0.009733 +8 1 2 2 9 total 0.032184 0.002384 +9 1 2 2 10 total 0.026149 0.006714 +10 1 2 2 11 total 0.035201 0.008073 material group in group out mu bin nuclide mean std. dev. -33 1 1 1 1 total 0.032927 0.003848 -34 1 1 1 2 total 0.026481 0.003736 -35 1 1 1 3 total 0.029268 0.001884 -36 1 1 1 4 total 0.032578 0.004885 -37 1 1 1 5 total 0.031010 0.003280 -38 1 1 1 6 total 0.027177 0.004124 -39 1 1 1 7 total 0.030139 0.002382 -40 1 1 1 8 total 0.037108 0.002485 -41 1 1 1 9 total 0.038327 0.004013 -42 1 1 1 10 total 0.039372 0.003833 -43 1 1 1 11 total 0.062717 0.006256 -22 1 1 2 1 total 0.000000 0.000000 -23 1 1 2 2 total 0.000174 0.000174 -24 1 1 2 3 total 0.000348 0.000214 -25 1 1 2 4 total 0.000174 0.000174 +33 1 1 1 1 total 0.030147 0.003165 +34 1 1 1 2 total 0.028570 0.003893 +35 1 1 1 3 total 0.033302 0.003016 +36 1 1 1 4 total 0.030322 0.002411 +37 1 1 1 5 total 0.033828 0.003868 +38 1 1 1 6 total 0.035756 0.002159 +39 1 1 1 7 total 0.032601 0.001955 +40 1 1 1 8 total 0.032075 0.002718 +41 1 1 1 9 total 0.038560 0.004896 +42 1 1 1 10 total 0.042066 0.003262 +43 1 1 1 11 total 0.057840 0.004013 +22 1 1 2 1 total 0.000175 0.000175 +23 1 1 2 2 total 0.000000 0.000000 +24 1 1 2 3 total 0.000175 0.000175 +25 1 1 2 4 total 0.000175 0.000175 26 1 1 2 5 total 0.000000 0.000000 27 1 1 2 6 total 0.000000 0.000000 28 1 1 2 7 total 0.000000 0.000000 @@ -122,33 +122,33 @@ 19 1 2 1 9 total 0.000000 0.000000 20 1 2 1 10 total 0.000000 0.000000 21 1 2 1 11 total 0.000000 0.000000 -0 1 2 2 1 total 0.031440 0.006860 -1 1 2 2 2 total 0.036063 0.002322 -2 1 2 2 3 total 0.035138 0.004763 -3 1 2 2 4 total 0.035138 0.007105 -4 1 2 2 5 total 0.036988 0.006894 -5 1 2 2 6 total 0.024042 0.004702 -6 1 2 2 7 total 0.033289 0.008036 -7 1 2 2 8 total 0.038837 0.007464 -8 1 2 2 9 total 0.031440 0.003585 -9 1 2 2 10 total 0.049009 0.006292 -10 1 2 2 11 total 0.044385 0.013144 +0 1 2 2 1 total 0.037164 0.005797 +1 1 2 2 2 total 0.039173 0.004933 +2 1 2 2 3 total 0.044195 0.006937 +3 1 2 2 4 total 0.043191 0.006147 +4 1 2 2 5 total 0.025111 0.006951 +5 1 2 2 6 total 0.037164 0.009702 +6 1 2 2 7 total 0.035155 0.009426 +7 1 2 2 8 total 0.041182 0.010317 +8 1 2 2 9 total 0.032142 0.003598 +9 1 2 2 10 total 0.026115 0.007055 +10 1 2 2 11 total 0.035155 0.008586 material group in group out mu bin nuclide mean std. dev. -33 1 1 1 1 total 0.032927 0.004236 -34 1 1 1 2 total 0.026481 0.003998 -35 1 1 1 3 total 0.029268 0.002455 -36 1 1 1 4 total 0.032578 0.005190 -37 1 1 1 5 total 0.031010 0.003679 -38 1 1 1 6 total 0.027177 0.004376 -39 1 1 1 7 total 0.030139 0.002881 -40 1 1 1 8 total 0.037108 0.003187 -41 1 1 1 9 total 0.038327 0.004511 -42 1 1 1 10 total 0.039372 0.004379 -43 1 1 1 11 total 0.062717 0.007108 -22 1 1 2 1 total 0.000000 0.000000 -23 1 1 2 2 total 0.000174 0.000209 -24 1 1 2 3 total 0.000348 0.000315 -25 1 1 2 4 total 0.000174 0.000209 +33 1 1 1 1 total 0.030147 0.003454 +34 1 1 1 2 total 0.028570 0.004107 +35 1 1 1 3 total 0.033302 0.003381 +36 1 1 1 4 total 0.030322 0.002783 +37 1 1 1 5 total 0.033828 0.004168 +38 1 1 1 6 total 0.035756 0.002711 +39 1 1 1 7 total 0.032601 0.002461 +40 1 1 1 8 total 0.032075 0.003090 +41 1 1 1 9 total 0.038560 0.005205 +42 1 1 1 10 total 0.042066 0.003790 +43 1 1 1 11 total 0.057840 0.004811 +22 1 1 2 1 total 0.000175 0.000234 +23 1 1 2 2 total 0.000000 0.000000 +24 1 1 2 3 total 0.000175 0.000234 +25 1 1 2 4 total 0.000175 0.000234 26 1 1 2 5 total 0.000000 0.000000 27 1 1 2 6 total 0.000000 0.000000 28 1 1 2 7 total 0.000000 0.000000 @@ -167,29 +167,29 @@ 19 1 2 1 9 total 0.000000 0.000000 20 1 2 1 10 total 0.000000 0.000000 21 1 2 1 11 total 0.000000 0.000000 -0 1 2 2 1 total 0.031440 0.007170 -1 1 2 2 2 total 0.036063 0.003334 -2 1 2 2 3 total 0.035138 0.005303 -3 1 2 2 4 total 0.035138 0.007478 -4 1 2 2 5 total 0.036988 0.007318 -5 1 2 2 6 total 0.024042 0.004965 -6 1 2 2 7 total 0.033289 0.008334 -7 1 2 2 8 total 0.038837 0.007896 -8 1 2 2 9 total 0.031440 0.004148 -9 1 2 2 10 total 0.049009 0.007083 -10 1 2 2 11 total 0.044385 0.013469 +0 1 2 2 1 total 0.037164 0.006511 +1 1 2 2 2 total 0.039173 0.005840 +2 1 2 2 3 total 0.044195 0.007782 +3 1 2 2 4 total 0.043191 0.007047 +4 1 2 2 5 total 0.025111 0.007234 +5 1 2 2 6 total 0.037164 0.010146 +6 1 2 2 7 total 0.035155 0.009835 +7 1 2 2 8 total 0.041182 0.010828 +8 1 2 2 9 total 0.032142 0.004419 +9 1 2 2 10 total 0.026115 0.007356 +10 1 2 2 11 total 0.035155 0.009032 material group in group out mu bin nuclide mean std. dev. -33 2 1 1 1 total 0.026798 0.002892 -34 2 1 1 2 total 0.021339 0.003475 -35 2 1 1 3 total 0.021835 0.003963 -36 2 1 1 4 total 0.018361 0.006133 -37 2 1 1 5 total 0.023820 0.003932 -38 2 1 1 6 total 0.025805 0.003808 -39 2 1 1 7 total 0.026798 0.002299 -40 2 1 1 8 total 0.029279 0.003939 -41 2 1 1 9 total 0.034738 0.004323 -42 2 1 1 10 total 0.032753 0.006086 -43 2 1 1 11 total 0.057069 0.003798 +33 2 1 1 1 total 0.025373 0.004281 +34 2 1 1 2 total 0.023909 0.004395 +35 2 1 1 3 total 0.019518 0.003911 +36 2 1 1 4 total 0.019518 0.003424 +37 2 1 1 5 total 0.020006 0.002901 +38 2 1 1 6 total 0.024885 0.005801 +39 2 1 1 7 total 0.019030 0.002566 +40 2 1 1 8 total 0.030741 0.001410 +41 2 1 1 9 total 0.034156 0.002902 +42 2 1 1 10 total 0.042939 0.004498 +43 2 1 1 11 total 0.054650 0.003865 22 2 1 2 1 total 0.000000 0.000000 23 2 1 2 2 total 0.000000 0.000000 24 2 1 2 3 total 0.000000 0.000000 @@ -212,29 +212,29 @@ 19 2 2 1 9 total 0.000000 0.000000 20 2 2 1 10 total 0.000000 0.000000 21 2 2 1 11 total 0.000000 0.000000 -0 2 2 2 1 total 0.032254 0.009449 -1 2 2 2 2 total 0.018815 0.005569 -2 2 2 2 3 total 0.032254 0.009449 -3 2 2 2 4 total 0.024191 0.006844 -4 2 2 2 5 total 0.013439 0.008563 -5 2 2 2 6 total 0.024191 0.005365 -6 2 2 2 7 total 0.043005 0.010420 -7 2 2 2 8 total 0.032254 0.012710 -8 2 2 2 9 total 0.034942 0.007365 -9 2 2 2 10 total 0.021503 0.007051 -10 2 2 2 11 total 0.018815 0.008193 +0 2 2 2 1 total 0.026892 0.012233 +1 2 2 2 2 total 0.034959 0.007449 +2 2 2 2 3 total 0.040337 0.009144 +3 2 2 2 4 total 0.021513 0.003750 +4 2 2 2 5 total 0.018824 0.005602 +5 2 2 2 6 total 0.026892 0.004806 +6 2 2 2 7 total 0.037648 0.012716 +7 2 2 2 8 total 0.026892 0.009768 +8 2 2 2 9 total 0.024202 0.005420 +9 2 2 2 10 total 0.018824 0.010183 +10 2 2 2 11 total 0.018824 0.007033 material group in group out mu bin nuclide mean std. dev. -33 2 1 1 1 total 0.026798 0.002892 -34 2 1 1 2 total 0.021339 0.003475 -35 2 1 1 3 total 0.021835 0.003963 -36 2 1 1 4 total 0.018361 0.006133 -37 2 1 1 5 total 0.023820 0.003932 -38 2 1 1 6 total 0.025805 0.003808 -39 2 1 1 7 total 0.026798 0.002299 -40 2 1 1 8 total 0.029279 0.003939 -41 2 1 1 9 total 0.034738 0.004323 -42 2 1 1 10 total 0.032753 0.006086 -43 2 1 1 11 total 0.057069 0.003798 +33 2 1 1 1 total 0.025373 0.004281 +34 2 1 1 2 total 0.023909 0.004395 +35 2 1 1 3 total 0.019518 0.003911 +36 2 1 1 4 total 0.019518 0.003424 +37 2 1 1 5 total 0.020006 0.002901 +38 2 1 1 6 total 0.024885 0.005801 +39 2 1 1 7 total 0.019030 0.002566 +40 2 1 1 8 total 0.030741 0.001410 +41 2 1 1 9 total 0.034156 0.002902 +42 2 1 1 10 total 0.042939 0.004498 +43 2 1 1 11 total 0.054650 0.003865 22 2 1 2 1 total 0.000000 0.000000 23 2 1 2 2 total 0.000000 0.000000 24 2 1 2 3 total 0.000000 0.000000 @@ -257,29 +257,29 @@ 19 2 2 1 9 total 0.000000 0.000000 20 2 2 1 10 total 0.000000 0.000000 21 2 2 1 11 total 0.000000 0.000000 -0 2 2 2 1 total 0.032254 0.009449 -1 2 2 2 2 total 0.018815 0.005569 -2 2 2 2 3 total 0.032254 0.009449 -3 2 2 2 4 total 0.024191 0.006844 -4 2 2 2 5 total 0.013439 0.008563 -5 2 2 2 6 total 0.024191 0.005365 -6 2 2 2 7 total 0.043005 0.010420 -7 2 2 2 8 total 0.032254 0.012710 -8 2 2 2 9 total 0.034942 0.007365 -9 2 2 2 10 total 0.021503 0.007051 -10 2 2 2 11 total 0.018815 0.008193 +0 2 2 2 1 total 0.026892 0.012233 +1 2 2 2 2 total 0.034959 0.007449 +2 2 2 2 3 total 0.040337 0.009144 +3 2 2 2 4 total 0.021513 0.003750 +4 2 2 2 5 total 0.018824 0.005602 +5 2 2 2 6 total 0.026892 0.004806 +6 2 2 2 7 total 0.037648 0.012716 +7 2 2 2 8 total 0.026892 0.009768 +8 2 2 2 9 total 0.024202 0.005420 +9 2 2 2 10 total 0.018824 0.010183 +10 2 2 2 11 total 0.018824 0.007033 material group in group out mu bin nuclide mean std. dev. -33 2 1 1 1 total 0.026249 0.003012 -34 2 1 1 2 total 0.020902 0.003500 -35 2 1 1 3 total 0.021388 0.003971 -36 2 1 1 4 total 0.017986 0.006048 -37 2 1 1 5 total 0.023333 0.003958 -38 2 1 1 6 total 0.025277 0.003858 -39 2 1 1 7 total 0.026249 0.002473 -40 2 1 1 8 total 0.028680 0.004017 -41 2 1 1 9 total 0.034027 0.004437 -42 2 1 1 10 total 0.032082 0.006091 -43 2 1 1 11 total 0.055901 0.004311 +33 2 1 1 1 total 0.025753 0.004484 +34 2 1 1 2 total 0.024267 0.004581 +35 2 1 1 3 total 0.019810 0.004060 +36 2 1 1 4 total 0.019810 0.003579 +37 2 1 1 5 total 0.020305 0.003071 +38 2 1 1 6 total 0.025258 0.005987 +39 2 1 1 7 total 0.019315 0.002734 +40 2 1 1 8 total 0.031201 0.001961 +41 2 1 1 9 total 0.034668 0.003301 +42 2 1 1 10 total 0.043582 0.004935 +43 2 1 1 11 total 0.055468 0.004591 22 2 1 2 1 total 0.000000 0.000000 23 2 1 2 2 total 0.000000 0.000000 24 2 1 2 3 total 0.000000 0.000000 @@ -302,29 +302,29 @@ 19 2 2 1 9 total 0.000000 0.000000 20 2 2 1 10 total 0.000000 0.000000 21 2 2 1 11 total 0.000000 0.000000 -0 2 2 2 1 total 0.032230 0.009604 -1 2 2 2 2 total 0.018801 0.005658 -2 2 2 2 3 total 0.032230 0.009604 -3 2 2 2 4 total 0.024172 0.006964 -4 2 2 2 5 total 0.013429 0.008588 -5 2 2 2 6 total 0.024172 0.005520 -6 2 2 2 7 total 0.042973 0.010671 -7 2 2 2 8 total 0.032230 0.012821 -8 2 2 2 9 total 0.034915 0.007601 -9 2 2 2 10 total 0.021486 0.007142 -10 2 2 2 11 total 0.018801 0.008251 +0 2 2 2 1 total 0.026854 0.012543 +1 2 2 2 2 total 0.034911 0.008307 +2 2 2 2 3 total 0.040281 0.010079 +3 2 2 2 4 total 0.021483 0.004382 +4 2 2 2 5 total 0.018798 0.005938 +5 2 2 2 6 total 0.026854 0.005579 +6 2 2 2 7 total 0.037596 0.013308 +7 2 2 2 8 total 0.026854 0.010161 +8 2 2 2 9 total 0.024169 0.005987 +9 2 2 2 10 total 0.018798 0.010362 +10 2 2 2 11 total 0.018798 0.007300 material group in group out mu bin nuclide mean std. dev. -33 2 1 1 1 total 0.026249 0.003460 -34 2 1 1 2 total 0.020902 0.003754 -35 2 1 1 3 total 0.021388 0.004206 -36 2 1 1 4 total 0.017986 0.006160 -37 2 1 1 5 total 0.023333 0.004238 -38 2 1 1 6 total 0.025277 0.004192 -39 2 1 1 7 total 0.026249 0.003003 -40 2 1 1 8 total 0.028680 0.004427 -41 2 1 1 9 total 0.034027 0.004956 -42 2 1 1 10 total 0.032082 0.006437 -43 2 1 1 11 total 0.055901 0.005636 +33 2 1 1 1 total 0.025753 0.004661 +34 2 1 1 2 total 0.024267 0.004736 +35 2 1 1 3 total 0.019810 0.004177 +36 2 1 1 4 total 0.019810 0.003711 +37 2 1 1 5 total 0.020305 0.003231 +38 2 1 1 6 total 0.025258 0.006117 +39 2 1 1 7 total 0.019315 0.002897 +40 2 1 1 8 total 0.031201 0.002497 +41 2 1 1 9 total 0.034668 0.003721 +42 2 1 1 10 total 0.043582 0.005386 +43 2 1 1 11 total 0.055468 0.005350 22 2 1 2 1 total 0.000000 0.000000 23 2 1 2 2 total 0.000000 0.000000 24 2 1 2 3 total 0.000000 0.000000 @@ -347,40 +347,40 @@ 19 2 2 1 9 total 0.000000 0.000000 20 2 2 1 10 total 0.000000 0.000000 21 2 2 1 11 total 0.000000 0.000000 -0 2 2 2 1 total 0.032230 0.010330 -1 2 2 2 2 total 0.018801 0.006077 -2 2 2 2 3 total 0.032230 0.010330 -3 2 2 2 4 total 0.024172 0.007526 -4 2 2 2 5 total 0.013429 0.008733 -5 2 2 2 6 total 0.024172 0.006213 -6 2 2 2 7 total 0.042973 0.011815 -7 2 2 2 8 total 0.032230 0.013373 -8 2 2 2 9 total 0.034915 0.008646 -9 2 2 2 10 total 0.021486 0.007579 -10 2 2 2 11 total 0.018801 0.008544 +0 2 2 2 1 total 0.026854 0.013054 +1 2 2 2 2 total 0.034911 0.009546 +2 2 2 2 3 total 0.040281 0.011446 +3 2 2 2 4 total 0.021483 0.005251 +4 2 2 2 5 total 0.018798 0.006456 +5 2 2 2 6 total 0.026854 0.006649 +6 2 2 2 7 total 0.037596 0.014239 +7 2 2 2 8 total 0.026854 0.010785 +8 2 2 2 9 total 0.024169 0.006815 +9 2 2 2 10 total 0.018798 0.010667 +10 2 2 2 11 total 0.018798 0.007727 material group in group out mu bin nuclide mean std. dev. -33 3 1 1 1 total 0.007006 0.000692 -34 3 1 1 2 total 0.006819 0.000431 -35 3 1 1 3 total 0.005511 0.000591 -36 3 1 1 4 total 0.006165 0.000470 -37 3 1 1 5 total 0.007660 0.000919 -38 3 1 1 6 total 0.012237 0.000938 -39 3 1 1 7 total 0.040914 0.002235 -40 3 1 1 8 total 0.074356 0.001968 -41 3 1 1 9 total 0.121622 0.004662 -42 3 1 1 10 total 0.158707 0.004147 -43 3 1 1 11 total 0.200742 0.007791 -22 3 1 2 1 total 0.000187 0.000187 -23 3 1 2 2 total 0.001028 0.000096 -24 3 1 2 3 total 0.000841 0.000176 -25 3 1 2 4 total 0.000841 0.000310 -26 3 1 2 5 total 0.001308 0.000274 -27 3 1 2 6 total 0.003736 0.000538 -28 3 1 2 7 total 0.003830 0.000703 -29 3 1 2 8 total 0.006259 0.000452 -30 3 1 2 9 total 0.005231 0.000510 -31 3 1 2 10 total 0.005044 0.000440 -32 3 1 2 11 total 0.002522 0.000194 +33 3 1 1 1 total 0.007681 0.001043 +34 3 1 1 2 total 0.005645 0.000710 +35 3 1 1 3 total 0.007403 0.000552 +36 3 1 1 4 total 0.007866 0.000512 +37 3 1 1 5 total 0.007589 0.000524 +38 3 1 1 6 total 0.011198 0.001548 +39 3 1 1 7 total 0.039701 0.002533 +40 3 1 1 8 total 0.075978 0.001897 +41 3 1 1 9 total 0.112532 0.003677 +42 3 1 1 10 total 0.166670 0.005003 +43 3 1 1 11 total 0.210443 0.005656 +22 3 1 2 1 total 0.000463 0.000207 +23 3 1 2 2 total 0.000555 0.000227 +24 3 1 2 3 total 0.000740 0.000429 +25 3 1 2 4 total 0.001111 0.000236 +26 3 1 2 5 total 0.002128 0.000631 +27 3 1 2 6 total 0.003146 0.000645 +28 3 1 2 7 total 0.004905 0.000561 +29 3 1 2 8 total 0.005738 0.000742 +30 3 1 2 9 total 0.005090 0.000672 +31 3 1 2 10 total 0.005367 0.000561 +32 3 1 2 11 total 0.002406 0.000593 11 3 2 1 1 total 0.000000 0.000000 12 3 2 1 2 total 0.000000 0.000000 13 3 2 1 3 total 0.000000 0.000000 @@ -390,42 +390,42 @@ 17 3 2 1 7 total 0.000000 0.000000 18 3 2 1 8 total 0.000000 0.000000 19 3 2 1 9 total 0.000000 0.000000 -20 3 2 1 10 total 0.000467 0.000467 -21 3 2 1 11 total 0.000000 0.000000 -0 3 2 2 1 total 0.084030 0.007630 -1 3 2 2 2 total 0.099902 0.010027 -2 3 2 2 3 total 0.112040 0.010928 -3 3 2 2 4 total 0.117642 0.008523 -4 3 2 2 5 total 0.139116 0.009002 -5 3 2 2 6 total 0.161057 0.013537 -6 3 2 2 7 total 0.180664 0.010135 -7 3 2 2 8 total 0.219411 0.014717 -8 3 2 2 9 total 0.239485 0.027005 -9 3 2 2 10 total 0.281033 0.021376 -10 3 2 2 11 total 0.369731 0.027200 +20 3 2 1 10 total 0.000000 0.000000 +21 3 2 1 11 total 0.000474 0.000475 +0 3 2 2 1 total 0.074402 0.007811 +1 3 2 2 2 total 0.103783 0.009042 +2 3 2 2 3 total 0.106153 0.012691 +3 3 2 2 4 total 0.115631 0.011475 +4 3 2 2 5 total 0.128900 0.014096 +5 3 2 2 6 total 0.169655 0.021010 +6 3 2 2 7 total 0.175816 0.016086 +7 3 2 2 8 total 0.217519 0.029631 +8 3 2 2 9 total 0.247374 0.021476 +9 3 2 2 10 total 0.299977 0.031756 +10 3 2 2 11 total 0.351157 0.027654 material group in group out mu bin nuclide mean std. dev. -33 3 1 1 1 total 0.007006 0.000692 -34 3 1 1 2 total 0.006819 0.000431 -35 3 1 1 3 total 0.005511 0.000591 -36 3 1 1 4 total 0.006165 0.000470 -37 3 1 1 5 total 0.007660 0.000919 -38 3 1 1 6 total 0.012237 0.000938 -39 3 1 1 7 total 0.040914 0.002235 -40 3 1 1 8 total 0.074356 0.001968 -41 3 1 1 9 total 0.121622 0.004662 -42 3 1 1 10 total 0.158707 0.004147 -43 3 1 1 11 total 0.200742 0.007791 -22 3 1 2 1 total 0.000187 0.000187 -23 3 1 2 2 total 0.001028 0.000096 -24 3 1 2 3 total 0.000841 0.000176 -25 3 1 2 4 total 0.000841 0.000310 -26 3 1 2 5 total 0.001308 0.000274 -27 3 1 2 6 total 0.003736 0.000538 -28 3 1 2 7 total 0.003830 0.000703 -29 3 1 2 8 total 0.006259 0.000452 -30 3 1 2 9 total 0.005231 0.000510 -31 3 1 2 10 total 0.005044 0.000440 -32 3 1 2 11 total 0.002522 0.000194 +33 3 1 1 1 total 0.007681 0.001043 +34 3 1 1 2 total 0.005645 0.000710 +35 3 1 1 3 total 0.007403 0.000552 +36 3 1 1 4 total 0.007866 0.000512 +37 3 1 1 5 total 0.007589 0.000524 +38 3 1 1 6 total 0.011198 0.001548 +39 3 1 1 7 total 0.039701 0.002533 +40 3 1 1 8 total 0.075978 0.001897 +41 3 1 1 9 total 0.112532 0.003677 +42 3 1 1 10 total 0.166670 0.005003 +43 3 1 1 11 total 0.210443 0.005656 +22 3 1 2 1 total 0.000463 0.000207 +23 3 1 2 2 total 0.000555 0.000227 +24 3 1 2 3 total 0.000740 0.000429 +25 3 1 2 4 total 0.001111 0.000236 +26 3 1 2 5 total 0.002128 0.000631 +27 3 1 2 6 total 0.003146 0.000645 +28 3 1 2 7 total 0.004905 0.000561 +29 3 1 2 8 total 0.005738 0.000742 +30 3 1 2 9 total 0.005090 0.000672 +31 3 1 2 10 total 0.005367 0.000561 +32 3 1 2 11 total 0.002406 0.000593 11 3 2 1 1 total 0.000000 0.000000 12 3 2 1 2 total 0.000000 0.000000 13 3 2 1 3 total 0.000000 0.000000 @@ -435,42 +435,42 @@ 17 3 2 1 7 total 0.000000 0.000000 18 3 2 1 8 total 0.000000 0.000000 19 3 2 1 9 total 0.000000 0.000000 -20 3 2 1 10 total 0.000467 0.000467 -21 3 2 1 11 total 0.000000 0.000000 -0 3 2 2 1 total 0.084030 0.007630 -1 3 2 2 2 total 0.099902 0.010027 -2 3 2 2 3 total 0.112040 0.010928 -3 3 2 2 4 total 0.117642 0.008523 -4 3 2 2 5 total 0.139116 0.009002 -5 3 2 2 6 total 0.161057 0.013537 -6 3 2 2 7 total 0.180664 0.010135 -7 3 2 2 8 total 0.219411 0.014717 -8 3 2 2 9 total 0.239485 0.027005 -9 3 2 2 10 total 0.281033 0.021376 -10 3 2 2 11 total 0.369731 0.027200 +20 3 2 1 10 total 0.000000 0.000000 +21 3 2 1 11 total 0.000474 0.000475 +0 3 2 2 1 total 0.074402 0.007811 +1 3 2 2 2 total 0.103783 0.009042 +2 3 2 2 3 total 0.106153 0.012691 +3 3 2 2 4 total 0.115631 0.011475 +4 3 2 2 5 total 0.128900 0.014096 +5 3 2 2 6 total 0.169655 0.021010 +6 3 2 2 7 total 0.175816 0.016086 +7 3 2 2 8 total 0.217519 0.029631 +8 3 2 2 9 total 0.247374 0.021476 +9 3 2 2 10 total 0.299977 0.031756 +10 3 2 2 11 total 0.351157 0.027654 material group in group out mu bin nuclide mean std. dev. -33 3 1 1 1 total 0.007106 0.000737 -34 3 1 1 2 total 0.006917 0.000488 -35 3 1 1 3 total 0.005590 0.000624 -36 3 1 1 4 total 0.006254 0.000516 -37 3 1 1 5 total 0.007770 0.000964 -38 3 1 1 6 total 0.012412 0.001029 -39 3 1 1 7 total 0.041501 0.002618 -40 3 1 1 8 total 0.075421 0.003106 -41 3 1 1 9 total 0.123365 0.006125 -42 3 1 1 10 total 0.160981 0.006595 -43 3 1 1 11 total 0.203618 0.010185 -22 3 1 2 1 total 0.000190 0.000190 -23 3 1 2 2 total 0.001042 0.000103 -24 3 1 2 3 total 0.000853 0.000180 -25 3 1 2 4 total 0.000853 0.000316 -26 3 1 2 5 total 0.001327 0.000281 -27 3 1 2 6 total 0.003790 0.000559 -28 3 1 2 7 total 0.003885 0.000724 -29 3 1 2 8 total 0.006348 0.000500 -30 3 1 2 9 total 0.005306 0.000544 -31 3 1 2 10 total 0.005117 0.000475 -32 3 1 2 11 total 0.002558 0.000213 +33 3 1 1 1 total 0.007759 0.001080 +34 3 1 1 2 total 0.005703 0.000738 +35 3 1 1 3 total 0.007479 0.000602 +36 3 1 1 4 total 0.007946 0.000571 +37 3 1 1 5 total 0.007666 0.000578 +38 3 1 1 6 total 0.011312 0.001601 +39 3 1 1 7 total 0.040106 0.002833 +40 3 1 1 8 total 0.076753 0.003016 +41 3 1 1 9 total 0.113680 0.005068 +42 3 1 1 10 total 0.168370 0.007185 +43 3 1 1 11 total 0.212589 0.008616 +22 3 1 2 1 total 0.000467 0.000210 +23 3 1 2 2 total 0.000561 0.000230 +24 3 1 2 3 total 0.000748 0.000434 +25 3 1 2 4 total 0.001122 0.000241 +26 3 1 2 5 total 0.002150 0.000641 +27 3 1 2 6 total 0.003179 0.000659 +28 3 1 2 7 total 0.004955 0.000586 +29 3 1 2 8 total 0.005796 0.000770 +30 3 1 2 9 total 0.005142 0.000697 +31 3 1 2 10 total 0.005422 0.000590 +32 3 1 2 11 total 0.002431 0.000604 11 3 2 1 1 total 0.000000 0.000000 12 3 2 1 2 total 0.000000 0.000000 13 3 2 1 3 total 0.000000 0.000000 @@ -480,42 +480,42 @@ 17 3 2 1 7 total 0.000000 0.000000 18 3 2 1 8 total 0.000000 0.000000 19 3 2 1 9 total 0.000000 0.000000 -20 3 2 1 10 total 0.000466 0.000467 -21 3 2 1 11 total 0.000000 0.000000 -0 3 2 2 1 total 0.083912 0.007782 -1 3 2 2 2 total 0.099762 0.010188 -2 3 2 2 3 total 0.111883 0.011115 -3 3 2 2 4 total 0.117477 0.008794 -4 3 2 2 5 total 0.138921 0.009363 -5 3 2 2 6 total 0.160831 0.013853 -6 3 2 2 7 total 0.180411 0.010676 -7 3 2 2 8 total 0.219104 0.015265 -8 3 2 2 9 total 0.239149 0.027341 -9 3 2 2 10 total 0.280639 0.021991 -10 3 2 2 11 total 0.369213 0.028038 +20 3 2 1 10 total 0.000000 0.000000 +21 3 2 1 11 total 0.000477 0.000479 +0 3 2 2 1 total 0.074833 0.009685 +1 3 2 2 2 total 0.104384 0.012046 +2 3 2 2 3 total 0.106768 0.015107 +3 3 2 2 4 total 0.116300 0.014515 +4 3 2 2 5 total 0.129646 0.017242 +5 3 2 2 6 total 0.170637 0.024765 +6 3 2 2 7 total 0.176834 0.020997 +7 3 2 2 8 total 0.218778 0.034093 +8 3 2 2 9 total 0.248807 0.028656 +9 3 2 2 10 total 0.301714 0.039263 +10 3 2 2 11 total 0.353191 0.038577 material group in group out mu bin nuclide mean std. dev. -33 3 1 1 1 total 0.007106 0.000751 -34 3 1 1 2 total 0.006917 0.000509 -35 3 1 1 3 total 0.005590 0.000635 -36 3 1 1 4 total 0.006254 0.000532 -37 3 1 1 5 total 0.007770 0.000977 -38 3 1 1 6 total 0.012412 0.001060 -39 3 1 1 7 total 0.041501 0.002755 -40 3 1 1 8 total 0.075421 0.003475 -41 3 1 1 9 total 0.123365 0.006634 -42 3 1 1 10 total 0.160981 0.007387 -43 3 1 1 11 total 0.203618 0.011019 -22 3 1 2 1 total 0.000190 0.000190 -23 3 1 2 2 total 0.001042 0.000114 -24 3 1 2 3 total 0.000853 0.000185 -25 3 1 2 4 total 0.000853 0.000319 -26 3 1 2 5 total 0.001327 0.000288 -27 3 1 2 6 total 0.003790 0.000588 -28 3 1 2 7 total 0.003885 0.000748 -29 3 1 2 8 total 0.006348 0.000587 -30 3 1 2 9 total 0.005306 0.000601 -31 3 1 2 10 total 0.005117 0.000535 -32 3 1 2 11 total 0.002558 0.000246 +33 3 1 1 1 total 0.007759 0.001091 +34 3 1 1 2 total 0.005703 0.000746 +35 3 1 1 3 total 0.007479 0.000619 +36 3 1 1 4 total 0.007946 0.000592 +37 3 1 1 5 total 0.007666 0.000598 +38 3 1 1 6 total 0.011312 0.001616 +39 3 1 1 7 total 0.040106 0.002941 +40 3 1 1 8 total 0.076753 0.003373 +41 3 1 1 9 total 0.113680 0.005540 +42 3 1 1 10 total 0.168370 0.007913 +43 3 1 1 11 total 0.212589 0.009578 +22 3 1 2 1 total 0.000467 0.000211 +23 3 1 2 2 total 0.000561 0.000232 +24 3 1 2 3 total 0.000748 0.000436 +25 3 1 2 4 total 0.001122 0.000250 +26 3 1 2 5 total 0.002150 0.000653 +27 3 1 2 6 total 0.003179 0.000684 +28 3 1 2 7 total 0.004955 0.000654 +29 3 1 2 8 total 0.005796 0.000841 +30 3 1 2 9 total 0.005142 0.000759 +31 3 1 2 10 total 0.005422 0.000670 +32 3 1 2 11 total 0.002431 0.000620 11 3 2 1 1 total 0.000000 0.000000 12 3 2 1 2 total 0.000000 0.000000 13 3 2 1 3 total 0.000000 0.000000 @@ -525,16 +525,16 @@ 17 3 2 1 7 total 0.000000 0.000000 18 3 2 1 8 total 0.000000 0.000000 19 3 2 1 9 total 0.000000 0.000000 -20 3 2 1 10 total 0.000466 0.000808 -21 3 2 1 11 total 0.000000 0.000000 -0 3 2 2 1 total 0.083912 0.008936 -1 3 2 2 2 total 0.099762 0.011448 -2 3 2 2 3 total 0.111883 0.012563 -3 3 2 2 4 total 0.117477 0.010731 -4 3 2 2 5 total 0.138921 0.011855 -5 3 2 2 6 total 0.160831 0.016211 -6 3 2 2 7 total 0.180411 0.014254 -7 3 2 2 8 total 0.219104 0.019093 -8 3 2 2 9 total 0.239149 0.030071 -9 3 2 2 10 total 0.280639 0.026447 -10 3 2 2 11 total 0.369213 0.034054 +20 3 2 1 10 total 0.000000 0.000000 +21 3 2 1 11 total 0.000477 0.000827 +0 3 2 2 1 total 0.074833 0.011051 +1 3 2 2 2 total 0.104384 0.014150 +2 3 2 2 3 total 0.106768 0.016908 +3 3 2 2 4 total 0.116300 0.016707 +4 3 2 2 5 total 0.129646 0.019553 +5 3 2 2 6 total 0.170637 0.027579 +6 3 2 2 7 total 0.176834 0.024476 +7 3 2 2 8 total 0.218778 0.037476 +8 3 2 2 9 total 0.248807 0.033680 +9 3 2 2 10 total 0.301714 0.044745 +10 3 2 2 11 total 0.353191 0.046035 diff --git a/tests/regression_tests/mgxs_library_histogram/test.py b/tests/regression_tests/mgxs_library_histogram/test.py index b9905910abc..42fc1957a6b 100644 --- a/tests/regression_tests/mgxs_library_histogram/test.py +++ b/tests/regression_tests/mgxs_library_histogram/test.py @@ -30,7 +30,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Add tallies - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) def _get_results(self, hash_output=False): """Digest info in the statepoint and return as a string.""" diff --git a/tests/regression_tests/mgxs_library_mesh/results_true.dat b/tests/regression_tests/mgxs_library_mesh/results_true.dat index b1e8ac003be..16b86870d7d 100644 --- a/tests/regression_tests/mgxs_library_mesh/results_true.dat +++ b/tests/regression_tests/mgxs_library_mesh/results_true.dat @@ -1,362 +1,362 @@ mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.102539 0.004894 -2 1 2 1 1 total 0.106476 0.007513 -1 2 1 1 1 total 0.101207 0.004814 -3 2 2 1 1 total 0.101733 0.004445 +0 1 1 1 1 total 0.103374 0.004981 +2 1 2 1 1 total 0.103852 0.004752 +1 2 1 1 1 total 0.103322 0.003613 +3 2 2 1 1 total 0.102889 0.003387 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.073423 0.005232 -2 1 2 1 1 total 0.077906 0.007749 -1 2 1 1 1 total 0.071315 0.005181 -3 2 2 1 1 total 0.071983 0.004856 +0 1 1 1 1 total 0.072760 0.005235 +2 1 2 1 1 total 0.074856 0.004972 +1 2 1 1 1 total 0.074583 0.004000 +3 2 2 1 1 total 0.072925 0.003485 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.073443 0.005235 -2 1 2 1 1 total 0.077909 0.007749 -1 2 1 1 1 total 0.071315 0.005181 -3 2 2 1 1 total 0.071928 0.004865 +0 1 1 1 1 total 0.072768 0.005236 +2 1 2 1 1 total 0.074864 0.004972 +1 2 1 1 1 total 0.074603 0.004002 +3 2 2 1 1 total 0.072881 0.003491 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.013089 0.000762 -2 1 2 1 1 total 0.013802 0.000950 -1 2 1 1 1 total 0.012818 0.000708 -3 2 2 1 1 total 0.012954 0.000699 +0 1 1 1 1 total 0.013309 0.000729 +2 1 2 1 1 total 0.013223 0.000707 +1 2 1 1 1 total 0.013222 0.000596 +3 2 2 1 1 total 0.013282 0.000564 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.013016 0.000761 -2 1 2 1 1 total 0.013715 0.000947 -1 2 1 1 1 total 0.012740 0.000707 -3 2 2 1 1 total 0.012886 0.000698 +0 1 1 1 1 total 0.013241 0.000728 +2 1 2 1 1 total 0.013142 0.000705 +1 2 1 1 1 total 0.013137 0.000596 +3 2 2 1 1 total 0.013221 0.000564 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.001244 0.000926 -2 1 2 1 1 total 0.001345 0.000851 -1 2 1 1 1 total 0.001196 0.000768 -3 2 2 1 1 total 0.001234 0.000843 +0 1 1 1 1 total 0.001281 0.000874 +2 1 2 1 1 total 0.001297 0.000731 +1 2 1 1 1 total 0.001281 0.000744 +3 2 2 1 1 total 0.001288 0.000719 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.011844 0.000690 -2 1 2 1 1 total 0.012457 0.000852 -1 2 1 1 1 total 0.011622 0.000636 -3 2 2 1 1 total 0.011719 0.000633 +0 1 1 1 1 total 0.012029 0.000664 +2 1 2 1 1 total 0.011926 0.000639 +1 2 1 1 1 total 0.011941 0.000545 +3 2 2 1 1 total 0.011994 0.000515 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.030919 0.001784 -2 1 2 1 1 total 0.032495 0.002202 -1 2 1 1 1 total 0.030363 0.001664 -3 2 2 1 1 total 0.030565 0.001671 +0 1 1 1 1 total 0.031361 0.001735 +2 1 2 1 1 total 0.031091 0.001675 +1 2 1 1 1 total 0.031169 0.001418 +3 2 2 1 1 total 0.031255 0.001366 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 2.290786e+06 133521.277651 -2 1 2 1 1 total 2.409292e+06 164752.430241 -1 2 1 1 1 total 2.247742e+06 123005.689035 -3 2 2 1 1 total 2.266603e+06 122428.448367 +0 1 1 1 1 total 2.326447e+06 128504.886535 +2 1 2 1 1 total 2.306518e+06 123638.096130 +1 2 1 1 1 total 2.309435e+06 105395.059055 +3 2 2 1 1 total 2.319667e+06 99692.620001 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.089450 0.004147 -2 1 2 1 1 total 0.092674 0.006571 -1 2 1 1 1 total 0.088389 0.004152 -3 2 2 1 1 total 0.088779 0.003763 +0 1 1 1 1 total 0.090065 0.004262 +2 1 2 1 1 total 0.090629 0.004086 +1 2 1 1 1 total 0.090100 0.003045 +3 2 2 1 1 total 0.089607 0.002828 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.089555 0.004061 -2 1 2 1 1 total 0.092658 0.006216 -1 2 1 1 1 total 0.088293 0.004423 -3 2 2 1 1 total 0.088717 0.004937 +0 1 1 1 1 total 0.090188 0.005151 +2 1 2 1 1 total 0.094339 0.004349 +1 2 1 1 1 total 0.088294 0.003953 +3 2 2 1 1 total 0.089633 0.002592 mesh 1 group in group out legendre nuclide mean std. dev. x y z -0 1 1 1 1 1 P0 total 0.089523 0.004070 -1 1 1 1 1 1 P1 total 0.029116 0.001851 -2 1 1 1 1 1 P2 total 0.016529 0.000827 -3 1 1 1 1 1 P3 total 0.009975 0.000731 -8 1 2 1 1 1 P0 total 0.092626 0.006233 -9 1 2 1 1 1 P1 total 0.028570 0.001899 -10 1 2 1 1 1 P2 total 0.015737 0.001986 -11 1 2 1 1 1 P3 total 0.008492 0.000859 -4 2 1 1 1 1 P0 total 0.088293 0.004423 -5 2 1 1 1 1 P1 total 0.029892 0.001916 -6 2 1 1 1 1 P2 total 0.016736 0.000714 -7 2 1 1 1 1 P3 total 0.009129 0.000509 -12 2 2 1 1 1 P0 total 0.088617 0.004889 -13 2 2 1 1 1 P1 total 0.029750 0.001954 -14 2 2 1 1 1 P2 total 0.016440 0.001320 -15 2 2 1 1 1 P3 total 0.009758 0.000538 +0 1 1 1 1 1 P0 total 0.090122 0.005149 +1 1 1 1 1 1 P1 total 0.030614 0.001612 +2 1 1 1 1 1 P2 total 0.016490 0.000897 +3 1 1 1 1 1 P3 total 0.010163 0.000829 +8 1 2 1 1 1 P0 total 0.094307 0.004337 +9 1 2 1 1 1 P1 total 0.028996 0.001462 +10 1 2 1 1 1 P2 total 0.017486 0.000808 +11 1 2 1 1 1 P3 total 0.009753 0.000742 +4 2 1 1 1 1 P0 total 0.088198 0.003959 +5 2 1 1 1 1 P1 total 0.028739 0.001715 +6 2 1 1 1 1 P2 total 0.015608 0.000680 +7 2 1 1 1 1 P3 total 0.008232 0.000363 +12 2 2 1 1 1 P0 total 0.089536 0.002551 +13 2 2 1 1 1 P1 total 0.029964 0.000821 +14 2 2 1 1 1 P2 total 0.015742 0.001260 +15 2 2 1 1 1 P3 total 0.008944 0.000385 mesh 1 group in group out legendre nuclide mean std. dev. x y z -0 1 1 1 1 1 P0 total 0.089555 0.004061 -1 1 1 1 1 1 P1 total 0.029096 0.001859 -2 1 1 1 1 1 P2 total 0.016532 0.000828 -3 1 1 1 1 1 P3 total 0.009986 0.000734 -8 1 2 1 1 1 P0 total 0.092658 0.006216 -9 1 2 1 1 1 P1 total 0.028567 0.001899 -10 1 2 1 1 1 P2 total 0.015721 0.001995 -11 1 2 1 1 1 P3 total 0.008496 0.000857 -4 2 1 1 1 1 P0 total 0.088293 0.004423 -5 2 1 1 1 1 P1 total 0.029892 0.001916 -6 2 1 1 1 1 P2 total 0.016736 0.000714 -7 2 1 1 1 1 P3 total 0.009129 0.000509 -12 2 2 1 1 1 P0 total 0.088717 0.004937 -13 2 2 1 1 1 P1 total 0.029805 0.001977 -14 2 2 1 1 1 P2 total 0.016448 0.001327 -15 2 2 1 1 1 P3 total 0.009752 0.000534 +0 1 1 1 1 1 P0 total 0.090188 0.005151 +1 1 1 1 1 1 P1 total 0.030606 0.001614 +2 1 1 1 1 1 P2 total 0.016462 0.000898 +3 1 1 1 1 1 P3 total 0.010173 0.000824 +8 1 2 1 1 1 P0 total 0.094339 0.004349 +9 1 2 1 1 1 P1 total 0.028988 0.001462 +10 1 2 1 1 1 P2 total 0.017473 0.000811 +11 1 2 1 1 1 P3 total 0.009763 0.000749 +4 2 1 1 1 1 P0 total 0.088294 0.003953 +5 2 1 1 1 1 P1 total 0.028719 0.001720 +6 2 1 1 1 1 P2 total 0.015571 0.000691 +7 2 1 1 1 1 P3 total 0.008255 0.000361 +12 2 2 1 1 1 P0 total 0.089633 0.002592 +13 2 2 1 1 1 P1 total 0.030008 0.000847 +14 2 2 1 1 1 P2 total 0.015748 0.001284 +15 2 2 1 1 1 P3 total 0.008951 0.000387 mesh 1 group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 1.000362 0.044694 -2 1 2 1 1 1 total 1.000346 0.059372 -1 2 1 1 1 1 total 1.000000 0.055277 -3 2 2 1 1 1 total 1.001132 0.057130 +0 1 1 1 1 1 total 1.000736 0.060260 +2 1 2 1 1 1 total 1.000346 0.042656 +1 2 1 1 1 1 total 1.001091 0.052736 +3 2 2 1 1 1 total 1.001078 0.038212 mesh 1 group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.031634 0.002236 -2 1 2 1 1 1 total 0.032561 0.002344 -1 2 1 1 1 1 total 0.030820 0.002579 -3 2 2 1 1 1 total 0.029308 0.002507 +0 1 1 1 1 1 total 0.031890 0.002523 +2 1 2 1 1 1 total 0.032714 0.001502 +1 2 1 1 1 1 total 0.030414 0.002369 +3 2 2 1 1 1 total 0.031051 0.001521 mesh 1 group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 1.0 0.044796 -2 1 2 1 1 1 total 1.0 0.059579 -1 2 1 1 1 1 total 1.0 0.055277 -3 2 2 1 1 1 total 1.0 0.056598 +0 1 1 1 1 1 total 1.0 0.060234 +2 1 2 1 1 1 total 1.0 0.042523 +1 2 1 1 1 1 total 1.0 0.052777 +3 2 2 1 1 1 total 1.0 0.037842 mesh 1 group in group out legendre nuclide mean std. dev. x y z -0 1 1 1 1 1 P0 total 0.089450 0.005766 -1 1 1 1 1 1 P1 total 0.029092 0.002277 -2 1 1 1 1 1 P2 total 0.016516 0.001119 -3 1 1 1 1 1 P3 total 0.009967 0.000861 -8 1 2 1 1 1 P0 total 0.092674 0.008583 -9 1 2 1 1 1 P1 total 0.028585 0.002630 -10 1 2 1 1 1 P2 total 0.015745 0.002226 -11 1 2 1 1 1 P3 total 0.008496 0.001015 -4 2 1 1 1 1 P0 total 0.088389 0.006412 -5 2 1 1 1 1 P1 total 0.029924 0.002479 -6 2 1 1 1 1 P2 total 0.016754 0.001133 -7 2 1 1 1 1 P3 total 0.009139 0.000699 -12 2 2 1 1 1 P0 total 0.088779 0.006278 -13 2 2 1 1 1 P1 total 0.029804 0.002360 -14 2 2 1 1 1 P2 total 0.016470 0.001510 -15 2 2 1 1 1 P3 total 0.009776 0.000691 +0 1 1 1 1 1 P0 total 0.090065 0.006899 +1 1 1 1 1 1 P1 total 0.030595 0.002243 +2 1 1 1 1 1 P2 total 0.016480 0.001229 +3 1 1 1 1 1 P3 total 0.010157 0.000977 +8 1 2 1 1 1 P0 total 0.090629 0.005616 +9 1 2 1 1 1 P1 total 0.027865 0.001820 +10 1 2 1 1 1 P2 total 0.016804 0.001044 +11 1 2 1 1 1 P3 total 0.009373 0.000813 +4 2 1 1 1 1 P0 total 0.090100 0.005647 +5 2 1 1 1 1 P1 total 0.029359 0.002172 +6 2 1 1 1 1 P2 total 0.015944 0.000984 +7 2 1 1 1 1 P3 total 0.008410 0.000523 +12 2 2 1 1 1 P0 total 0.089607 0.004415 +13 2 2 1 1 1 P1 total 0.029988 0.001459 +14 2 2 1 1 1 P2 total 0.015755 0.001411 +15 2 2 1 1 1 P3 total 0.008951 0.000528 mesh 1 group in group out legendre nuclide mean std. dev. x y z -0 1 1 1 1 1 P0 total 0.089483 0.007018 -1 1 1 1 1 1 P1 total 0.029103 0.002623 -2 1 1 1 1 1 P2 total 0.016522 0.001341 -3 1 1 1 1 1 P3 total 0.009971 0.000970 -8 1 2 1 1 1 P0 total 0.092706 0.010197 -9 1 2 1 1 1 P1 total 0.028595 0.003131 -10 1 2 1 1 1 P2 total 0.015750 0.002415 -11 1 2 1 1 1 P3 total 0.008499 0.001134 -4 2 1 1 1 1 P0 total 0.088389 0.008061 -5 2 1 1 1 1 P1 total 0.029924 0.002980 -6 2 1 1 1 1 P2 total 0.016754 0.001463 -7 2 1 1 1 1 P3 total 0.009139 0.000863 -12 2 2 1 1 1 P0 total 0.088880 0.008076 -13 2 2 1 1 1 P1 total 0.029838 0.002912 -14 2 2 1 1 1 P2 total 0.016489 0.001781 -15 2 2 1 1 1 P3 total 0.009787 0.000889 +0 1 1 1 1 1 P0 total 0.090131 0.008782 +1 1 1 1 1 1 P1 total 0.030617 0.002905 +2 1 1 1 1 1 P2 total 0.016492 0.001581 +3 1 1 1 1 1 P3 total 0.010164 0.001154 +8 1 2 1 1 1 P0 total 0.090661 0.006820 +9 1 2 1 1 1 P1 total 0.027875 0.002174 +10 1 2 1 1 1 P2 total 0.016810 0.001267 +11 1 2 1 1 1 P3 total 0.009376 0.000906 +4 2 1 1 1 1 P0 total 0.090199 0.007385 +5 2 1 1 1 1 P1 total 0.029391 0.002669 +6 2 1 1 1 1 P2 total 0.015962 0.001295 +7 2 1 1 1 1 P3 total 0.008419 0.000686 +12 2 2 1 1 1 P0 total 0.089704 0.005591 +13 2 2 1 1 1 P1 total 0.030020 0.001856 +14 2 2 1 1 1 P2 total 0.015772 0.001536 +15 2 2 1 1 1 P3 total 0.008961 0.000629 mesh 1 group out nuclide mean std. dev. x y z -0 1 1 1 1 total 1.0 0.088672 -2 1 2 1 1 total 1.0 0.069731 -1 2 1 1 1 total 1.0 0.109718 -3 2 2 1 1 total 1.0 0.108376 +0 1 1 1 1 total 1.0 0.098093 +2 1 2 1 1 total 1.0 0.042346 +1 2 1 1 1 total 1.0 0.104352 +3 2 2 1 1 total 1.0 0.067889 mesh 1 group out nuclide mean std. dev. x y z -0 1 1 1 1 total 1.0 0.091154 -2 1 2 1 1 total 1.0 0.069438 -1 2 1 1 1 total 1.0 0.109233 -3 2 2 1 1 total 1.0 0.108119 +0 1 1 1 1 total 1.0 0.099401 +2 1 2 1 1 total 1.0 0.042085 +1 2 1 1 1 total 1.0 0.104135 +3 2 2 1 1 total 1.0 0.067307 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 8.424136e-10 3.612697e-11 -2 1 2 1 1 total 8.884166e-10 6.324091e-11 -1 2 1 1 1 total 8.415613e-10 4.520088e-11 -3 2 2 1 1 total 8.557929e-10 2.898037e-11 +0 1 1 1 1 total 8.547713e-10 3.477664e-11 +2 1 2 1 1 total 9.057083e-10 4.171858e-11 +1 2 1 1 1 total 8.666731e-10 2.371072e-11 +3 2 2 1 1 total 8.532016e-10 1.638929e-11 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 0.030724 0.001773 -2 1 2 1 1 total 0.032290 0.002188 -1 2 1 1 1 total 0.030172 0.001654 -3 2 2 1 1 total 0.030372 0.001661 +0 1 1 1 1 total 0.031163 0.001724 +2 1 2 1 1 total 0.030895 0.001664 +1 2 1 1 1 total 0.030973 0.001409 +3 2 2 1 1 total 0.031058 0.001358 mesh 1 group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.031468 0.002273 -2 1 2 1 1 1 total 0.032418 0.002330 -1 2 1 1 1 1 total 0.030706 0.002559 -3 2 2 1 1 1 total 0.029134 0.002487 +0 1 1 1 1 1 total 0.031781 0.002541 +2 1 2 1 1 1 total 0.032490 0.001487 +1 2 1 1 1 1 total 0.030274 0.002354 +3 2 2 1 1 1 total 0.030882 0.001500 mesh 1 group in nuclide mean std. dev. x y surf -3 1 1 x-max in 1 total 0.1884 0.010255 -2 1 1 x-max out 1 total 0.1798 0.009646 +3 1 1 x-max in 1 total 0.1888 0.008218 +2 1 1 x-max out 1 total 0.1828 0.008212 1 1 1 x-min in 1 total 0.0000 0.000000 0 1 1 x-min out 1 total 0.0000 0.000000 -7 1 1 y-max in 1 total 0.1822 0.014739 -6 1 1 y-max out 1 total 0.1806 0.019423 +7 1 1 y-max in 1 total 0.1820 0.012534 +6 1 1 y-max out 1 total 0.1794 0.015302 5 1 1 y-min in 1 total 0.0000 0.000000 4 1 1 y-min out 1 total 0.0000 0.000000 -19 1 2 x-max in 1 total 0.1780 0.012514 -18 1 2 x-max out 1 total 0.1886 0.014979 +19 1 2 x-max in 1 total 0.1870 0.011696 +18 1 2 x-max out 1 total 0.1850 0.012919 17 1 2 x-min in 1 total 0.0000 0.000000 16 1 2 x-min out 1 total 0.0000 0.000000 23 1 2 y-max in 1 total 0.0000 0.000000 22 1 2 y-max out 1 total 0.0000 0.000000 -21 1 2 y-min in 1 total 0.1806 0.019423 -20 1 2 y-min out 1 total 0.1822 0.014739 +21 1 2 y-min in 1 total 0.1794 0.015302 +20 1 2 y-min out 1 total 0.1820 0.012534 11 2 1 x-max in 1 total 0.0000 0.000000 10 2 1 x-max out 1 total 0.0000 0.000000 -9 2 1 x-min in 1 total 0.1798 0.009646 -8 2 1 x-min out 1 total 0.1884 0.010255 -15 2 1 y-max in 1 total 0.1812 0.009583 -14 2 1 y-max out 1 total 0.1858 0.012018 +9 2 1 x-min in 1 total 0.1828 0.008212 +8 2 1 x-min out 1 total 0.1888 0.008218 +15 2 1 y-max in 1 total 0.1850 0.011256 +14 2 1 y-max out 1 total 0.1870 0.009597 13 2 1 y-min in 1 total 0.0000 0.000000 12 2 1 y-min out 1 total 0.0000 0.000000 27 2 2 x-max in 1 total 0.0000 0.000000 26 2 2 x-max out 1 total 0.0000 0.000000 -25 2 2 x-min in 1 total 0.1886 0.014979 -24 2 2 x-min out 1 total 0.1780 0.012514 +25 2 2 x-min in 1 total 0.1850 0.012919 +24 2 2 x-min out 1 total 0.1870 0.011696 31 2 2 y-max in 1 total 0.0000 0.000000 30 2 2 y-max out 1 total 0.0000 0.000000 -29 2 2 y-min in 1 total 0.1858 0.012018 -28 2 2 y-min out 1 total 0.1812 0.009583 +29 2 2 y-min in 1 total 0.1870 0.009597 +28 2 2 y-min out 1 total 0.1850 0.011256 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 4.539911 0.323493 -2 1 2 1 1 total 4.278655 0.425575 -1 2 1 1 1 total 4.674097 0.339600 -3 2 2 1 1 total 4.630700 0.312366 +0 1 1 1 1 total 4.581283 0.329623 +2 1 2 1 1 total 4.452968 0.295762 +1 2 1 1 1 total 4.469295 0.239674 +3 2 2 1 1 total 4.570894 0.218416 mesh 1 group in nuclide mean std. dev. x y z -0 1 1 1 1 total 4.538654 0.323497 -2 1 2 1 1 total 4.278494 0.425550 -1 2 1 1 1 total 4.674097 0.339600 -3 2 2 1 1 total 4.634259 0.313464 +0 1 1 1 1 total 4.580746 0.329583 +2 1 2 1 1 total 4.452519 0.295716 +1 2 1 1 1 total 4.468066 0.239680 +3 2 2 1 1 total 4.573657 0.219069 mesh 1 delayedgroup group in nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.000007 3.997262e-07 -1 1 1 1 2 1 total 0.000035 2.063264e-06 -2 1 1 1 3 1 total 0.000034 1.969771e-06 -3 1 1 1 4 1 total 0.000075 4.416388e-06 -4 1 1 1 5 1 total 0.000031 1.810657e-06 -5 1 1 1 6 1 total 0.000013 7.584779e-07 -12 1 2 1 1 1 total 0.000007 4.931656e-07 -13 1 2 1 2 1 total 0.000037 2.545569e-06 -14 1 2 1 3 1 total 0.000035 2.430221e-06 -15 1 2 1 4 1 total 0.000079 5.448757e-06 -16 1 2 1 5 1 total 0.000032 2.233913e-06 -17 1 2 1 6 1 total 0.000014 9.357785e-07 -6 2 1 1 1 1 total 0.000007 3.618632e-07 -7 2 1 1 2 1 total 0.000035 1.867826e-06 -8 2 1 1 3 1 total 0.000033 1.783189e-06 -9 2 1 1 4 1 total 0.000074 3.998058e-06 -10 2 1 1 5 1 total 0.000030 1.639147e-06 -11 2 1 1 6 1 total 0.000013 6.866331e-07 -18 2 2 1 1 1 total 0.000007 3.603080e-07 -19 2 2 1 2 1 total 0.000035 1.859799e-06 -20 2 2 1 3 1 total 0.000033 1.775526e-06 -21 2 2 1 4 1 total 0.000075 3.980875e-06 -22 2 2 1 5 1 total 0.000031 1.632103e-06 -23 2 2 1 6 1 total 0.000013 6.836821e-07 +0 1 1 1 1 1 total 0.000007 3.812309e-07 +1 1 1 1 2 1 total 0.000036 1.967797e-06 +2 1 1 1 3 1 total 0.000034 1.878630e-06 +3 1 1 1 4 1 total 0.000077 4.212043e-06 +4 1 1 1 5 1 total 0.000031 1.726878e-06 +5 1 1 1 6 1 total 0.000013 7.233832e-07 +12 1 2 1 1 1 total 0.000007 3.663985e-07 +13 1 2 1 2 1 total 0.000035 1.891236e-06 +14 1 2 1 3 1 total 0.000034 1.805539e-06 +15 1 2 1 4 1 total 0.000076 4.048166e-06 +16 1 2 1 5 1 total 0.000031 1.659691e-06 +17 1 2 1 6 1 total 0.000013 6.952388e-07 +6 2 1 1 1 1 total 0.000007 3.123173e-07 +7 2 1 1 2 1 total 0.000035 1.612086e-06 +8 2 1 1 3 1 total 0.000034 1.539037e-06 +9 2 1 1 4 1 total 0.000076 3.450649e-06 +10 2 1 1 5 1 total 0.000031 1.414717e-06 +11 2 1 1 6 1 total 0.000013 5.926201e-07 +18 2 2 1 1 1 total 0.000007 2.946716e-07 +19 2 2 1 2 1 total 0.000036 1.521004e-06 +20 2 2 1 3 1 total 0.000034 1.452083e-06 +21 2 2 1 4 1 total 0.000076 3.255689e-06 +22 2 2 1 5 1 total 0.000031 1.334787e-06 +23 2 2 1 6 1 total 0.000013 5.591374e-07 mesh 1 delayedgroup group out nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.0 0.000000 -1 1 1 1 2 1 total 1.0 0.866877 -2 1 1 1 3 1 total 1.0 0.866877 -3 1 1 1 4 1 total 1.0 1.414214 -4 1 1 1 5 1 total 1.0 1.414214 +0 1 1 1 1 1 total 1.0 1.414214 +1 1 1 1 2 1 total 0.0 0.000000 +2 1 1 1 3 1 total 0.0 0.000000 +3 1 1 1 4 1 total 1.0 0.578922 +4 1 1 1 5 1 total 0.0 0.000000 5 1 1 1 6 1 total 0.0 0.000000 12 1 2 1 1 1 total 0.0 0.000000 -13 1 2 1 2 1 total 0.0 0.000000 -14 1 2 1 3 1 total 0.0 0.000000 -15 1 2 1 4 1 total 1.0 0.579346 -16 1 2 1 5 1 total 1.0 1.414214 +13 1 2 1 2 1 total 1.0 0.578922 +14 1 2 1 3 1 total 1.0 1.414214 +15 1 2 1 4 1 total 1.0 1.414214 +16 1 2 1 5 1 total 1.0 0.875472 17 1 2 1 6 1 total 1.0 1.414214 -6 2 1 1 1 1 total 1.0 1.414214 -7 2 1 1 2 1 total 1.0 1.414214 -8 2 1 1 3 1 total 1.0 0.874781 -9 2 1 1 4 1 total 0.0 0.000000 -10 2 1 1 5 1 total 0.0 0.000000 +6 2 1 1 1 1 total 0.0 0.000000 +7 2 1 1 2 1 total 0.0 0.000000 +8 2 1 1 3 1 total 1.0 1.414214 +9 2 1 1 4 1 total 1.0 0.579392 +10 2 1 1 5 1 total 1.0 1.414214 11 2 1 1 6 1 total 0.0 0.000000 -18 2 2 1 1 1 total 1.0 1.414214 -19 2 2 1 2 1 total 1.0 0.867902 -20 2 2 1 3 1 total 1.0 1.414214 -21 2 2 1 4 1 total 1.0 1.414214 +18 2 2 1 1 1 total 1.0 0.868163 +19 2 2 1 2 1 total 1.0 1.414214 +20 2 2 1 3 1 total 0.0 0.000000 +21 2 2 1 4 1 total 1.0 0.868969 22 2 2 1 5 1 total 1.0 1.414214 23 2 2 1 6 1 total 0.0 0.000000 mesh 1 delayedgroup group in nuclide mean std. dev. x y z -0 1 1 1 1 1 total 0.000221 0.000016 -1 1 1 1 2 1 total 0.001138 0.000084 -2 1 1 1 3 1 total 0.001087 0.000080 -3 1 1 1 4 1 total 0.002437 0.000180 -4 1 1 1 5 1 total 0.000999 0.000074 -5 1 1 1 6 1 total 0.000418 0.000031 -12 1 2 1 1 1 total 0.000221 0.000014 -13 1 2 1 2 1 total 0.001138 0.000073 -14 1 2 1 3 1 total 0.001087 0.000069 -15 1 2 1 4 1 total 0.002436 0.000155 -16 1 2 1 5 1 total 0.000999 0.000064 -17 1 2 1 6 1 total 0.000418 0.000027 -6 2 1 1 1 1 total 0.000220 0.000014 -7 2 1 1 2 1 total 0.001137 0.000070 -8 2 1 1 3 1 total 0.001086 0.000067 -9 2 1 1 4 1 total 0.002435 0.000150 -10 2 1 1 5 1 total 0.000998 0.000062 -11 2 1 1 6 1 total 0.000418 0.000026 -18 2 2 1 1 1 total 0.000221 0.000015 -19 2 2 1 2 1 total 0.001141 0.000078 -20 2 2 1 3 1 total 0.001089 0.000074 -21 2 2 1 4 1 total 0.002442 0.000167 -22 2 2 1 5 1 total 0.001001 0.000068 -23 2 2 1 6 1 total 0.000419 0.000029 +0 1 1 1 1 1 total 0.000221 0.000015 +1 1 1 1 2 1 total 0.001140 0.000079 +2 1 1 1 3 1 total 0.001088 0.000075 +3 1 1 1 4 1 total 0.002440 0.000169 +4 1 1 1 5 1 total 0.001001 0.000069 +5 1 1 1 6 1 total 0.000419 0.000029 +12 1 2 1 1 1 total 0.000221 0.000013 +13 1 2 1 2 1 total 0.001139 0.000066 +14 1 2 1 3 1 total 0.001088 0.000063 +15 1 2 1 4 1 total 0.002439 0.000142 +16 1 2 1 5 1 total 0.001000 0.000058 +17 1 2 1 6 1 total 0.000419 0.000024 +6 2 1 1 1 1 total 0.000220 0.000013 +7 2 1 1 2 1 total 0.001138 0.000067 +8 2 1 1 3 1 total 0.001086 0.000064 +9 2 1 1 4 1 total 0.002435 0.000144 +10 2 1 1 5 1 total 0.000998 0.000059 +11 2 1 1 6 1 total 0.000418 0.000025 +18 2 2 1 1 1 total 0.000221 0.000013 +19 2 2 1 2 1 total 0.001141 0.000066 +20 2 2 1 3 1 total 0.001090 0.000063 +21 2 2 1 4 1 total 0.002443 0.000141 +22 2 2 1 5 1 total 0.001002 0.000058 +23 2 2 1 6 1 total 0.000420 0.000024 mesh 1 delayedgroup nuclide mean std. dev. x y z -0 1 1 1 1 total 0.013336 0.000997 -1 1 1 1 2 total 0.032739 0.002447 -2 1 1 1 3 total 0.120780 0.009028 -3 1 1 1 4 total 0.302780 0.022633 -4 1 1 1 5 total 0.849490 0.063500 -5 1 1 1 6 total 2.853000 0.213262 -12 1 2 1 1 total 0.013336 0.000866 -13 1 2 1 2 total 0.032739 0.002126 -14 1 2 1 3 total 0.120780 0.007843 -15 1 2 1 4 total 0.302780 0.019661 -16 1 2 1 5 total 0.849490 0.055163 -17 1 2 1 6 total 2.853000 0.185263 -6 2 1 1 1 total 0.013336 0.000814 -7 2 1 1 2 total 0.032739 0.001999 -8 2 1 1 3 total 0.120780 0.007373 -9 2 1 1 4 total 0.302780 0.018483 -10 2 1 1 5 total 0.849490 0.051857 -11 2 1 1 6 total 2.853000 0.174163 -18 2 2 1 1 total 0.013336 0.000896 -19 2 2 1 2 total 0.032739 0.002200 -20 2 2 1 3 total 0.120780 0.008117 -21 2 2 1 4 total 0.302780 0.020349 -22 2 2 1 5 total 0.849490 0.057091 -23 2 2 1 6 total 2.853000 0.191738 +0 1 1 1 1 total 0.013336 0.000919 +1 1 1 1 2 total 0.032739 0.002257 +2 1 1 1 3 total 0.120780 0.008325 +3 1 1 1 4 total 0.302780 0.020871 +4 1 1 1 5 total 0.849490 0.058555 +5 1 1 1 6 total 2.853000 0.196656 +12 1 2 1 1 total 0.013336 0.000770 +13 1 2 1 2 total 0.032739 0.001891 +14 1 2 1 3 total 0.120780 0.006977 +15 1 2 1 4 total 0.302780 0.017490 +16 1 2 1 5 total 0.849490 0.049071 +17 1 2 1 6 total 2.853000 0.164804 +6 2 1 1 1 total 0.013336 0.000790 +7 2 1 1 2 total 0.032739 0.001940 +8 2 1 1 3 total 0.120780 0.007157 +9 2 1 1 4 total 0.302780 0.017942 +10 2 1 1 5 total 0.849490 0.050338 +11 2 1 1 6 total 2.853000 0.169061 +18 2 2 1 1 total 0.013336 0.000757 +19 2 2 1 2 total 0.032739 0.001858 +20 2 2 1 3 total 0.120780 0.006855 +21 2 2 1 4 total 0.302780 0.017186 +22 2 2 1 5 total 0.849490 0.048217 +23 2 2 1 6 total 2.853000 0.161935 mesh 1 delayedgroup group in group out nuclide mean std. dev. x y z -0 1 1 1 1 1 1 total 0.000000 0.000000 -1 1 1 1 2 1 1 total 0.000056 0.000034 -2 1 1 1 3 1 1 total 0.000056 0.000034 -3 1 1 1 4 1 1 total 0.000029 0.000029 -4 1 1 1 5 1 1 total 0.000026 0.000026 +0 1 1 1 1 1 1 total 0.000026 0.000026 +1 1 1 1 2 1 1 total 0.000000 0.000000 +2 1 1 1 3 1 1 total 0.000000 0.000000 +3 1 1 1 4 1 1 total 0.000083 0.000034 +4 1 1 1 5 1 1 total 0.000000 0.000000 5 1 1 1 6 1 1 total 0.000000 0.000000 12 1 2 1 1 1 1 total 0.000000 0.000000 -13 1 2 1 2 1 1 total 0.000000 0.000000 -14 1 2 1 3 1 1 total 0.000000 0.000000 -15 1 2 1 4 1 1 total 0.000079 0.000033 -16 1 2 1 5 1 1 total 0.000032 0.000032 -17 1 2 1 6 1 1 total 0.000032 0.000032 -6 2 1 1 1 1 1 total 0.000029 0.000029 -7 2 1 1 2 1 1 total 0.000027 0.000027 -8 2 1 1 3 1 1 total 0.000058 0.000036 -9 2 1 1 4 1 1 total 0.000000 0.000000 -10 2 1 1 5 1 1 total 0.000000 0.000000 +13 1 2 1 2 1 1 total 0.000081 0.000033 +14 1 2 1 3 1 1 total 0.000026 0.000026 +15 1 2 1 4 1 1 total 0.000026 0.000026 +16 1 2 1 5 1 1 total 0.000059 0.000036 +17 1 2 1 6 1 1 total 0.000033 0.000033 +6 2 1 1 1 1 1 total 0.000000 0.000000 +7 2 1 1 2 1 1 total 0.000000 0.000000 +8 2 1 1 3 1 1 total 0.000032 0.000032 +9 2 1 1 4 1 1 total 0.000080 0.000033 +10 2 1 1 5 1 1 total 0.000028 0.000028 11 2 1 1 6 1 1 total 0.000000 0.000000 -18 2 2 1 1 1 1 total 0.000027 0.000027 -19 2 2 1 2 1 1 total 0.000056 0.000035 -20 2 2 1 3 1 1 total 0.000028 0.000028 -21 2 2 1 4 1 1 total 0.000030 0.000030 -22 2 2 1 5 1 1 total 0.000033 0.000033 +18 2 2 1 1 1 1 total 0.000054 0.000033 +19 2 2 1 2 1 1 total 0.000029 0.000029 +20 2 2 1 3 1 1 total 0.000000 0.000000 +21 2 2 1 4 1 1 total 0.000054 0.000033 +22 2 2 1 5 1 1 total 0.000032 0.000032 23 2 2 1 6 1 1 total 0.000000 0.000000 diff --git a/tests/regression_tests/mgxs_library_mesh/test.py b/tests/regression_tests/mgxs_library_mesh/test.py index 89c68a75a33..c1a5980b5d1 100644 --- a/tests/regression_tests/mgxs_library_mesh/test.py +++ b/tests/regression_tests/mgxs_library_mesh/test.py @@ -57,7 +57,7 @@ def model(): model.mgxs_lib.build_library() # Add tallies - model.mgxs_lib.add_to_tallies_file(model.tallies, merge=False) + model.mgxs_lib.add_to_tallies(model.tallies, merge=False) return model diff --git a/tests/regression_tests/mgxs_library_no_nuclides/results_true.dat b/tests/regression_tests/mgxs_library_no_nuclides/results_true.dat index c0dba7c0fb5..aec8e8bbc18 100644 --- a/tests/regression_tests/mgxs_library_no_nuclides/results_true.dat +++ b/tests/regression_tests/mgxs_library_no_nuclides/results_true.dat @@ -1,227 +1,227 @@ total material group in nuclide mean std. dev. -1 1 1 total 0.413814 0.018434 -0 1 2 total 0.663001 0.012535 +1 1 1 total 0.422772 0.014069 +0 1 2 total 0.661309 0.049458 transport material group in nuclide mean std. dev. -1 1 1 total 0.369730 0.019494 -0 1 2 total 0.643777 0.018246 +1 1 1 total 0.383831 0.015331 +0 1 2 total 0.679181 0.050786 nu-transport material group in nuclide mean std. dev. -1 1 1 total 0.369730 0.019494 -0 1 2 total 0.643777 0.018246 +1 1 1 total 0.383831 0.015331 +0 1 2 total 0.679181 0.050786 absorption material group in nuclide mean std. dev. -1 1 1 total 0.026013 0.001851 -0 1 2 total 0.267233 0.007475 +1 1 1 total 0.027181 0.001539 +0 1 2 total 0.265559 0.020699 reduced absorption material group in nuclide mean std. dev. -1 1 1 total 0.025932 0.001850 -0 1 2 total 0.267233 0.007475 +1 1 1 total 0.027162 0.001538 +0 1 2 total 0.265559 0.020699 capture material group in nuclide mean std. dev. -1 1 1 total 0.018869 0.001758 -0 1 2 total 0.072358 0.008204 +1 1 1 total 0.019717 0.001492 +0 1 2 total 0.072029 0.019378 fission material group in nuclide mean std. dev. -1 1 1 total 0.007144 0.000317 -0 1 2 total 0.194875 0.005528 +1 1 1 total 0.007464 0.000222 +0 1 2 total 0.193530 0.015119 nu-fission material group in nuclide mean std. dev. -1 1 1 total 0.018243 0.000827 -0 1 2 total 0.474851 0.013471 +1 1 1 total 0.018925 0.000543 +0 1 2 total 0.471574 0.036840 kappa-fission material group in nuclide mean std. dev. -1 1 1 total 1.391782e+06 6.192598e+04 -0 1 2 total 3.768981e+07 1.069211e+06 +1 1 1 total 1.453014e+06 4.287190e+04 +0 1 2 total 3.742974e+07 2.924022e+06 scatter material group in nuclide mean std. dev. -1 1 1 total 0.387802 0.017462 -0 1 2 total 0.395768 0.007541 +1 1 1 total 0.395591 0.013417 +0 1 2 total 0.395750 0.029309 nu-scatter material group in nuclide mean std. dev. -1 1 1 total 0.387032 0.024325 -0 1 2 total 0.407651 0.016266 +1 1 1 total 0.392941 0.019689 +0 1 2 total 0.396262 0.027471 scatter matrix material group in group out legendre nuclide mean std. dev. -12 1 1 1 P0 total 0.386336 0.024297 -13 1 1 1 P1 total 0.044084 0.006343 -14 1 1 1 P2 total 0.027336 0.006403 -15 1 1 1 P3 total 0.011672 0.004897 -8 1 1 2 P0 total 0.000695 0.000327 -9 1 1 2 P1 total -0.000359 0.000201 -10 1 1 2 P2 total -0.000047 0.000081 -11 1 1 2 P3 total 0.000239 0.000099 +12 1 1 1 P0 total 0.392419 0.019837 +13 1 1 1 P1 total 0.038941 0.006089 +14 1 1 1 P2 total 0.019512 0.003548 +15 1 1 1 P3 total 0.012951 0.002399 +8 1 1 2 P0 total 0.000522 0.000349 +9 1 1 2 P1 total -0.000301 0.000185 +10 1 1 2 P2 total 0.000045 0.000147 +11 1 1 2 P3 total 0.000069 0.000162 4 1 2 1 P0 total 0.000000 0.000000 5 1 2 1 P1 total 0.000000 0.000000 6 1 2 1 P2 total 0.000000 0.000000 7 1 2 1 P3 total 0.000000 0.000000 -0 1 2 2 P0 total 0.407651 0.016266 -1 1 2 2 P1 total 0.021192 0.013171 -2 1 2 2 P2 total 0.010327 0.017230 -3 1 2 2 P3 total 0.005148 0.013732 +0 1 2 2 P0 total 0.396262 0.027471 +1 1 2 2 P1 total -0.016133 0.010911 +2 1 2 2 P2 total -0.001147 0.010536 +3 1 2 2 P3 total 0.005359 0.008143 nu-scatter matrix material group in group out legendre nuclide mean std. dev. -12 1 1 1 P0 total 0.386336 0.024297 -13 1 1 1 P1 total 0.044084 0.006343 -14 1 1 1 P2 total 0.027336 0.006403 -15 1 1 1 P3 total 0.011672 0.004897 -8 1 1 2 P0 total 0.000695 0.000327 -9 1 1 2 P1 total -0.000359 0.000201 -10 1 1 2 P2 total -0.000047 0.000081 -11 1 1 2 P3 total 0.000239 0.000099 +12 1 1 1 P0 total 0.392419 0.019837 +13 1 1 1 P1 total 0.038941 0.006089 +14 1 1 1 P2 total 0.019512 0.003548 +15 1 1 1 P3 total 0.012951 0.002399 +8 1 1 2 P0 total 0.000522 0.000349 +9 1 1 2 P1 total -0.000301 0.000185 +10 1 1 2 P2 total 0.000045 0.000147 +11 1 1 2 P3 total 0.000069 0.000162 4 1 2 1 P0 total 0.000000 0.000000 5 1 2 1 P1 total 0.000000 0.000000 6 1 2 1 P2 total 0.000000 0.000000 7 1 2 1 P3 total 0.000000 0.000000 -0 1 2 2 P0 total 0.407651 0.016266 -1 1 2 2 P1 total 0.021192 0.013171 -2 1 2 2 P2 total 0.010327 0.017230 -3 1 2 2 P3 total 0.005148 0.013732 +0 1 2 2 P0 total 0.396262 0.027471 +1 1 2 2 P1 total -0.016133 0.010911 +2 1 2 2 P2 total -0.001147 0.010536 +3 1 2 2 P3 total 0.005359 0.008143 multiplicity matrix material group in group out nuclide mean std. dev. -3 1 1 1 total 1.0 0.064268 -2 1 1 2 total 1.0 0.661438 +3 1 1 1 total 1.0 0.054620 +2 1 1 2 total 1.0 0.942809 1 1 2 1 total 0.0 0.000000 -0 1 2 2 total 1.0 0.050545 +0 1 2 2 total 1.0 0.080341 nu-fission matrix material group in group out nuclide mean std. dev. -3 1 1 1 total 0.024633 0.002205 +3 1 1 1 total 0.019257 0.001831 2 1 1 2 total 0.000000 0.000000 -1 1 2 1 total 0.435159 0.014743 +1 1 2 1 total 0.459401 0.022054 0 1 2 2 total 0.000000 0.000000 scatter probability matrix material group in group out nuclide mean std. dev. -3 1 1 1 total 0.998203 0.064101 -2 1 1 2 total 0.001797 0.000844 +3 1 1 1 total 0.998671 0.054518 +2 1 1 2 total 0.001329 0.000888 1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 1.000000 0.050545 +0 1 2 2 total 1.000000 0.080341 consistent scatter matrix material group in group out legendre nuclide mean std. dev. -12 1 1 1 P0 total 0.387105 0.030361 -13 1 1 1 P1 total 0.044172 0.006684 -14 1 1 1 P2 total 0.027391 0.006543 -15 1 1 1 P3 total 0.011695 0.004937 -8 1 1 2 P0 total 0.000697 0.000329 -9 1 1 2 P1 total -0.000360 0.000202 -10 1 1 2 P2 total -0.000047 0.000082 -11 1 1 2 P3 total 0.000239 0.000100 +12 1 1 1 P0 total 0.395065 0.025390 +13 1 1 1 P1 total 0.039204 0.006325 +14 1 1 1 P2 total 0.019644 0.003656 +15 1 1 1 P3 total 0.013039 0.002470 +8 1 1 2 P0 total 0.000526 0.000352 +9 1 1 2 P1 total -0.000303 0.000186 +10 1 1 2 P2 total 0.000045 0.000148 +11 1 1 2 P3 total 0.000069 0.000163 4 1 2 1 P0 total 0.000000 0.000000 5 1 2 1 P1 total 0.000000 0.000000 6 1 2 1 P2 total 0.000000 0.000000 7 1 2 1 P3 total 0.000000 0.000000 -0 1 2 2 P0 total 0.395768 0.021378 -1 1 2 2 P1 total 0.020575 0.012809 -2 1 2 2 P2 total 0.010026 0.016732 -3 1 2 2 P3 total 0.004998 0.013333 +0 1 2 2 P0 total 0.395750 0.043243 +1 1 2 2 P1 total -0.016112 0.010982 +2 1 2 2 P2 total -0.001146 0.010523 +3 1 2 2 P3 total 0.005353 0.008145 consistent nu-scatter matrix material group in group out legendre nuclide mean std. dev. -12 1 1 1 P0 total 0.387105 0.039252 -13 1 1 1 P1 total 0.044172 0.007262 -14 1 1 1 P2 total 0.027391 0.006776 -15 1 1 1 P3 total 0.011695 0.004994 -8 1 1 2 P0 total 0.000697 0.000566 -9 1 1 2 P1 total -0.000360 0.000313 -10 1 1 2 P2 total -0.000047 0.000087 -11 1 1 2 P3 total 0.000239 0.000187 +12 1 1 1 P0 total 0.395065 0.033321 +13 1 1 1 P1 total 0.039204 0.006677 +14 1 1 1 P2 total 0.019644 0.003810 +15 1 1 1 P3 total 0.013039 0.002571 +8 1 1 2 P0 total 0.000526 0.000608 +9 1 1 2 P1 total -0.000303 0.000341 +10 1 1 2 P2 total 0.000045 0.000154 +11 1 1 2 P3 total 0.000069 0.000175 4 1 2 1 P0 total 0.000000 0.000000 5 1 2 1 P1 total 0.000000 0.000000 6 1 2 1 P2 total 0.000000 0.000000 7 1 2 1 P3 total 0.000000 0.000000 -0 1 2 2 P0 total 0.395768 0.029278 -1 1 2 2 P1 total 0.020575 0.012851 -2 1 2 2 P2 total 0.010026 0.016739 -3 1 2 2 P3 total 0.004998 0.013335 +0 1 2 2 P0 total 0.395750 0.053673 +1 1 2 2 P1 total -0.016112 0.011058 +2 1 2 2 P2 total -0.001146 0.010523 +3 1 2 2 P3 total 0.005353 0.008157 chi material group out nuclide mean std. dev. -1 1 1 total 1.0 0.039887 +1 1 1 total 1.0 0.015644 0 1 2 total 0.0 0.000000 chi-prompt material group out nuclide mean std. dev. -1 1 1 total 1.0 0.039887 +1 1 1 total 1.0 0.017529 0 1 2 total 0.0 0.000000 inverse-velocity material group in nuclide mean std. dev. -1 1 1 total 5.956290e-08 2.255751e-09 -0 1 2 total 2.886630e-06 7.418452e-08 +1 1 1 total 6.047675e-08 4.367288e-09 +0 1 2 total 2.861927e-06 2.241423e-07 prompt-nu-fission material group in nuclide mean std. dev. -1 1 1 total 0.018067 0.000817 -0 1 2 total 0.471762 0.013383 +1 1 1 total 0.018748 0.00054 +0 1 2 total 0.468507 0.03660 prompt-nu-fission matrix material group in group out nuclide mean std. dev. -3 1 1 1 total 0.024633 0.002205 +3 1 1 1 total 0.019049 0.001675 2 1 1 2 total 0.000000 0.000000 -1 1 2 1 total 0.435159 0.014743 +1 1 2 1 total 0.454399 0.022578 0 1 2 2 total 0.000000 0.000000 diffusion-coefficient material group in nuclide mean std. dev. -1 1 1 total 0.901559 0.047536 -0 1 2 total 0.517778 0.014675 +1 1 1 total 0.868438 0.034686 +0 1 2 total 0.490787 0.036698 nu-diffusion-coefficient material group in nuclide mean std. dev. -1 1 1 total 0.901559 0.047536 -0 1 2 total 0.517778 0.014675 +1 1 1 total 0.868438 0.034686 +0 1 2 total 0.490787 0.036698 (n,elastic) material group in nuclide mean std. dev. -1 1 1 total 0.360179 0.016169 -0 1 2 total 0.395768 0.007541 +1 1 1 total 0.368341 0.013033 +0 1 2 total 0.395750 0.029309 (n,level) material group in nuclide mean std. dev. -1 1 1 total 0.000568 0.000028 +1 1 1 total 0.000518 0.000016 0 1 2 total 0.000000 0.000000 (n,2n) material group in nuclide mean std. dev. -1 1 1 total 0.000079 0.000042 +1 1 1 total 0.000019 0.000012 0 1 2 total 0.000000 0.000000 (n,na) - material group in nuclide mean std. dev. -1 1 1 total 8.510945e-07 8.515320e-07 -0 1 2 total 0.000000e+00 0.000000e+00 + material group in nuclide mean std. dev. +1 1 1 total 0.0 0.0 +0 1 2 total 0.0 0.0 (n,nc) material group in nuclide mean std. dev. -1 1 1 total 0.008258 0.000928 +1 1 1 total 0.007599 0.000559 0 1 2 total 0.000000 0.000000 (n,gamma) material group in nuclide mean std. dev. -1 1 1 total 0.018749 0.001838 -0 1 2 total 0.072358 0.001951 +1 1 1 total 0.019608 0.001470 +0 1 2 total 0.072029 0.005584 (n,a) material group in nuclide mean std. dev. -1 1 1 total 0.000119 0.000023 -0 1 2 total 0.000000 0.000000 +1 1 1 total 0.000109 0.00002 +0 1 2 total 0.000000 0.00000 (n,Xa) - material group in nuclide mean std. dev. -1 1 1 total 0.00012 0.000022 -0 1 2 total 0.00000 0.000000 + material group in nuclide mean std. dev. +1 1 1 total 0.000109 0.00002 +0 1 2 total 0.000000 0.00000 heating - material group in nuclide mean std. dev. -1 1 1 total 1.216089e+06 54827.397330 -0 1 2 total 3.262993e+07 904277.817101 + material group in nuclide mean std. dev. +1 1 1 total 1.270644e+06 3.732629e+04 +0 1 2 total 3.241569e+07 2.530346e+06 damage-energy material group in nuclide mean std. dev. -1 1 1 total 2317.176742 165.734097 -0 1 2 total 1371.933922 38.919660 +1 1 1 total 2405.735342 79.042000 +0 1 2 total 1362.470597 106.435803 (n,n1) material group in nuclide mean std. dev. -1 1 1 total 0.012055 0.000759 +1 1 1 total 0.011931 0.000455 0 1 2 total 0.000000 0.000000 (n,a0) material group in nuclide mean std. dev. -1 1 1 total 0.000109 0.000028 -0 1 2 total 0.000000 0.000000 +1 1 1 total 0.000108 0.00002 +0 1 2 total 0.000000 0.00000 (n,nc) matrix material group in group out nuclide mean std. dev. -3 1 1 1 total 0.009563 0.001002 +3 1 1 1 total 0.005745 0.001068 2 1 1 2 total 0.000000 0.000000 1 1 2 1 total 0.000000 0.000000 0 1 2 2 total 0.000000 0.000000 (n,n1) matrix material group in group out nuclide mean std. dev. -3 1 1 1 total 0.013909 0.00145 -2 1 1 2 total 0.000000 0.00000 -1 1 2 1 total 0.000000 0.00000 -0 1 2 2 total 0.000000 0.00000 +3 1 1 1 total 0.013232 0.001025 +2 1 1 2 total 0.000000 0.000000 +1 1 2 1 total 0.000000 0.000000 +0 1 2 2 total 0.000000 0.000000 (n,2n) matrix material group in group out nuclide mean std. dev. 3 1 1 1 total 0.0 0.0 @@ -230,104 +230,104 @@ damage-energy 0 1 2 2 total 0.0 0.0 delayed-nu-fission material delayedgroup group in nuclide mean std. dev. -1 1 1 1 total 0.000004 1.857100e-07 -3 1 2 1 total 0.000025 1.293123e-06 -5 1 3 1 total 0.000026 1.448812e-06 -7 1 4 1 total 0.000068 4.132525e-06 -9 1 5 1 total 0.000037 2.670208e-06 -11 1 6 1 total 0.000015 1.084541e-06 -0 1 1 2 total 0.000108 3.067510e-06 -2 1 2 2 total 0.000558 1.583355e-05 -4 1 3 2 total 0.000533 1.511609e-05 -6 1 4 2 total 0.001195 3.389154e-05 -8 1 5 2 total 0.000490 1.389508e-05 -10 1 6 2 total 0.000205 5.820598e-06 +1 1 1 1 total 0.000004 1.226367e-07 +3 1 2 1 total 0.000026 6.725093e-07 +5 1 3 1 total 0.000027 7.028316e-07 +7 1 4 1 total 0.000068 1.919534e-06 +9 1 5 1 total 0.000037 1.268939e-06 +11 1 6 1 total 0.000015 5.136452e-07 +0 1 1 2 total 0.000107 8.388866e-06 +2 1 2 2 total 0.000554 4.330076e-05 +4 1 3 2 total 0.000529 4.133869e-05 +6 1 4 2 total 0.001186 9.268481e-05 +8 1 5 2 total 0.000486 3.799954e-05 +10 1 6 2 total 0.000204 1.591787e-05 chi-delayed material delayedgroup group out nuclide mean std. dev. -1 1 1 1 total 0.0 0.0 -3 1 2 1 total 0.0 0.0 -5 1 3 1 total 0.0 0.0 -7 1 4 1 total 0.0 0.0 -9 1 5 1 total 0.0 0.0 -11 1 6 1 total 0.0 0.0 -0 1 1 2 total 0.0 0.0 -2 1 2 2 total 0.0 0.0 -4 1 3 2 total 0.0 0.0 -6 1 4 2 total 0.0 0.0 -8 1 5 2 total 0.0 0.0 -10 1 6 2 total 0.0 0.0 +1 1 1 1 total 0.0 0.000000 +3 1 2 1 total 0.0 0.000000 +5 1 3 1 total 0.0 0.000000 +7 1 4 1 total 1.0 0.433956 +9 1 5 1 total 0.0 0.000000 +11 1 6 1 total 0.0 0.000000 +0 1 1 2 total 0.0 0.000000 +2 1 2 2 total 0.0 0.000000 +4 1 3 2 total 0.0 0.000000 +6 1 4 2 total 0.0 0.000000 +8 1 5 2 total 0.0 0.000000 +10 1 6 2 total 0.0 0.000000 beta material delayedgroup group in nuclide mean std. dev. -1 1 1 1 total 0.000223 0.000009 -3 1 2 1 total 0.001375 0.000067 -5 1 3 1 total 0.001439 0.000076 -7 1 4 1 total 0.003724 0.000217 -9 1 5 1 total 0.002049 0.000142 -11 1 6 1 total 0.000840 0.000058 -0 1 1 2 total 0.000228 0.000008 -2 1 2 2 total 0.001175 0.000041 -4 1 3 2 total 0.001122 0.000040 -6 1 4 2 total 0.002516 0.000089 -8 1 5 2 total 0.001031 0.000036 -10 1 6 2 total 0.000432 0.000015 +1 1 1 1 total 0.000225 0.000006 +3 1 2 1 total 0.001359 0.000033 +5 1 3 1 total 0.001412 0.000034 +7 1 4 1 total 0.003611 0.000094 +9 1 5 1 total 0.001950 0.000064 +11 1 6 1 total 0.000801 0.000026 +0 1 1 2 total 0.000228 0.000019 +2 1 2 2 total 0.001175 0.000096 +4 1 3 2 total 0.001122 0.000092 +6 1 4 2 total 0.002516 0.000206 +8 1 5 2 total 0.001031 0.000085 +10 1 6 2 total 0.000432 0.000035 decay-rate material delayedgroup nuclide mean std. dev. -0 1 1 total 0.013353 0.000379 -1 1 2 total 0.032612 0.001002 -2 1 3 total 0.121056 0.003938 -3 1 4 total 0.305642 0.010892 -4 1 5 total 0.860947 0.036893 -5 1 6 total 2.891708 0.122310 +0 1 1 total 0.013352 0.000905 +1 1 2 total 0.032619 0.002094 +2 1 3 total 0.121041 0.007464 +3 1 4 total 0.305491 0.017639 +4 1 5 total 0.860388 0.042833 +5 1 6 total 2.889807 0.145503 delayed-nu-fission matrix - material delayedgroup group in group out nuclide mean std. dev. -3 1 1 1 1 total 0.0 0.0 -7 1 2 1 1 total 0.0 0.0 -11 1 3 1 1 total 0.0 0.0 -15 1 4 1 1 total 0.0 0.0 -19 1 5 1 1 total 0.0 0.0 -23 1 6 1 1 total 0.0 0.0 -2 1 1 1 2 total 0.0 0.0 -6 1 2 1 2 total 0.0 0.0 -10 1 3 1 2 total 0.0 0.0 -14 1 4 1 2 total 0.0 0.0 -18 1 5 1 2 total 0.0 0.0 -22 1 6 1 2 total 0.0 0.0 -1 1 1 2 1 total 0.0 0.0 -5 1 2 2 1 total 0.0 0.0 -9 1 3 2 1 total 0.0 0.0 -13 1 4 2 1 total 0.0 0.0 -17 1 5 2 1 total 0.0 0.0 -21 1 6 2 1 total 0.0 0.0 -0 1 1 2 2 total 0.0 0.0 -4 1 2 2 2 total 0.0 0.0 -8 1 3 2 2 total 0.0 0.0 -12 1 4 2 2 total 0.0 0.0 -16 1 5 2 2 total 0.0 0.0 -20 1 6 2 2 total 0.0 0.0 + material delayedgroup group in group out nuclide mean std. dev. +3 1 1 1 1 total 0.000000 0.000000 +7 1 2 1 1 total 0.000000 0.000000 +11 1 3 1 1 total 0.000000 0.000000 +15 1 4 1 1 total 0.000207 0.000207 +19 1 5 1 1 total 0.000000 0.000000 +23 1 6 1 1 total 0.000000 0.000000 +2 1 1 1 2 total 0.000000 0.000000 +6 1 2 1 2 total 0.000000 0.000000 +10 1 3 1 2 total 0.000000 0.000000 +14 1 4 1 2 total 0.000000 0.000000 +18 1 5 1 2 total 0.000000 0.000000 +22 1 6 1 2 total 0.000000 0.000000 +1 1 1 2 1 total 0.000000 0.000000 +5 1 2 2 1 total 0.000000 0.000000 +9 1 3 2 1 total 0.000000 0.000000 +13 1 4 2 1 total 0.005002 0.001278 +17 1 5 2 1 total 0.000000 0.000000 +21 1 6 2 1 total 0.000000 0.000000 +0 1 1 2 2 total 0.000000 0.000000 +4 1 2 2 2 total 0.000000 0.000000 +8 1 3 2 2 total 0.000000 0.000000 +12 1 4 2 2 total 0.000000 0.000000 +16 1 5 2 2 total 0.000000 0.000000 +20 1 6 2 2 total 0.000000 0.000000 total material group in nuclide mean std. dev. -1 2 1 total 0.313574 0.016009 -0 2 2 total 0.300858 0.005911 +1 2 1 total 0.320478 0.012201 +0 2 2 total 0.300681 0.029685 transport material group in nuclide mean std. dev. -1 2 1 total 0.266154 0.017348 -0 2 2 total 0.300597 0.011062 +1 2 1 total 0.267653 0.015887 +0 2 2 total 0.327250 0.035614 nu-transport material group in nuclide mean std. dev. -1 2 1 total 0.266154 0.017348 -0 2 2 total 0.300597 0.011062 +1 2 1 total 0.267653 0.015887 +0 2 2 total 0.327250 0.035614 absorption - material group in nuclide mean std. dev. -1 2 1 total 0.00150 0.000118 -0 2 2 total 0.00542 0.000201 + material group in nuclide mean std. dev. +1 2 1 total 0.001040 0.000121 +0 2 2 total 0.005284 0.000548 reduced absorption material group in nuclide mean std. dev. -1 2 1 total 0.001481 0.000119 -0 2 2 total 0.005420 0.000201 +1 2 1 total 0.001040 0.000121 +0 2 2 total 0.005284 0.000548 capture - material group in nuclide mean std. dev. -1 2 1 total 0.00150 0.000118 -0 2 2 total 0.00542 0.000201 + material group in nuclide mean std. dev. +1 2 1 total 0.001040 0.000121 +0 2 2 total 0.005284 0.000548 fission material group in nuclide mean std. dev. 1 2 1 total 0.0 0.0 @@ -342,18 +342,18 @@ kappa-fission 0 2 2 total 0.0 0.0 scatter material group in nuclide mean std. dev. -1 2 1 total 0.312074 0.015934 -0 2 2 total 0.295438 0.005743 +1 2 1 total 0.319438 0.012181 +0 2 2 total 0.295397 0.029142 nu-scatter material group in nuclide mean std. dev. -1 2 1 total 0.318594 0.023203 -0 2 2 total 0.295662 0.031486 +1 2 1 total 0.314727 0.014272 +0 2 2 total 0.295807 0.038170 scatter matrix material group in group out legendre nuclide mean std. dev. -12 2 1 1 P0 total 0.318594 0.023203 -13 2 1 1 P1 total 0.047420 0.006684 -14 2 1 1 P2 total 0.029426 0.008048 -15 2 1 1 P3 total 0.007335 0.004092 +12 2 1 1 P0 total 0.314727 0.014272 +13 2 1 1 P1 total 0.052826 0.010175 +14 2 1 1 P2 total 0.033176 0.002264 +15 2 1 1 P3 total 0.006129 0.004317 8 2 1 2 P0 total 0.000000 0.000000 9 2 1 2 P1 total 0.000000 0.000000 10 2 1 2 P2 total 0.000000 0.000000 @@ -362,16 +362,16 @@ scatter matrix 5 2 2 1 P1 total 0.000000 0.000000 6 2 2 1 P2 total 0.000000 0.000000 7 2 2 1 P3 total 0.000000 0.000000 -0 2 2 2 P0 total 0.295662 0.031486 -1 2 2 2 P1 total 0.000261 0.009350 -2 2 2 2 P2 total -0.004912 0.007866 -3 2 2 2 P3 total -0.018278 0.012339 +0 2 2 2 P0 total 0.295807 0.038170 +1 2 2 2 P1 total -0.026569 0.019676 +2 2 2 2 P2 total -0.005395 0.007578 +3 2 2 2 P3 total -0.005680 0.012737 nu-scatter matrix material group in group out legendre nuclide mean std. dev. -12 2 1 1 P0 total 0.318594 0.023203 -13 2 1 1 P1 total 0.047420 0.006684 -14 2 1 1 P2 total 0.029426 0.008048 -15 2 1 1 P3 total 0.007335 0.004092 +12 2 1 1 P0 total 0.314727 0.014272 +13 2 1 1 P1 total 0.052826 0.010175 +14 2 1 1 P2 total 0.033176 0.002264 +15 2 1 1 P3 total 0.006129 0.004317 8 2 1 2 P0 total 0.000000 0.000000 9 2 1 2 P1 total 0.000000 0.000000 10 2 1 2 P2 total 0.000000 0.000000 @@ -380,16 +380,16 @@ nu-scatter matrix 5 2 2 1 P1 total 0.000000 0.000000 6 2 2 1 P2 total 0.000000 0.000000 7 2 2 1 P3 total 0.000000 0.000000 -0 2 2 2 P0 total 0.295662 0.031486 -1 2 2 2 P1 total 0.000261 0.009350 -2 2 2 2 P2 total -0.004912 0.007866 -3 2 2 2 P3 total -0.018278 0.012339 +0 2 2 2 P0 total 0.295807 0.038170 +1 2 2 2 P1 total -0.026569 0.019676 +2 2 2 2 P2 total -0.005395 0.007578 +3 2 2 2 P3 total -0.005680 0.012737 multiplicity matrix material group in group out nuclide mean std. dev. -3 2 1 1 total 1.0 0.071770 +3 2 1 1 total 1.0 0.043852 2 2 1 2 total 0.0 0.000000 1 2 2 1 total 0.0 0.000000 -0 2 2 2 total 1.0 0.103652 +0 2 2 2 total 1.0 0.139361 nu-fission matrix material group in group out nuclide mean std. dev. 3 2 1 1 total 0.0 0.0 @@ -398,16 +398,16 @@ nu-fission matrix 0 2 2 2 total 0.0 0.0 scatter probability matrix material group in group out nuclide mean std. dev. -3 2 1 1 total 1.0 0.071770 +3 2 1 1 total 1.0 0.043852 2 2 1 2 total 0.0 0.000000 1 2 2 1 total 0.0 0.000000 -0 2 2 2 total 1.0 0.103652 +0 2 2 2 total 1.0 0.139361 consistent scatter matrix material group in group out legendre nuclide mean std. dev. -12 2 1 1 P0 total 0.312074 0.027487 -13 2 1 1 P1 total 0.046450 0.006939 -14 2 1 1 P2 total 0.028824 0.008012 -15 2 1 1 P3 total 0.007185 0.004024 +12 2 1 1 P0 total 0.319438 0.018563 +13 2 1 1 P1 total 0.053616 0.010510 +14 2 1 1 P2 total 0.033673 0.002604 +15 2 1 1 P3 total 0.006221 0.004387 8 2 1 2 P0 total 0.000000 0.000000 9 2 1 2 P1 total 0.000000 0.000000 10 2 1 2 P2 total 0.000000 0.000000 @@ -416,16 +416,16 @@ consistent scatter matrix 5 2 2 1 P1 total 0.000000 0.000000 6 2 2 1 P2 total 0.000000 0.000000 7 2 2 1 P3 total 0.000000 0.000000 -0 2 2 2 P0 total 0.295438 0.031157 -1 2 2 2 P1 total 0.000261 0.009343 -2 2 2 2 P2 total -0.004909 0.007859 -3 2 2 2 P3 total -0.018264 0.012327 +0 2 2 2 P0 total 0.295397 0.050438 +1 2 2 2 P1 total -0.026532 0.019872 +2 2 2 2 P2 total -0.005388 0.007591 +3 2 2 2 P3 total -0.005672 0.012735 consistent nu-scatter matrix material group in group out legendre nuclide mean std. dev. -12 2 1 1 P0 total 0.312074 0.035456 -13 2 1 1 P1 total 0.046450 0.007699 -14 2 1 1 P2 total 0.028824 0.008274 -15 2 1 1 P3 total 0.007185 0.004057 +12 2 1 1 P0 total 0.319438 0.023255 +13 2 1 1 P1 total 0.053616 0.010769 +14 2 1 1 P2 total 0.033673 0.002993 +15 2 1 1 P3 total 0.006221 0.004396 8 2 1 2 P0 total 0.000000 0.000000 9 2 1 2 P1 total 0.000000 0.000000 10 2 1 2 P2 total 0.000000 0.000000 @@ -434,10 +434,10 @@ consistent nu-scatter matrix 5 2 2 1 P1 total 0.000000 0.000000 6 2 2 1 P2 total 0.000000 0.000000 7 2 2 1 P3 total 0.000000 0.000000 -0 2 2 2 P0 total 0.295438 0.043686 -1 2 2 2 P1 total 0.000261 0.009343 -2 2 2 2 P2 total -0.004909 0.007876 -3 2 2 2 P3 total -0.018264 0.012471 +0 2 2 2 P0 total 0.295397 0.065105 +1 2 2 2 P1 total -0.026532 0.020213 +2 2 2 2 P2 total -0.005388 0.007628 +3 2 2 2 P3 total -0.005672 0.012759 chi material group out nuclide mean std. dev. 1 2 1 total 0.0 0.0 @@ -448,8 +448,8 @@ chi-prompt 0 2 2 total 0.0 0.0 inverse-velocity material group in nuclide mean std. dev. -1 2 1 total 6.076563e-08 2.727519e-09 -0 2 2 total 2.996176e-06 1.110139e-07 +1 2 1 total 6.068670e-08 4.861582e-09 +0 2 2 total 2.921021e-06 3.028269e-07 prompt-nu-fission material group in nuclide mean std. dev. 1 2 1 total 0.0 0.0 @@ -462,72 +462,72 @@ prompt-nu-fission matrix 0 2 2 2 total 0.0 0.0 diffusion-coefficient material group in nuclide mean std. dev. -1 2 1 total 1.252406 0.081631 -0 2 2 total 1.108904 0.040809 +1 2 1 total 1.245396 0.073923 +0 2 2 total 1.018589 0.110853 nu-diffusion-coefficient material group in nuclide mean std. dev. -1 2 1 total 1.252406 0.081631 -0 2 2 total 1.108904 0.040809 +1 2 1 total 1.245396 0.073923 +0 2 2 total 1.018589 0.110853 (n,elastic) material group in nuclide mean std. dev. -1 2 1 total 0.302664 0.015531 -0 2 2 total 0.295438 0.005743 +1 2 1 total 0.310592 0.012188 +0 2 2 total 0.295397 0.029142 (n,level) material group in nuclide mean std. dev. 1 2 1 total 0.0 0.0 0 2 2 total 0.0 0.0 (n,2n) - material group in nuclide mean std. dev. -1 2 1 total 0.000019 0.000017 -0 2 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 (n,na) material group in nuclide mean std. dev. -1 2 1 total 4.892570e-09 4.436228e-09 +1 2 1 total 2.157338e-13 1.864239e-13 0 2 2 total 0.000000e+00 0.000000e+00 (n,nc) - material group in nuclide mean std. dev. -1 2 1 total 0.001998 0.000408 -0 2 2 total 0.000000 0.000000 + material group in nuclide mean std. dev. +1 2 1 total 0.00187 0.000152 +0 2 2 total 0.00000 0.000000 (n,gamma) material group in nuclide mean std. dev. -1 2 1 total 0.001497 0.000118 -0 2 2 total 0.005419 0.000201 +1 2 1 total 0.001038 0.000121 +0 2 2 total 0.005283 0.000548 (n,a) material group in nuclide mean std. dev. -1 2 1 total 9.546292e-07 9.180854e-08 -0 2 2 total 2.736059e-07 5.318732e-09 +1 2 1 total 7.402079e-07 3.197538e-08 +0 2 2 total 2.735682e-07 2.698845e-08 (n,Xa) material group in nuclide mean std. dev. -1 2 1 total 9.595218e-07 9.558005e-08 -0 2 2 total 2.736059e-07 5.318732e-09 +1 2 1 total 7.402081e-07 3.197534e-08 +0 2 2 total 2.735682e-07 2.698845e-08 heating material group in nuclide mean std. dev. -1 2 1 total 2551.878627 212.765665 -0 2 2 total 2.332139 0.087384 +1 2 1 total 2479.710231 157.161879 +0 2 2 total 2.314706 0.265682 damage-energy - material group in nuclide mean std. dev. -1 2 1 total 1585.677533 130.382718 -0 2 2 total 0.295108 0.010079 + material group in nuclide mean std. dev. +1 2 1 total 1566.139383 61.602407 +0 2 2 total 0.288739 0.029698 (n,n1) material group in nuclide mean std. dev. -1 2 1 total 0.002835 0.000246 +1 2 1 total 0.002897 0.000181 0 2 2 total 0.000000 0.000000 (n,a0) material group in nuclide mean std. dev. -1 2 1 total 7.169006e-07 6.251188e-08 -0 2 2 total 2.733303e-07 5.313375e-09 +1 2 1 total 6.646569e-07 2.959064e-08 +0 2 2 total 2.732927e-07 2.696126e-08 (n,nc) matrix material group in group out nuclide mean std. dev. -3 2 1 1 total 0.001489 0.001491 +3 2 1 1 total 0.000488 0.000488 2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 0 2 2 2 total 0.000000 0.000000 (n,n1) matrix - material group in group out nuclide mean std. dev. -3 2 1 1 total 0.001985 0.000507 -2 2 1 2 total 0.000000 0.000000 -1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.000000 0.000000 + material group in group out nuclide mean std. dev. +3 2 1 1 total 0.00244 0.001094 +2 2 1 2 total 0.00000 0.000000 +1 2 2 1 total 0.00000 0.000000 +0 2 2 2 total 0.00000 0.000000 (n,2n) matrix material group in group out nuclide mean std. dev. 3 2 1 1 total 0.0 0.0 @@ -612,28 +612,28 @@ delayed-nu-fission matrix 20 2 6 2 2 total 0.0 0.0 total material group in nuclide mean std. dev. -1 3 1 total 0.682896 0.024140 -0 3 2 total 2.032938 0.085675 +1 3 1 total 0.692034 0.019973 +0 3 2 total 2.033425 0.189463 transport material group in nuclide mean std. dev. -1 3 1 total 0.298986 0.026905 -0 3 2 total 1.471887 0.096907 +1 3 1 total 0.298754 0.021602 +0 3 2 total 1.459465 0.197868 nu-transport material group in nuclide mean std. dev. -1 3 1 total 0.298986 0.026905 -0 3 2 total 1.471887 0.096907 +1 3 1 total 0.298754 0.021602 +0 3 2 total 1.459465 0.197868 absorption material group in nuclide mean std. dev. -1 3 1 total 0.000693 0.000020 -0 3 2 total 0.031171 0.001403 +1 3 1 total 0.000699 0.000035 +0 3 2 total 0.031056 0.003017 reduced absorption material group in nuclide mean std. dev. -1 3 1 total 0.000693 0.000020 -0 3 2 total 0.031171 0.001403 +1 3 1 total 0.000699 0.000035 +0 3 2 total 0.031056 0.003017 capture material group in nuclide mean std. dev. -1 3 1 total 0.000693 0.000020 -0 3 2 total 0.031171 0.001403 +1 3 1 total 0.000699 0.000035 +0 3 2 total 0.031056 0.003017 fission material group in nuclide mean std. dev. 1 3 1 total 0.0 0.0 @@ -648,54 +648,54 @@ kappa-fission 0 3 2 total 0.0 0.0 scatter material group in nuclide mean std. dev. -1 3 1 total 0.682202 0.024123 -0 3 2 total 2.001768 0.084281 +1 3 1 total 0.691336 0.019945 +0 3 2 total 2.002368 0.186454 nu-scatter material group in nuclide mean std. dev. -1 3 1 total 0.672567 0.017434 -0 3 2 total 2.004576 0.129211 +1 3 1 total 0.684356 0.011639 +0 3 2 total 1.990840 0.178205 scatter matrix material group in group out legendre nuclide mean std. dev. -12 3 1 1 P0 total 0.641741 0.016600 -13 3 1 1 P1 total 0.383841 0.011878 -14 3 1 1 P2 total 0.149909 0.005512 -15 3 1 1 P3 total 0.004238 0.002485 -8 3 1 2 P0 total 0.030826 0.000973 -9 3 1 2 P1 total 0.009943 0.000415 -10 3 1 2 P2 total -0.003002 0.000628 -11 3 1 2 P3 total -0.004234 0.000393 -4 3 2 1 P0 total 0.000467 0.000467 -5 3 2 1 P1 total 0.000345 0.000345 -6 3 2 1 P2 total 0.000149 0.000149 -7 3 2 1 P3 total -0.000047 0.000047 -0 3 2 2 P0 total 2.004109 0.129225 -1 3 2 2 P1 total 0.511363 0.043448 -2 3 2 2 P2 total 0.108599 0.014070 -3 3 2 2 P3 total 0.035733 0.021921 +12 3 1 1 P0 total 0.652706 0.011111 +13 3 1 1 P1 total 0.393203 0.008164 +14 3 1 1 P2 total 0.162146 0.003332 +15 3 1 1 P3 total 0.014967 0.004773 +8 3 1 2 P0 total 0.031650 0.000613 +9 3 1 2 P1 total 0.009845 0.000647 +10 3 1 2 P2 total -0.003284 0.000758 +11 3 1 2 P3 total -0.003971 0.000187 +4 3 2 1 P0 total 0.000474 0.000475 +5 3 2 1 P1 total 0.000396 0.000397 +6 3 2 1 P2 total 0.000260 0.000261 +7 3 2 1 P3 total 0.000099 0.000099 +0 3 2 2 P0 total 1.990366 0.178042 +1 3 2 2 P1 total 0.523546 0.053239 +2 3 2 2 P2 total 0.101180 0.015832 +3 3 2 2 P3 total 0.017873 0.005685 nu-scatter matrix material group in group out legendre nuclide mean std. dev. -12 3 1 1 P0 total 0.641741 0.016600 -13 3 1 1 P1 total 0.383841 0.011878 -14 3 1 1 P2 total 0.149909 0.005512 -15 3 1 1 P3 total 0.004238 0.002485 -8 3 1 2 P0 total 0.030826 0.000973 -9 3 1 2 P1 total 0.009943 0.000415 -10 3 1 2 P2 total -0.003002 0.000628 -11 3 1 2 P3 total -0.004234 0.000393 -4 3 2 1 P0 total 0.000467 0.000467 -5 3 2 1 P1 total 0.000345 0.000345 -6 3 2 1 P2 total 0.000149 0.000149 -7 3 2 1 P3 total -0.000047 0.000047 -0 3 2 2 P0 total 2.004109 0.129225 -1 3 2 2 P1 total 0.511363 0.043448 -2 3 2 2 P2 total 0.108599 0.014070 -3 3 2 2 P3 total 0.035733 0.021921 +12 3 1 1 P0 total 0.652706 0.011111 +13 3 1 1 P1 total 0.393203 0.008164 +14 3 1 1 P2 total 0.162146 0.003332 +15 3 1 1 P3 total 0.014967 0.004773 +8 3 1 2 P0 total 0.031650 0.000613 +9 3 1 2 P1 total 0.009845 0.000647 +10 3 1 2 P2 total -0.003284 0.000758 +11 3 1 2 P3 total -0.003971 0.000187 +4 3 2 1 P0 total 0.000474 0.000475 +5 3 2 1 P1 total 0.000396 0.000397 +6 3 2 1 P2 total 0.000260 0.000261 +7 3 2 1 P3 total 0.000099 0.000099 +0 3 2 2 P0 total 1.990366 0.178042 +1 3 2 2 P1 total 0.523546 0.053239 +2 3 2 2 P2 total 0.101180 0.015832 +3 3 2 2 P3 total 0.017873 0.005685 multiplicity matrix material group in group out nuclide mean std. dev. -3 3 1 1 total 1.0 0.022200 -2 3 1 2 total 1.0 0.033880 +3 3 1 1 total 1.0 0.020267 +2 3 1 2 total 1.0 0.024112 1 3 2 1 total 1.0 1.414214 -0 3 2 2 total 1.0 0.066922 +0 3 2 2 total 1.0 0.093189 nu-fission matrix material group in group out nuclide mean std. dev. 3 3 1 1 total 0.0 0.0 @@ -704,46 +704,46 @@ nu-fission matrix 0 3 2 2 total 0.0 0.0 scatter probability matrix material group in group out nuclide mean std. dev. -3 3 1 1 total 0.954167 0.020729 -2 3 1 2 total 0.045833 0.001296 -1 3 2 1 total 0.000233 0.000233 -0 3 2 2 total 0.999767 0.066899 +3 3 1 1 total 0.953753 0.018903 +2 3 1 2 total 0.046247 0.001011 +1 3 2 1 total 0.000238 0.000239 +0 3 2 2 total 0.999762 0.093156 consistent scatter matrix material group in group out legendre nuclide mean std. dev. -12 3 1 1 P0 total 0.650935 0.027014 -13 3 1 1 P1 total 0.389340 0.017459 -14 3 1 1 P2 total 0.152056 0.007457 -15 3 1 1 P3 total 0.004299 0.002525 -8 3 1 2 P0 total 0.031268 0.001416 -9 3 1 2 P1 total 0.010085 0.000533 -10 3 1 2 P2 total -0.003045 0.000645 -11 3 1 2 P3 total -0.004295 0.000423 -4 3 2 1 P0 total 0.000466 0.000467 -5 3 2 1 P1 total 0.000344 0.000345 -6 3 2 1 P2 total 0.000148 0.000149 -7 3 2 1 P3 total -0.000047 0.000047 -0 3 2 2 P0 total 2.001301 0.158219 -1 3 2 2 P1 total 0.510647 0.049275 -2 3 2 2 P2 total 0.108446 0.014900 -3 3 2 2 P3 total 0.035683 0.021951 +12 3 1 1 P0 total 0.659363 0.023079 +13 3 1 1 P1 total 0.397213 0.014683 +14 3 1 1 P2 total 0.163800 0.006035 +15 3 1 1 P3 total 0.015120 0.004843 +8 3 1 2 P0 total 0.031973 0.001157 +9 3 1 2 P1 total 0.009945 0.000721 +10 3 1 2 P2 total -0.003318 0.000772 +11 3 1 2 P3 total -0.004011 0.000225 +4 3 2 1 P0 total 0.000477 0.000480 +5 3 2 1 P1 total 0.000399 0.000401 +6 3 2 1 P2 total 0.000262 0.000264 +7 3 2 1 P3 total 0.000099 0.000100 +0 3 2 2 P0 total 2.001892 0.263710 +1 3 2 2 P1 total 0.526577 0.073894 +2 3 2 2 P2 total 0.101766 0.018719 +3 3 2 2 P3 total 0.017976 0.005976 consistent nu-scatter matrix material group in group out legendre nuclide mean std. dev. -12 3 1 1 P0 total 0.650935 0.030637 -13 3 1 1 P1 total 0.389340 0.019481 -14 3 1 1 P2 total 0.152056 0.008185 -15 3 1 1 P3 total 0.004299 0.002526 -8 3 1 2 P0 total 0.031268 0.001768 -9 3 1 2 P1 total 0.010085 0.000633 -10 3 1 2 P2 total -0.003045 0.000653 -11 3 1 2 P3 total -0.004295 0.000447 -4 3 2 1 P0 total 0.000466 0.000808 -5 3 2 1 P1 total 0.000344 0.000597 -6 3 2 1 P2 total 0.000148 0.000257 -7 3 2 1 P3 total -0.000047 0.000081 -0 3 2 2 P0 total 2.001301 0.207294 -1 3 2 2 P1 total 0.510647 0.059966 -2 3 2 2 P2 total 0.108446 0.016574 -3 3 2 2 P3 total 0.035683 0.022080 +12 3 1 1 P0 total 0.659363 0.026669 +13 3 1 1 P1 total 0.397213 0.016746 +14 3 1 1 P2 total 0.163800 0.006888 +15 3 1 1 P3 total 0.015120 0.004853 +8 3 1 2 P0 total 0.031973 0.001391 +9 3 1 2 P1 total 0.009945 0.000759 +10 3 1 2 P2 total -0.003318 0.000776 +11 3 1 2 P3 total -0.004011 0.000245 +4 3 2 1 P0 total 0.000477 0.000827 +5 3 2 1 P1 total 0.000399 0.000692 +6 3 2 1 P2 total 0.000262 0.000455 +7 3 2 1 P3 total 0.000099 0.000172 +0 3 2 2 P0 total 2.001892 0.323026 +1 3 2 2 P1 total 0.526577 0.088703 +2 3 2 2 P2 total 0.101766 0.020985 +3 3 2 2 P3 total 0.017976 0.006207 chi material group out nuclide mean std. dev. 1 3 1 total 0.0 0.0 @@ -754,8 +754,8 @@ chi-prompt 0 3 2 total 0.0 0.0 inverse-velocity material group in nuclide mean std. dev. -1 3 1 total 6.023693e-08 1.678511e-09 -0 3 2 total 2.995346e-06 1.347817e-07 +1 3 1 total 6.187551e-08 3.945367e-09 +0 3 2 total 2.984343e-06 2.898715e-07 prompt-nu-fission material group in nuclide mean std. dev. 1 3 1 total 0.0 0.0 @@ -768,60 +768,60 @@ prompt-nu-fission matrix 0 3 2 2 total 0.0 0.0 diffusion-coefficient material group in nuclide mean std. dev. -1 3 1 total 1.114881 0.100326 -0 3 2 total 0.226467 0.014910 +1 3 1 total 1.115746 0.080676 +0 3 2 total 0.228394 0.030965 nu-diffusion-coefficient material group in nuclide mean std. dev. -1 3 1 total 1.114881 0.100326 -0 3 2 total 0.226467 0.014910 +1 3 1 total 1.115746 0.080676 +0 3 2 total 0.228394 0.030965 (n,elastic) material group in nuclide mean std. dev. -1 3 1 total 0.682168 0.024125 -0 3 2 total 2.001768 0.084281 +1 3 1 total 0.691333 0.019945 +0 3 2 total 2.002368 0.186454 (n,level) material group in nuclide mean std. dev. -1 3 1 total 0.000033 0.000019 +1 3 1 total 0.000003 0.000002 0 3 2 total 0.000000 0.000000 (n,2n) material group in nuclide mean std. dev. 1 3 1 total 0.0 0.0 0 3 2 total 0.0 0.0 (n,na) - material group in nuclide mean std. dev. -1 3 1 total 9.967562e-07 9.970492e-07 -0 3 2 total 0.000000e+00 0.000000e+00 + material group in nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 (n,nc) - material group in nuclide mean std. dev. -1 3 1 total 8.867935e-07 8.870902e-07 -0 3 2 total 0.000000e+00 0.000000e+00 + material group in nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 (n,gamma) material group in nuclide mean std. dev. -1 3 1 total 0.000219 0.000006 -0 3 2 total 0.010855 0.000488 +1 3 1 total 0.000225 0.000014 +0 3 2 total 0.010815 0.001050 (n,a) material group in nuclide mean std. dev. -1 3 1 total 0.000474 0.000015 -0 3 2 total 0.020316 0.000914 +1 3 1 total 0.000474 0.000021 +0 3 2 total 0.020241 0.001966 (n,Xa) material group in nuclide mean std. dev. -1 3 1 total 0.000475 0.000015 -0 3 2 total 0.020316 0.000914 +1 3 1 total 0.000474 0.000021 +0 3 2 total 0.020242 0.001966 heating material group in nuclide mean std. dev. -1 3 1 total 77986.174023 6103.108384 -0 3 2 total 59060.658662 3576.641806 +1 3 1 total 74978.139095 3970.725596 +0 3 2 total 58539.697122 6443.645451 damage-energy material group in nuclide mean std. dev. -1 3 1 total 1107.847239 59.901669 -0 3 2 total 331.691439 14.926212 +1 3 1 total 1161.596397 41.187452 +0 3 2 total 330.473159 32.100259 (n,n1) - material group in nuclide mean std. dev. -1 3 1 total 0.000001 3.988839e-07 -0 3 2 total 0.000000 0.000000e+00 + material group in nuclide mean std. dev. +1 3 1 total 2.912377e-07 3.897408e-08 +0 3 2 total 0.000000e+00 0.000000e+00 (n,a0) material group in nuclide mean std. dev. -1 3 1 total 0.000084 0.000016 -0 3 2 total 0.001278 0.000058 +1 3 1 total 0.000082 0.000009 +0 3 2 total 0.001273 0.000124 (n,nc) matrix material group in group out nuclide mean std. dev. 3 3 1 1 total 0.0 0.0 diff --git a/tests/regression_tests/mgxs_library_no_nuclides/test.py b/tests/regression_tests/mgxs_library_no_nuclides/test.py index af14a5dc8f2..a02086af3ec 100644 --- a/tests/regression_tests/mgxs_library_no_nuclides/test.py +++ b/tests/regression_tests/mgxs_library_no_nuclides/test.py @@ -39,7 +39,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Add tallies - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) def _get_results(self, hash_output=False): """Digest info in the statepoint and return as a string.""" diff --git a/tests/regression_tests/mgxs_library_nuclides/results_true.dat b/tests/regression_tests/mgxs_library_nuclides/results_true.dat index c2188997d7e..c05ec9b48df 100644 --- a/tests/regression_tests/mgxs_library_nuclides/results_true.dat +++ b/tests/regression_tests/mgxs_library_nuclides/results_true.dat @@ -1 +1 @@ -4ae3b5a70ad72b1be261aee3ab19e0261d1c12f4d4ca50b712d1ba76041bd5387c69fa9fa326619ad588db206cd9aaf464b0025d71ea9b8b1137af0102bca87f \ No newline at end of file +d1e4ab2c0d85bb5da617db9c7a3731494114e2fd3ba75ae8eaa1f0a36648f73fcbcfb487390789b0124719cabdcbfa84af4bb118f11bdc548d1065e1b5af836a \ No newline at end of file diff --git a/tests/regression_tests/mgxs_library_nuclides/test.py b/tests/regression_tests/mgxs_library_nuclides/test.py index 8a7673565e5..a10070358ad 100644 --- a/tests/regression_tests/mgxs_library_nuclides/test.py +++ b/tests/regression_tests/mgxs_library_nuclides/test.py @@ -36,7 +36,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Add tallies - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=False) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=False) def _get_results(self, hash_output=True): """Digest info in the statepoint and return as a string.""" diff --git a/tests/regression_tests/mgxs_library_specific_nuclides/results_true.dat b/tests/regression_tests/mgxs_library_specific_nuclides/results_true.dat index eaf56b96669..0c44eb132c7 100644 --- a/tests/regression_tests/mgxs_library_specific_nuclides/results_true.dat +++ b/tests/regression_tests/mgxs_library_specific_nuclides/results_true.dat @@ -1 +1 @@ -08d5c199c51496f86fdd739bf7ee0e143a9a159da0f4d364ec970557e5c1fc92a202d906dcae91812e665fd2e88dd7db1e4913ef6b91f456f23b52093c83f483 \ No newline at end of file +efcd9fd6be2ed6c98bbe5279cbacdb287597fcbbc4ed49e164b07e0861f28877b1bef2ad82d70fdac95965f7ed0d0990f77c8545718836b1b55a16b4243208d0 \ No newline at end of file diff --git a/tests/regression_tests/mgxs_library_specific_nuclides/test.py b/tests/regression_tests/mgxs_library_specific_nuclides/test.py index 61910e539e8..0ccbb83bdbe 100644 --- a/tests/regression_tests/mgxs_library_specific_nuclides/test.py +++ b/tests/regression_tests/mgxs_library_specific_nuclides/test.py @@ -37,7 +37,7 @@ def __init__(self, *args, **kwargs): self.mgxs_lib.build_library() # Add tallies - self.mgxs_lib.add_to_tallies_file(self._model.tallies, merge=True) + self.mgxs_lib.add_to_tallies(self._model.tallies, merge=True) def _get_results(self, hash_output=True): """Digest info in the statepoint and return as a string.""" diff --git a/tests/regression_tests/microxs/test_reference_materials_direct.csv b/tests/regression_tests/microxs/test_reference_materials_direct.csv index 3259d0151a9..4a63fed85ab 100644 --- a/tests/regression_tests/microxs/test_reference_materials_direct.csv +++ b/tests/regression_tests/microxs/test_reference_materials_direct.csv @@ -1,7 +1,7 @@ nuclides,reactions,groups,xs -U235,"(n,gamma)",1,0.14765501510184456 -U235,fission,1,1.2517200956290817 -O16,"(n,gamma)",1,0.00010872314985710938 +U235,"(n,gamma)",1,0.1475718536187164 +U235,fission,1,1.2504996049257149 +O16,"(n,gamma)",1,0.00010981236259441559 O16,fission,1,0.0 -Xe135,"(n,gamma)",1,0.014333667335215764 +Xe135,"(n,gamma)",1,0.014570546772870611 Xe135,fission,1,0.0 diff --git a/tests/regression_tests/microxs/test_reference_materials_flux.csv b/tests/regression_tests/microxs/test_reference_materials_flux.csv index 5023e0d0e63..5eb29902e44 100644 --- a/tests/regression_tests/microxs/test_reference_materials_flux.csv +++ b/tests/regression_tests/microxs/test_reference_materials_flux.csv @@ -1,7 +1,7 @@ nuclides,reactions,groups,xs -U235,"(n,gamma)",1,0.15018326758942505 -U235,fission,1,1.2603151141390958 -O16,"(n,gamma)",1,0.00012159621938463765 +U235,"(n,gamma)",1,0.15003016703758473 +U235,fission,1,1.2646269005413537 +O16,"(n,gamma)",1,0.00012069778439640301 O16,fission,1,0.0 -Xe135,"(n,gamma)",1,0.015180177095633546 +Xe135,"(n,gamma)",1,0.014820264774863562 Xe135,fission,1,0.0 diff --git a/tests/regression_tests/microxs/test_reference_mesh_direct.csv b/tests/regression_tests/microxs/test_reference_mesh_direct.csv index bd07a3237ae..60160ee513d 100644 --- a/tests/regression_tests/microxs/test_reference_mesh_direct.csv +++ b/tests/regression_tests/microxs/test_reference_mesh_direct.csv @@ -1,7 +1,7 @@ nuclides,reactions,groups,xs -U235,"(n,gamma)",1,0.14765501510184456 -U235,fission,1,1.2517200956290815 -O16,"(n,gamma)",1,0.00010872314985710936 +U235,"(n,gamma)",1,0.14757185361871633 +U235,fission,1,1.2504996049257142 +O16,"(n,gamma)",1,0.0001098123625944155 O16,fission,1,0.0 -Xe135,"(n,gamma)",1,0.014333667335215761 +Xe135,"(n,gamma)",1,0.0145705467728706 Xe135,fission,1,0.0 diff --git a/tests/regression_tests/microxs/test_reference_mesh_flux.csv b/tests/regression_tests/microxs/test_reference_mesh_flux.csv index d946ada802a..5eb29902e44 100644 --- a/tests/regression_tests/microxs/test_reference_mesh_flux.csv +++ b/tests/regression_tests/microxs/test_reference_mesh_flux.csv @@ -1,7 +1,7 @@ nuclides,reactions,groups,xs -U235,"(n,gamma)",1,0.15018326758942507 -U235,fission,1,1.2603151141390958 -O16,"(n,gamma)",1,0.00012159621938463766 +U235,"(n,gamma)",1,0.15003016703758473 +U235,fission,1,1.2646269005413537 +O16,"(n,gamma)",1,0.00012069778439640301 O16,fission,1,0.0 -Xe135,"(n,gamma)",1,0.015180177095633546 +Xe135,"(n,gamma)",1,0.014820264774863562 Xe135,fission,1,0.0 diff --git a/tests/regression_tests/multipole/results_true.dat b/tests/regression_tests/multipole/results_true.dat index 8e82655ce50..40b42b1a05a 100644 --- a/tests/regression_tests/multipole/results_true.dat +++ b/tests/regression_tests/multipole/results_true.dat @@ -1,36 +1,36 @@ k-combined: -1.354889E+00 8.437211E-03 +1.315804E+00 7.070811E-02 tally 1: -3.869969E+00 -3.000421E+00 -2.800393E+00 -1.570851E+00 -5.399091E-01 -5.842233E-02 -4.577147E-01 -4.203362E-02 +3.840178E+00 +2.953217E+00 +2.769369E+00 +1.535605E+00 +5.400560E-01 +5.840168E-02 +4.595308E-01 +4.237758E-02 0.000000E+00 0.000000E+00 -2.286465E+01 -1.045869E+02 +2.283789E+01 +1.044032E+02 0.000000E+00 0.000000E+00 -6.971793E-04 -9.724819E-08 -2.283955E+01 -1.043576E+02 -4.659256E-06 -2.170865E-11 -3.663230E+02 -2.685383E+04 -2.800393E+00 -1.570851E+00 -2.204999E+00 -9.728014E-01 -3.612213E+02 -2.611152E+04 -4.659256E-06 -2.170865E-11 +6.960971E-04 +9.704386E-08 +2.281620E+01 +1.042051E+02 +3.667073E-05 +1.048567E-09 +3.655557E+02 +2.676173E+04 +2.769369E+00 +1.535605E+00 +2.199058E+00 +9.681253E-01 +3.604950E+02 +2.602657E+04 +3.667073E-05 +1.048567E-09 Cell ID = 11 Name = @@ -38,5 +38,6 @@ Cell Region = -1 Rotation = None Temperature = [500. 700. 0. 800.] + Density = None Translation = None Volume = None diff --git a/tests/regression_tests/output/results_true.dat b/tests/regression_tests/output/results_true.dat index bbf03de9437..97b997ae6b9 100644 --- a/tests/regression_tests/output/results_true.dat +++ b/tests/regression_tests/output/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.070134E-01 3.900396E-03 +2.940336E-01 7.338463E-04 diff --git a/tests/regression_tests/particle_restart_eigval/results_true.dat b/tests/regression_tests/particle_restart_eigval/results_true.dat index bd81920caea..3feeb5e74bc 100644 --- a/tests/regression_tests/particle_restart_eigval/results_true.dat +++ b/tests/regression_tests/particle_restart_eigval/results_true.dat @@ -1,16 +1,16 @@ current batch: -1.100000E+01 +8.000000E+00 current generation: 1.000000E+00 particle id: -2.540000E+02 +6.000000E+01 run mode: eigenvalue particle weight: 1.000000E+00 particle energy: -2.220048E+06 +2.028153E+06 particle xyz: --4.820850E+01 2.432936E+01 4.397668E+01 +-3.678172E+01 -6.073321E+01 2.756488E+01 particle uvw: --3.148565E-01 9.184190E-01 2.395245E-01 +-3.284774E-01 -8.920284E-01 3.104639E-01 diff --git a/tests/regression_tests/particle_restart_eigval/settings.xml b/tests/regression_tests/particle_restart_eigval/settings.xml index 64b1a4dd459..de580e4c486 100644 --- a/tests/regression_tests/particle_restart_eigval/settings.xml +++ b/tests/regression_tests/particle_restart_eigval/settings.xml @@ -6,7 +6,7 @@ 12 5 1200 - + 1000000 -10 -10 -5 10 10 5 diff --git a/tests/regression_tests/particle_restart_eigval/test.py b/tests/regression_tests/particle_restart_eigval/test.py index f9d22edb8a2..bad3f158c06 100644 --- a/tests/regression_tests/particle_restart_eigval/test.py +++ b/tests/regression_tests/particle_restart_eigval/test.py @@ -2,5 +2,5 @@ def test_particle_restart_eigval(): - harness = ParticleRestartTestHarness('particle_11_254.h5') + harness = ParticleRestartTestHarness('particle_8_60.h5') harness.main() diff --git a/tests/regression_tests/periodic/results_true.dat b/tests/regression_tests/periodic/results_true.dat index 2189597e112..626004b16be 100644 --- a/tests/regression_tests/periodic/results_true.dat +++ b/tests/regression_tests/periodic/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.623300E+00 2.572983E-02 +1.624889E+00 1.108153E-02 diff --git a/tests/regression_tests/periodic_6fold/results_true.dat b/tests/regression_tests/periodic_6fold/results_true.dat index e60182809aa..04aa308781d 100644 --- a/tests/regression_tests/periodic_6fold/results_true.dat +++ b/tests/regression_tests/periodic_6fold/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.858730E+00 6.824588E-03 +1.848492E+00 2.933785E-03 diff --git a/tests/regression_tests/periodic_hex/results_true.dat b/tests/regression_tests/periodic_hex/results_true.dat index 584089a15de..eff00b6e166 100644 --- a/tests/regression_tests/periodic_hex/results_true.dat +++ b/tests/regression_tests/periodic_hex/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.284468E+00 2.781588E-02 +2.285622E+00 2.576768E-03 diff --git a/tests/regression_tests/photon_production_fission/results_true.dat b/tests/regression_tests/photon_production_fission/results_true.dat index b17b3621a04..af325d4b02a 100644 --- a/tests/regression_tests/photon_production_fission/results_true.dat +++ b/tests/regression_tests/photon_production_fission/results_true.dat @@ -1,12 +1,12 @@ k-combined: -2.278476E+00 6.220292E-02 +2.297165E+00 1.955494E-02 tally 1: -2.664071E+00 -2.369250E+00 +2.696393E+00 +2.423937E+00 0.000000E+00 0.000000E+00 -2.664071E+00 -2.369250E+00 +2.696393E+00 +2.423937E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -18,52 +18,52 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -2.640755E+00 -2.326201E+00 -4.245217E+08 -6.012128E+16 +2.672029E+00 +2.380251E+00 +4.288244E+08 +6.130569E+16 0.000000E+00 0.000000E+00 -2.640755E+00 -2.326201E+00 -4.245217E+08 -6.012128E+16 +2.672029E+00 +2.380251E+00 +4.288244E+08 +6.130569E+16 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.675918E+05 -9.365733E+09 +1.711908E+05 +9.769096E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.675918E+05 -9.365733E+09 +1.711908E+05 +9.769096E+09 0.000000E+00 0.000000E+00 tally 3: -2.657846E+00 -2.354717E+00 -4.245217E+08 -6.012128E+16 +2.649127E+00 +2.339294E+00 +4.288244E+08 +6.130569E+16 0.000000E+00 0.000000E+00 -2.657846E+00 -2.354717E+00 -4.245217E+08 -6.012128E+16 +2.649127E+00 +2.339294E+00 +4.288244E+08 +6.130569E+16 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.675918E+05 -9.365733E+09 +1.711908E+05 +9.769096E+09 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.675918E+05 -9.365733E+09 +1.711908E+05 +9.769096E+09 0.000000E+00 0.000000E+00 diff --git a/tests/regression_tests/ptables_off/results_true.dat b/tests/regression_tests/ptables_off/results_true.dat index 1652088ce87..3742748625c 100644 --- a/tests/regression_tests/ptables_off/results_true.dat +++ b/tests/regression_tests/ptables_off/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.978318E-01 1.560055E-03 +2.968228E-01 1.770320E-03 diff --git a/tests/regression_tests/quadric_surfaces/results_true.dat b/tests/regression_tests/quadric_surfaces/results_true.dat index 382c4241e08..6fb569f5227 100644 --- a/tests/regression_tests/quadric_surfaces/results_true.dat +++ b/tests/regression_tests/quadric_surfaces/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.193830E+00 1.824184E-02 +1.216213E+00 2.789559E-02 diff --git a/tests/regression_tests/random_ray_adjoint_fixed_source/inputs_true.dat b/tests/regression_tests/random_ray_adjoint_fixed_source/inputs_true.dat index 30e62a8853e..0adfc548848 100644 --- a/tests/regression_tests/random_ray_adjoint_fixed_source/inputs_true.dat +++ b/tests/regression_tests/random_ray_adjoint_fixed_source/inputs_true.dat @@ -212,8 +212,8 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True - True + true + true naive diff --git a/tests/regression_tests/random_ray_adjoint_fixed_source/results_true.dat b/tests/regression_tests/random_ray_adjoint_fixed_source/results_true.dat index 7178e2f111b..e9aa9015b39 100644 --- a/tests/regression_tests/random_ray_adjoint_fixed_source/results_true.dat +++ b/tests/regression_tests/random_ray_adjoint_fixed_source/results_true.dat @@ -6,4 +6,4 @@ tally 2: 9.482551E+08 tally 3: 1.956327E+05 -7.654469E+09 +7.654468E+09 diff --git a/tests/regression_tests/random_ray_adjoint_k_eff/inputs_true.dat b/tests/regression_tests/random_ray_adjoint_k_eff/inputs_true.dat index cd4e92aa1ba..073348c41e7 100644 --- a/tests/regression_tests/random_ray_adjoint_k_eff/inputs_true.dat +++ b/tests/regression_tests/random_ray_adjoint_k_eff/inputs_true.dat @@ -85,8 +85,8 @@ -1.26 -1.26 -1 1.26 1.26 1 - True - True + true + true diff --git a/tests/regression_tests/random_ray_adjoint_k_eff/results_true.dat b/tests/regression_tests/random_ray_adjoint_k_eff/results_true.dat index 657c841b561..dfef53cd2f9 100644 --- a/tests/regression_tests/random_ray_adjoint_k_eff/results_true.dat +++ b/tests/regression_tests/random_ray_adjoint_k_eff/results_true.dat @@ -1,171 +1,171 @@ k-combined: 1.006640E+00 1.812969E-03 tally 1: -6.684129E+00 -8.939821E+00 -2.685967E+00 -1.443592E+00 +1.208044E+00 +2.920182E-01 +4.854426E-01 +4.715453E-02 0.000000E+00 0.000000E+00 -6.358774E+00 -8.091444E+00 -9.687217E-01 -1.878029E-01 +1.149242E+00 +2.643067E-01 +1.750801E-01 +6.134563E-03 0.000000E+00 0.000000E+00 -5.963160E+00 -7.117108E+00 -1.932332E-01 -7.473914E-03 +1.077743E+00 +2.324814E-01 +3.492371E-02 +2.441363E-04 0.000000E+00 0.000000E+00 -5.137593E+00 -5.283310E+00 -1.714616E-01 -5.884834E-03 -1.086218E-06 -2.361752E-13 -4.857253E+00 -4.719856E+00 -5.689580E-02 -6.476286E-04 -2.989356E-03 -1.787808E-06 -4.830516E+00 -4.666801E+00 -7.203015E-03 -1.037676E-05 -3.620020E+00 -2.620927E+00 -5.161382E+00 -5.328124E+00 -6.786255E-02 -9.210763E-04 -5.531943E+00 -6.120553E+00 -5.414034E+00 -5.864661E+00 +9.285362E-01 +1.725808E-01 +3.098889E-02 +1.922297E-04 +1.963161E-07 +7.714727E-15 +8.778641E-01 +1.541719E-01 +1.028293E-02 +2.115448E-05 +5.402741E-04 +5.839789E-08 +8.730274E-01 +1.524358E-01 +1.301813E-03 +3.389450E-07 +6.542525E-01 +8.560964E-02 +9.328247E-01 +1.740366E-01 +1.226491E-02 +3.008584E-05 +9.997969E-01 +1.999204E-01 +9.784958E-01 +1.915688E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.632338E+00 -6.347626E+00 +1.017952E+00 +2.073461E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.682608E+00 -6.462382E+00 +1.027039E+00 +2.110955E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.310716E+00 -5.645180E+00 +9.598240E-01 +1.844004E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.945409E+00 -4.893171E+00 +8.937969E-01 +1.598332E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.842688E+00 -4.690352E+00 +8.752275E-01 +1.532052E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.117198E+00 -5.237280E+00 +9.248400E-01 +1.710699E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.938711E+00 -9.633345E+00 -2.835258E+00 -1.608212E+00 +1.254054E+00 +3.146708E-01 +5.124223E-01 +5.253093E-02 0.000000E+00 0.000000E+00 -6.549505E+00 -8.584036E+00 -1.015138E+00 -2.061993E-01 +1.183712E+00 +2.803961E-01 +1.834683E-01 +6.735381E-03 0.000000E+00 0.000000E+00 -6.050651E+00 -7.327711E+00 -1.992816E-01 -7.948424E-03 +1.093555E+00 +2.393604E-01 +3.601678E-02 +2.596341E-04 0.000000E+00 0.000000E+00 -5.113981E+00 -5.234801E+00 -1.732323E-01 -6.006619E-03 -1.097435E-06 -2.410627E-13 -4.837033E+00 -4.680541E+00 -5.760042E-02 -6.637112E-04 -3.026377E-03 -1.832205E-06 -4.827049E+00 -4.660105E+00 -7.319913E-03 -1.071647E-05 -3.678770E+00 -2.706730E+00 -5.175337E+00 -5.356957E+00 -6.923046E-02 -9.586177E-04 -5.643451E+00 -6.370016E+00 -6.693323E+00 -8.964322E+00 -2.753307E+00 -1.516683E+00 +9.242694E-01 +1.709967E-01 +3.130894E-02 +1.962084E-04 +1.983437E-07 +7.874400E-15 +8.742100E-01 +1.528879E-01 +1.041026E-02 +2.167970E-05 +5.469644E-04 +5.984780E-08 +8.724009E-01 +1.522171E-01 +1.322938E-03 +3.500386E-07 +6.648691E-01 +8.841161E-02 +9.353464E-01 +1.749781E-01 +1.251209E-02 +3.131171E-05 +1.019947E+00 +2.080664E-01 +1.209708E+00 +2.928214E-01 +4.976146E-01 +4.954258E-02 0.000000E+00 0.000000E+00 -6.358384E+00 -8.090233E+00 -9.912008E-01 -1.965868E-01 +1.149174E+00 +2.642694E-01 +1.791431E-01 +6.421530E-03 0.000000E+00 0.000000E+00 -5.957484E+00 -7.103246E+00 -1.974033E-01 -7.798286E-03 +1.076718E+00 +2.320295E-01 +3.567737E-02 +2.547314E-04 0.000000E+00 0.000000E+00 -5.130744E+00 -5.268844E+00 -1.749233E-01 -6.123348E-03 -1.108148E-06 -2.457474E-13 -4.857340E+00 -4.720019E+00 -5.816659E-02 -6.768049E-04 -3.056125E-03 -1.868351E-06 -4.830629E+00 -4.667018E+00 -7.366289E-03 -1.085264E-05 -3.702077E+00 -2.741125E+00 -5.164864E+00 -5.335279E+00 -6.947917E-02 -9.655086E-04 -5.663725E+00 -6.415806E+00 +9.272977E-01 +1.721077E-01 +3.161443E-02 +2.000179E-04 +2.002789E-07 +8.027290E-15 +8.778794E-01 +1.541769E-01 +1.051257E-02 +2.210729E-05 +5.523400E-04 +6.102818E-08 +8.730477E-01 +1.524429E-01 +1.331320E-03 +3.544869E-07 +6.690816E-01 +8.953516E-02 +9.334544E-01 +1.742707E-01 +1.255707E-02 +3.153710E-05 +1.023613E+00 +2.095641E-01 diff --git a/tests/regression_tests/random_ray_auto_convert/infinite_medium/results_true.dat b/tests/regression_tests/random_ray_auto_convert/infinite_medium/results_true.dat index a0d7fc545f3..f984f37186b 100644 --- a/tests/regression_tests/random_ray_auto_convert/infinite_medium/results_true.dat +++ b/tests/regression_tests/random_ray_auto_convert/infinite_medium/results_true.dat @@ -1,2 +1,2 @@ k-combined: -7.796949E-01 1.055316E-02 +7.479770E-01 1.624548E-02 diff --git a/tests/regression_tests/random_ray_auto_convert/material_wise/results_true.dat b/tests/regression_tests/random_ray_auto_convert/material_wise/results_true.dat index ebf510cfc74..3bade01e055 100644 --- a/tests/regression_tests/random_ray_auto_convert/material_wise/results_true.dat +++ b/tests/regression_tests/random_ray_auto_convert/material_wise/results_true.dat @@ -1,2 +1,2 @@ k-combined: -7.375068E-01 7.015839E-03 +7.372542E-01 6.967831E-03 diff --git a/tests/regression_tests/random_ray_auto_convert/stochastic_slab/results_true.dat b/tests/regression_tests/random_ray_auto_convert/stochastic_slab/results_true.dat index 2f444fad3c8..674dee4aaff 100644 --- a/tests/regression_tests/random_ray_auto_convert/stochastic_slab/results_true.dat +++ b/tests/regression_tests/random_ray_auto_convert/stochastic_slab/results_true.dat @@ -1,2 +1,2 @@ k-combined: -7.499679E-01 8.107614E-03 +6.413334E-01 2.083132E-02 diff --git a/tests/regression_tests/random_ray_auto_convert/test.py b/tests/regression_tests/random_ray_auto_convert/test.py index fa7f2f17f49..99a931dce86 100644 --- a/tests/regression_tests/random_ray_auto_convert/test.py +++ b/tests/regression_tests/random_ray_auto_convert/test.py @@ -27,7 +27,7 @@ def test_random_ray_auto_convert(method): # Convert to a multi-group model model.convert_to_multigroup( - method=method, groups='CASMO-2', nparticles=30, + method=method, groups='CASMO-2', nparticles=100, overwrite_mgxs_library=False, mgxs_path="mgxs.h5" ) diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/__init__.py b/tests/regression_tests/random_ray_auto_convert_source_energy/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/model/inputs_true.dat b/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/model/inputs_true.dat new file mode 100644 index 00000000000..80a166c6786 --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/model/inputs_true.dat @@ -0,0 +1,61 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 10 + 5 + + + 7000000.0 1.0 + + + multi-group + + + + -0.63 -0.63 -1.0 0.63 0.63 1.0 + + + 30.0 + 150.0 + + + + + + linear + + + 2 2 + -0.63 -0.63 + 0.63 0.63 + + + diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/model/results_true.dat b/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/model/results_true.dat new file mode 100644 index 00000000000..1fb09fd68af --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/model/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +7.657815E-01 2.317564E-02 diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/user/inputs_true.dat b/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/user/inputs_true.dat new file mode 100644 index 00000000000..464c89a5df9 --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/user/inputs_true.dat @@ -0,0 +1,64 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 10 + 5 + + + -0.63 -0.63 -1 0.63 0.63 1 + + + true + + + multi-group + + + + -0.63 -0.63 -1.0 0.63 0.63 1.0 + + + 30.0 + 150.0 + + + + + + linear + + + 2 2 + -0.63 -0.63 + 0.63 0.63 + + + diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/user/results_true.dat b/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/user/results_true.dat new file mode 100644 index 00000000000..073c5c99ff0 --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/infinite_medium/user/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +7.827784E-01 2.062954E-02 diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/model/inputs_true.dat b/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/model/inputs_true.dat new file mode 100644 index 00000000000..80a166c6786 --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/model/inputs_true.dat @@ -0,0 +1,61 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 10 + 5 + + + 7000000.0 1.0 + + + multi-group + + + + -0.63 -0.63 -1.0 0.63 0.63 1.0 + + + 30.0 + 150.0 + + + + + + linear + + + 2 2 + -0.63 -0.63 + 0.63 0.63 + + + diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/model/results_true.dat b/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/model/results_true.dat new file mode 100644 index 00000000000..c5cdf8e29f6 --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/model/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +7.479571E-01 2.398563E-02 diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/user/inputs_true.dat b/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/user/inputs_true.dat new file mode 100644 index 00000000000..464c89a5df9 --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/user/inputs_true.dat @@ -0,0 +1,64 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + + + + + + eigenvalue + 100 + 10 + 5 + + + -0.63 -0.63 -1 0.63 0.63 1 + + + true + + + multi-group + + + + -0.63 -0.63 -1.0 0.63 0.63 1.0 + + + 30.0 + 150.0 + + + + + + linear + + + 2 2 + -0.63 -0.63 + 0.63 0.63 + + + diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/user/results_true.dat b/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/user/results_true.dat new file mode 100644 index 00000000000..c6cce2e39c2 --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/stochastic_slab/user/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +7.620306E-01 2.175179E-02 diff --git a/tests/regression_tests/random_ray_auto_convert_source_energy/test.py b/tests/regression_tests/random_ray_auto_convert_source_energy/test.py new file mode 100644 index 00000000000..bb9119d8953 --- /dev/null +++ b/tests/regression_tests/random_ray_auto_convert_source_energy/test.py @@ -0,0 +1,66 @@ +import os + +import openmc +from openmc.examples import pwr_pin_cell +from openmc import RegularMesh +from openmc.utility_funcs import change_directory +import pytest + +from tests.testing_harness import TolerantPyAPITestHarness + + +class MGXSTestHarness(TolerantPyAPITestHarness): + def _cleanup(self): + super()._cleanup() + f = 'mgxs.h5' + if os.path.exists(f): + os.remove(f) + + +@pytest.mark.parametrize("source_type", ["model", "user"]) +@pytest.mark.parametrize("method", ["stochastic_slab", "infinite_medium"]) +def test_random_ray_auto_convert_source_energy(method, source_type): + dirname = f"{method}/{source_type}" + with change_directory(dirname): + openmc.reset_auto_ids() + + # Start with a normal continuous energy model + model = pwr_pin_cell() + + # Define the source energy distribution, using different methods + source_energy = None + if source_type == "model": + model.settings.source = openmc.IndependentSource( + energy=openmc.stats.delta_function(7.0e6) + ) + elif source_type == "user": + source_energy = openmc.stats.delta_function(1.0e4) + + # Convert to a multi-group model + model.convert_to_multigroup( + method=method, groups='CASMO-8', nparticles=100, + overwrite_mgxs_library=False, mgxs_path="mgxs.h5", + source_energy=source_energy + ) + + # Convert to a random ray model + model.convert_to_random_ray() + + # Set the number of particles + model.settings.particles = 100 + + # Overlay a basic 2x2 mesh + n = 2 + mesh = RegularMesh() + mesh.dimension = (n, n) + bbox = model.geometry.bounding_box + mesh.lower_left = (bbox.lower_left[0], bbox.lower_left[1]) + mesh.upper_right = (bbox.upper_right[0], bbox.upper_right[1]) + model.settings.random_ray['source_region_meshes'] = [ + (mesh, [model.geometry.root_universe])] + + # Set the source shape to linear + model.settings.random_ray['source_shape'] = 'linear' + + harness = MGXSTestHarness('statepoint.10.h5', model) + harness.main() diff --git a/tests/regression_tests/random_ray_diagonal_stabilization/results_true.dat b/tests/regression_tests/random_ray_diagonal_stabilization/results_true.dat index c6ce6aab94b..034d7f7c64d 100644 --- a/tests/regression_tests/random_ray_diagonal_stabilization/results_true.dat +++ b/tests/regression_tests/random_ray_diagonal_stabilization/results_true.dat @@ -1,2 +1,2 @@ k-combined: -7.152917E-01 1.430362E-02 +7.134473E-01 1.422763E-02 diff --git a/tests/regression_tests/random_ray_diagonal_stabilization/test.py b/tests/regression_tests/random_ray_diagonal_stabilization/test.py index c7a1c9f7cd9..8d36e1d2581 100644 --- a/tests/regression_tests/random_ray_diagonal_stabilization/test.py +++ b/tests/regression_tests/random_ray_diagonal_stabilization/test.py @@ -23,7 +23,7 @@ def test_random_ray_diagonal_stabilization(): # MGXS data with some negatives on the diagonal, in order # to trigger diagonal correction. model.convert_to_multigroup( - method='material_wise', groups='CASMO-70', nparticles=30, + method='material_wise', groups='CASMO-70', nparticles=13, overwrite_mgxs_library=True, mgxs_path="mgxs.h5", correction='P0' ) diff --git a/tests/regression_tests/random_ray_fixed_source_domain/cell/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_domain/cell/inputs_true.dat index 4b8af76aaf6..9f1987f3acc 100644 --- a/tests/regression_tests/random_ray_fixed_source_domain/cell/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_domain/cell/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/random_ray_fixed_source_domain/material/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_domain/material/inputs_true.dat index 82fe48b614c..b4f57dbfa8a 100644 --- a/tests/regression_tests/random_ray_fixed_source_domain/material/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_domain/material/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/random_ray_fixed_source_domain/universe/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_domain/universe/inputs_true.dat index c4fd06f421e..ab91f74e50d 100644 --- a/tests/regression_tests/random_ray_fixed_source_domain/universe/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_domain/universe/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/random_ray_fixed_source_linear/linear/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_linear/linear/inputs_true.dat index 4085b0c7a1f..220fa7db643 100644 --- a/tests/regression_tests/random_ray_fixed_source_linear/linear/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_linear/linear/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true linear diff --git a/tests/regression_tests/random_ray_fixed_source_linear/linear/results_true.dat b/tests/regression_tests/random_ray_fixed_source_linear/linear/results_true.dat index 2fc08d0a429..e90d6bfdcb8 100644 --- a/tests/regression_tests/random_ray_fixed_source_linear/linear/results_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_linear/linear/results_true.dat @@ -1,6 +1,6 @@ tally 1: -2.339085E+00 -2.747304E-01 +2.339086E+00 +2.747305E-01 tally 2: 1.089827E-01 6.069324E-04 diff --git a/tests/regression_tests/random_ray_fixed_source_linear/linear_xy/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_linear/linear_xy/inputs_true.dat index ff085d2fbb6..f8c4430852f 100644 --- a/tests/regression_tests/random_ray_fixed_source_linear/linear_xy/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_linear/linear_xy/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true linear_xy diff --git a/tests/regression_tests/random_ray_fixed_source_mesh/flat/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_mesh/flat/inputs_true.dat index 12c4d74edbf..c84e544fcc4 100644 --- a/tests/regression_tests/random_ray_fixed_source_mesh/flat/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_mesh/flat/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/random_ray_fixed_source_mesh/linear/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_mesh/linear/inputs_true.dat index 07adb1ff551..05c4846e6b4 100644 --- a/tests/regression_tests/random_ray_fixed_source_mesh/linear/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_mesh/linear/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/random_ray_fixed_source_normalization/False/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_normalization/False/inputs_true.dat index ab077ae8aaf..0c870e10067 100644 --- a/tests/regression_tests/random_ray_fixed_source_normalization/False/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_normalization/False/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - False + false diff --git a/tests/regression_tests/random_ray_fixed_source_normalization/True/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_normalization/True/inputs_true.dat index c4fd06f421e..ab91f74e50d 100644 --- a/tests/regression_tests/random_ray_fixed_source_normalization/True/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_normalization/True/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/random_ray_fixed_source_subcritical/flat/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_subcritical/flat/inputs_true.dat index a124b5e3c45..0c05a71df32 100644 --- a/tests/regression_tests/random_ray_fixed_source_subcritical/flat/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_subcritical/flat/inputs_true.dat @@ -115,7 +115,7 @@ -1.26 -1.26 -1 1.26 1.26 1 - False + false flat diff --git a/tests/regression_tests/random_ray_fixed_source_subcritical/flat/results_true.dat b/tests/regression_tests/random_ray_fixed_source_subcritical/flat/results_true.dat index 831eac5019d..4d2fb6c579d 100644 --- a/tests/regression_tests/random_ray_fixed_source_subcritical/flat/results_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_subcritical/flat/results_true.dat @@ -83,7 +83,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.073356E+02 +1.073355E+02 4.630895E+02 1.263975E+01 6.427678E+00 @@ -107,7 +107,7 @@ tally 1: 2.388612E-03 5.941898E-01 1.414866E-02 -5.319555E+01 +5.319554E+01 1.134034E+02 1.967517E-01 1.551313E-03 @@ -122,7 +122,7 @@ tally 1: 8.044764E+01 2.602455E+02 3.474828E-01 -4.908567E-03 +4.908566E-03 9.665057E-01 3.797493E-02 1.561720E+02 diff --git a/tests/regression_tests/random_ray_fixed_source_subcritical/linear_xy/inputs_true.dat b/tests/regression_tests/random_ray_fixed_source_subcritical/linear_xy/inputs_true.dat index cc557afb6e4..a67495bf169 100644 --- a/tests/regression_tests/random_ray_fixed_source_subcritical/linear_xy/inputs_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_subcritical/linear_xy/inputs_true.dat @@ -115,7 +115,7 @@ -1.26 -1.26 -1 1.26 1.26 1 - False + false linear_xy diff --git a/tests/regression_tests/random_ray_fixed_source_subcritical/linear_xy/results_true.dat b/tests/regression_tests/random_ray_fixed_source_subcritical/linear_xy/results_true.dat index 49813144d26..bf602d3e2d5 100644 --- a/tests/regression_tests/random_ray_fixed_source_subcritical/linear_xy/results_true.dat +++ b/tests/regression_tests/random_ray_fixed_source_subcritical/linear_xy/results_true.dat @@ -23,7 +23,7 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.235812E+01 +5.235813E+01 1.099243E+02 0.000000E+00 0.000000E+00 @@ -72,12 +72,12 @@ tally 1: 0.000000E+00 0.000000E+00 9.495275E+01 -3.613372E+02 +3.613373E+02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.799250E+01 +5.799251E+01 1.356178E+02 0.000000E+00 0.000000E+00 @@ -86,7 +86,7 @@ tally 1: 1.066414E+02 4.570291E+02 1.254014E+01 -6.325640E+00 +6.325641E+00 3.052020E+01 3.746918E+01 4.977302E+01 @@ -107,7 +107,7 @@ tally 1: 2.371074E-03 5.920173E-01 1.404478E-02 -5.299862E+01 +5.299863E+01 1.125576E+02 1.959914E-01 1.539191E-03 @@ -118,11 +118,11 @@ tally 1: 5.781230E-02 1.341759E-04 1.430525E-01 -8.215326E-04 +8.215327E-04 7.995734E+01 2.570099E+02 3.452934E-01 -4.844058E-03 +4.844059E-03 9.604162E-01 3.747587E-02 1.556795E+02 diff --git a/tests/regression_tests/random_ray_halton_samples/inputs_true.dat b/tests/regression_tests/random_ray_halton_samples/inputs_true.dat index 3f058e45c21..36d5f6f2276 100644 --- a/tests/regression_tests/random_ray_halton_samples/inputs_true.dat +++ b/tests/regression_tests/random_ray_halton_samples/inputs_true.dat @@ -85,7 +85,7 @@ -1.26 -1.26 -1 1.26 1.26 1 - True + true halton diff --git a/tests/regression_tests/random_ray_halton_samples/results_true.dat b/tests/regression_tests/random_ray_halton_samples/results_true.dat index 7eb307da05b..256f8a744a3 100644 --- a/tests/regression_tests/random_ray_halton_samples/results_true.dat +++ b/tests/regression_tests/random_ray_halton_samples/results_true.dat @@ -1,171 +1,171 @@ k-combined: 8.388051E-01 7.383265E-03 tally 1: -5.033308E+00 -5.072162E+00 -1.917335E+00 -7.360725E-01 -4.666410E+00 -4.360038E+00 -2.851812E+00 -1.629362E+00 -4.365590E-01 -3.818884E-02 -1.062497E+00 -2.262071E-01 -1.697621E+00 -5.829333E-01 -5.639912E-02 -6.427568E-04 -1.372642E-01 -3.807294E-03 -2.376683E+00 -1.151027E+00 -8.060902E-02 -1.323179E-03 -1.961862E-01 -7.837693E-03 -7.145452E+00 -1.037540E+01 -8.551803E-02 -1.486269E-03 -2.081363E-01 -8.803955E-03 -2.053205E+01 -8.469498E+01 -3.235618E-02 -2.102891E-04 -8.006311E-02 -1.287559E-03 -1.326545E+01 -3.519484E+01 -1.867471E-01 -6.975133E-03 -5.194275E-01 -5.396284E-02 -7.558115E+00 -1.142535E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.386211E+00 -2.294414E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.827274E+00 -6.782305E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.702858E+00 -1.489752E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.475537E+00 -1.133971E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.828685E+01 -6.719606E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.143600E+01 -2.615734E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.590713E+00 -4.224107E+00 -1.705847E+00 -5.831967E-01 -4.151691E+00 -3.454497E+00 -2.730853E+00 -1.495413E+00 -4.072633E-01 -3.325944E-02 -9.911973E-01 -1.970084E-01 -1.664732E+00 -5.598668E-01 -5.385645E-02 -5.858353E-04 -1.310758E-01 -3.470126E-03 -2.312239E+00 -1.088485E+00 -7.662778E-02 -1.195422E-03 -1.864967E-01 -7.080943E-03 -7.105765E+00 -1.025960E+01 -8.287512E-02 -1.396474E-03 -2.017039E-01 -8.272053E-03 -2.099024E+01 -8.854251E+01 -3.191885E-02 -2.048368E-04 -7.898095E-02 -1.254175E-03 -1.355820E+01 -3.676862E+01 -1.815102E-01 -6.590727E-03 -5.048614E-01 -5.098890E-02 -5.093659E+00 -5.192360E+00 -1.874632E+00 -7.031793E-01 -4.562478E+00 -4.165199E+00 -2.870213E+00 -1.650126E+00 -4.244068E-01 -3.608745E-02 -1.032921E+00 -2.137598E-01 -1.703400E+00 -5.873029E-01 -5.464557E-02 -6.042855E-04 -1.329964E-01 -3.579413E-03 -2.389118E+00 -1.163674E+00 -7.832237E-02 -1.251254E-03 -1.906210E-01 -7.411654E-03 -7.162706E+00 -1.042515E+01 -8.273831E-02 -1.391799E-03 -2.013709E-01 -8.244359E-03 -2.043145E+01 -8.383557E+01 -3.096158E-02 -1.924116E-04 -7.661226E-02 -1.178098E-03 -1.314148E+01 -3.454143E+01 -1.771732E-01 -6.279887E-03 -4.927984E-01 -4.858410E-02 +1.065839E+00 +2.274384E-01 +4.060094E-01 +3.300592E-02 +9.881457E-01 +1.955066E-01 +6.038893E-01 +7.306038E-02 +9.244411E-02 +1.712380E-03 +2.249905E-01 +1.014308E-02 +3.594916E-01 +2.614145E-02 +1.194318E-02 +2.882412E-05 +2.906731E-02 +1.707363E-04 +5.032954E-01 +5.161897E-02 +1.707007E-02 +5.933921E-05 +4.154514E-02 +3.514889E-04 +1.513147E+00 +4.652938E-01 +1.810962E-02 +6.665306E-05 +4.407572E-02 +3.948212E-04 +4.347893E+00 +3.798064E+00 +6.851785E-03 +9.430195E-06 +1.695426E-02 +5.773923E-05 +2.809071E+00 +1.578195E+00 +3.954523E-02 +3.127754E-04 +1.099931E-01 +2.419775E-03 +1.600493E+00 +5.123291E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.170555E-01 +1.028835E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.869491E-01 +3.041553E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.723683E-01 +6.680970E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.583046E+00 +5.085372E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.872447E+00 +3.013344E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.421670E+00 +1.172938E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.721128E-01 +1.894086E-01 +3.612242E-01 +2.615053E-02 +8.791475E-01 +1.548996E-01 +5.782742E-01 +6.705354E-02 +8.624040E-02 +1.491336E-03 +2.098919E-01 +8.833753E-03 +3.525265E-01 +2.510689E-02 +1.140473E-02 +2.627142E-05 +2.775683E-02 +1.556157E-04 +4.896481E-01 +4.881407E-02 +1.622698E-02 +5.360976E-05 +3.949322E-02 +3.175511E-04 +1.504743E+00 +4.601003E-01 +1.754995E-02 +6.262618E-05 +4.271358E-02 +3.709679E-04 +4.444922E+00 +3.970609E+00 +6.759184E-03 +9.185746E-06 +1.672513E-02 +5.624252E-05 +2.871068E+00 +1.648778E+00 +3.843643E-02 +2.955428E-04 +1.069090E-01 +2.286455E-03 +1.078620E+00 +2.328291E-01 +3.969671E-01 +3.153110E-02 +9.661384E-01 +1.867708E-01 +6.077864E-01 +7.399164E-02 +8.987086E-02 +1.618157E-03 +2.187277E-01 +9.584966E-03 +3.607158E-01 +2.633746E-02 +1.157185E-02 +2.709895E-05 +2.816358E-02 +1.605174E-04 +5.059289E-01 +5.218618E-02 +1.658585E-02 +5.611375E-05 +4.036663E-02 +3.323832E-04 +1.516801E+00 +4.675245E-01 +1.752096E-02 +6.241641E-05 +4.264304E-02 +3.697253E-04 +4.326588E+00 +3.759517E+00 +6.556454E-03 +8.628460E-06 +1.622349E-02 +5.283037E-05 +2.782815E+00 +1.548888E+00 +3.751781E-02 +2.815972E-04 +1.043539E-01 +2.178566E-03 diff --git a/tests/regression_tests/random_ray_k_eff/inputs_true.dat b/tests/regression_tests/random_ray_k_eff/inputs_true.dat index 33c9cac339c..545bd1d4578 100644 --- a/tests/regression_tests/random_ray_k_eff/inputs_true.dat +++ b/tests/regression_tests/random_ray_k_eff/inputs_true.dat @@ -85,7 +85,7 @@ -1.26 -1.26 -1 1.26 1.26 1 - True + true diff --git a/tests/regression_tests/random_ray_k_eff/results_true.dat b/tests/regression_tests/random_ray_k_eff/results_true.dat index a21929d53ba..ace18df8cce 100644 --- a/tests/regression_tests/random_ray_k_eff/results_true.dat +++ b/tests/regression_tests/random_ray_k_eff/results_true.dat @@ -1,171 +1,171 @@ k-combined: -8.400321E-01 8.023358E-03 +8.400321E-01 8.023357E-03 tally 1: -5.086559E+00 -5.180935E+00 -1.885166E+00 -7.115503E-01 -4.588116E+00 -4.214784E+00 -2.860400E+00 -1.639328E+00 -4.245221E-01 -3.610929E-02 -1.033202E+00 -2.138892E-01 -1.692631E+00 -5.793966E-01 -5.445818E-02 -5.996625E-04 -1.325403E-01 -3.552030E-03 -2.372248E+00 -1.146944E+00 -7.808142E-02 -1.242278E-03 -1.900346E-01 -7.358490E-03 -7.134948E+00 -1.034824E+01 -8.272647E-02 -1.391871E-03 -2.013421E-01 -8.244788E-03 -2.043539E+01 -8.389902E+01 -3.099367E-02 -1.930673E-04 -7.669167E-02 -1.182113E-03 -1.313212E+01 -3.449537E+01 -1.764293E-01 -6.225586E-03 -4.907292E-01 -4.816400E-02 -7.567715E+00 -1.145439E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.383194E+00 -2.290468E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.819672E+00 -6.726158E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.693683E+00 -1.480961E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.453758E+00 -1.128171E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.823561E+01 -6.681652E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.137517E+01 -2.588512E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.601916E+00 -4.242624E+00 -1.719723E+00 -5.923465E-01 -4.185462E+00 -3.508695E+00 -2.730305E+00 -1.494324E+00 -4.108214E-01 -3.383938E-02 -9.998572E-01 -2.004436E-01 -1.660852E+00 -5.570432E-01 -5.428709E-02 -5.947848E-04 -1.321239E-01 -3.523137E-03 -2.306069E+00 -1.082855E+00 -7.697031E-02 -1.206036E-03 -1.873303E-01 -7.143815E-03 -7.075194E+00 -1.017519E+01 -8.322052E-02 -1.408294E-03 -2.025446E-01 -8.342070E-03 -2.094832E+01 -8.816715E+01 -3.234739E-02 -2.101889E-04 -8.004135E-02 -1.286945E-03 -1.357413E+01 -3.685983E+01 -1.861680E-01 -6.934827E-03 -5.178169E-01 -5.365102E-02 -5.072149E+00 -5.151429E+00 -1.916643E+00 -7.358710E-01 -4.664726E+00 -4.358845E+00 -2.859464E+00 -1.638250E+00 -4.332944E-01 -3.763170E-02 -1.054552E+00 -2.229070E-01 -1.693008E+00 -5.796671E-01 -5.561096E-02 -6.247543E-04 -1.353459E-01 -3.700658E-03 -2.368860E+00 -1.143296E+00 -7.951819E-02 -1.286690E-03 -1.935314E-01 -7.621556E-03 -7.119586E+00 -1.030023E+01 -8.428175E-02 -1.442931E-03 -2.051274E-01 -8.547243E-03 -2.046758E+01 -8.418767E+01 -3.181946E-02 -2.034766E-04 -7.873502E-02 -1.245847E-03 -1.325834E+01 -3.515919E+01 -1.832838E-01 -6.720555E-03 -5.097947E-01 -5.199331E-02 +1.075769E+00 +2.317354E-01 +3.986991E-01 +3.182682E-02 +9.703538E-01 +1.885224E-01 +6.049423E-01 +7.331941E-02 +8.978161E-02 +1.614997E-03 +2.185105E-01 +9.566247E-03 +3.579852E-01 +2.591721E-02 +1.151770E-02 +2.682363E-05 +2.803176E-02 +1.588866E-04 +5.017326E-01 +5.130808E-02 +1.651428E-02 +5.557274E-05 +4.019245E-02 +3.291786E-04 +1.509054E+00 +4.629325E-01 +1.749679E-02 +6.226587E-05 +4.258421E-02 +3.688336E-04 +4.322054E+00 +3.753085E+00 +6.555113E-03 +8.636537E-06 +1.622017E-02 +5.287982E-05 +2.777351E+00 +1.542942E+00 +3.731363E-02 +2.784662E-04 +1.037860E-01 +2.154343E-03 +1.600522E+00 +5.123477E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.155116E-01 +1.024445E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.848568E-01 +3.008769E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.697160E-01 +6.624996E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.576480E+00 +5.046890E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.856827E+00 +2.989000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.405807E+00 +1.157889E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.732717E-01 +1.897670E-01 +3.637108E-01 +2.649544E-02 +8.851992E-01 +1.569426E-01 +5.774286E-01 +6.683395E-02 +8.688408E-02 +1.513473E-03 +2.114585E-01 +8.964883E-03 +3.512640E-01 +2.491729E-02 +1.148149E-02 +2.660532E-05 +2.794365E-02 +1.575935E-04 +4.877362E-01 +4.844138E-02 +1.627932E-02 +5.395212E-05 +3.962062E-02 +3.195790E-04 +1.496416E+00 +4.551920E-01 +1.760130E-02 +6.300084E-05 +4.283856E-02 +3.731872E-04 +4.430519E+00 +3.943947E+00 +6.841363E-03 +9.402132E-06 +1.692847E-02 +5.756741E-05 +2.870816E+00 +1.648662E+00 +3.937267E-02 +3.101707E-04 +1.095131E-01 +2.399624E-03 +1.072714E+00 +2.304093E-01 +4.053505E-01 +3.291277E-02 +9.865420E-01 +1.949549E-01 +6.047420E-01 +7.327008E-02 +9.163611E-02 +1.683034E-03 +2.230240E-01 +9.969255E-03 +3.580639E-01 +2.592902E-02 +1.176143E-02 +2.794541E-05 +2.862497E-02 +1.655313E-04 +5.010143E-01 +5.114429E-02 +1.681803E-02 +5.755790E-05 +4.093173E-02 +3.409375E-04 +1.505803E+00 +4.607828E-01 +1.782566E-02 +6.454911E-05 +4.338462E-02 +3.823584E-04 +4.328879E+00 +3.766055E+00 +6.729800E-03 +9.102372E-06 +1.665242E-02 +5.573204E-05 +2.804070E+00 +1.572690E+00 +3.876396E-02 +3.006259E-04 +1.078200E-01 +2.325780E-03 diff --git a/tests/regression_tests/random_ray_k_eff_mesh/inputs_true.dat b/tests/regression_tests/random_ray_k_eff_mesh/inputs_true.dat index f0822d9f964..98badea18d8 100644 --- a/tests/regression_tests/random_ray_k_eff_mesh/inputs_true.dat +++ b/tests/regression_tests/random_ray_k_eff_mesh/inputs_true.dat @@ -85,7 +85,7 @@ -1.26 -1.26 -1 1.26 1.26 1 - True + true diff --git a/tests/regression_tests/random_ray_k_eff_mesh/results_true.dat b/tests/regression_tests/random_ray_k_eff_mesh/results_true.dat index 535db3b5512..2ae8fad85fb 100644 --- a/tests/regression_tests/random_ray_k_eff_mesh/results_true.dat +++ b/tests/regression_tests/random_ray_k_eff_mesh/results_true.dat @@ -1,171 +1,171 @@ k-combined: 8.379203E-01 8.057199E-03 tally 1: -5.080171E+00 -5.167984E+00 -1.880341E+00 -7.079266E-01 -4.576373E+00 -4.193319E+00 -2.859914E+00 -1.638769E+00 -4.243332E-01 -3.607732E-02 -1.032742E+00 -2.136998E-01 -1.692643E+00 -5.794069E-01 -5.445214E-02 -5.995212E-04 -1.325256E-01 -3.551193E-03 -2.372336E+00 -1.147031E+00 -7.807378E-02 -1.242019E-03 -1.900160E-01 -7.356955E-03 -7.135636E+00 -1.035026E+01 -8.273225E-02 -1.392069E-03 -2.013562E-01 -8.245961E-03 -2.044034E+01 -8.394042E+01 -3.100485E-02 -1.932097E-04 -7.671933E-02 -1.182985E-03 -1.313652E+01 -3.451847E+01 -1.764978E-01 -6.230420E-03 -4.909196E-01 -4.820140E-02 -7.585874E+00 -1.150936E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.386790E+00 -2.295327E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.820058E+00 -6.729238E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.694013E+00 -1.481363E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.453818E+00 -1.128202E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.823642E+01 -6.682239E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.137903E+01 -2.590265E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.589529E+00 -4.219985E+00 -1.712446E+00 -5.873675E-01 -4.167750E+00 -3.479202E+00 -2.728285E+00 -1.492132E+00 -4.104063E-01 -3.377132E-02 -9.988468E-01 -2.000404E-01 -1.660506E+00 -5.567967E-01 -5.427391E-02 -5.944708E-04 -1.320918E-01 -3.521277E-03 -2.305889E+00 -1.082691E+00 -7.695793E-02 -1.205644E-03 -1.873002E-01 -7.141490E-03 -7.076637E+00 -1.017946E+01 -8.323139E-02 -1.408687E-03 -2.025710E-01 -8.344398E-03 -2.095897E+01 -8.825741E+01 -3.236513E-02 -2.104220E-04 -8.008525E-02 -1.288373E-03 -1.358006E+01 -3.689205E+01 -1.862562E-01 -6.941428E-03 -5.180621E-01 -5.370209E-02 -5.067386E+00 -5.141748E+00 -1.912704E+00 -7.328484E-01 -4.655140E+00 -4.340941E+00 -2.858992E+00 -1.637705E+00 -4.331050E-01 -3.759875E-02 -1.054091E+00 -2.227118E-01 -1.692974E+00 -5.796396E-01 -5.560487E-02 -6.246120E-04 -1.353311E-01 -3.699815E-03 -2.368737E+00 -1.143184E+00 -7.950085E-02 -1.286135E-03 -1.934892E-01 -7.618268E-03 -7.119767E+00 -1.030095E+01 -8.427627E-02 -1.442764E-03 -2.051141E-01 -8.546249E-03 -2.047651E+01 -8.426275E+01 -3.183786E-02 -2.037156E-04 -7.878057E-02 -1.247311E-03 -1.326415E+01 -3.519010E+01 -1.833688E-01 -6.726832E-03 -5.100312E-01 -5.204188E-02 +1.073897E+00 +2.309328E-01 +3.974859E-01 +3.163415E-02 +9.674011E-01 +1.873811E-01 +6.045463E-01 +7.322367E-02 +8.969819E-02 +1.612011E-03 +2.183075E-01 +9.548557E-03 +3.578121E-01 +2.589198E-02 +1.151076E-02 +2.679073E-05 +2.801489E-02 +1.586917E-04 +5.015038E-01 +5.126076E-02 +1.650453E-02 +5.550572E-05 +4.016872E-02 +3.287816E-04 +1.508456E+00 +4.625615E-01 +1.748939E-02 +6.221267E-05 +4.256620E-02 +3.685184E-04 +4.320984E+00 +3.751237E+00 +6.554265E-03 +8.634389E-06 +1.621807E-02 +5.286667E-05 +2.776930E+00 +1.542475E+00 +3.730995E-02 +2.784113E-04 +1.037757E-01 +2.153918E-03 +1.603583E+00 +5.143065E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.159242E-01 +1.025623E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.847488E-01 +3.007151E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.695050E-01 +6.620177E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.575716E+00 +5.042003E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.855109E+00 +2.986316E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.405453E+00 +1.157547E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.701818E-01 +1.885724E-01 +3.619962E-01 +2.624740E-02 +8.810264E-01 +1.554734E-01 +5.767221E-01 +6.667165E-02 +8.675429E-02 +1.508976E-03 +2.111426E-01 +8.938242E-03 +3.510185E-01 +2.488161E-02 +1.147307E-02 +2.656498E-05 +2.792316E-02 +1.573545E-04 +4.874578E-01 +4.838573E-02 +1.626869E-02 +5.388082E-05 +3.959473E-02 +3.191567E-04 +1.495984E+00 +4.549294E-01 +1.759493E-02 +6.295564E-05 +4.282306E-02 +3.729194E-04 +4.430601E+00 +3.944093E+00 +6.841763E-03 +9.403281E-06 +1.692946E-02 +5.757445E-05 +2.870670E+00 +1.648496E+00 +3.937215E-02 +3.101637E-04 +1.095116E-01 +2.399569E-03 +1.071187E+00 +2.297540E-01 +4.043214E-01 +3.274592E-02 +9.840375E-01 +1.939666E-01 +6.043491E-01 +7.317500E-02 +9.155169E-02 +1.679939E-03 +2.228185E-01 +9.950920E-03 +3.578809E-01 +2.590208E-02 +1.175437E-02 +2.791136E-05 +2.860779E-02 +1.653296E-04 +5.007414E-01 +5.108824E-02 +1.680608E-02 +5.747571E-05 +4.090264E-02 +3.404506E-04 +1.505100E+00 +4.603562E-01 +1.781573E-02 +6.447733E-05 +4.336044E-02 +3.819332E-04 +4.328647E+00 +3.765700E+00 +6.730396E-03 +9.104085E-06 +1.665389E-02 +5.574253E-05 +2.803934E+00 +1.572540E+00 +3.876306E-02 +3.006136E-04 +1.078175E-01 +2.325685E-03 diff --git a/tests/regression_tests/random_ray_linear/linear/inputs_true.dat b/tests/regression_tests/random_ray_linear/linear/inputs_true.dat index 00699655722..a43a66e71c7 100644 --- a/tests/regression_tests/random_ray_linear/linear/inputs_true.dat +++ b/tests/regression_tests/random_ray_linear/linear/inputs_true.dat @@ -85,7 +85,7 @@ -1.26 -1.26 -1 1.26 1.26 1 - True + true linear diff --git a/tests/regression_tests/random_ray_linear/linear/results_true.dat b/tests/regression_tests/random_ray_linear/linear/results_true.dat index 6617c782164..77d41f3732c 100644 --- a/tests/regression_tests/random_ray_linear/linear/results_true.dat +++ b/tests/regression_tests/random_ray_linear/linear/results_true.dat @@ -1,171 +1,171 @@ k-combined: 1.095967E+00 1.543581E-02 tally 1: -2.548108E+01 -3.269093E+01 -9.271804E+00 -4.327275E+00 -2.256572E+01 -2.563210E+01 -1.816107E+01 -1.653421E+01 -2.659203E+00 -3.544951E-01 -6.471969E+00 -2.099810E+00 -1.364193E+01 -9.308675E+00 -4.362828E-01 -9.521133E-03 -1.061825E+00 -5.639730E-02 -1.746102E+01 -1.524680E+01 -5.733016E-01 -1.643671E-02 -1.395301E+00 -9.736091E-02 -4.539598E+01 -1.030472E+02 -5.263055E-01 -1.385088E-02 -1.280938E+00 -8.204609E-02 -9.945736E+01 -4.946716E+02 -1.505228E-01 -1.133424E-03 -3.724582E-01 -6.939732E-03 -5.324914E+01 -1.418809E+02 -7.219589E-01 -2.614875E-02 -2.008092E+00 -2.022988E-01 -4.188246E+01 -8.843468E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.224363E+01 -2.481131E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.436097E+01 -1.031496E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.901248E+01 -1.807657E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.559337E+01 -1.039424E+02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.802992E+01 -3.874925E+02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.506602E+01 -1.016497E+02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.207833E+01 -2.455068E+01 -8.139772E+00 -3.337974E+00 -1.981058E+01 -1.977210E+01 -1.710407E+01 -1.466648E+01 -2.542287E+00 -3.240467E-01 -6.187418E+00 -1.919453E+00 -1.342690E+01 -9.017908E+00 -4.362263E-01 -9.518695E-03 -1.061688E+00 -5.638286E-02 -1.713924E+01 -1.469065E+01 -5.714028E-01 -1.632839E-02 -1.390680E+00 -9.671931E-02 -4.539193E+01 -1.030326E+02 -5.345253E-01 -1.428719E-02 -1.300944E+00 -8.463057E-02 -1.013270E+02 -5.134168E+02 -1.555517E-01 -1.210145E-03 -3.849017E-01 -7.409480E-03 -5.377836E+01 -1.446537E+02 -7.374053E-01 -2.722908E-02 -2.051056E+00 -2.106567E-01 -2.522726E+01 -3.202007E+01 -9.366659E+00 -4.412278E+00 -2.279657E+01 -2.613561E+01 -1.803368E+01 -1.629756E+01 -2.696490E+00 -3.643066E-01 -6.562716E+00 -2.157928E+00 -1.357447E+01 -9.216150E+00 -4.437305E-01 -9.847287E-03 -1.079951E+00 -5.832923E-02 -1.735848E+01 -1.506775E+01 -5.825173E-01 -1.696803E-02 -1.417731E+00 -1.005081E-01 -4.519297E+01 -1.021280E+02 -5.357712E-01 -1.435322E-02 -1.303976E+00 -8.502167E-02 -9.934508E+01 -4.935314E+02 -1.538761E-01 -1.184229E-03 -3.807556E-01 -7.250804E-03 -5.335839E+01 -1.424221E+02 -7.404823E-01 -2.747396E-02 -2.059614E+00 -2.125512E-01 +5.425537E+00 +1.482137E+00 +1.974189E+00 +1.961888E-01 +4.804781E+00 +1.162101E+00 +3.866915E+00 +7.496163E-01 +5.662059E-01 +1.607180E-02 +1.378032E+00 +9.519943E-02 +2.904666E+00 +4.220197E-01 +9.289413E-02 +4.316514E-04 +2.260857E-01 +2.556836E-03 +3.717829E+00 +6.912286E-01 +1.220682E-01 +7.451721E-04 +2.970897E-01 +4.413940E-03 +9.665773E+00 +4.671720E+00 +1.120617E-01 +6.279393E-04 +2.727390E-01 +3.719615E-03 +2.117656E+01 +2.242614E+01 +3.204951E-02 +5.138445E-05 +7.930426E-02 +3.146169E-04 +1.133784E+01 +6.432186E+00 +1.537206E-01 +1.185474E-03 +4.275660E-01 +9.171376E-03 +8.917756E+00 +4.009380E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.736166E+00 +1.124858E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.057755E+00 +4.676344E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.048156E+00 +8.195089E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.707791E+00 +4.712281E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.874344E+01 +1.756722E+01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.595520E+00 +4.608366E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.701002E+00 +1.113069E+00 +1.733152E+00 +1.513360E-01 +4.218145E+00 +8.964208E-01 +3.641849E+00 +6.649342E-01 +5.413112E-01 +1.469131E-02 +1.317443E+00 +8.702223E-02 +2.858878E+00 +4.088359E-01 +9.288202E-02 +4.315389E-04 +2.260562E-01 +2.556170E-03 +3.649312E+00 +6.660131E-01 +1.216639E-01 +7.402611E-04 +2.961057E-01 +4.384849E-03 +9.664912E+00 +4.671059E+00 +1.138118E-01 +6.477188E-04 +2.769985E-01 +3.836780E-03 +2.157464E+01 +2.327600E+01 +3.312018E-02 +5.486221E-05 +8.195357E-02 +3.359106E-04 +1.145052E+01 +6.557893E+00 +1.570084E-01 +1.234420E-03 +4.367109E-01 +9.550040E-03 +5.371474E+00 +1.451702E+00 +1.994382E+00 +2.000414E-01 +4.853928E+00 +1.184921E+00 +3.839778E+00 +7.388780E-01 +5.741437E-01 +1.651648E-02 +1.397351E+00 +9.783345E-02 +2.890296E+00 +4.178220E-01 +9.447974E-02 +4.464346E-04 +2.299448E-01 +2.644403E-03 +3.695989E+00 +6.831063E-01 +1.240303E-01 +7.692555E-04 +3.018649E-01 +4.556594E-03 +9.622545E+00 +4.630042E+00 +1.140770E-01 +6.507108E-04 +2.776440E-01 +3.854503E-03 +2.115266E+01 +2.237450E+01 +3.276343E-02 +5.368742E-05 +8.107083E-02 +3.287176E-04 +1.136109E+01 +6.456700E+00 +1.576636E-01 +1.245524E-03 +4.385334E-01 +9.635950E-03 diff --git a/tests/regression_tests/random_ray_linear/linear_xy/inputs_true.dat b/tests/regression_tests/random_ray_linear/linear_xy/inputs_true.dat index 81527c4793f..7f76f2fd1c1 100644 --- a/tests/regression_tests/random_ray_linear/linear_xy/inputs_true.dat +++ b/tests/regression_tests/random_ray_linear/linear_xy/inputs_true.dat @@ -85,7 +85,7 @@ -1.26 -1.26 -1 1.26 1.26 1 - True + true linear_xy diff --git a/tests/regression_tests/random_ray_linear/linear_xy/results_true.dat b/tests/regression_tests/random_ray_linear/linear_xy/results_true.dat index abfd03c0678..052608b4254 100644 --- a/tests/regression_tests/random_ray_linear/linear_xy/results_true.dat +++ b/tests/regression_tests/random_ray_linear/linear_xy/results_true.dat @@ -1,171 +1,171 @@ k-combined: 1.104727E+00 1.593303E-02 tally 1: -2.566934E+01 -3.317503E+01 -9.417202E+00 -4.465518E+00 -2.291958E+01 -2.645097E+01 -1.823903E+01 -1.667438E+01 -2.679931E+00 -3.600420E-01 -6.522415E+00 -2.132667E+00 -1.365623E+01 -9.327448E+00 -4.370682E-01 -9.554968E-03 -1.063736E+00 -5.659772E-02 -1.750634E+01 -1.532609E+01 -5.762870E-01 -1.660889E-02 -1.402567E+00 -9.838082E-02 -4.543609E+01 -1.032286E+02 -5.271287E-01 -1.389456E-02 -1.282941E+00 -8.230483E-02 -9.881678E+01 -4.882586E+02 -1.487616E-01 -1.106634E-03 -3.681003E-01 -6.775702E-03 -5.260781E+01 -1.384126E+02 -7.018594E-01 -2.464953E-02 -1.952187E+00 -1.907001E-01 -4.184779E+01 -8.826530E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.226932E+01 -2.486554E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.441107E+01 -1.038682E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.909194E+01 -1.822767E+01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.579319E+01 -1.048559E+02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.833276E+01 -3.901410E+02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.528911E+01 -1.025740E+02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.218278E+01 -2.477434E+01 -8.203467E+00 -3.389915E+00 -1.996560E+01 -2.007976E+01 -1.714818E+01 -1.473927E+01 -2.551034E+00 -3.262450E-01 -6.208707E+00 -1.932474E+00 -1.343470E+01 -9.027502E+00 -4.363259E-01 -9.522121E-03 -1.061930E+00 -5.640315E-02 -1.717034E+01 -1.474381E+01 -5.729720E-01 -1.641841E-02 -1.394499E+00 -9.725251E-02 -4.542715E+01 -1.031896E+02 -5.348128E-01 -1.430232E-02 -1.301643E+00 -8.472019E-02 -1.009076E+02 -5.091264E+02 -1.543547E-01 -1.191320E-03 -3.819398E-01 -7.294216E-03 -5.342751E+01 -1.427427E+02 -7.255554E-01 -2.633014E-02 -2.018096E+00 -2.037021E-01 -2.540053E+01 -3.247261E+01 -9.483956E+00 -4.526477E+00 -2.308205E+01 -2.681205E+01 -1.812760E+01 -1.646855E+01 -2.717374E+00 -3.700301E-01 -6.613545E+00 -2.191830E+00 -1.362672E+01 -9.286907E+00 -4.458292E-01 -9.940508E-03 -1.085059E+00 -5.888142E-02 -1.744511E+01 -1.521876E+01 -5.866632E-01 -1.721091E-02 -1.427821E+00 -1.019468E-01 -4.538426E+01 -1.029941E+02 -5.385934E-01 -1.450495E-02 -1.310845E+00 -8.592045E-02 -9.921424E+01 -4.921945E+02 -1.532444E-01 -1.174272E-03 -3.791926E-01 -7.189835E-03 -5.301633E+01 -1.405571E+02 -7.285745E-01 -2.655093E-02 -2.026493E+00 -2.054102E-01 +5.465547E+00 +1.504031E+00 +2.005120E+00 +2.024490E-01 +4.880060E+00 +1.199182E+00 +3.883466E+00 +7.559482E-01 +5.706123E-01 +1.632280E-02 +1.388756E+00 +9.668619E-02 +2.907681E+00 +4.228621E-01 +9.306046E-02 +4.331768E-04 +2.264905E-01 +2.565871E-03 +3.727441E+00 +6.948089E-01 +1.227027E-01 +7.529631E-04 +2.986338E-01 +4.460088E-03 +9.674219E+00 +4.679846E+00 +1.122358E-01 +6.299070E-04 +2.731629E-01 +3.731271E-03 +2.103996E+01 +2.213497E+01 +3.167421E-02 +5.016895E-05 +7.837561E-02 +3.071747E-04 +1.120119E+01 +6.274853E+00 +1.494396E-01 +1.117486E-03 +4.156586E-01 +8.645390E-03 +8.910289E+00 +4.001626E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.741600E+00 +1.127303E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.068401E+00 +4.708885E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.065045E+00 +8.263510E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.750251E+00 +4.753623E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.880773E+01 +1.768690E+01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.642921E+00 +4.650165E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.723189E+00 +1.123179E+00 +1.746692E+00 +1.536860E-01 +4.251098E+00 +9.103405E-01 +3.651202E+00 +6.682179E-01 +5.431675E-01 +1.479058E-02 +1.321961E+00 +8.761024E-02 +2.860513E+00 +4.092640E-01 +9.290237E-02 +4.316867E-04 +2.261058E-01 +2.557045E-03 +3.655900E+00 +6.684112E-01 +1.219969E-01 +7.443277E-04 +2.969160E-01 +4.408937E-03 +9.672316E+00 +4.678082E+00 +1.138719E-01 +6.483917E-04 +2.771448E-01 +3.840766E-03 +2.148514E+01 +2.308100E+01 +3.286501E-02 +5.400774E-05 +8.132216E-02 +3.306788E-04 +1.137571E+01 +6.471140E+00 +1.544841E-01 +1.193653E-03 +4.296897E-01 +9.234647E-03 +5.408307E+00 +1.472183E+00 +2.019332E+00 +2.052123E-01 +4.914651E+00 +1.215551E+00 +3.859737E+00 +7.466141E-01 +5.785840E-01 +1.677554E-02 +1.408158E+00 +9.936796E-02 +2.901397E+00 +4.210234E-01 +9.492573E-02 +4.506531E-04 +2.310302E-01 +2.669390E-03 +3.714401E+00 +6.899411E-01 +1.249118E-01 +7.802521E-04 +3.040104E-01 +4.621732E-03 +9.663183E+00 +4.669215E+00 +1.146768E-01 +6.575767E-04 +2.791038E-01 +3.895173E-03 +2.112461E+01 +2.231346E+01 +3.262864E-02 +5.323508E-05 +8.073730E-02 +3.259479E-04 +1.128817E+01 +6.372070E+00 +1.551272E-01 +1.203670E-03 +4.314785E-01 +9.312148E-03 diff --git a/tests/regression_tests/random_ray_low_density/__init__.py b/tests/regression_tests/random_ray_low_density/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/regression_tests/random_ray_low_density/inputs_true.dat b/tests/regression_tests/random_ray_low_density/inputs_true.dat new file mode 100644 index 00000000000..ab91f74e50d --- /dev/null +++ b/tests/regression_tests/random_ray_low_density/inputs_true.dat @@ -0,0 +1,244 @@ + + + + mgxs.h5 + + + + + + + + + + + + + + + + + + + + + 2.5 2.5 2.5 + 12 12 12 + 0.0 0.0 0.0 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 +1 1 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 +2 2 2 2 2 2 2 2 2 2 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 +3 3 3 3 3 3 3 3 3 3 3 3 + + + + + + + + + + fixed source + 90 + 10 + 5 + + + 100.0 1.0 + + + universe + 1 + + + multi-group + + 500.0 + 100.0 + + + 0.0 0.0 0.0 30.0 30.0 30.0 + + + true + + + + + 1 + + + 2 + + + 3 + + + 3 + flux + tracklength + + + 2 + flux + tracklength + + + 1 + flux + tracklength + + + diff --git a/tests/regression_tests/random_ray_low_density/results_true.dat b/tests/regression_tests/random_ray_low_density/results_true.dat new file mode 100644 index 00000000000..a4b3ee1bcde --- /dev/null +++ b/tests/regression_tests/random_ray_low_density/results_true.dat @@ -0,0 +1,9 @@ +tally 1: +5.973607E-01 +7.155477E-02 +tally 2: +3.206216E-02 +2.063375E-04 +tally 3: +2.096415E-03 +8.804963E-07 diff --git a/tests/regression_tests/random_ray_low_density/test.py b/tests/regression_tests/random_ray_low_density/test.py new file mode 100644 index 00000000000..1b4ffb78183 --- /dev/null +++ b/tests/regression_tests/random_ray_low_density/test.py @@ -0,0 +1,60 @@ +import os + +import numpy as np +import openmc +from openmc.examples import random_ray_three_region_cube + +from tests.testing_harness import TolerantPyAPITestHarness + + +class MGXSTestHarness(TolerantPyAPITestHarness): + def _cleanup(self): + super()._cleanup() + f = 'mgxs.h5' + if os.path.exists(f): + os.remove(f) + + +def test_random_ray_low_density(): + model = random_ray_three_region_cube() + + # Rebuild the MGXS library to have a material with very + # low macroscopic cross sections + ebins = [1e-5, 20.0e6] + groups = openmc.mgxs.EnergyGroups(group_edges=ebins) + + void_sigma_a = 4.0e-6 + void_sigma_s = 3.0e-4 + void_mat_data = openmc.XSdata('void', groups) + void_mat_data.order = 0 + void_mat_data.set_total([void_sigma_a + void_sigma_s]) + void_mat_data.set_absorption([void_sigma_a]) + void_mat_data.set_scatter_matrix( + np.rollaxis(np.array([[[void_sigma_s]]]), 0, 3)) + + absorber_sigma_a = 0.75 + absorber_sigma_s = 0.25 + absorber_mat_data = openmc.XSdata('absorber', groups) + absorber_mat_data.order = 0 + absorber_mat_data.set_total([absorber_sigma_a + absorber_sigma_s]) + absorber_mat_data.set_absorption([absorber_sigma_a]) + absorber_mat_data.set_scatter_matrix( + np.rollaxis(np.array([[[absorber_sigma_s]]]), 0, 3)) + + multiplier = 0.0000001 + source_sigma_a = void_sigma_a * multiplier + source_sigma_s = void_sigma_s * multiplier + source_mat_data = openmc.XSdata('source', groups) + source_mat_data.order = 0 + source_mat_data.set_total([source_sigma_a + source_sigma_s]) + source_mat_data.set_absorption([source_sigma_a]) + source_mat_data.set_scatter_matrix( + np.rollaxis(np.array([[[source_sigma_s]]]), 0, 3)) + + mg_cross_sections_file = openmc.MGXSLibrary(groups) + mg_cross_sections_file.add_xsdatas( + [source_mat_data, void_mat_data, absorber_mat_data]) + mg_cross_sections_file.export_to_hdf5() + + harness = MGXSTestHarness('statepoint.10.h5', model) + harness.main() diff --git a/tests/regression_tests/random_ray_point_source_locator/inputs_true.dat b/tests/regression_tests/random_ray_point_source_locator/inputs_true.dat index 82ad979da89..088f803bfa8 100644 --- a/tests/regression_tests/random_ray_point_source_locator/inputs_true.dat +++ b/tests/regression_tests/random_ray_point_source_locator/inputs_true.dat @@ -211,7 +211,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/random_ray_point_source_locator/results_true.dat b/tests/regression_tests/random_ray_point_source_locator/results_true.dat index 1785dda574a..8c6f358dd31 100644 --- a/tests/regression_tests/random_ray_point_source_locator/results_true.dat +++ b/tests/regression_tests/random_ray_point_source_locator/results_true.dat @@ -1,9 +1,9 @@ tally 1: -2.633900E+00 -2.948207E+00 +2.633923E+00 +2.948228E+00 tally 2: -1.440463E-01 -3.294032E-03 +1.440456E-01 +3.293984E-03 tally 3: 9.425207E-03 1.089748E-05 diff --git a/tests/regression_tests/random_ray_void/flat/inputs_true.dat b/tests/regression_tests/random_ray_void/flat/inputs_true.dat index ea8c22f0b54..aa28e7b68bf 100644 --- a/tests/regression_tests/random_ray_void/flat/inputs_true.dat +++ b/tests/regression_tests/random_ray_void/flat/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true flat diff --git a/tests/regression_tests/random_ray_void/linear/inputs_true.dat b/tests/regression_tests/random_ray_void/linear/inputs_true.dat index a089604ef4e..e4b2f22fa27 100644 --- a/tests/regression_tests/random_ray_void/linear/inputs_true.dat +++ b/tests/regression_tests/random_ray_void/linear/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true linear diff --git a/tests/regression_tests/random_ray_volume_estimator/hybrid/inputs_true.dat b/tests/regression_tests/random_ray_volume_estimator/hybrid/inputs_true.dat index 089534d744a..8e8a8ed9b81 100644 --- a/tests/regression_tests/random_ray_volume_estimator/hybrid/inputs_true.dat +++ b/tests/regression_tests/random_ray_volume_estimator/hybrid/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true hybrid diff --git a/tests/regression_tests/random_ray_volume_estimator/naive/inputs_true.dat b/tests/regression_tests/random_ray_volume_estimator/naive/inputs_true.dat index 56507df045e..1e25b97da66 100644 --- a/tests/regression_tests/random_ray_volume_estimator/naive/inputs_true.dat +++ b/tests/regression_tests/random_ray_volume_estimator/naive/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true naive diff --git a/tests/regression_tests/random_ray_volume_estimator/simulation_averaged/inputs_true.dat b/tests/regression_tests/random_ray_volume_estimator/simulation_averaged/inputs_true.dat index 0331b562cdb..78c16269763 100644 --- a/tests/regression_tests/random_ray_volume_estimator/simulation_averaged/inputs_true.dat +++ b/tests/regression_tests/random_ray_volume_estimator/simulation_averaged/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true simulation_averaged diff --git a/tests/regression_tests/random_ray_volume_estimator_linear/hybrid/inputs_true.dat b/tests/regression_tests/random_ray_volume_estimator_linear/hybrid/inputs_true.dat index 343833210e9..47a8a718249 100644 --- a/tests/regression_tests/random_ray_volume_estimator_linear/hybrid/inputs_true.dat +++ b/tests/regression_tests/random_ray_volume_estimator_linear/hybrid/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true linear hybrid diff --git a/tests/regression_tests/random_ray_volume_estimator_linear/hybrid/results_true.dat b/tests/regression_tests/random_ray_volume_estimator_linear/hybrid/results_true.dat index 2fc08d0a429..e90d6bfdcb8 100644 --- a/tests/regression_tests/random_ray_volume_estimator_linear/hybrid/results_true.dat +++ b/tests/regression_tests/random_ray_volume_estimator_linear/hybrid/results_true.dat @@ -1,6 +1,6 @@ tally 1: -2.339085E+00 -2.747304E-01 +2.339086E+00 +2.747305E-01 tally 2: 1.089827E-01 6.069324E-04 diff --git a/tests/regression_tests/random_ray_volume_estimator_linear/naive/inputs_true.dat b/tests/regression_tests/random_ray_volume_estimator_linear/naive/inputs_true.dat index 50be43eb386..80a9ada4d5b 100644 --- a/tests/regression_tests/random_ray_volume_estimator_linear/naive/inputs_true.dat +++ b/tests/regression_tests/random_ray_volume_estimator_linear/naive/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true linear naive diff --git a/tests/regression_tests/random_ray_volume_estimator_linear/simulation_averaged/inputs_true.dat b/tests/regression_tests/random_ray_volume_estimator_linear/simulation_averaged/inputs_true.dat index 3d64ab97837..4f032a62a82 100644 --- a/tests/regression_tests/random_ray_volume_estimator_linear/simulation_averaged/inputs_true.dat +++ b/tests/regression_tests/random_ray_volume_estimator_linear/simulation_averaged/inputs_true.dat @@ -212,7 +212,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true linear simulation_averaged diff --git a/tests/regression_tests/reflective_plane/results_true.dat b/tests/regression_tests/reflective_plane/results_true.dat index a1acfaad7ed..a4d6edb677b 100644 --- a/tests/regression_tests/reflective_plane/results_true.dat +++ b/tests/regression_tests/reflective_plane/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.276857E+00 8.776678E-03 +2.279066E+00 4.793565E-03 diff --git a/tests/regression_tests/resonance_scattering/results_true.dat b/tests/regression_tests/resonance_scattering/results_true.dat index 8316e720e26..72f0933b83d 100644 --- a/tests/regression_tests/resonance_scattering/results_true.dat +++ b/tests/regression_tests/resonance_scattering/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.462509E+00 2.205413E-02 +1.462428E+00 1.828903E-02 diff --git a/tests/regression_tests/rotation/results_true.dat b/tests/regression_tests/rotation/results_true.dat index 0fb8ba981fc..6db3d329a05 100644 --- a/tests/regression_tests/rotation/results_true.dat +++ b/tests/regression_tests/rotation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -4.175600E-01 1.117465E-02 +4.459219E-01 1.899168E-02 diff --git a/tests/regression_tests/salphabeta/results_true.dat b/tests/regression_tests/salphabeta/results_true.dat index d5c7f66e909..75a81075e93 100644 --- a/tests/regression_tests/salphabeta/results_true.dat +++ b/tests/regression_tests/salphabeta/results_true.dat @@ -1,2 +1,2 @@ k-combined: -8.694866E-01 2.033328E-02 +8.628529E-01 3.120924E-02 diff --git a/tests/regression_tests/score_current/results_true.dat b/tests/regression_tests/score_current/results_true.dat index ff939301d02..6bb74445ce5 100644 --- a/tests/regression_tests/score_current/results_true.dat +++ b/tests/regression_tests/score_current/results_true.dat @@ -1,58 +1,58 @@ k-combined: -2.298294E-01 3.256961E-01 +7.729082E-01 3.775399E-02 tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.150000E-01 -2.753000E-03 -1.820000E-01 -6.756000E-03 +1.200000E-01 +2.924000E-03 +1.740000E-01 +6.270000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.110000E-01 -2.601000E-03 -1.530000E-01 -4.865000E-03 -1.910000E-01 -7.535000E-03 -0.000000E+00 -0.000000E+00 -7.100000E-02 -1.079000E-03 -1.500000E-01 -4.606000E-03 -1.820000E-01 -6.756000E-03 -1.150000E-01 -2.753000E-03 -1.610000E-01 -5.383000E-03 -1.230000E-01 -3.141000E-03 +1.200000E-01 +3.044000E-03 +1.510000E-01 +4.615000E-03 +1.710000E-01 +6.067000E-03 0.000000E+00 0.000000E+00 +6.500000E-02 +9.390000E-04 +1.410000E-01 +4.001000E-03 +1.740000E-01 +6.270000E-03 +1.200000E-01 +2.924000E-03 +1.830000E-01 +6.879000E-03 +1.310000E-01 +3.541000E-03 0.000000E+00 0.000000E+00 -1.370000E-01 -3.951000E-03 -2.600000E-01 -1.366400E-02 -1.930000E-01 -7.573000E-03 0.000000E+00 0.000000E+00 -8.500000E-02 -1.533000E-03 -2.040000E-01 -8.426000E-03 -1.230000E-01 -3.141000E-03 -1.610000E-01 -5.383000E-03 +1.750000E-01 +6.659000E-03 +2.820000E-01 +1.605400E-02 +1.980000E-01 +7.932000E-03 +0.000000E+00 +0.000000E+00 +9.400000E-02 +1.912000E-03 +2.200000E-01 +9.958000E-03 +1.310000E-01 +3.541000E-03 +1.830000E-01 +6.879000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -61,430 +61,430 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.250000E-01 -3.311000E-03 -1.620000E-01 -5.346000E-03 -1.860000E-01 -6.932000E-03 +1.110000E-01 +2.639000E-03 +1.360000E-01 +3.890000E-03 +1.770000E-01 +6.551000E-03 0.000000E+00 0.000000E+00 -7.100000E-02 -1.083000E-03 -1.630000E-01 -5.617000E-03 +6.700000E-02 +9.310000E-04 +1.570000E-01 +4.975000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.480000E-01 +4.910000E-03 +2.720000E-01 +1.490600E-02 +1.510000E-01 +4.615000E-03 +1.200000E-01 +3.044000E-03 1.800000E-01 -7.002000E-03 -2.980000E-01 -1.815000E-02 -1.530000E-01 -4.865000E-03 -1.110000E-01 -2.601000E-03 -1.890000E-01 -7.605000E-03 -1.330000E-01 -3.743000E-03 +6.720000E-03 +1.050000E-01 +2.285000E-03 1.790000E-01 -6.495000E-03 +6.499000E-03 0.000000E+00 0.000000E+00 -1.080000E-01 -2.718000E-03 +9.300000E-02 +1.927000E-03 2.160000E-01 -9.662000E-03 -2.980000E-01 -1.815000E-02 -1.800000E-01 -7.002000E-03 -2.650000E-01 -1.435500E-02 -1.590000E-01 -5.285000E-03 -2.600000E-01 -1.366400E-02 -1.370000E-01 -3.951000E-03 -2.670000E-01 -1.469300E-02 -1.940000E-01 -7.678000E-03 -2.390000E-01 -1.155500E-02 -0.000000E+00 -0.000000E+00 -2.410000E-01 -1.255900E-02 -5.510000E-01 -7.358900E-02 -1.590000E-01 -5.285000E-03 -2.650000E-01 -1.435500E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.620000E-01 -5.346000E-03 -1.250000E-01 -3.311000E-03 +9.418000E-03 +2.720000E-01 +1.490600E-02 +1.480000E-01 +4.910000E-03 +2.680000E-01 +1.445800E-02 +1.480000E-01 +4.488000E-03 +2.820000E-01 +1.605400E-02 +1.750000E-01 +6.659000E-03 +2.510000E-01 +1.283100E-02 1.870000E-01 -7.083000E-03 -1.410000E-01 -3.999000E-03 -2.040000E-01 -8.438000E-03 +7.731000E-03 +2.340000E-01 +1.105000E-02 0.000000E+00 0.000000E+00 -9.300000E-02 -1.829000E-03 -2.240000E-01 -1.015800E-02 +2.110000E-01 +9.215000E-03 +5.470000E-01 +7.228300E-02 +1.480000E-01 +4.488000E-03 +2.680000E-01 +1.445800E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.500000E-01 -4.522000E-03 -1.630000E-01 -5.439000E-03 -1.330000E-01 -3.743000E-03 -1.890000E-01 -7.605000E-03 +1.360000E-01 +3.890000E-03 +1.110000E-01 +2.639000E-03 +1.540000E-01 +4.804000E-03 +1.280000E-01 +3.302000E-03 +2.200000E-01 +9.834000E-03 0.000000E+00 0.000000E+00 +9.900000E-02 +2.127000E-03 +1.860000E-01 +7.198000E-03 0.000000E+00 0.000000E+00 -1.650000E-01 -5.615000E-03 0.000000E+00 0.000000E+00 -7.100000E-02 -1.191000E-03 -1.550000E-01 -5.011000E-03 -1.630000E-01 -5.439000E-03 -1.500000E-01 -4.522000E-03 -1.680000E-01 -5.966000E-03 -1.290000E-01 -3.515000E-03 -1.940000E-01 -7.678000E-03 -2.670000E-01 -1.469300E-02 +1.430000E-01 +4.337000E-03 +1.580000E-01 +5.104000E-03 +1.050000E-01 +2.285000E-03 +1.800000E-01 +6.720000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.810000E-01 -6.765000E-03 +1.860000E-01 +7.178000E-03 0.000000E+00 0.000000E+00 -1.080000E-01 -2.694000E-03 -2.070000E-01 -8.673000E-03 -1.290000E-01 -3.515000E-03 -1.680000E-01 -5.966000E-03 +7.000000E-02 +1.020000E-03 +1.610000E-01 +5.237000E-03 +1.580000E-01 +5.104000E-03 +1.430000E-01 +4.337000E-03 +1.580000E-01 +5.254000E-03 +1.230000E-01 +3.091000E-03 +1.870000E-01 +7.731000E-03 +2.510000E-01 +1.283100E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.410000E-01 -3.999000E-03 -1.870000E-01 -7.083000E-03 +1.980000E-01 +7.934000E-03 0.000000E+00 0.000000E+00 +9.500000E-02 +1.949000E-03 +2.150000E-01 +9.289000E-03 +1.230000E-01 +3.091000E-03 +1.580000E-01 +5.254000E-03 0.000000E+00 0.000000E+00 -1.870000E-01 -7.213000E-03 0.000000E+00 0.000000E+00 -8.200000E-02 -1.536000E-03 -1.760000E-01 -6.550000E-03 +1.280000E-01 +3.302000E-03 +1.540000E-01 +4.804000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.750000E-01 -6.163000E-03 -2.570000E-01 -1.347100E-02 +1.640000E-01 +5.424000E-03 0.000000E+00 0.000000E+00 +6.200000E-02 +8.020000E-04 +1.500000E-01 +4.588000E-03 0.000000E+00 0.000000E+00 -1.560000E-01 -4.914000E-03 -2.350000E-01 -1.135900E-02 -1.500000E-01 -4.606000E-03 -7.100000E-02 -1.079000E-03 -1.530000E-01 -4.837000E-03 -5.600000E-02 -7.260000E-04 -2.570000E-01 -1.347100E-02 -1.750000E-01 -6.163000E-03 -2.460000E-01 -1.235000E-02 -1.420000E-01 -4.326000E-03 0.000000E+00 0.000000E+00 +1.700000E-01 +5.884000E-03 +2.280000E-01 +1.084800E-02 0.000000E+00 0.000000E+00 -1.830000E-01 -7.133000E-03 -5.110000E-01 -5.696100E-02 -2.040000E-01 -8.426000E-03 -8.500000E-02 -1.533000E-03 -2.100000E-01 -8.928000E-03 -9.100000E-02 -1.807000E-03 -1.420000E-01 -4.326000E-03 -2.460000E-01 -1.235000E-02 0.000000E+00 0.000000E+00 +1.540000E-01 +4.856000E-03 +2.250000E-01 +1.047100E-02 +1.410000E-01 +4.001000E-03 +6.500000E-02 +9.390000E-04 +1.360000E-01 +3.852000E-03 +6.400000E-02 +8.700000E-04 +2.280000E-01 +1.084800E-02 +1.700000E-01 +5.884000E-03 +2.230000E-01 +1.001100E-02 +1.410000E-01 +4.185000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.980000E-01 +8.038000E-03 +5.030000E-01 +5.613900E-02 +2.200000E-01 +9.958000E-03 +9.400000E-02 +1.912000E-03 +2.140000E-01 +9.376000E-03 +7.300000E-02 +1.091000E-03 +1.410000E-01 +4.185000E-03 +2.230000E-01 +1.001100E-02 0.000000E+00 0.000000E+00 -1.430000E-01 -4.207000E-03 -2.120000E-01 -9.278000E-03 -1.630000E-01 -5.617000E-03 -7.100000E-02 -1.083000E-03 -1.770000E-01 -6.293000E-03 -7.900000E-02 -1.495000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.300000E-01 -1.081000E-02 -5.200000E-01 -5.835000E-02 -2.350000E-01 -1.135900E-02 -1.560000E-01 -4.914000E-03 -2.370000E-01 -1.142300E-02 -1.360000E-01 -3.882000E-03 -2.160000E-01 -9.662000E-03 -1.080000E-01 -2.718000E-03 -2.090000E-01 -8.841000E-03 -1.030000E-01 -2.271000E-03 -5.200000E-01 -5.835000E-02 -2.300000E-01 -1.081000E-02 -5.110000E-01 -5.615900E-02 -2.430000E-01 -1.228300E-02 -5.110000E-01 -5.696100E-02 -1.830000E-01 -7.133000E-03 -5.130000E-01 -6.002100E-02 -2.420000E-01 -1.209200E-02 -5.510000E-01 -7.358900E-02 -2.410000E-01 -1.255900E-02 -5.140000E-01 -5.890200E-02 -2.100000E-01 -1.004600E-02 -2.430000E-01 -1.228300E-02 -5.110000E-01 -5.615900E-02 0.000000E+00 0.000000E+00 +1.540000E-01 +4.808000E-03 +2.340000E-01 +1.119400E-02 +1.570000E-01 +4.975000E-03 +6.700000E-02 +9.310000E-04 +1.600000E-01 +5.134000E-03 +5.300000E-02 +6.110000E-04 0.000000E+00 0.000000E+00 -2.120000E-01 -9.278000E-03 -1.430000E-01 -4.207000E-03 -2.380000E-01 -1.133600E-02 -1.640000E-01 -5.444000E-03 -2.240000E-01 -1.015800E-02 +0.000000E+00 +0.000000E+00 +2.310000E-01 +1.084100E-02 +5.390000E-01 +6.215100E-02 +2.250000E-01 +1.047100E-02 +1.540000E-01 +4.856000E-03 +2.280000E-01 +1.059800E-02 +1.600000E-01 +5.214000E-03 +2.160000E-01 +9.418000E-03 9.300000E-02 -1.829000E-03 -1.950000E-01 -7.705000E-03 +1.927000E-03 +2.510000E-01 +1.271500E-02 1.030000E-01 -2.191000E-03 +2.229000E-03 +5.390000E-01 +6.215100E-02 +2.310000E-01 +1.084100E-02 +4.700000E-01 +4.972200E-02 +2.190000E-01 +9.821000E-03 +5.030000E-01 +5.613900E-02 +1.980000E-01 +8.038000E-03 +5.100000E-01 +5.929000E-02 +2.140000E-01 +9.406000E-03 +5.470000E-01 +7.228300E-02 +2.110000E-01 +9.215000E-03 +5.160000E-01 +5.892200E-02 +2.550000E-01 +1.480500E-02 +2.190000E-01 +9.821000E-03 +4.700000E-01 +4.972200E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.340000E-01 +1.119400E-02 +1.540000E-01 +4.808000E-03 +2.170000E-01 +9.509000E-03 +1.600000E-01 +5.156000E-03 +1.860000E-01 +7.198000E-03 +9.900000E-02 +2.127000E-03 +2.290000E-01 +1.058700E-02 +9.000000E-02 +1.780000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.680000E-01 -5.878000E-03 -2.230000E-01 -1.049900E-02 -1.360000E-01 -3.882000E-03 -2.370000E-01 -1.142300E-02 +1.550000E-01 +4.913000E-03 +2.380000E-01 +1.153400E-02 +1.600000E-01 +5.214000E-03 +2.280000E-01 +1.059800E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.610000E-01 +5.237000E-03 +7.000000E-02 +1.020000E-03 +1.410000E-01 +4.071000E-03 +6.100000E-02 +8.350000E-04 +2.380000E-01 +1.153400E-02 1.550000E-01 -5.011000E-03 -7.100000E-02 -1.191000E-03 -1.510000E-01 -4.845000E-03 -6.400000E-02 -9.460000E-04 -2.230000E-01 -1.049900E-02 -1.680000E-01 -5.878000E-03 -2.490000E-01 -1.255900E-02 -1.280000E-01 -3.448000E-03 -2.420000E-01 -1.209200E-02 -5.130000E-01 -6.002100E-02 +4.913000E-03 +2.320000E-01 +1.100400E-02 +1.460000E-01 +4.498000E-03 +2.140000E-01 +9.406000E-03 +5.100000E-01 +5.929000E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.070000E-01 -8.673000E-03 -1.080000E-01 -2.694000E-03 -2.000000E-01 -8.202000E-03 -9.600000E-02 -2.024000E-03 -1.280000E-01 -3.448000E-03 -2.490000E-01 -1.255900E-02 +2.150000E-01 +9.289000E-03 +9.500000E-02 +1.949000E-03 +1.870000E-01 +7.267000E-03 +1.030000E-01 +2.543000E-03 +1.460000E-01 +4.498000E-03 +2.320000E-01 +1.100400E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.640000E-01 -5.444000E-03 -2.380000E-01 -1.133600E-02 +1.600000E-01 +5.156000E-03 +2.170000E-01 +9.509000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.760000E-01 -6.550000E-03 -8.200000E-02 -1.536000E-03 -1.670000E-01 -5.653000E-03 -4.900000E-02 -5.630000E-04 +1.500000E-01 +4.588000E-03 +6.200000E-02 +8.020000E-04 +1.290000E-01 +3.487000E-03 +6.000000E-02 +8.060000E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.320000E-01 -3.626000E-03 -1.510000E-01 -4.831000E-03 +1.090000E-01 +2.437000E-03 +1.650000E-01 +5.655000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.370000E-01 -3.855000E-03 -1.610000E-01 -5.233000E-03 -5.600000E-02 -7.260000E-04 -1.530000E-01 -4.837000E-03 -1.610000E-01 -5.261000E-03 +1.230000E-01 +3.065000E-03 +1.570000E-01 +4.999000E-03 +6.400000E-02 +8.700000E-04 +1.360000E-01 +3.852000E-03 +1.750000E-01 +6.299000E-03 0.000000E+00 0.000000E+00 -1.510000E-01 -4.831000E-03 -1.320000E-01 -3.626000E-03 -1.490000E-01 -4.731000E-03 +1.650000E-01 +5.655000E-03 +1.090000E-01 +2.437000E-03 +1.480000E-01 +4.674000E-03 1.320000E-01 -3.514000E-03 +3.548000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.550000E-01 -4.921000E-03 -2.410000E-01 -1.168300E-02 -9.100000E-02 -1.807000E-03 -2.100000E-01 -8.928000E-03 -2.090000E-01 -8.775000E-03 +1.440000E-01 +4.282000E-03 +2.190000E-01 +9.683000E-03 +7.300000E-02 +1.091000E-03 +2.140000E-01 +9.376000E-03 +1.830000E-01 +6.803000E-03 0.000000E+00 0.000000E+00 1.320000E-01 -3.514000E-03 -1.490000E-01 -4.731000E-03 +3.548000E-03 +1.480000E-01 +4.674000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -493,160 +493,160 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.150000E-01 -2.891000E-03 -1.560000E-01 -5.154000E-03 -7.900000E-02 -1.495000E-03 -1.770000E-01 -6.293000E-03 +1.350000E-01 +3.895000E-03 +1.430000E-01 +4.297000E-03 +5.300000E-02 +6.110000E-04 1.600000E-01 -5.352000E-03 +5.134000E-03 +1.380000E-01 +4.220000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.610000E-01 -5.273000E-03 -2.310000E-01 -1.098100E-02 -1.610000E-01 -5.233000E-03 -1.370000E-01 -3.855000E-03 -1.760000E-01 -6.482000E-03 -1.340000E-01 -3.882000E-03 +1.900000E-01 +7.412000E-03 +2.420000E-01 +1.208400E-02 +1.570000E-01 +4.999000E-03 +1.230000E-01 +3.065000E-03 +1.730000E-01 +6.279000E-03 +1.330000E-01 +3.621000E-03 1.030000E-01 -2.271000E-03 -2.090000E-01 -8.841000E-03 -1.830000E-01 -6.761000E-03 +2.229000E-03 +2.510000E-01 +1.271500E-02 +2.100000E-01 +8.970000E-03 0.000000E+00 0.000000E+00 +2.420000E-01 +1.208400E-02 +1.900000E-01 +7.412000E-03 +2.610000E-01 +1.399900E-02 +2.000000E-01 +8.410000E-03 +2.190000E-01 +9.683000E-03 +1.440000E-01 +4.282000E-03 +2.690000E-01 +1.478100E-02 +1.540000E-01 +4.986000E-03 +2.550000E-01 +1.480500E-02 +5.160000E-01 +5.892200E-02 2.310000E-01 -1.098100E-02 -1.610000E-01 -5.273000E-03 -2.620000E-01 -1.380600E-02 -1.700000E-01 -5.970000E-03 -2.410000E-01 -1.168300E-02 -1.550000E-01 -4.921000E-03 -2.250000E-01 -1.014100E-02 -1.370000E-01 -3.805000E-03 -2.100000E-01 -1.004600E-02 -5.140000E-01 -5.890200E-02 -2.320000E-01 -1.093000E-02 +1.098900E-02 0.000000E+00 0.000000E+00 -1.700000E-01 -5.970000E-03 -2.620000E-01 -1.380600E-02 +2.000000E-01 +8.410000E-03 +2.610000E-01 +1.399900E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.560000E-01 -5.154000E-03 -1.150000E-01 -2.891000E-03 1.430000E-01 -4.163000E-03 -1.120000E-01 -2.640000E-03 -1.030000E-01 -2.191000E-03 -1.950000E-01 -7.705000E-03 +4.297000E-03 +1.350000E-01 +3.895000E-03 1.760000E-01 -6.392000E-03 +6.534000E-03 +1.170000E-01 +2.807000E-03 +9.000000E-02 +1.780000E-03 +2.290000E-01 +1.058700E-02 +2.080000E-01 +8.854000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.200000E-02 -1.822000E-03 -1.370000E-01 -3.843000E-03 -1.340000E-01 -3.882000E-03 +1.230000E-01 +3.305000E-03 1.760000E-01 -6.482000E-03 +6.598000E-03 +1.330000E-01 +3.621000E-03 +1.730000E-01 +6.279000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.400000E-02 -9.460000E-04 -1.510000E-01 -4.845000E-03 +6.100000E-02 +8.350000E-04 +1.410000E-01 +4.071000E-03 1.800000E-01 -6.520000E-03 +6.574000E-03 0.000000E+00 0.000000E+00 -1.370000E-01 -3.843000E-03 -9.200000E-02 -1.822000E-03 -1.300000E-01 -3.604000E-03 -1.170000E-01 -2.789000E-03 -1.370000E-01 -3.805000E-03 -2.250000E-01 -1.014100E-02 +1.760000E-01 +6.598000E-03 +1.230000E-01 +3.305000E-03 +1.690000E-01 +6.135000E-03 +1.220000E-01 +3.344000E-03 +1.540000E-01 +4.986000E-03 +2.690000E-01 +1.478100E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.600000E-02 -2.024000E-03 -2.000000E-01 -8.202000E-03 -1.820000E-01 -6.660000E-03 +1.030000E-01 +2.543000E-03 +1.870000E-01 +7.267000E-03 +1.690000E-01 +5.731000E-03 0.000000E+00 0.000000E+00 -1.170000E-01 -2.789000E-03 -1.300000E-01 -3.604000E-03 +1.220000E-01 +3.344000E-03 +1.690000E-01 +6.135000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.120000E-01 -2.640000E-03 -1.430000E-01 -4.163000E-03 +1.170000E-01 +2.807000E-03 +1.760000E-01 +6.534000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.900000E-02 -5.630000E-04 -1.670000E-01 -5.653000E-03 -1.670000E-01 -5.701000E-03 +6.000000E-02 +8.060000E-04 +1.290000E-01 +3.487000E-03 +1.790000E-01 +6.747000E-03 0.000000E+00 0.000000E+00 tally 2: @@ -660,12 +660,12 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.150000E-01 -2.753000E-03 +1.200000E-01 +2.924000E-03 0.000000E+00 0.000000E+00 -1.820000E-01 -6.756000E-03 +1.740000E-01 +6.270000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -676,44 +676,44 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.110000E-01 -2.601000E-03 +1.200000E-01 +3.044000E-03 0.000000E+00 0.000000E+00 -1.530000E-01 -4.865000E-03 +1.510000E-01 +4.615000E-03 0.000000E+00 0.000000E+00 -1.910000E-01 -7.535000E-03 +1.710000E-01 +6.067000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.100000E-02 -1.079000E-03 +6.500000E-02 +9.390000E-04 0.000000E+00 0.000000E+00 -1.500000E-01 -4.606000E-03 +1.410000E-01 +4.001000E-03 0.000000E+00 0.000000E+00 -1.820000E-01 -6.756000E-03 +1.740000E-01 +6.270000E-03 0.000000E+00 0.000000E+00 -1.150000E-01 -2.753000E-03 +1.200000E-01 +2.924000E-03 0.000000E+00 0.000000E+00 -1.610000E-01 -5.383000E-03 +1.830000E-01 +6.879000E-03 0.000000E+00 0.000000E+00 -1.230000E-01 -3.141000E-03 +1.310000E-01 +3.541000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -724,36 +724,36 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.370000E-01 -3.951000E-03 +1.750000E-01 +6.659000E-03 0.000000E+00 0.000000E+00 -2.600000E-01 -1.366400E-02 +2.820000E-01 +1.605400E-02 0.000000E+00 0.000000E+00 -1.930000E-01 -7.573000E-03 +1.980000E-01 +7.932000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.500000E-02 -1.533000E-03 +9.400000E-02 +1.912000E-03 0.000000E+00 0.000000E+00 -2.040000E-01 -8.426000E-03 +2.200000E-01 +9.958000E-03 0.000000E+00 0.000000E+00 -1.230000E-01 -3.141000E-03 +1.310000E-01 +3.541000E-03 0.000000E+00 0.000000E+00 -1.610000E-01 -5.383000E-03 +1.830000E-01 +6.879000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -772,28 +772,28 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.250000E-01 -3.311000E-03 +1.110000E-01 +2.639000E-03 0.000000E+00 0.000000E+00 -1.620000E-01 -5.346000E-03 +1.360000E-01 +3.890000E-03 0.000000E+00 0.000000E+00 -1.860000E-01 -6.932000E-03 +1.770000E-01 +6.551000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.100000E-02 -1.083000E-03 +6.700000E-02 +9.310000E-04 0.000000E+00 0.000000E+00 -1.630000E-01 -5.617000E-03 +1.570000E-01 +4.975000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -804,100 +804,100 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.800000E-01 -7.002000E-03 +1.480000E-01 +4.910000E-03 0.000000E+00 0.000000E+00 -2.980000E-01 -1.815000E-02 +2.720000E-01 +1.490600E-02 0.000000E+00 0.000000E+00 -1.530000E-01 -4.865000E-03 +1.510000E-01 +4.615000E-03 0.000000E+00 0.000000E+00 -1.110000E-01 -2.601000E-03 +1.200000E-01 +3.044000E-03 0.000000E+00 0.000000E+00 -1.890000E-01 -7.605000E-03 +1.800000E-01 +6.720000E-03 0.000000E+00 0.000000E+00 -1.330000E-01 -3.743000E-03 +1.050000E-01 +2.285000E-03 0.000000E+00 0.000000E+00 1.790000E-01 -6.495000E-03 +6.499000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.080000E-01 -2.718000E-03 +9.300000E-02 +1.927000E-03 0.000000E+00 0.000000E+00 2.160000E-01 -9.662000E-03 +9.418000E-03 0.000000E+00 0.000000E+00 -2.980000E-01 -1.815000E-02 +2.720000E-01 +1.490600E-02 0.000000E+00 0.000000E+00 -1.800000E-01 -7.002000E-03 +1.480000E-01 +4.910000E-03 0.000000E+00 0.000000E+00 -2.650000E-01 -1.435500E-02 +2.680000E-01 +1.445800E-02 0.000000E+00 0.000000E+00 -1.590000E-01 -5.285000E-03 +1.480000E-01 +4.488000E-03 0.000000E+00 0.000000E+00 -2.600000E-01 -1.366400E-02 +2.820000E-01 +1.605400E-02 0.000000E+00 0.000000E+00 -1.370000E-01 -3.951000E-03 +1.750000E-01 +6.659000E-03 0.000000E+00 0.000000E+00 -2.670000E-01 -1.469300E-02 +2.510000E-01 +1.283100E-02 0.000000E+00 0.000000E+00 -1.940000E-01 -7.678000E-03 +1.870000E-01 +7.731000E-03 0.000000E+00 0.000000E+00 -2.390000E-01 -1.155500E-02 +2.340000E-01 +1.105000E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.410000E-01 -1.255900E-02 +2.110000E-01 +9.215000E-03 0.000000E+00 0.000000E+00 -5.510000E-01 -7.358900E-02 +5.470000E-01 +7.228300E-02 0.000000E+00 0.000000E+00 -1.590000E-01 -5.285000E-03 +1.480000E-01 +4.488000E-03 0.000000E+00 0.000000E+00 -2.650000E-01 -1.435500E-02 +2.680000E-01 +1.445800E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -908,36 +908,36 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.620000E-01 -5.346000E-03 +1.360000E-01 +3.890000E-03 0.000000E+00 0.000000E+00 -1.250000E-01 -3.311000E-03 +1.110000E-01 +2.639000E-03 0.000000E+00 0.000000E+00 -1.870000E-01 -7.083000E-03 +1.540000E-01 +4.804000E-03 0.000000E+00 0.000000E+00 -1.410000E-01 -3.999000E-03 +1.280000E-01 +3.302000E-03 0.000000E+00 0.000000E+00 -2.040000E-01 -8.438000E-03 +2.200000E-01 +9.834000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.300000E-02 -1.829000E-03 +9.900000E-02 +2.127000E-03 0.000000E+00 0.000000E+00 -2.240000E-01 -1.015800E-02 +1.860000E-01 +7.198000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -948,20 +948,20 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.500000E-01 -4.522000E-03 +1.430000E-01 +4.337000E-03 0.000000E+00 0.000000E+00 -1.630000E-01 -5.439000E-03 +1.580000E-01 +5.104000E-03 0.000000E+00 0.000000E+00 -1.330000E-01 -3.743000E-03 +1.050000E-01 +2.285000E-03 0.000000E+00 0.000000E+00 -1.890000E-01 -7.605000E-03 +1.800000E-01 +6.720000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -972,44 +972,44 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.650000E-01 -5.615000E-03 +1.860000E-01 +7.178000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.100000E-02 -1.191000E-03 +7.000000E-02 +1.020000E-03 0.000000E+00 0.000000E+00 -1.550000E-01 -5.011000E-03 +1.610000E-01 +5.237000E-03 0.000000E+00 0.000000E+00 -1.630000E-01 -5.439000E-03 +1.580000E-01 +5.104000E-03 0.000000E+00 0.000000E+00 -1.500000E-01 -4.522000E-03 +1.430000E-01 +4.337000E-03 0.000000E+00 0.000000E+00 -1.680000E-01 -5.966000E-03 +1.580000E-01 +5.254000E-03 0.000000E+00 0.000000E+00 -1.290000E-01 -3.515000E-03 +1.230000E-01 +3.091000E-03 0.000000E+00 0.000000E+00 -1.940000E-01 -7.678000E-03 +1.870000E-01 +7.731000E-03 0.000000E+00 0.000000E+00 -2.670000E-01 -1.469300E-02 +2.510000E-01 +1.283100E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1020,28 +1020,28 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.810000E-01 -6.765000E-03 +1.980000E-01 +7.934000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.080000E-01 -2.694000E-03 +9.500000E-02 +1.949000E-03 0.000000E+00 0.000000E+00 -2.070000E-01 -8.673000E-03 +2.150000E-01 +9.289000E-03 0.000000E+00 0.000000E+00 -1.290000E-01 -3.515000E-03 +1.230000E-01 +3.091000E-03 0.000000E+00 0.000000E+00 -1.680000E-01 -5.966000E-03 +1.580000E-01 +5.254000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1052,12 +1052,12 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.410000E-01 -3.999000E-03 +1.280000E-01 +3.302000E-03 0.000000E+00 0.000000E+00 -1.870000E-01 -7.083000E-03 +1.540000E-01 +4.804000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1068,20 +1068,20 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.870000E-01 -7.213000E-03 +1.640000E-01 +5.424000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.200000E-02 -1.536000E-03 +6.200000E-02 +8.020000E-04 0.000000E+00 0.000000E+00 -1.760000E-01 -6.550000E-03 +1.500000E-01 +4.588000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1092,12 +1092,12 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.750000E-01 -6.163000E-03 +1.700000E-01 +5.884000E-03 0.000000E+00 0.000000E+00 -2.570000E-01 -1.347100E-02 +2.280000E-01 +1.084800E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1108,44 +1108,44 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.560000E-01 -4.914000E-03 +1.540000E-01 +4.856000E-03 0.000000E+00 0.000000E+00 -2.350000E-01 -1.135900E-02 +2.250000E-01 +1.047100E-02 0.000000E+00 0.000000E+00 -1.500000E-01 -4.606000E-03 +1.410000E-01 +4.001000E-03 0.000000E+00 0.000000E+00 -7.100000E-02 -1.079000E-03 +6.500000E-02 +9.390000E-04 0.000000E+00 0.000000E+00 -1.530000E-01 -4.837000E-03 +1.360000E-01 +3.852000E-03 0.000000E+00 0.000000E+00 -5.600000E-02 -7.260000E-04 +6.400000E-02 +8.700000E-04 0.000000E+00 0.000000E+00 -2.570000E-01 -1.347100E-02 +2.280000E-01 +1.084800E-02 0.000000E+00 0.000000E+00 -1.750000E-01 -6.163000E-03 +1.700000E-01 +5.884000E-03 0.000000E+00 0.000000E+00 -2.460000E-01 -1.235000E-02 +2.230000E-01 +1.001100E-02 0.000000E+00 0.000000E+00 -1.420000E-01 -4.326000E-03 +1.410000E-01 +4.185000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1156,36 +1156,36 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.830000E-01 -7.133000E-03 +1.980000E-01 +8.038000E-03 0.000000E+00 0.000000E+00 -5.110000E-01 -5.696100E-02 +5.030000E-01 +5.613900E-02 0.000000E+00 0.000000E+00 -2.040000E-01 -8.426000E-03 +2.200000E-01 +9.958000E-03 0.000000E+00 0.000000E+00 -8.500000E-02 -1.533000E-03 +9.400000E-02 +1.912000E-03 0.000000E+00 0.000000E+00 -2.100000E-01 -8.928000E-03 +2.140000E-01 +9.376000E-03 0.000000E+00 0.000000E+00 -9.100000E-02 -1.807000E-03 +7.300000E-02 +1.091000E-03 0.000000E+00 0.000000E+00 -1.420000E-01 -4.326000E-03 +1.410000E-01 +4.185000E-03 0.000000E+00 0.000000E+00 -2.460000E-01 -1.235000E-02 +2.230000E-01 +1.001100E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1204,28 +1204,28 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.430000E-01 -4.207000E-03 +1.540000E-01 +4.808000E-03 0.000000E+00 0.000000E+00 -2.120000E-01 -9.278000E-03 +2.340000E-01 +1.119400E-02 0.000000E+00 0.000000E+00 -1.630000E-01 -5.617000E-03 +1.570000E-01 +4.975000E-03 0.000000E+00 0.000000E+00 -7.100000E-02 -1.083000E-03 +6.700000E-02 +9.310000E-04 0.000000E+00 0.000000E+00 -1.770000E-01 -6.293000E-03 +1.600000E-01 +5.134000E-03 0.000000E+00 0.000000E+00 -7.900000E-02 -1.495000E-03 +5.300000E-02 +6.110000E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1236,100 +1236,100 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -2.300000E-01 -1.081000E-02 +2.310000E-01 +1.084100E-02 0.000000E+00 0.000000E+00 -5.200000E-01 -5.835000E-02 +5.390000E-01 +6.215100E-02 0.000000E+00 0.000000E+00 -2.350000E-01 -1.135900E-02 +2.250000E-01 +1.047100E-02 0.000000E+00 0.000000E+00 -1.560000E-01 -4.914000E-03 +1.540000E-01 +4.856000E-03 0.000000E+00 0.000000E+00 -2.370000E-01 -1.142300E-02 +2.280000E-01 +1.059800E-02 0.000000E+00 0.000000E+00 -1.360000E-01 -3.882000E-03 +1.600000E-01 +5.214000E-03 0.000000E+00 0.000000E+00 2.160000E-01 -9.662000E-03 +9.418000E-03 0.000000E+00 0.000000E+00 -1.080000E-01 -2.718000E-03 +9.300000E-02 +1.927000E-03 0.000000E+00 0.000000E+00 -2.090000E-01 -8.841000E-03 +2.510000E-01 +1.271500E-02 0.000000E+00 0.000000E+00 1.030000E-01 -2.271000E-03 +2.229000E-03 0.000000E+00 0.000000E+00 -5.200000E-01 -5.835000E-02 +5.390000E-01 +6.215100E-02 0.000000E+00 0.000000E+00 -2.300000E-01 -1.081000E-02 +2.310000E-01 +1.084100E-02 0.000000E+00 0.000000E+00 -5.110000E-01 -5.615900E-02 +4.700000E-01 +4.972200E-02 0.000000E+00 0.000000E+00 -2.430000E-01 -1.228300E-02 +2.190000E-01 +9.821000E-03 0.000000E+00 0.000000E+00 -5.110000E-01 -5.696100E-02 +5.030000E-01 +5.613900E-02 0.000000E+00 0.000000E+00 -1.830000E-01 -7.133000E-03 +1.980000E-01 +8.038000E-03 0.000000E+00 0.000000E+00 -5.130000E-01 -6.002100E-02 +5.100000E-01 +5.929000E-02 0.000000E+00 0.000000E+00 -2.420000E-01 -1.209200E-02 +2.140000E-01 +9.406000E-03 0.000000E+00 0.000000E+00 -5.510000E-01 -7.358900E-02 +5.470000E-01 +7.228300E-02 0.000000E+00 0.000000E+00 -2.410000E-01 -1.255900E-02 +2.110000E-01 +9.215000E-03 0.000000E+00 0.000000E+00 -5.140000E-01 -5.890200E-02 +5.160000E-01 +5.892200E-02 0.000000E+00 0.000000E+00 -2.100000E-01 -1.004600E-02 +2.550000E-01 +1.480500E-02 0.000000E+00 0.000000E+00 -2.430000E-01 -1.228300E-02 +2.190000E-01 +9.821000E-03 0.000000E+00 0.000000E+00 -5.110000E-01 -5.615900E-02 +4.700000E-01 +4.972200E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1340,36 +1340,36 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -2.120000E-01 -9.278000E-03 +2.340000E-01 +1.119400E-02 0.000000E+00 0.000000E+00 -1.430000E-01 -4.207000E-03 +1.540000E-01 +4.808000E-03 0.000000E+00 0.000000E+00 -2.380000E-01 -1.133600E-02 +2.170000E-01 +9.509000E-03 0.000000E+00 0.000000E+00 -1.640000E-01 -5.444000E-03 +1.600000E-01 +5.156000E-03 0.000000E+00 0.000000E+00 -2.240000E-01 -1.015800E-02 +1.860000E-01 +7.198000E-03 0.000000E+00 0.000000E+00 -9.300000E-02 -1.829000E-03 +9.900000E-02 +2.127000E-03 0.000000E+00 0.000000E+00 -1.950000E-01 -7.705000E-03 +2.290000E-01 +1.058700E-02 0.000000E+00 0.000000E+00 -1.030000E-01 -2.191000E-03 +9.000000E-02 +1.780000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1380,20 +1380,20 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.680000E-01 -5.878000E-03 +1.550000E-01 +4.913000E-03 0.000000E+00 0.000000E+00 -2.230000E-01 -1.049900E-02 +2.380000E-01 +1.153400E-02 0.000000E+00 0.000000E+00 -1.360000E-01 -3.882000E-03 +1.600000E-01 +5.214000E-03 0.000000E+00 0.000000E+00 -2.370000E-01 -1.142300E-02 +2.280000E-01 +1.059800E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1404,44 +1404,44 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.550000E-01 -5.011000E-03 +1.610000E-01 +5.237000E-03 0.000000E+00 0.000000E+00 -7.100000E-02 -1.191000E-03 +7.000000E-02 +1.020000E-03 0.000000E+00 0.000000E+00 -1.510000E-01 -4.845000E-03 +1.410000E-01 +4.071000E-03 0.000000E+00 0.000000E+00 -6.400000E-02 -9.460000E-04 +6.100000E-02 +8.350000E-04 0.000000E+00 0.000000E+00 -2.230000E-01 -1.049900E-02 +2.380000E-01 +1.153400E-02 0.000000E+00 0.000000E+00 -1.680000E-01 -5.878000E-03 +1.550000E-01 +4.913000E-03 0.000000E+00 0.000000E+00 -2.490000E-01 -1.255900E-02 +2.320000E-01 +1.100400E-02 0.000000E+00 0.000000E+00 -1.280000E-01 -3.448000E-03 +1.460000E-01 +4.498000E-03 0.000000E+00 0.000000E+00 -2.420000E-01 -1.209200E-02 +2.140000E-01 +9.406000E-03 0.000000E+00 0.000000E+00 -5.130000E-01 -6.002100E-02 +5.100000E-01 +5.929000E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1452,28 +1452,28 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -2.070000E-01 -8.673000E-03 +2.150000E-01 +9.289000E-03 0.000000E+00 0.000000E+00 -1.080000E-01 -2.694000E-03 +9.500000E-02 +1.949000E-03 0.000000E+00 0.000000E+00 -2.000000E-01 -8.202000E-03 +1.870000E-01 +7.267000E-03 0.000000E+00 0.000000E+00 -9.600000E-02 -2.024000E-03 +1.030000E-01 +2.543000E-03 0.000000E+00 0.000000E+00 -1.280000E-01 -3.448000E-03 +1.460000E-01 +4.498000E-03 0.000000E+00 0.000000E+00 -2.490000E-01 -1.255900E-02 +2.320000E-01 +1.100400E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1484,12 +1484,12 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.640000E-01 -5.444000E-03 +1.600000E-01 +5.156000E-03 0.000000E+00 0.000000E+00 -2.380000E-01 -1.133600E-02 +2.170000E-01 +9.509000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1500,20 +1500,20 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.760000E-01 -6.550000E-03 +1.500000E-01 +4.588000E-03 0.000000E+00 0.000000E+00 -8.200000E-02 -1.536000E-03 +6.200000E-02 +8.020000E-04 0.000000E+00 0.000000E+00 -1.670000E-01 -5.653000E-03 +1.290000E-01 +3.487000E-03 0.000000E+00 0.000000E+00 -4.900000E-02 -5.630000E-04 +6.000000E-02 +8.060000E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1524,12 +1524,12 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.320000E-01 -3.626000E-03 +1.090000E-01 +2.437000E-03 0.000000E+00 0.000000E+00 -1.510000E-01 -4.831000E-03 +1.650000E-01 +5.655000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1540,44 +1540,44 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.370000E-01 -3.855000E-03 +1.230000E-01 +3.065000E-03 0.000000E+00 0.000000E+00 -1.610000E-01 -5.233000E-03 +1.570000E-01 +4.999000E-03 0.000000E+00 0.000000E+00 -5.600000E-02 -7.260000E-04 +6.400000E-02 +8.700000E-04 0.000000E+00 0.000000E+00 -1.530000E-01 -4.837000E-03 +1.360000E-01 +3.852000E-03 0.000000E+00 0.000000E+00 -1.610000E-01 -5.261000E-03 +1.750000E-01 +6.299000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.510000E-01 -4.831000E-03 +1.650000E-01 +5.655000E-03 0.000000E+00 0.000000E+00 -1.320000E-01 -3.626000E-03 +1.090000E-01 +2.437000E-03 0.000000E+00 0.000000E+00 -1.490000E-01 -4.731000E-03 +1.480000E-01 +4.674000E-03 0.000000E+00 0.000000E+00 1.320000E-01 -3.514000E-03 +3.548000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1588,24 +1588,24 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.550000E-01 -4.921000E-03 +1.440000E-01 +4.282000E-03 0.000000E+00 0.000000E+00 -2.410000E-01 -1.168300E-02 +2.190000E-01 +9.683000E-03 0.000000E+00 0.000000E+00 -9.100000E-02 -1.807000E-03 +7.300000E-02 +1.091000E-03 0.000000E+00 0.000000E+00 -2.100000E-01 -8.928000E-03 +2.140000E-01 +9.376000E-03 0.000000E+00 0.000000E+00 -2.090000E-01 -8.775000E-03 +1.830000E-01 +6.803000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1613,11 +1613,11 @@ tally 2: 0.000000E+00 0.000000E+00 1.320000E-01 -3.514000E-03 +3.548000E-03 0.000000E+00 0.000000E+00 -1.490000E-01 -4.731000E-03 +1.480000E-01 +4.674000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1636,24 +1636,24 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.150000E-01 -2.891000E-03 +1.350000E-01 +3.895000E-03 0.000000E+00 0.000000E+00 -1.560000E-01 -5.154000E-03 +1.430000E-01 +4.297000E-03 0.000000E+00 0.000000E+00 -7.900000E-02 -1.495000E-03 +5.300000E-02 +6.110000E-04 0.000000E+00 0.000000E+00 -1.770000E-01 -6.293000E-03 +1.600000E-01 +5.134000E-03 0.000000E+00 0.000000E+00 -1.600000E-01 -5.352000E-03 +1.380000E-01 +4.220000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1668,100 +1668,100 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.610000E-01 -5.273000E-03 +1.900000E-01 +7.412000E-03 0.000000E+00 0.000000E+00 -2.310000E-01 -1.098100E-02 +2.420000E-01 +1.208400E-02 0.000000E+00 0.000000E+00 -1.610000E-01 -5.233000E-03 +1.570000E-01 +4.999000E-03 0.000000E+00 0.000000E+00 -1.370000E-01 -3.855000E-03 +1.230000E-01 +3.065000E-03 0.000000E+00 0.000000E+00 -1.760000E-01 -6.482000E-03 +1.730000E-01 +6.279000E-03 0.000000E+00 0.000000E+00 -1.340000E-01 -3.882000E-03 +1.330000E-01 +3.621000E-03 0.000000E+00 0.000000E+00 1.030000E-01 -2.271000E-03 +2.229000E-03 0.000000E+00 0.000000E+00 -2.090000E-01 -8.841000E-03 +2.510000E-01 +1.271500E-02 0.000000E+00 0.000000E+00 -1.830000E-01 -6.761000E-03 +2.100000E-01 +8.970000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.310000E-01 -1.098100E-02 +2.420000E-01 +1.208400E-02 0.000000E+00 0.000000E+00 -1.610000E-01 -5.273000E-03 +1.900000E-01 +7.412000E-03 0.000000E+00 0.000000E+00 -2.620000E-01 -1.380600E-02 +2.610000E-01 +1.399900E-02 0.000000E+00 0.000000E+00 -1.700000E-01 -5.970000E-03 +2.000000E-01 +8.410000E-03 0.000000E+00 0.000000E+00 -2.410000E-01 -1.168300E-02 +2.190000E-01 +9.683000E-03 0.000000E+00 0.000000E+00 -1.550000E-01 -4.921000E-03 +1.440000E-01 +4.282000E-03 0.000000E+00 0.000000E+00 -2.250000E-01 -1.014100E-02 +2.690000E-01 +1.478100E-02 0.000000E+00 0.000000E+00 -1.370000E-01 -3.805000E-03 +1.540000E-01 +4.986000E-03 0.000000E+00 0.000000E+00 -2.100000E-01 -1.004600E-02 +2.550000E-01 +1.480500E-02 0.000000E+00 0.000000E+00 -5.140000E-01 -5.890200E-02 +5.160000E-01 +5.892200E-02 0.000000E+00 0.000000E+00 -2.320000E-01 -1.093000E-02 +2.310000E-01 +1.098900E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.700000E-01 -5.970000E-03 +2.000000E-01 +8.410000E-03 0.000000E+00 0.000000E+00 -2.620000E-01 -1.380600E-02 +2.610000E-01 +1.399900E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1772,32 +1772,32 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.560000E-01 -5.154000E-03 +1.430000E-01 +4.297000E-03 0.000000E+00 0.000000E+00 -1.150000E-01 -2.891000E-03 +1.350000E-01 +3.895000E-03 0.000000E+00 0.000000E+00 -1.430000E-01 -4.163000E-03 +1.760000E-01 +6.534000E-03 0.000000E+00 0.000000E+00 -1.120000E-01 -2.640000E-03 +1.170000E-01 +2.807000E-03 0.000000E+00 0.000000E+00 -1.030000E-01 -2.191000E-03 +9.000000E-02 +1.780000E-03 0.000000E+00 0.000000E+00 -1.950000E-01 -7.705000E-03 +2.290000E-01 +1.058700E-02 0.000000E+00 0.000000E+00 -1.760000E-01 -6.392000E-03 +2.080000E-01 +8.854000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1812,20 +1812,20 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -9.200000E-02 -1.822000E-03 +1.230000E-01 +3.305000E-03 0.000000E+00 0.000000E+00 -1.370000E-01 -3.843000E-03 +1.760000E-01 +6.598000E-03 0.000000E+00 0.000000E+00 -1.340000E-01 -3.882000E-03 +1.330000E-01 +3.621000E-03 0.000000E+00 0.000000E+00 -1.760000E-01 -6.482000E-03 +1.730000E-01 +6.279000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1836,44 +1836,44 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -6.400000E-02 -9.460000E-04 +6.100000E-02 +8.350000E-04 0.000000E+00 0.000000E+00 -1.510000E-01 -4.845000E-03 +1.410000E-01 +4.071000E-03 0.000000E+00 0.000000E+00 1.800000E-01 -6.520000E-03 +6.574000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.370000E-01 -3.843000E-03 +1.760000E-01 +6.598000E-03 0.000000E+00 0.000000E+00 -9.200000E-02 -1.822000E-03 +1.230000E-01 +3.305000E-03 0.000000E+00 0.000000E+00 -1.300000E-01 -3.604000E-03 +1.690000E-01 +6.135000E-03 0.000000E+00 0.000000E+00 -1.170000E-01 -2.789000E-03 +1.220000E-01 +3.344000E-03 0.000000E+00 0.000000E+00 -1.370000E-01 -3.805000E-03 +1.540000E-01 +4.986000E-03 0.000000E+00 0.000000E+00 -2.250000E-01 -1.014100E-02 +2.690000E-01 +1.478100E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1884,28 +1884,28 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -9.600000E-02 -2.024000E-03 +1.030000E-01 +2.543000E-03 0.000000E+00 0.000000E+00 -2.000000E-01 -8.202000E-03 +1.870000E-01 +7.267000E-03 0.000000E+00 0.000000E+00 -1.820000E-01 -6.660000E-03 +1.690000E-01 +5.731000E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.170000E-01 -2.789000E-03 +1.220000E-01 +3.344000E-03 0.000000E+00 0.000000E+00 -1.300000E-01 -3.604000E-03 +1.690000E-01 +6.135000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1916,12 +1916,12 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -1.120000E-01 -2.640000E-03 +1.170000E-01 +2.807000E-03 0.000000E+00 0.000000E+00 -1.430000E-01 -4.163000E-03 +1.760000E-01 +6.534000E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1932,16 +1932,16 @@ tally 2: 0.000000E+00 0.000000E+00 0.000000E+00 -4.900000E-02 -5.630000E-04 +6.000000E-02 +8.060000E-04 0.000000E+00 0.000000E+00 -1.670000E-01 -5.653000E-03 +1.290000E-01 +3.487000E-03 0.000000E+00 0.000000E+00 -1.670000E-01 -5.701000E-03 +1.790000E-01 +6.747000E-03 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/regression_tests/seed/results_true.dat b/tests/regression_tests/seed/results_true.dat index bcd7118253a..ff34071c10c 100644 --- a/tests/regression_tests/seed/results_true.dat +++ b/tests/regression_tests/seed/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.069730E-01 2.632099E-03 +3.015003E-01 5.094212E-03 diff --git a/tests/regression_tests/source/inputs_true.dat b/tests/regression_tests/source/inputs_true.dat index 9f10b79d6b1..0c3764ba6f9 100644 --- a/tests/regression_tests/source/inputs_true.dat +++ b/tests/regression_tests/source/inputs_true.dat @@ -25,7 +25,7 @@ -2.0 0.0 2.0 0.2 0.3 0.2 - + -1.0 0.0 1.0 0.5 0.25 0.25 diff --git a/tests/regression_tests/source/results_true.dat b/tests/regression_tests/source/results_true.dat index 673d27c8af8..7d03c696d3e 100644 --- a/tests/regression_tests/source/results_true.dat +++ b/tests/regression_tests/source/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.959436E-01 2.782384E-03 +3.080655E-01 4.837707E-03 diff --git a/tests/regression_tests/source_file/results_true.dat b/tests/regression_tests/source_file/results_true.dat index 264e3d580d4..359e0526e6a 100644 --- a/tests/regression_tests/source_file/results_true.dat +++ b/tests/regression_tests/source_file/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.983135E-01 5.116978E-03 +2.827397E-01 1.150437E-03 diff --git a/tests/regression_tests/source_mcpl_file/results_true.dat b/tests/regression_tests/source_mcpl_file/results_true.dat index 264e3d580d4..3ba1a452003 100644 --- a/tests/regression_tests/source_mcpl_file/results_true.dat +++ b/tests/regression_tests/source_mcpl_file/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.983135E-01 5.116978E-03 +2.827397E-01 1.150438E-03 diff --git a/tests/regression_tests/sourcepoint_batch/results_true.dat b/tests/regression_tests/sourcepoint_batch/results_true.dat index 2770f25ed17..3665bdd08db 100644 --- a/tests/regression_tests/sourcepoint_batch/results_true.dat +++ b/tests/regression_tests/sourcepoint_batch/results_true.dat @@ -1,3 +1,3 @@ k-combined: -3.074376E-01 3.049465E-03 -3.667754E+00 -7.701697E+00 2.213664E+00 +2.920435E-01 9.109227E-04 +1.101997E+00 -8.197502E+00 4.294606E+00 diff --git a/tests/regression_tests/sourcepoint_latest/results_true.dat b/tests/regression_tests/sourcepoint_latest/results_true.dat index bbf03de9437..97b997ae6b9 100644 --- a/tests/regression_tests/sourcepoint_latest/results_true.dat +++ b/tests/regression_tests/sourcepoint_latest/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.070134E-01 3.900396E-03 +2.940336E-01 7.338463E-04 diff --git a/tests/regression_tests/sourcepoint_restart/results_true.dat b/tests/regression_tests/sourcepoint_restart/results_true.dat index b6d85872d1e..c20b5f2a0ad 100644 --- a/tests/regression_tests/sourcepoint_restart/results_true.dat +++ b/tests/regression_tests/sourcepoint_restart/results_true.dat @@ -1,46 +1,42 @@ k-combined: -3.070134E-01 3.900396E-03 +2.940336E-01 7.338463E-04 tally 1: 1.300000E-02 -4.700000E-05 -5.741381E-03 -9.030024E-06 +3.900000E-05 +5.833114E-03 +7.476880E-06 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 -1.000000E-03 -1.000000E-06 -3.015814E-04 -9.095135E-08 +1.164000E-03 +5.072152E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.600000E-02 -1.420000E-04 -1.268989E-02 -3.464490E-05 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 -1.000000E-03 -1.000000E-06 -1.535009E-03 -1.224718E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -3.200000E-02 -2.760000E-04 -1.248507E-02 -3.714039E-05 +2.100000E-02 +1.110000E-04 +1.108363E-02 +2.889480E-05 0.000000E+00 0.000000E+00 -9.208601E-04 -4.708050E-07 +5.861433E-04 +3.435640E-07 +2.000000E-03 +2.000000E-06 +2.043490E-03 +1.793389E-06 +2.000000E-03 +2.000000E-06 +2.930717E-04 +8.589100E-08 +2.000000E-02 +9.000000E-05 +9.334862E-03 +1.853104E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -49,110 +45,98 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.900000E-02 -7.500000E-05 -8.218811E-03 -1.462963E-05 0.000000E+00 0.000000E+00 -9.070399E-04 -2.743247E-07 0.000000E+00 0.000000E+00 -9.047443E-04 -8.185622E-07 -1.000000E-03 -1.000000E-06 +2.500000E-02 +1.430000E-04 +1.110224E-02 +2.872840E-05 0.000000E+00 0.000000E+00 -1.200000E-02 -5.000000E-05 -3.938144E-03 -5.245641E-06 +5.833203E-04 +1.701353E-07 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 -1.000000E-03 -1.000000E-06 -5.897816E-04 -3.478423E-07 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 -2.000000E-02 -1.260000E-04 -9.079852E-03 -2.657486E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.000000E-03 +1.100000E-05 +1.752967E-03 +1.027501E-06 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.100000E-02 -2.010000E-04 -1.336346E-02 -3.645780E-05 0.000000E+00 0.000000E+00 -2.102710E-03 -1.524522E-06 -1.000000E-03 -1.000000E-06 -9.083133E-04 -4.632477E-07 -1.000000E-03 -1.000000E-06 +1.800000E-02 +7.600000E-05 +7.300761E-03 +1.254112E-05 0.000000E+00 0.000000E+00 -2.300000E-02 -1.090000E-04 -1.334578E-02 -3.590708E-05 +5.841969E-04 +1.706438E-07 0.000000E+00 0.000000E+00 -6.031628E-04 -3.638054E-07 -1.000000E-03 -1.000000E-06 -1.530605E-03 -1.035684E-06 +5.861433E-04 +3.435640E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.000000E-02 +1.820000E-04 +1.518122E-02 +4.757233E-05 +0.000000E+00 +0.000000E+00 +2.927374E-04 +8.569516E-08 2.000000E-03 2.000000E-06 -6.082927E-04 -1.850231E-07 -1.400000E-02 -4.200000E-05 -7.257468E-03 -1.221578E-05 +2.631167E-03 +3.503358E-06 +1.000000E-03 +1.000000E-06 +2.920435E-04 +8.528942E-08 +2.500000E-02 +1.390000E-04 +9.343205E-03 +1.910189E-05 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 +2.039724E-03 +1.271217E-06 +1.000000E-03 +1.000000E-06 +5.861433E-04 +3.435640E-07 0.000000E+00 0.000000E+00 -8.980536E-04 -4.507660E-07 -2.000000E-03 -4.000000E-06 0.000000E+00 0.000000E+00 -9.000000E-03 -2.700000E-05 -5.193169E-03 -1.187321E-05 +2.400000E-02 +1.340000E-04 +1.080336E-02 +2.533338E-05 0.000000E+00 0.000000E+00 -3.054379E-04 -9.329231E-08 +2.914595E-04 +8.494867E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -161,14 +145,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.000000E-02 -2.400000E-05 -5.170002E-03 -7.361546E-06 +1.400000E-02 +5.200000E-05 +6.711472E-03 +1.216306E-05 0.000000E+00 0.000000E+00 -6.003287E-04 -1.802529E-07 +5.847809E-04 +1.709846E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -177,12 +161,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.800000E-02 -1.720000E-04 -1.699195E-02 -6.267008E-05 +1.700000E-02 +7.900000E-05 +6.413106E-03 +1.186604E-05 0.000000E+00 0.000000E+00 +5.861433E-04 +3.435640E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -191,48 +177,76 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.900000E-02 +1.770000E-04 +1.314196E-02 +3.678739E-05 0.000000E+00 0.000000E+00 -2.800000E-02 -1.980000E-04 -1.338750E-02 -4.565234E-05 +1.167073E-03 +5.110971E-07 0.000000E+00 0.000000E+00 -9.183134E-04 -4.676871E-07 +5.861433E-04 +3.435640E-07 1.000000E-03 1.000000E-06 -1.537188E-03 -2.362946E-06 -2.000000E-03 -4.000000E-06 0.000000E+00 0.000000E+00 2.900000E-02 -1.950000E-04 -1.178615E-02 -3.130999E-05 +1.830000E-04 +1.372758E-02 +4.360498E-05 +0.000000E+00 +0.000000E+00 +5.858090E-04 +1.715862E-07 +0.000000E+00 0.000000E+00 0.000000E+00 -3.015814E-04 -9.095135E-08 0.000000E+00 0.000000E+00 -1.179563E-03 -1.391369E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.200000E-02 +1.000000E-04 +9.631311E-03 +2.001285E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.829191E-04 +3.397947E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +4.094439E-03 +4.622331E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.170949E-03 +1.371123E-06 1.000000E-03 1.000000E-06 0.000000E+00 0.000000E+00 -1.500000E-02 -6.500000E-05 -5.706064E-03 -9.729293E-06 +9.000000E-03 +5.100000E-05 +4.664405E-03 +1.087264E-05 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -241,94 +255,128 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.000000E-03 -9.000000E-06 -1.516642E-03 -1.579637E-06 0.000000E+00 0.000000E+00 +2.200000E-02 +1.300000E-04 +9.644227E-03 +2.300481E-05 0.000000E+00 0.000000E+00 +8.771587E-04 +4.270487E-07 0.000000E+00 0.000000E+00 -5.897816E-04 -3.478423E-07 +2.927374E-04 +8.569516E-08 1.000000E-03 1.000000E-06 0.000000E+00 0.000000E+00 -2.900000E-02 -1.970000E-04 -1.274851E-02 -3.511219E-05 +2.500000E-02 +1.630000E-04 +1.257283E-02 +3.946813E-05 0.000000E+00 0.000000E+00 -9.057666E-04 -4.601298E-07 +1.171259E-03 +8.583084E-07 0.000000E+00 0.000000E+00 +1.462299E-03 +1.112414E-06 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 +2.400000E-02 +1.400000E-04 +1.138156E-02 +3.565057E-05 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 0.000000E+00 0.000000E+00 -1.800000E-02 -7.600000E-05 -8.803642E-03 -1.730938E-05 0.000000E+00 0.000000E+00 -3.074376E-04 -9.451786E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +9.000000E-03 +2.100000E-05 +4.383252E-03 +6.073597E-06 0.000000E+00 0.000000E+00 +8.707460E-04 +7.581986E-07 0.000000E+00 0.000000E+00 -2.900000E-02 -1.830000E-04 -1.245316E-02 -3.378176E-05 0.000000E+00 0.000000E+00 -6.016020E-04 -1.810324E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.100000E-02 +3.500000E-05 +6.410606E-03 +1.066242E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.000000E-03 1.000000E-06 -6.090190E-04 -1.854692E-07 +8.756564E-04 +4.254898E-07 +1.000000E-03 +1.000000E-06 +0.000000E+00 +0.000000E+00 +1.600000E-02 +6.000000E-05 +7.287540E-03 +1.279808E-05 +0.000000E+00 0.000000E+00 +5.822922E-04 +1.695337E-07 0.000000E+00 0.000000E+00 +1.172287E-03 +1.374256E-06 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 +3.400000E-02 +2.820000E-04 +1.603656E-02 +6.229803E-05 0.000000E+00 -6.031628E-04 -3.638054E-07 +0.000000E+00 +1.460479E-03 +7.689660E-07 1.000000E-03 1.000000E-06 +1.165972E-03 +6.797578E-07 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 1.900000E-02 -8.700000E-05 -8.781239E-03 -1.676750E-05 +8.500000E-05 +7.880322E-03 +1.387762E-05 0.000000E+00 0.000000E+00 -6.128755E-04 -1.878102E-07 +8.755466E-04 +4.261064E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -337,140 +385,138 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.500000E-02 -2.930000E-04 -1.372494E-02 -4.750881E-05 +8.000000E-03 +2.400000E-05 +4.666802E-03 +4.926489E-06 0.000000E+00 0.000000E+00 -9.090396E-04 -2.755502E-07 +5.829191E-04 +3.397947E-07 0.000000E+00 0.000000E+00 -5.897816E-04 -3.478423E-07 -1.000000E-03 -1.000000E-06 +8.759908E-04 +4.256857E-07 +2.000000E-03 +2.000000E-06 0.000000E+00 0.000000E+00 -3.700000E-02 -3.270000E-04 -1.492073E-02 -5.134793E-05 +1.500000E-02 +5.900000E-05 +8.180347E-03 +1.622409E-05 +0.000000E+00 +0.000000E+00 +2.902487E-04 +8.424429E-08 0.000000E+00 0.000000E+00 -6.134225E-04 -3.762872E-07 -1.000000E-03 -1.000000E-06 -3.074376E-04 -9.451786E-08 -1.000000E-03 -1.000000E-06 -6.148751E-04 -3.780714E-07 -3.500000E-02 -2.810000E-04 -1.728232E-02 -6.621096E-05 0.000000E+00 0.000000E+00 -1.214477E-03 -3.688425E-07 0.000000E+00 0.000000E+00 -1.481145E-03 -1.482321E-06 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.390000E-04 +7.593262E-03 +1.708292E-05 +0.000000E+00 +0.000000E+00 +1.750169E-03 +1.193182E-06 1.000000E-03 1.000000E-06 -3.015814E-04 -9.095135E-08 -8.000000E-03 -1.800000E-05 -3.359923E-03 -3.081200E-06 +1.461465E-03 +7.684663E-07 +2.000000E-03 +4.000000E-06 +2.914595E-04 +8.494867E-08 +2.300000E-02 +1.350000E-04 +9.639670E-03 +2.161898E-05 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 +8.781869E-04 +4.288534E-07 0.000000E+00 0.000000E+00 +8.707460E-04 +7.581986E-07 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 +2.100000E-02 +1.090000E-04 +9.045520E-03 +2.171457E-05 0.000000E+00 0.000000E+00 +5.851152E-04 +1.711804E-07 0.000000E+00 0.000000E+00 -7.000000E-03 -1.500000E-05 -3.660087E-03 -3.561493E-06 0.000000E+00 0.000000E+00 -9.203130E-04 -4.713637E-07 -1.000000E-03 -1.000000E-06 -3.015814E-04 -9.095135E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.500000E-02 -2.630000E-04 -1.425810E-02 -4.231681E-05 +1.800000E-02 +7.000000E-05 +1.167023E-02 +2.840320E-05 0.000000E+00 0.000000E+00 -1.516059E-03 -4.597939E-07 0.000000E+00 0.000000E+00 -1.221752E-03 -1.492677E-06 1.000000E-03 1.000000E-06 +5.854747E-04 +3.427806E-07 0.000000E+00 0.000000E+00 -2.300000E-02 -1.110000E-04 -1.184871E-02 -2.918189E-05 0.000000E+00 0.000000E+00 -6.016020E-04 -1.810324E-07 +3.000000E-03 +5.000000E-06 +1.171618E-03 +6.863446E-07 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.600000E-02 -6.600000E-05 -7.879913E-03 -1.566560E-05 0.000000E+00 0.000000E+00 -9.039098E-04 -2.724298E-07 +1.300000E-02 +4.500000E-05 +6.428153E-03 +9.064469E-06 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 +2.927374E-04 +8.569516E-08 1.000000E-03 1.000000E-06 +2.920435E-04 +8.528942E-08 0.000000E+00 0.000000E+00 -9.000000E-03 -1.900000E-05 -4.256120E-03 -4.431220E-06 0.000000E+00 0.000000E+00 +1.800000E-02 +9.000000E-05 +8.185938E-03 +1.967120E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -481,12 +527,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.000000E-03 -1.200000E-05 -2.739774E-03 -2.333986E-06 0.000000E+00 0.000000E+00 +9.000000E-03 +2.300000E-05 +4.665341E-03 +5.426897E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -497,12 +543,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.400000E-02 -6.800000E-05 -7.182805E-03 -1.822340E-05 0.000000E+00 0.000000E+00 +4.000000E-03 +4.000000E-06 +3.497088E-03 +3.563633E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -513,60 +559,60 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.500000E-02 -6.300000E-05 -5.734575E-03 -9.207711E-06 0.000000E+00 0.000000E+00 -6.070193E-04 -1.842437E-07 +5.000000E-03 +9.000000E-06 +2.333045E-03 +1.870613E-06 0.000000E+00 0.000000E+00 -8.846723E-04 -7.826452E-07 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -2.000000E-02 -8.800000E-05 -9.416733E-03 -2.020354E-05 0.000000E+00 0.000000E+00 -6.003287E-04 -1.802529E-07 +1.172287E-03 +1.374256E-06 0.000000E+00 0.000000E+00 -6.031628E-04 -3.638054E-07 0.000000E+00 0.000000E+00 -3.015814E-04 -9.095135E-08 -7.000000E-03 -1.500000E-05 -2.413278E-03 -1.439032E-06 +8.000000E-03 +2.200000E-05 +6.413648E-03 +1.136518E-05 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 +2.927374E-04 +8.569516E-08 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 +2.000000E-02 +1.200000E-04 +7.007604E-03 +1.379504E-05 0.000000E+00 0.000000E+00 +5.851152E-04 +1.711804E-07 0.000000E+00 0.000000E+00 -7.000000E-03 -1.500000E-05 -4.226919E-03 -4.173413E-06 +5.861433E-04 +3.435640E-07 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 +1.700000E-02 +7.900000E-05 +7.281401E-03 +1.600845E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -577,144 +623,108 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.300000E-02 -1.590000E-04 -1.125341E-02 -3.890966E-05 0.000000E+00 0.000000E+00 -5.964722E-04 -1.779119E-07 +7.000000E-03 +1.900000E-05 +3.218959E-03 +4.543526E-06 0.000000E+00 0.000000E+00 -8.846723E-04 -7.826452E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.200000E-02 -2.260000E-04 -1.458976E-02 -4.416780E-05 0.000000E+00 0.000000E+00 -1.814806E-03 -9.096012E-07 -1.000000E-03 -1.000000E-06 -6.031628E-04 -3.638054E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.100000E-02 -2.050000E-04 -1.241089E-02 -3.545088E-05 +9.000000E-03 +1.900000E-05 +4.380921E-03 +4.182826E-06 0.000000E+00 0.000000E+00 -1.515620E-03 -1.191731E-06 0.000000E+00 0.000000E+00 -6.121491E-04 -1.873641E-07 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -1.000000E-02 -2.600000E-05 -3.936862E-03 -3.749154E-06 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.100000E-02 +1.050000E-04 +9.932207E-03 +2.153598E-05 0.000000E+00 0.000000E+00 +5.854747E-04 +3.427806E-07 0.000000E+00 0.000000E+00 -1.100000E-02 -4.700000E-05 -5.084641E-03 -9.248485E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.800000E-02 +7.400000E-05 +7.301011E-03 +1.358176E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.500000E-02 -1.770000E-04 -1.021860E-02 -3.099521E-05 +5.804973E-04 +3.369772E-07 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 -3.074376E-04 -9.451786E-08 +2.300000E-02 +1.610000E-04 +9.647933E-03 +2.657983E-05 0.000000E+00 0.000000E+00 -9.086007E-04 -4.570977E-07 -2.000000E-03 -2.000000E-06 -3.054379E-04 -9.329231E-08 -1.500000E-02 -5.300000E-05 -7.584986E-03 -1.188822E-05 0.000000E+00 0.000000E+00 -6.128755E-04 -1.878102E-07 -1.000000E-03 -1.000000E-06 -6.108758E-04 -3.731692E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.800000E-02 -8.600000E-05 -6.672457E-03 -1.369871E-05 0.000000E+00 0.000000E+00 -6.141488E-04 -1.885896E-07 0.000000E+00 0.000000E+00 +9.000000E-03 +1.900000E-05 +2.915422E-03 +2.203274E-06 0.000000E+00 0.000000E+00 +8.775182E-04 +4.280701E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.100000E-02 -2.700000E-05 -3.927884E-03 -3.728010E-06 0.000000E+00 0.000000E+00 -3.074376E-04 -9.451786E-08 0.000000E+00 0.000000E+00 +1.000000E-03 +1.000000E-06 +2.920435E-04 +8.528942E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -727,6 +737,11 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.000000E-03 +9.000000E-06 +2.044244E-03 +1.796182E-06 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -737,15 +752,15 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.000000E-03 -1.900000E-05 -4.217645E-03 -4.306910E-06 0.000000E+00 +1.800000E-02 +9.000000E-05 +6.718632E-03 +1.203946E-05 0.000000E+00 -6.128755E-04 -1.878102E-07 0.000000E+00 +2.927374E-04 +8.569516E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -753,38 +768,27 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.700000E-02 -7.700000E-05 -7.235504E-03 -1.301737E-05 0.000000E+00 +1.100000E-02 +2.700000E-05 +4.675703E-03 +5.128811E-06 0.000000E+00 -3.054379E-04 -9.329231E-08 +0.000000E+00 +2.914595E-04 +8.494867E-08 0.000000E+00 0.000000E+00 -1.531736E-03 -8.439742E-07 -3.000000E-03 -3.000000E-06 -3.074376E-04 -9.451786E-08 -9.000000E-03 -1.900000E-05 -3.018298E-03 -2.174671E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.141488E-04 -1.885896E-07 1.000000E-03 1.000000E-06 -3.074376E-04 -9.451786E-08 +2.914595E-04 +8.494867E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -797,14 +801,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.000000E-03 +1.000000E-06 +2.920435E-04 +8.528942E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.000000E-03 -2.000000E-06 -1.203204E-03 -7.241295E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -813,14 +817,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.000000E-03 +2.600000E-05 +4.670349E-03 +6.133014E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -7.000000E-03 -1.500000E-05 -4.818843E-03 -6.474375E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -829,50 +833,46 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.500000E-02 +6.100000E-05 +8.751735E-03 +1.922421E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.400000E-02 -1.180000E-04 -1.088639E-02 -2.567229E-05 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.400000E-02 +5.000000E-05 +6.126605E-03 +9.620966E-06 0.000000E+00 0.000000E+00 -1.300000E-02 -5.100000E-05 -6.002667E-03 -1.149916E-05 +5.835031E-04 +1.702381E-07 0.000000E+00 0.000000E+00 -3.015814E-04 -9.095135E-08 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.000000E-03 +2.000000E-06 +5.847809E-04 +1.709846E-07 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -881,6 +881,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.000000E-03 +2.000000E-06 +8.719569E-04 +4.219258E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -893,56 +897,52 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.000000E-03 +2.700000E-05 +4.085939E-03 +4.936434E-06 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 0.000000E+00 0.000000E+00 -1.300000E-02 -4.700000E-05 -5.486562E-03 -7.965488E-06 0.000000E+00 0.000000E+00 -3.054379E-04 -9.329231E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +9.000000E-03 +2.500000E-05 +5.846700E-03 +9.739696E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.000000E-03 -1.800000E-05 -3.334317E-03 -3.609712E-06 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.300000E-02 +3.900000E-05 +6.128455E-03 +1.013669E-05 0.000000E+00 0.000000E+00 -2.000000E-02 -1.080000E-04 -9.741552E-03 -2.552400E-05 +5.851152E-04 +1.711804E-07 0.000000E+00 0.000000E+00 -3.015814E-04 -9.095135E-08 +1.172287E-03 +1.374256E-06 0.000000E+00 0.000000E+00 -1.800986E-03 -1.622276E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -962,11 +962,11 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -5.818100E-01 -6.772558E-02 -6.344749E-01 -8.054355E-02 -3.690180E+00 -2.724752E+00 -4.102635E+01 -3.367908E+02 +5.554367E-01 +6.170503E-02 +6.055520E-01 +7.334109E-02 +3.526894E+00 +2.488065E+00 +3.925114E+01 +3.081807E+02 diff --git a/tests/regression_tests/statepoint_batch/geometry.xml b/tests/regression_tests/statepoint_batch/geometry.xml deleted file mode 100644 index bc56030e18b..00000000000 --- a/tests/regression_tests/statepoint_batch/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/regression_tests/statepoint_batch/materials.xml b/tests/regression_tests/statepoint_batch/materials.xml deleted file mode 100644 index 2472a747174..00000000000 --- a/tests/regression_tests/statepoint_batch/materials.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/tests/regression_tests/statepoint_batch/results_true.dat b/tests/regression_tests/statepoint_batch/results_true.dat deleted file mode 100644 index f5c855d7778..00000000000 --- a/tests/regression_tests/statepoint_batch/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -3.048864E-01 1.689118E-03 diff --git a/tests/regression_tests/statepoint_batch/settings.xml b/tests/regression_tests/statepoint_batch/settings.xml deleted file mode 100644 index e2f8dad47b3..00000000000 --- a/tests/regression_tests/statepoint_batch/settings.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - eigenvalue - 10 - 5 - 1000 - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/regression_tests/statepoint_batch/test.py b/tests/regression_tests/statepoint_batch/test.py deleted file mode 100644 index 323b28fc659..00000000000 --- a/tests/regression_tests/statepoint_batch/test.py +++ /dev/null @@ -1,18 +0,0 @@ -from tests.testing_harness import TestHarness - - -class StatepointTestHarness(TestHarness): - def __init__(self): - super().__init__(None) - - def _test_output_created(self): - """Make sure statepoint files have been created.""" - sps = ('statepoint.03.h5', 'statepoint.06.h5', 'statepoint.09.h5') - for sp in sps: - self._sp_name = sp - TestHarness._test_output_created(self) - - -def test_statepoint_batch(): - harness = StatepointTestHarness() - harness.main() diff --git a/tests/regression_tests/statepoint_restart/results_true.dat b/tests/regression_tests/statepoint_restart/results_true.dat index aebc971f49c..b919b300058 100644 --- a/tests/regression_tests/statepoint_restart/results_true.dat +++ b/tests/regression_tests/statepoint_restart/results_true.dat @@ -1,66 +1,60 @@ k-combined: -3.070134E-01 3.900396E-03 +2.940336E-01 7.338463E-04 tally 1: 1.300000E-02 -4.700000E-05 +3.900000E-05 1.300000E-02 -4.700000E-05 -5.741381E-03 -9.030024E-06 +3.900000E-05 +5.833114E-03 +7.476880E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -3.015814E-04 -9.095135E-08 +1.164000E-03 +5.072152E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.600000E-02 -1.420000E-04 -2.600000E-02 -1.420000E-04 -1.268989E-02 -3.464490E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -1.535009E-03 -1.224718E-06 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -3.200000E-02 -2.760000E-04 -3.200000E-02 -2.760000E-04 -1.248507E-02 -3.714039E-05 +2.100000E-02 +1.110000E-04 +2.100000E-02 +1.110000E-04 +1.108363E-02 +2.889480E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.208601E-04 -4.708050E-07 +5.861433E-04 +3.435640E-07 +2.000000E-03 +2.000000E-06 +3.000000E-03 +5.000000E-06 +2.043490E-03 +1.793389E-06 +2.000000E-03 +2.000000E-06 +2.000000E-03 +2.000000E-06 +2.930717E-04 +8.589100E-08 +2.000000E-02 +9.000000E-05 +2.000000E-02 +9.000000E-05 +9.334862E-03 +1.853104E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -73,68 +67,48 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.900000E-02 -7.500000E-05 -1.900000E-02 -7.500000E-05 -8.218811E-03 -1.462963E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.070399E-04 -2.743247E-07 0.000000E+00 0.000000E+00 +2.500000E-02 +1.430000E-04 +2.500000E-02 +1.430000E-04 +1.110224E-02 +2.872840E-05 0.000000E+00 0.000000E+00 -9.047443E-04 -8.185622E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -1.200000E-02 -5.000000E-05 -1.200000E-02 -5.000000E-05 -3.938144E-03 -5.245641E-06 +5.833203E-04 +1.701353E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 -1.000000E-03 -1.000000E-06 -2.000000E-03 -4.000000E-06 -5.897816E-04 -3.478423E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 -2.000000E-02 -1.260000E-04 -2.000000E-02 -1.260000E-04 -9.079852E-03 -2.657486E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.000000E-03 +1.100000E-05 +5.000000E-03 +1.100000E-05 +1.752967E-03 +1.027501E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -145,132 +119,120 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.100000E-02 -2.010000E-04 -3.100000E-02 -2.010000E-04 -1.336346E-02 -3.645780E-05 0.000000E+00 0.000000E+00 +1.800000E-02 +7.600000E-05 +1.800000E-02 +7.600000E-05 +7.300761E-03 +1.254112E-05 0.000000E+00 0.000000E+00 -2.102710E-03 -1.524522E-06 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -9.083133E-04 -4.632477E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -2.300000E-02 -1.090000E-04 -2.300000E-02 -1.090000E-04 -1.334578E-02 -3.590708E-05 +5.841969E-04 +1.706438E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.031628E-04 -3.638054E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -1.530605E-03 -1.035684E-06 -2.000000E-03 -2.000000E-06 -2.000000E-03 -2.000000E-06 -6.082927E-04 -1.850231E-07 -1.400000E-02 -4.200000E-05 -1.400000E-02 -4.200000E-05 -7.257468E-03 -1.221578E-05 +5.861433E-04 +3.435640E-07 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 +3.000000E-02 +1.820000E-04 +3.000000E-02 +1.820000E-04 +1.518122E-02 +4.757233E-05 0.000000E+00 0.000000E+00 0.000000E+00 -8.980536E-04 -4.507660E-07 +0.000000E+00 +2.927374E-04 +8.569516E-08 2.000000E-03 -4.000000E-06 +2.000000E-06 2.000000E-03 -4.000000E-06 +2.000000E-06 +2.631167E-03 +3.503358E-06 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +2.920435E-04 +8.528942E-08 +2.500000E-02 +1.390000E-04 +2.500000E-02 +1.390000E-04 +9.343205E-03 +1.910189E-05 0.000000E+00 0.000000E+00 -9.000000E-03 -2.700000E-05 -9.000000E-03 -2.700000E-05 -5.193169E-03 -1.187321E-05 0.000000E+00 0.000000E+00 +2.039724E-03 +1.271217E-06 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +5.861433E-04 +3.435640E-07 0.000000E+00 0.000000E+00 -3.054379E-04 -9.329231E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.400000E-02 +1.340000E-04 +2.400000E-02 +1.340000E-04 +1.080336E-02 +2.533338E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.914595E-04 +8.494867E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.000000E-02 -2.400000E-05 -1.000000E-02 -2.400000E-05 -5.170002E-03 -7.361546E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.003287E-04 -1.802529E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.400000E-02 +5.200000E-05 +1.400000E-02 +5.200000E-05 +6.711472E-03 +1.216306E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.847809E-04 +1.709846E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.800000E-02 -1.720000E-04 -2.800000E-02 -1.720000E-04 -1.699195E-02 -6.267008E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -279,76 +241,66 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.700000E-02 +7.900000E-05 +1.700000E-02 +7.900000E-05 +6.413106E-03 +1.186604E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.861433E-04 +3.435640E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.800000E-02 -1.980000E-04 -2.800000E-02 -1.980000E-04 -1.338750E-02 -4.565234E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.183134E-04 -4.676871E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -1.537188E-03 -2.362946E-06 -2.000000E-03 -4.000000E-06 -2.000000E-03 -4.000000E-06 0.000000E+00 0.000000E+00 2.900000E-02 -1.950000E-04 +1.770000E-04 2.900000E-02 -1.950000E-04 -1.178615E-02 -3.130999E-05 +1.770000E-04 +1.314196E-02 +3.678739E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.015814E-04 -9.095135E-08 +1.167073E-03 +5.110971E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.179563E-03 -1.391369E-06 +5.861433E-04 +3.435640E-07 1.000000E-03 1.000000E-06 1.000000E-03 1.000000E-06 0.000000E+00 0.000000E+00 -1.500000E-02 -6.500000E-05 -1.500000E-02 -6.500000E-05 -5.706064E-03 -9.729293E-06 +2.900000E-02 +1.830000E-04 +2.900000E-02 +1.830000E-04 +1.372758E-02 +4.360498E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 +5.858090E-04 +1.715862E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -361,12 +313,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.000000E-03 -9.000000E-06 -3.000000E-03 -9.000000E-06 -1.516642E-03 -1.579637E-06 +2.200000E-02 +1.000000E-04 +2.200000E-02 +1.000000E-04 +9.631311E-03 +2.001285E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -377,26 +329,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.897816E-04 -3.478423E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 +5.829191E-04 +3.397947E-07 0.000000E+00 0.000000E+00 -2.900000E-02 -1.970000E-04 -2.900000E-02 -1.970000E-04 -1.274851E-02 -3.511219E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.057666E-04 -4.601298E-07 +8.000000E-03 +1.800000E-05 +8.000000E-03 +1.800000E-05 +4.094439E-03 +4.622331E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -407,20 +353,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.170949E-03 +1.371123E-06 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 -1.800000E-02 -7.600000E-05 -1.800000E-02 -7.600000E-05 -8.803642E-03 -1.730938E-05 +9.000000E-03 +5.100000E-05 +9.000000E-03 +5.100000E-05 +4.664405E-03 +1.087264E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.074376E-04 -9.451786E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -433,162 +383,190 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.900000E-02 -1.830000E-04 -2.900000E-02 -1.830000E-04 -1.245316E-02 -3.378176E-05 +0.000000E+00 +0.000000E+00 +2.200000E-02 +1.300000E-04 +2.200000E-02 +1.300000E-04 +9.644227E-03 +2.300481E-05 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.771587E-04 +4.270487E-07 0.000000E+00 -6.016020E-04 -1.810324E-07 0.000000E+00 0.000000E+00 0.000000E+00 +2.927374E-04 +8.569516E-08 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +0.000000E+00 0.000000E+00 +2.500000E-02 +1.630000E-04 +2.500000E-02 +1.630000E-04 +1.257283E-02 +3.946813E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.171259E-03 +8.583084E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.462299E-03 +1.112414E-06 1.000000E-03 1.000000E-06 1.000000E-03 1.000000E-06 -6.090190E-04 -1.854692E-07 0.000000E+00 0.000000E+00 +2.400000E-02 +1.400000E-04 +2.400000E-02 +1.400000E-04 +1.138156E-02 +3.565057E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.031628E-04 -3.638054E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -1.900000E-02 -8.700000E-05 -1.900000E-02 -8.700000E-05 -8.781239E-03 -1.676750E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.128755E-04 -1.878102E-07 0.000000E+00 0.000000E+00 +9.000000E-03 +2.100000E-05 +9.000000E-03 +2.100000E-05 +4.383252E-03 +6.073597E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.707460E-04 +7.581986E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.500000E-02 -2.930000E-04 -3.500000E-02 -2.930000E-04 -1.372494E-02 -4.750881E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.090396E-04 -2.755502E-07 +0.000000E+00 +0.000000E+00 +1.100000E-02 +3.500000E-05 +1.100000E-02 +3.500000E-05 +6.410606E-03 +1.066242E-05 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.897816E-04 -3.478423E-07 1.000000E-03 1.000000E-06 1.000000E-03 1.000000E-06 +8.756564E-04 +4.254898E-07 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +0.000000E+00 +0.000000E+00 +1.600000E-02 +6.000000E-05 +1.600000E-02 +6.000000E-05 +7.287540E-03 +1.279808E-05 +0.000000E+00 0.000000E+00 0.000000E+00 -3.700000E-02 -3.270000E-04 -3.700000E-02 -3.270000E-04 -1.492073E-02 -5.134793E-05 0.000000E+00 +5.822922E-04 +1.695337E-07 0.000000E+00 0.000000E+00 0.000000E+00 -6.134225E-04 -3.762872E-07 +0.000000E+00 +1.172287E-03 +1.374256E-06 1.000000E-03 1.000000E-06 1.000000E-03 1.000000E-06 -3.074376E-04 -9.451786E-08 +0.000000E+00 +0.000000E+00 +3.400000E-02 +2.820000E-04 +3.400000E-02 +2.820000E-04 +1.603656E-02 +6.229803E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.460479E-03 +7.689660E-07 1.000000E-03 1.000000E-06 1.000000E-03 1.000000E-06 -6.148751E-04 -3.780714E-07 -3.500000E-02 -2.810000E-04 -3.500000E-02 -2.810000E-04 -1.728232E-02 -6.621096E-05 +1.165972E-03 +6.797578E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.214477E-03 -3.688425E-07 0.000000E+00 0.000000E+00 +1.900000E-02 +8.500000E-05 +1.900000E-02 +8.500000E-05 +7.880322E-03 +1.387762E-05 0.000000E+00 0.000000E+00 -1.481145E-03 -1.482321E-06 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -3.015814E-04 -9.095135E-08 -8.000000E-03 -1.800000E-05 -8.000000E-03 -1.800000E-05 -3.359923E-03 -3.081200E-06 0.000000E+00 0.000000E+00 +8.755466E-04 +4.261064E-07 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -599,72 +577,114 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.000000E-03 +2.400000E-05 +8.000000E-03 +2.400000E-05 +4.666802E-03 +4.926489E-06 0.000000E+00 0.000000E+00 -7.000000E-03 -1.500000E-05 -7.000000E-03 -1.500000E-05 -3.660087E-03 -3.561493E-06 0.000000E+00 0.000000E+00 +5.829191E-04 +3.397947E-07 0.000000E+00 0.000000E+00 -9.203130E-04 -4.713637E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -3.015814E-04 -9.095135E-08 0.000000E+00 0.000000E+00 +8.759908E-04 +4.256857E-07 +2.000000E-03 +2.000000E-06 +2.000000E-03 +2.000000E-06 0.000000E+00 0.000000E+00 +1.500000E-02 +5.900000E-05 +1.500000E-02 +5.900000E-05 +8.180347E-03 +1.622409E-05 0.000000E+00 0.000000E+00 -3.500000E-02 -2.630000E-04 -3.500000E-02 -2.630000E-04 -1.425810E-02 -4.231681E-05 0.000000E+00 0.000000E+00 +2.902487E-04 +8.424429E-08 0.000000E+00 0.000000E+00 -1.516059E-03 -4.597939E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.221752E-03 -1.492677E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.390000E-04 +2.300000E-02 +1.390000E-04 +7.593262E-03 +1.708292E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.750169E-03 +1.193182E-06 1.000000E-03 1.000000E-06 1.000000E-03 1.000000E-06 -0.000000E+00 -0.000000E+00 +1.461465E-03 +7.684663E-07 +2.000000E-03 +4.000000E-06 +2.000000E-03 +4.000000E-06 +2.914595E-04 +8.494867E-08 2.300000E-02 -1.110000E-04 +1.350000E-04 2.300000E-02 -1.110000E-04 -1.184871E-02 -2.918189E-05 +1.350000E-04 +9.639670E-03 +2.161898E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.016020E-04 -1.810324E-07 +8.781869E-04 +4.288534E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.707460E-04 +7.581986E-07 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +0.000000E+00 +0.000000E+00 +2.100000E-02 +1.090000E-04 +2.100000E-02 +1.090000E-04 +9.045520E-03 +2.171457E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.851152E-04 +1.711804E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -673,44 +693,46 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.600000E-02 -6.600000E-05 -1.600000E-02 -6.600000E-05 -7.879913E-03 -1.566560E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.039098E-04 -2.724298E-07 +1.800000E-02 +7.000000E-05 +1.800000E-02 +7.000000E-05 +1.167023E-02 +2.840320E-05 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 1.000000E-03 1.000000E-06 1.000000E-03 1.000000E-06 +5.854747E-04 +3.427806E-07 0.000000E+00 0.000000E+00 -9.000000E-03 -1.900000E-05 -9.000000E-03 -1.900000E-05 -4.256120E-03 -4.431220E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.000000E-03 +5.000000E-06 +3.000000E-03 +5.000000E-06 +1.171618E-03 +6.863446E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -721,36 +743,44 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.000000E-03 -1.200000E-05 -6.000000E-03 -1.200000E-05 -2.739774E-03 -2.333986E-06 0.000000E+00 0.000000E+00 +1.300000E-02 +4.500000E-05 +1.300000E-02 +4.500000E-05 +6.428153E-03 +9.064469E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.927374E-04 +8.569516E-08 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +2.920435E-04 +8.528942E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.800000E-02 +9.000000E-05 +1.800000E-02 +9.000000E-05 +8.185938E-03 +1.967120E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.400000E-02 -6.800000E-05 -1.400000E-02 -6.800000E-05 -7.182805E-03 -1.822340E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -763,76 +793,60 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.000000E-03 +2.300000E-05 +9.000000E-03 +2.300000E-05 +4.665341E-03 +5.426897E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.500000E-02 -6.300000E-05 -1.500000E-02 -6.300000E-05 -5.734575E-03 -9.207711E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.070193E-04 -1.842437E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.846723E-04 -7.826452E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -2.000000E-02 -8.800000E-05 -2.000000E-02 -8.800000E-05 -9.416733E-03 -2.020354E-05 0.000000E+00 0.000000E+00 +4.000000E-03 +4.000000E-06 +4.000000E-03 +4.000000E-06 +3.497088E-03 +3.563633E-06 0.000000E+00 0.000000E+00 -6.003287E-04 -1.802529E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.031628E-04 -3.638054E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.015814E-04 -9.095135E-08 -7.000000E-03 -1.500000E-05 -7.000000E-03 -1.500000E-05 -2.413278E-03 -1.439032E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +5.000000E-03 +9.000000E-06 +5.000000E-03 +9.000000E-06 +2.333045E-03 +1.870613E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -841,114 +855,104 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.000000E-03 -1.500000E-05 -7.000000E-03 -1.500000E-05 -4.226919E-03 -4.173413E-06 0.000000E+00 0.000000E+00 +1.172287E-03 +1.374256E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +8.000000E-03 +2.200000E-05 +8.000000E-03 +2.200000E-05 +6.413648E-03 +1.136518E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.927374E-04 +8.569516E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 -2.300000E-02 -1.590000E-04 -2.300000E-02 -1.590000E-04 -1.125341E-02 -3.890966E-05 +2.000000E-02 +1.200000E-04 +2.000000E-02 +1.200000E-04 +7.007604E-03 +1.379504E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -5.964722E-04 -1.779119E-07 +5.851152E-04 +1.711804E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.846723E-04 -7.826452E-07 +5.861433E-04 +3.435640E-07 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 0.000000E+00 0.000000E+00 +1.700000E-02 +7.900000E-05 +1.700000E-02 +7.900000E-05 +7.281401E-03 +1.600845E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.200000E-02 -2.260000E-04 -3.200000E-02 -2.260000E-04 -1.458976E-02 -4.416780E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.814806E-03 -9.096012E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -6.031628E-04 -3.638054E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.100000E-02 -2.050000E-04 -3.100000E-02 -2.050000E-04 -1.241089E-02 -3.545088E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.515620E-03 -1.191731E-06 +7.000000E-03 +1.900000E-05 +7.000000E-03 +1.900000E-05 +3.218959E-03 +4.543526E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.121491E-04 -1.873641E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 -1.000000E-02 -2.600000E-05 -1.000000E-02 -2.600000E-05 -3.936862E-03 -3.749154E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -957,16 +961,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.000000E-03 +1.900000E-05 +9.000000E-03 +1.900000E-05 +4.380921E-03 +4.182826E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.100000E-02 -4.700000E-05 -1.100000E-02 -4.700000E-05 -5.084641E-03 -9.248485E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -981,70 +985,68 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.100000E-02 +1.050000E-04 +2.100000E-02 +1.050000E-04 +9.932207E-03 +2.153598E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.500000E-02 -1.770000E-04 -2.500000E-02 -1.770000E-04 -1.021860E-02 -3.099521E-05 +5.854747E-04 +3.427806E-07 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.074376E-04 -9.451786E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -9.086007E-04 -4.570977E-07 -2.000000E-03 -2.000000E-06 -2.000000E-03 -2.000000E-06 -3.054379E-04 -9.329231E-08 -1.500000E-02 -5.300000E-05 -1.500000E-02 -5.300000E-05 -7.584986E-03 -1.188822E-05 0.000000E+00 0.000000E+00 +1.800000E-02 +7.400000E-05 +1.800000E-02 +7.400000E-05 +7.301011E-03 +1.358176E-05 +0.000000E+00 0.000000E+00 0.000000E+00 -6.128755E-04 -1.878102E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.804973E-04 +3.369772E-07 1.000000E-03 1.000000E-06 1.000000E-03 1.000000E-06 -6.108758E-04 -3.731692E-07 0.000000E+00 0.000000E+00 +2.300000E-02 +1.610000E-04 +2.300000E-02 +1.610000E-04 +9.647933E-03 +2.657983E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.800000E-02 -8.600000E-05 -1.800000E-02 -8.600000E-05 -6.672457E-03 -1.369871E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.141488E-04 -1.885896E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1055,20 +1057,20 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.000000E-03 +1.900000E-05 +9.000000E-03 +1.900000E-05 +2.915422E-03 +2.203274E-06 0.000000E+00 0.000000E+00 -1.100000E-02 -2.700000E-05 -1.100000E-02 -2.700000E-05 -3.927884E-03 -3.728010E-06 0.000000E+00 0.000000E+00 +8.775182E-04 +4.280701E-07 0.000000E+00 0.000000E+00 -3.074376E-04 -9.451786E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1079,6 +1081,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +2.920435E-04 +8.528942E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1097,6 +1105,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.000000E-03 +9.000000E-06 +5.000000E-03 +9.000000E-06 +2.044244E-03 +1.796182E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1105,78 +1119,56 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.000000E-03 -1.900000E-05 -9.000000E-03 -1.900000E-05 -4.217645E-03 -4.306910E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.128755E-04 -1.878102E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.800000E-02 +9.000000E-05 +1.800000E-02 +9.000000E-05 +6.718632E-03 +1.203946E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.927374E-04 +8.569516E-08 0.000000E+00 0.000000E+00 -1.700000E-02 -7.700000E-05 -1.700000E-02 -7.700000E-05 -7.235504E-03 -1.301737E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.054379E-04 -9.329231E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.531736E-03 -8.439742E-07 -3.000000E-03 -3.000000E-06 -3.000000E-03 -3.000000E-06 -3.074376E-04 -9.451786E-08 -9.000000E-03 -1.900000E-05 -9.000000E-03 -1.900000E-05 -3.018298E-03 -2.174671E-06 0.000000E+00 0.000000E+00 +1.100000E-02 +2.700000E-05 +1.100000E-02 +2.700000E-05 +4.675703E-03 +5.128811E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.914595E-04 +8.494867E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -6.141488E-04 -1.885896E-07 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 -3.074376E-04 -9.451786E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1185,6 +1177,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +2.914595E-04 +8.494867E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1201,14 +1199,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.000000E-03 -2.000000E-06 -2.000000E-03 -2.000000E-06 -1.203204E-03 -7.241295E-07 0.000000E+00 0.000000E+00 +1.000000E-03 +1.000000E-06 +1.000000E-03 +1.000000E-06 +2.920435E-04 +8.528942E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1225,14 +1223,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.000000E-03 -1.500000E-05 -7.000000E-03 -1.500000E-05 -4.818843E-03 -6.474375E-06 0.000000E+00 0.000000E+00 +8.000000E-03 +2.600000E-05 +8.000000E-03 +2.600000E-05 +4.670349E-03 +6.133014E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1249,18 +1247,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.400000E-02 -1.180000E-04 -2.400000E-02 -1.180000E-04 -1.088639E-02 -2.567229E-05 0.000000E+00 0.000000E+00 +1.500000E-02 +6.100000E-05 +1.500000E-02 +6.100000E-05 +8.751735E-03 +1.922421E-05 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1273,24 +1269,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.300000E-02 -5.100000E-05 -1.300000E-02 -5.100000E-05 -6.002667E-03 -1.149916E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.015814E-04 -9.095135E-08 +1.400000E-02 +5.000000E-05 +1.400000E-02 +5.000000E-05 +6.126605E-03 +9.620966E-06 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 +5.835031E-04 +1.702381E-07 0.000000E+00 0.000000E+00 -3.067112E-04 -9.407179E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1301,14 +1297,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 +2.000000E-03 +2.000000E-06 +2.000000E-03 +2.000000E-06 +5.847809E-04 +1.709846E-07 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1321,6 +1321,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.000000E-03 +2.000000E-06 +2.000000E-03 +2.000000E-06 +8.719569E-04 +4.219258E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1339,48 +1345,46 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.000000E-03 +2.700000E-05 +9.000000E-03 +2.700000E-05 +4.085939E-03 +4.936434E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +2.930717E-04 +8.589100E-08 0.000000E+00 0.000000E+00 -1.300000E-02 -4.700000E-05 -1.300000E-02 -4.700000E-05 -5.486562E-03 -7.965488E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.054379E-04 -9.329231E-08 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +9.000000E-03 +2.500000E-05 +9.000000E-03 +2.500000E-05 +5.846700E-03 +9.739696E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -8.000000E-03 -1.800000E-05 -8.000000E-03 -1.800000E-05 -3.334317E-03 -3.609712E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.948908E-04 -8.696057E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1389,32 +1393,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.300000E-02 +3.900000E-05 +1.300000E-02 +3.900000E-05 +6.128455E-03 +1.013669E-05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.000000E-02 -1.080000E-04 -2.000000E-02 -1.080000E-04 -9.741552E-03 -2.552400E-05 +5.851152E-04 +1.711804E-07 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -3.015814E-04 -9.095135E-08 +1.172287E-03 +1.374256E-06 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.800986E-03 -1.622276E-06 -1.000000E-03 -1.000000E-06 -1.000000E-03 -1.000000E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1442,11 +1442,11 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -5.818100E-01 -6.772558E-02 -6.344749E-01 -8.054355E-02 -3.690180E+00 -2.724752E+00 -4.102635E+01 -3.367908E+02 +5.554367E-01 +6.170503E-02 +6.055520E-01 +7.334109E-02 +3.526894E+00 +2.488065E+00 +3.925114E+01 +3.081807E+02 diff --git a/tests/regression_tests/statepoint_sourcesep/results_true.dat b/tests/regression_tests/statepoint_sourcesep/results_true.dat index bbf03de9437..97b997ae6b9 100644 --- a/tests/regression_tests/statepoint_sourcesep/results_true.dat +++ b/tests/regression_tests/statepoint_sourcesep/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.070134E-01 3.900396E-03 +2.940336E-01 7.338463E-04 diff --git a/tests/regression_tests/stride/results_true.dat b/tests/regression_tests/stride/results_true.dat index a654111500a..825de376675 100644 --- a/tests/regression_tests/stride/results_true.dat +++ b/tests/regression_tests/stride/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.978080E-01 6.106774E-03 +2.953207E-01 2.874356E-03 diff --git a/tests/regression_tests/surface_source/surface_source_true.h5 b/tests/regression_tests/surface_source/surface_source_true.h5 index d056d7328405bedf704f8690fd3b8056ec8aa101..2c2a19038fc1b6d9c7785e8a7f591e9e5c7fd959 100644 GIT binary patch delta 17120 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 Tbzz-5f4SO>oo}#+&4TX#jWsSQ delta 17152 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 diff --git a/tests/regression_tests/surface_source/surface_source_true.mcpl b/tests/regression_tests/surface_source/surface_source_true.mcpl index 7c819ac9bd02179ed93a1cd94b6fd8237a7b0893..ca4b7c2c4257c88baff2f9bd1c2a756fdfde92bf 100644 GIT binary patch delta 3894 zcmZYAF>tbX9l&wlQkyDTth9|vl`6!jspWl375k#1qVg(lrETs^l`2-Od0X02<*lir z#)^uX-r;-CkZJ~o3>h-yybKH(7&2sFV93CbfgwYBmw_Pz-ethgxthE0eg1II|Bm19 z8FKc|yWaWNUH3ngfBNRttLdBXhTikPzbkj{k6(G<&b0?0f8xnUebc!8!tLvgH(tG7 zfBnVRUaeMMd;Qw=NB;ls+EssdYRNl=}AUA1+gp|YW5Ft3&> z8fZt+yOY6$WoERkb)D-->Gvjsh?-i_p}Gp+lMK$d%#^mYrv5$u2pV(ApriwBDs*o$ z7<2L78$sY)*NJ*cye}EdSYtu^>gZA<<=>wS;@Z%$RyEb0a^YkUQ(ILHwX69Ln42wT zHBd#-51N@}PPomC&b6-eeP(8phl(g1F*ldl#9rifW$hn|+)GoNeOCB??*aLRJD)+d{DKD7Q{Dbzv3Wppp ztBG35JY)ylW>n`&&)dmEH-aXQd_H7E;g6V|%iL1e`IKi|`l$Jx8(iZ7`wV@|?9N4& zxT(N-%o8pu5i>Un>~WtnUb3eA!*&u|2;P1;5sZA^^Es}mR+am>eXz}#E>u~=&lWE@;Jl)ru@jcL z!);D@&WzHZH9wm?;vpjnf6n||W|vz$<0(^GS~5QyJW$^`^r#&;msE7#WWW=RofDt8 z1Lqp++-HxMoH75H9XM~W!()yZOWBKam8;z49xqZ0!G9i01lg#oi`b9%o8TQ zXnq!0XHOmHOU;~X%xBE6edlA282gg>ovU1Bn|qvU=$upbNqb?77aVY2(d%YshC5v6 zghwnZlC=}Au&Z1UNENYH|&NjwmIOC(Yzfvms#ODcX-4J)8Dig z=M`?V%X6MFqSUv{&ov&h&#>mcZGM)x#Z8`a%q1-r%+ERx*kedD6;-%les*}m5fh4k z$8NaFeQxlQ$IL7CT{~fwQ|>aS3$>Lknwu@oYeyALG*ITIooHQU9cf#Ur_9Y2rqxwb zXF62sd*;@fmetpm=1S&fiA!pfZUkcTBsaKjyiG;P!KgpyYg@O@)5orLfLL^;FbMfeJtL zW7uIrBh?fy`!QVQC8x}5_jxac7u;j^M_vwFjQMWB9HT$>l2~S&M;tOz@nSr)!V0_G z;Tb1P{lrW1>>AhE=QihF@Pb%k+OwN%a?C?6{?v{7B6K*i`NAq)? zG53yGWu#@7T;T<~%(`>N7E^z+ORh2MPM>AY{n;*A;yE{&c4y2c7yn{*)){uE$7RmA z#X{Tc>~P7Q5gUyE)%-ee4taLZxyUI4=Kf}OwwZ8e$QtMWZhp3S$pQ23L^sUO43Al6 f%$;>sxy@Z3@q*{fx*K`hE}7;IS2$tw?N|N_q0^+p delta 3830 zcmXBSF>tbX9l&whVnrJ*ucZ|&w$wbasMu1AN)?q_RIJp}9;Z=bMMX<1RaB~}VvQPY zREE4f8KRegAwz}?@yw7RLxv0)GGxdQ?=moOCj&zU1_lN{cfNPu`~080&p*fSN4EcY z=YRik=dI_SsaCStCoAK--uC~0w{Jas$9=b-xc`pq?VaHEYVfa<<{e?>&LB){OKn~2 zNWon}|E?fxsjNe7YOX7lB0-o^PfcCwK*_fU;fxIywXY3Lb)mxDL733G>N?k+ZtmU; zci$0&Yntdxxo8l^v>YvmryOYEok2KejaltzRU@4!^R6I_s-vog+E)6WAUtM-ZB=xn zt$Tw0f~g(L478~$wUm0d(b?pj2P|o(o{H}=I`^5>R1FpGH8$6I!E+{5zjrCTKeiaI z#Ek9vj5mzk3c|eeGS@iZF2|fO`(EpCUS*d%JmrWBsws1y6|lpojunYp11sF-7KglM zTEYF+!4{9=K_7=IYp&7**1;?FoKu=TP!5}Hyw5tg&r42OR6SvI?(u>*Oep_;YvCH# zdB$_bJ`jX)=NwnqKwUahEroFt6OA)v(Jmo-(F|!1%0jz#Wb`Vpf?Ye-%7Y$2qEFRTcTL@mb-JTTJU( zZ3T}Soh=?d8uT$&S*5fUu*WN2GNt54jL!xSxX&4p0E`^E3w5M4|&Nslbv%?`JC%xgweQSg+t zu*Jitf)huar@Uc7`OjGi*Lcn|#ufX# zm2jE69B{%hbIN|fnCd#8@RZS_6*yN}ag$rT z;x$vx*ot$LEgtZYGtOCJv1BdW;Ds)olT3Wc_^flEdz|uy1?9hNe6I1FXN)WM72|W6 zyBu)BF>}h6jm}k`@`MYDe%0u#a);X-amb81NqbY}Q%Op4N4vbLF2mw$`+w-RH|;tZHQEW#%+c zS7V(j`+||Rs+vx;qv(r9W|f&2gMW8kT#1C!Z}>1OeA9=~y6QUDp5n_s3|E$y!l#xO z!(Gp7n&?cqZ~0Et)v1=X@NFN8HIBK%tVUW@<~u$VJB;dBRYg|pTU*-pe9hpymaIb! z{cO&(pO;?pJ+a3lUcMCc{a5mPz9%-g$$d_ByWHS} z7tH;@YP{QJou}O6!Vj&6HRip$!!?e0#!SO%yxZY2k2zrEN7lj$v)kLw>>X&$N|$o zH9p&1aOa4%R?z>M4SFnd#7$;gxnhT@whgk$14Ue$vBKidZIK(i<^==y62GuT)_KT1 z&UwR0>*SuihUgEdL zXPt*U=bZ7b@!jod#rcxEOu9E=gSp=son20O%7Xg~ZyKL9?s11B-8kpn&HUaf+2I+F z8FM$XW}QrPz&6J`V)o6T{|B4&Ysx&~CZn!ivC7mRZIVq6dBBRRGj6f?C!=$Nfjbv$ zF|lrR);Z@MOYYpT$NZm-&ow69Ib(ydzZjp(oN~Z|J7cc1_Lg;Wm2r1YxWed$RkF$n zx0!Qi$S%`=wMw?R;LZ`VZw39o*`&uZN8Dt_l`D3b`nyfC$%rcloT=hm>{$Ufc+J3_ UmJT&n$$LFrD(Rhu_Is`W0l@o@)c^nh diff --git a/tests/regression_tests/surface_source_write/case-01/results_true.dat b/tests/regression_tests/surface_source_write/case-01/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-01/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-01/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-01/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-01/surface_source_true.h5 index 82dca4d032eec7395fe8697247c7dc4fb01f51e1..a43646158be4af47fc9ed18b9c2e2246ca57e35e 100644 GIT binary patch delta 6332 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

8Ps3wt{)|lwChWr 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 PQlfn_{VsfZ4t)1X13I-#{y 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 fIbtUfR=hm1DWH4{y87gfrX|1|kOEHDC< diff --git a/tests/regression_tests/surface_source_write/case-03/results_true.dat b/tests/regression_tests/surface_source_write/case-03/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-03/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-03/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-03/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-03/surface_source_true.h5 index 04a6ac9a387d5bd34e4d46fc533e90171d779238..228f5a7d0a462f38a1cb0b4274dd40d4307b5a12 100644 GIT binary patch delta 14630 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

9~Z3h2uxPwu_`YUdKuQ+}EC2UHt6_FFSG|=04 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 O#%aD%)7KiDeE$zE}+8egD^f2hhrs1 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 delta 16328 zcmcJ0cRZERAHQo|BSNy0>{;0}oaZ6AB8s9YQ7H|Tc9g8rqH#4ejiN$EWkj88gfg

gACz3xS$)7QvAJ4q~sq5iSLU?Z+ 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 diff --git a/tests/regression_tests/surface_source_write/case-05/results_true.dat b/tests/regression_tests/surface_source_write/case-05/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-05/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-05/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-05/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-05/surface_source_true.h5 index 1a2f54d765811bd10a2758e20a11b7ea1f242ae5..c276af40f4302f4e0feff883bc3c472bc4df7ca1 100644 GIT binary patch delta 16344 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 delta 16328 zcmcJ0c|4R+8@92HJtTXwuazZxIL|{eB8sArC`yY;dz6sUMrE{UvlSJxRFpL3t*+>rtqNr8;X0(fSdM;-^>3FG~6 zI9*~mn;7$-%M1*}3^oFeOvJG-4kg(MI6LAYb}^QPZ*jy?b~9Wqv0~}#5z5#940mx5 za4(2a9E%T=I0&rF$M;2fW)Y1z1gQut^ayu33HZ9}uibcf*AM~6D(WQs@+9h*jc&|N zH|C%lb1sjmMuqYa@FLyMtm>bs5F^-D(G2yV2(xW?gptaP%ffOV0%LO_QFMhUZIbQ^ z0{)1k{k88+_QW+S7N3ly2vrNVPAh)zS$>j@cfnEHc^6GTK^ayPT?H10b-V;T7juw# zgsb*44#G#k=Z6I!y07eu_ba&b;FWk^+r>d%!#FJ7~M#sYNXRg|$X5w}Ve zXFyb6Mf+(%x;a9Wu@JF*l^U*{h!b4=8A(9`zDnnGp!;`q;$D7QFc&5+{us@tBa}(m z@NvVl47~+?sTzqcPoj>+=*HqiR}nM({)q9sicPQ|bO`l!TzpXwq) z`1g70RLTE7RZWzDFLvG&{PQ1FX`=r{VPcA?DqhNYr+3>wN`#6L@W`6oze_1H3c0Aj zvh=`IsoZ~+%KulX!he-2(o1O`J+YdAe*dI8Vq^+J7+X-MwL z)n@pB&tIRkQKXb0(^Nnt2>7(v4?5NV3SUu#k1P~R)BhFnt|8zxx;zW(DMBoz&QpZ- z6&y#dP=pwV$rPbGbKukR{${{Bfgd}``2pfe0^%-M#`w+#T|d$w9``}9%o%Ir&7iEKbgXC+H`!VrDPmv$KUV%D8fQoqzs~WS?)*RTs=I-&Tixz z*8zK7ZW*_`bO23;(YUDbawKER^=}Un9T$Fvdx3%`i@4lGJq3Wzx~;Qb%Tr^)aH@@) zh@-xgj8ag=cbk;F$mle{ToS5Cz+d1PtlG-A3zHE&6bZN~Vv6G8N>fgmvqlE}%obyZ zA#Psw64fp_P3=eEifhf{UQF3g2HF2KdZHgBKF%C4+};ca zZ?ib(�lp<>eX^b&3mYrD{$fj>-rU*C?yw^oiS*X%R9fMk$&7Gu}cswxAnZQh7{L zQKM|1qbiF=@vbHO17WrN2rcO3wFG>k&5V@FRc?%K+mXHIoa?4* zCdkf&hlY>%H6s>Ifgg#5nG6F19XlySl%IB>qVw5_~`3}ptR3|ttk7-8V)ga)XB7c9PV@|cF9rb)mHxVmw~_Wh&BBTWL%o7k#JvnN!GfIq$_K9V(91S89SdYp2~ zB-JNk(wPsnmUYq9Cg6C8{@ROviPWY9Dei)iyu00JdK{+ch@Z0&XanluK5;pnZ2%bWwhTVe24hz+kBjHeAmbf} ztxe9M3-PDMn}sgkKNBuGC_n1~)eL^Xa|lOTOc;`_^oUXR#=Q+l~`ddq$Ao{C-CKJGc38=tFHcq30eE+s%QVFL2x#C z6VkW209-!B*!sQl2S}~3EGkLTMq5o~PB<%5YZ>Y?f?w2*l_;VI@D|!@zyG_>vC-+C z{!+~O$A)7ER+2%XRcXYOpp@bPu;Y&m}1AMLjhKV_B9(R&DeLJ zK~x#|wz_I0@>VbSq9|YZEU6Vv1^B%6y`_$N=t2Rvf2`(M#KrvwJ{#hBCeda7=@iiD z-rx|X&Opk|@EVa%9|HHY$Dcc!R)C!i9KX(my@Pr0y}MKO{vfaN`Cs1tM_&d6+q<(H zoaoEKf0d{KpQWBn@aT^(B;n9A+|C3s9iMl^1e#S8tMdX+UiF%_Xhy0gxHQbA0|L_;TNDT1e^;6hR)OR z7}ZNV$xyeJA)xeGCg5g!_%%Yj4|+|pr2J%wg92;!L`ZnGfxy5$bLv7$Xe8lD#AZtI zva~025&bus;YGh+USIf6DalP2JPD>>riLQS$fHKz)Z8btOG=a4$;*W8ejjqYlMQkR6VR9 zN*S8r?|Om;@qfxsUh1;I5!KQ9i8KTRh#4ECyZ(Z)>EUndwhw|22PSlhDX#$=XV7`$ zQ$N8~-4N%`l_sdmp$|{~O*1|^oga4;pGUhEdy zVAlt3CuWh1MH9dWuT?d>>J`zf_;+4E{?VDAsvSB!SQIY(2a?3Lp9;G<2tJ)Z`BcrI z73jQP(RFvG6r}9psYkkcVfKn&#z-s?Db2F{RJx5?8dE*Gl1{rTr)E`u!zu9P#{D>M z9xUF-f#E=>4I_;}fpjZ#8_pV3D&;wTx;X$cIzJWIzu16kwC@;TrudGMR8(96I$Rz9 z`Wox>85o$RKf9u_eTkn)gEZ>+7GDJ;@5>WH4QpU`47!!^%m7d{tU2s|b_|hRnf!L! zKe&Q)xI6Cb@3y|cK%$A+NXNJO|6Oy20olzQakZwQ4cd@azLXm1fw=hC(!z_y;LX~3 z*H>kh=QDnBJZT#wQaZUtn9*VcjIj7ZZ;h4-hr2jNCnxl1=URKqj- zi(CrgNie0zu`AtK2d%bU*;zs3Cza*G)R6eTAwWaqbjZUx|g z@c39{AK>e+N!fzi3jz~2rG{4HQQmS!34ELpR{Duh4<>%bYPjRX6k{=}KSk;6X5h*{ zKb=p){K%X2gFpOOH;CcUjKO8KLh0PDt+#ypKtRkc(uhhLOm7VzjLBg}%|<+5TIg6{ z%on5DT~>Oheki009&6m@I1*b7Z4*UQocDIauM!G9NAf%24y&LNju%OQ@xew52NiDA zEBTdIdXg5lMu{(=Xm<=>ycO)x3hzw3L)~2`VTSS7u*lE>utN7Vi|O%3;L4(?ANMX5 zAO%{X=HXwEt;NE=dXYimHC`InPtaz;m+c)TO&1*!>Zm|8va2d#XLA@k>c%P_S zf}10Q$cOLlX>X~3?~5YKc;5HIy8-dl2EHkP(U)6&jeO<*#NGOb#g!@WH$-~S4PgV} zOQ9i6%9_i3VDN;^i2TMs*BhZXW9^Iez+-c z&n>~8mBfA2-~M=V<&xf{N5hpSg#+y{?e%@)NLVE#xZl_sg>*wZ(Se4YuPTABI+~V| z_7SW6B#5s~&2SHhqoy=Ut)crJOHV;%l@LY}P0U6*-64>~E;b16x5|mZ=6W~~c{6r% zS`S{ZT8`)qs%8>mUETj@ue@QxA3w6&;k=k=hdLwZM1&;3qd%fa`s-7v^oZ@}XBJpGU$1(O1Pl|yEWb0z7CO`uZnkiA-+ z8G6)$l^r#u9`LC(t<0j{OhhRHz;zK_2{b>+(%G{a7kq}Pb7CpJ$lExwpwHTI5Pxr^ zYr8}ahc3YoZy*}b2KHhgD3 zau)Ys`1_yepGul-gPIBI2H6?$Fx&l}{>Zytus(FLTL#69NTAWYFhyeR9>vcnSOPx6`BNVk=f9#&R%yKr;zq8wR(kCrbZx*IE6o!jBW7&eR zuCehh5d8|9?Rtiv33b3XmH1sUqCKF2v-oulx(R)Dx>R|CjvA(~3Z1@x-BtLUO2#nz zCj}38DmXJDB*D4MGr5_t?Zsop_e$NM_H4K6m)cJ7URRcrr0 z;jW{@z0S~HsZ~1)r6himdcioxRu1hiAJ5uH0MDl{c%^;2;EmGm8oy6nAUyi@k&61$ z$Y;C3%EIjzFh8tc#ARLlOc`R)mEmF_ZP!ix=uG~xgiEp-KC?mQb}5wUQH%Du{1x(z zPM7pv7=l&fvPyQGN~kzq+VdvM28^w$RJQW-pqpgae}Y~4B7u3zIAo!O9>_^xk3b{vS4)*vg_t-O#rj|GY)ZfCXW=XR}L~6c68X zbJZN$I7nGxthgHSb)aHbcKsk{K1i5L6`gleM{64l#xg%Gze!goPFtGcCW+`)+KQq< z=gYqHO<#=oXFz?p{7!EJY{w({x~_LF&+Y{$H7^0L^fYLCOCa02v<D^&QzdIc%GBIY?QB93L19vgDxud+D9^fb`8XT}nEX&$N^m{Blq z=?6LG!f!n4YQX8ggHY;mHN0A-nEgC)7AY2(5oF&@ebYcKskEs!adu4`IVNO4!?~=f zwuoM6ytP(#o)Q5Af4&nN&!&MPm(8ac4*vv=grk4ftY3jzY(6Y=HyFWe(ph*tsEfQX zcTa0Q*YcO~^LA7I(N&jn5S%mV}Iqwtk{6O?H7 z5IyGD0q*zPg~t!JgBK?)DypPO$Why;(%p0B*pjl54wq@)j&DyZX0fH}Gvm!eldjB& zXuRbb$9>((hm;S$rSgO7 zOv6Rxmevp2kc|}R7~lGlGzC13`5#@oT@H7r#pms+9)fv(TMvC zyD%eR3wq^T67j8|0=7>X(HWgox~t}8`!HtoQ&oFspR#UPfwkSH#r?xB61xg6^dy}`-hq2 zF0cKq6Hu9PU=?%l%#uGyPSLNvE3#z4!s9Zh{dzj#HMj9&k^blSJ=Qg3JQ^EF_ z3sTGbD*XjVd9aLx)thEG6l3N6+<3V<=YDU5dfy&^iD&gJ+x})jX5Gx=+T4v`S5+<3 z`e-wB3VEjaM|cya@6rXwk{`rV%u;)=;gRWIfjjIB+ZNr=hM1RY_N}w11UtF*U%;8P zgLA~zIn%~&!1%55b-0W&Dtz_1=$mII815!IKP2ptsDvJj2u;jJvWR9@ExXJ_>gh1= z7>j=baL+^r1j;(#HvO~dyDWR4&2BBD3Hy!cmOZvU%9^Iw!PAtwzMX#kTvwsF0$wS6 zwEc}L9w8?(rSU&%0yi8(R*g5O1BX+LW>z`_AT03bPXRtt)O583W15c%wxn#P)2{fG zi|+i#UrW}K%qpu3xl{8%f|rB3^89C5#NOJZk~0i1O}@lIj`O3+5Z1ug|S%1&7Vcaa{)_(IC0&W^2oc5-Vs2(Jgea67r2dRQE8DXks>` z?d}zMju+j)B9r*35y z)Qy#>*XnUrm<8e2Eiy>B!GK(r4lVv0O$PISVwLjETES$c!kFs%PQVZvESZ=+2d*g; z#;F#hU<;E4opxKIqr>cLm@(~kORF=HAQR&3|2!|$p$m|DgCA$Fpy1Zpz8tvO44#UH zec^SU0U}+I-go-bv4x2q*Ed}X*SdDOAZNW-aVoGBkDRmRJ# zl+eRHasj?i zQ~eO|yWF0>&W;waDw;`r)x&VN)8QtpV&aa7XGLgYHbhUyrpYMc7dU4fI<(!O4^%h) zp5zSw3D~>lL(l2fgU%bQz7vsZXwp)xoMYT6vRETIiV+zLKrvwHQ}z>9j+h@;TdI^unzE ze4WWu)VCe5X7cx0x(&k34{+jKy>(!Iz3^$vmK1PW(^OkBnyzSU_jXjvvJLqs@ zuWa>h*fEOXs(A++i!cp?bH7Y>g(!Eysc#R4Li}1_>8Ur9C!5J&04=yVbnP&b^%Z3F zRh_~(wS#JPNGAWaIImIg*oNmu$GJJcuqxUzp_vRVuj$1zGxS68=7LQ-$}(X=jc#9I ztrPP7q4kz87w=+L(`)xzK6PWy%yK4i%7;1mvW!CHl9gw3xd*fgE<9K*GYncvVlC7t zSGVe+zZzY3v!l{)imE1$BA9kNi76`ubxCEet4}rvPl4RDyZ71aM_}14hTxK0{ct>K z;48oLSMYn2>$;BlCV2dg{s+O|lIVHsJQiko>Lovw;&yb-%dS3r#F%#qXhq9*DQv_l z9MWcoKYKqh<-gyPs%nIcZ3Sr-Srx@%GIyVD+;uA=Yl7a&*4^ zTsj$q9erQ83s;8iZS?w{$-)7){~@Ku0Axn z#z3+*@Ai}8u7QEFRuxCnx`FZ@-qK@~8zwhD3+{?DcY(HF+Qs*)SpPS$!iuK-Z^E#2 zB0YDDy)V#2BB3oA2KyK{x|R^ zLtS^h(O;OxqeIDdXX2Si$x_MQu~h?5bBsLs!M+X*^1iLDDE<#On`1keSJ6qG}!m z2AqUnI8AX@V(EJL^w5_<-E{2r z6v=ykpF^KzE2zTFTv+=d0%XLTcWCdT)GE54ev?X*kVr&}_om@K>{Y^UqPn9Q-sZ?R zgDn|+n3U4gLAlX<66-zNFZc_7Rn(Ng4Ka|i9UEAaZHM7kHS`c8V*yZf2^7(k$Oe|P z4RvngD^a_@8_B$JdJF3#b#HMb;+)LzDq@3IPH<5VT#KhcCj#z1F~w=I-$Hi}rBO}y zec>PVe;Q9BDZ;px0|wf^KI#%1>p0*&+Nqk>0O;H`{LNq$=a=#?UT zp4p;?mZbd7_~{^ry%X5KfI=kgRm1O0JL2%ncLP?GyDbG}@$-4k&evj>SP+TXarcVq z2}r7?5qZtXuC0T>wK zt8VO_YGguaKSQ}uypj?es9Xb?jr}I)O^ZOx<8A4xCkDWtfIIsRrPssNJdMK8hzEUa zIU6wTv3$;7;^vat!_zhER~^M_ACkvp(d2W|G)%ee{gIQq6OJCWU_8&<0~uaqq{Xr) zgTC|J+l+Ns(a?#yJHv39qf3W}CEPxV5^0HU%DzhdLpiETB}{}LV?ZQM`l3N&Z-7SC zh@aocFl5`4u03WF3BIoj;T5*kK|3-e?i?Oa!4473lolyrZB?7CH8r!q+d^)`C_^Xk zZkG9Q@J9o9V3WmtRHzq(r87%O**C&Z`5`xQDs)k$&k8F%?ykpz#ImH-;^*r7uY&)& zRD#(?hK3Q<>Ln$SZbJODIqP@$K=$m(_rfIbZu&)IV$l!)3H3KcFLR>892awvt#lWH zL?t;Zm0T6o`L&;$7)WE%V^B|!NJnb9c&e><}lQavyyj%C7$C?a} z@d;E^m2?2fYM*>&_BQZR$M9AD-WN!nzEWOy`!>wqOI^zS>Jr*t|M`KAkAC7{!*fATZ5E_bsm zb>A%MYe=f{@YsdDuR$EIR=aOAXCnFe9n6st$%FNbK0bv$b>L}*fYFt8gOIB~Uir{9 zD>T@8PHTv~jLS*Ky9w>G+|+{i@VFGt%9rwfh4wWY>5PBFnV6wguwS3G2+eGSpSK=k zci-Fvi_mtlE-z{HEoi$OP0@F$3ge=~4SdIPg>enmbA>S4xj59b4S~dtyJy4^?jhcUymJZ5R z#nhZ-u_+#fA{@8 zH^TT5=@1Mv@a>{UamUTAjUMg=N6v$gRHMJ(9_V1^(QSei^GcmZhajjD;*dI_HUNcI zKHcxFYJu$Zy;9Toiyp;iBr;v_LJu%CYyRCjI}6-Al5T$v{SE>i*2Jzz%K`bnJf2=p z8G`D!oNFGtXd?D|xE|<6aH?m3G_R`w<9ia$Y=$ zl@dVtzr;3g{AZ2frvYGpM~@HS)@UrRF>dh}p6p!1gpkud91e8-28%|UM4OCS!D*M6 z_dlfjzF~?n4`&7PU;;#;9;s<#Wxp2rqoe=mgwH?kG zIJ!DAcf!!N_hmNZ1~6hOd};d?BXq|}@7gv0q<{c5kr?EE2afTN!WTbo@63P1h>-0= zELV({0=qjsuZyz>pzz$tskYi$;P`4{Yx6aEbWf|&Nj(}0m3H*~K%vpS!Iz#elWzB4 zCYId64s-uc+<8a7T?@Mlrx>jCj624_}J5g94W`k2gU|3us@<45LIp zShe$rgpPg@>`do+FCou^sy$%n9Q-FFs}_T?wCwY4lonV2F$D&U8BWW{V3+fxNy+j| zy)H6{&_5XTkhctm$POP7SltKDx?H)Ew9^FrblZ_fj)J?iJk$3tz04bn%=2R;4NN3U z7kpl>;nej7CnpNXFeUAy&D-cw;9?ithu7-^ezDeRn;I2RYw_k5vw!>`gpr5#kH+WDiUe-olWMA|Pr$7nvt zyE()en=%M5=}J8^K3)yqkbQhFne0WBJIr5C3yxtWi5Q)YCB@tKJUvtePwoABpoo_d zp?%GUyxF3E^W(V`pnKRlU;S_;_@rt{in=!hR@y6E@GezBPuNNRUD$$_xJlo5l(nj}>rkyxHl2CvkVjIVU~0c49W2;}b`gatF&=fA`tsLPqZj;m-K zqNep~YDRK*CUkZ({{V-lvu+3mj=^TRyZUdA4?*9*zqM;Ks^CHIsaY<~FrZ?6P|-ep z7}3R9@k;#TI|(X^SHAcWhHZm@Pn>bJT}uNzn|NbH@OC-4e9m~VZqgsVP1^ZbvUdpf zS30tsu=hjW+pala(Y+i28p@8ksit2Q^}rAn+0XQViS%v2DR?HT9X6LFzaAX!fE`z4 z&Z}8A!q(KPn9yecv2^!Oy0&5riz5x?_POA8yxJ&?=-|EAiN}-T97RSyQ~Kp@N#|>l zm485!zpA%Xw3@(4AsNR5k>f!1pp@6za4HIQjgg>>WBMkWEL*!W@QL%$#2w1j%wil# z#ToZbH>K8qLmlBCybh3|tojcgGge9inf)fe`3vE|Nk|U8@OyqC2dM8|=yBT&39}ER zO2J4=(#v^!Z22c$@)Eord2I+jBwGfkh(&=rE2djI1**UXrHz4mBp-rfFRm18u;TzR zl8yF4haOnRQBp{czYI&RO%XG{ho%@wsak*Vxy+T&pWS>;b*c*@&)J_pqWmWx;hooh zc8^7Y{R6%$`F~J4k1218s0^X`lkl=(!|qe9;G&YudC80K;h5Dvma&R{xOIPAMRIZ- zIBF*srju6%og3@eYT6CZ=chLBc^5`)tD^dI4V^#t@!3lU_58)u3zOcHdFpU0Q0u;R z@jfmE7MkT*60=>d>!A0V1o+W^fJ@cD`s;XSkPcUkxfCZ|@|xHtIQ9-c~&;O?g+ZPN=6wa*Rp?KDEoB}x^3c<+{5q(RW zYFMA(x!x&~166`$zb zpjyU4@?geooSVpm!8<-M<;eFyweps{=bt*DkJOYK>WZMLs!8n*L@n(6El(@4uUz|B zBR32B*PI*+YQmBJtW7LR81II?_6=mc7i4f8MY1PyNlfGJ<9SG~!u0N?I3`VG}6qH=Ne!#3LGHPne1<%8l+e2|ptMgGi-`&`$3j>;(B$Ez z0VYy4@5Z9YSHpnuiL(9Hqygx4_a*nAmVEfj*r)8XOFh^dTvheB-2@dmy4}ejZu!4D zuBFmhGA`imYx#K~z+@YCZKfSQd9`{ceorHaxj%JvUE%=XEBV9WbNL~Zy0jrBY?NUl5&>T86t>8LBeIlS0$1xmyRWIDYvL=$tC-} zow2lVMWGZ*tENQ@q0;g_bIxoXCuC0wzBL5HY8jZrkq0l*5$b>!)|L3?ePSyDn0^S z$I~g*NP@s7aD}T^!{yNQ=#*N-O^-(ttq052Y^H9N7(lLQYZ8*G^k9lTVyMr9F!W() zom+lCOPY@4Y4cK^qYqQ|BRzbKs)1x}tNW|*>m z!0Y4qcr!XAe|X=u$0B%rL>%7Wr~C$D@wA`fX=3q)KgAo0#T(&x_GCKrxHRBkHKCtK zkLnZ{8X9((osSs>lfo9vXi)02tw9u7hZ#i@NxTkEg(15`{=KDKByXrs5UauDr?~qrSi?|7i(PcsauEqRm=QKeI$hR|_Yto* zZD6Rd>YGIc(VMsg3tYls8#;tuO?b9gR6-pFulUDHZ=s0dnK(SqmJXdRylHw;6n@nf zhF*5M*X_cLg1K314wm#=rC$p$qo5M;m~na*L%N9|Cd6^(z_gUcPx9uDpX?;?UpL@h zWQiLId}ro57lv{bZ~kUQyopC(g-a@%ONajZ`t-sM?1>1JJFr&ArUK*9!=<{Oy_a~X{p-6vXF#o5{j8=(p_rZl%|yme=Ak$A$G$PDI> zX`DY=rw6z2^Lb6cznq(1+!ga`2o3sl*qUwL0_c9w&i2C((WQBn0X-`^(IZ19K=Z>( zRA-!8dRcQWnDKW|c$h0-7U;M#jw?^#27vS0^9W^l*O@^+gm)qk?OP-BxR>n~-_VWv8t@X~Iy5KP(jCNTjJrUQ%tkLPmkt`%=5erH?_Ske)9YxUZ zFg`w17ttvW2y+pk0TzpN8jU295x5B3DU&FjM+0%^&SEJSia{^(nBoLlZ#CCrc>gP8Qz3UPq9F+(UkZ= z^Wu+O-c?iS+L`6q!(fr!;^PM*8vyJRF8{Ez6uo_>vto5t2XIbny`Erv8|-V4TUgcf z7IY3Se9?agX3n3vcu94Fs-OqGxxTEBPuB)g$9@2kb1z&+D_($KvDmFp@yu(~5-t?o zJ}?wh^!uMOc?!a5(AO8H*dm#}M65nYj}J=}gs0yZS?bFYLHUwVMBV$AVrygJwv@}o zbm5E|=m$e@E^=HEClz52miWPxuZWsIuLtS=Fm$41ap6}-Y|`RyCDQz1iXu|)PYClP zyTpb0lZ5$;MJ*$tmXT3}eCi6Aau0D^!4nm|0)`&RsukAG6j=(YFwAtsFn|!Xf=q;q z3Lv=)5Q_>Fq6qhOfiTn-oqB)lS`}e+;2;}!-!@K|nX8!bhdOEn!;};xD40+d zO!i6m;9#IQWJU-93L%4V`JrTCv``qbT$6Ys>*Q2n1(QQz%5kJTl$We-3^V`LWRyC0SfQZph$0>mo8(fTIgRL> zzYH_3f>!WwxxRiq%Y#`RkP*97+o1D7XK7;);gV=8Mp0b!;xe#N^iD|GgTNqD0u zanmc{MXFZ=Xv+@EKSaOu2>gl7H~Mr=0@O@X0XRoJ)$(>KFCWgaa&<%%1n>ak1P@SIFZL2rY|I} zbNB9kkdPXq7dqklFIh@c_d4rg`*^HjaCP$kPwEtKb(Y?nImgllLH_+3_I!sy^yq;{ zSsRsVfy3g@_LW8*V9)Q*oG0$eM{5_IJs!Ein0c|caf+FUIt7xtvDU_nQ%+srvu(1M zf7^HTukWg-UQQT9cOBC@-|BD&r8Q6PTCn#cdhM-hgx%}csEtxyiA2Lp=348Ani|B{ zOB}b3iX`6hgTC$QLv8%NV6SWp(U?nw=$ulac+*%?w41qh>?OA;wRd zMQW+U&6dh~sY~hm+IxZ3W>0uc0Mxh2^&IQ~<_;?dNfIsw8#)WNGd^dHx$ZA?$R8<)JTNP~UQs z5~msjTA3N$uxUW!vJSK5o6FE4RSoJ>4hO_rjGQ^9#$=w5yY@w&P>1uX@pz?2@l)B) zyQRqH^o|*&Q$hlr7^hxS^bO>k z@UBRY_ySaia-9Mm-9(F(eZUfzCKRp=tm&J68FjSZ20gyWL8*x`%`_)Prr-At&6n6$ zKmTKq%v<&{eV4oDP4s0E=gxD}&%6$lVE>9Y<>p}j3l@HQiszTi>$Kng7}_v|?ogZT zPdi_N65&wU*Ikc2c;wWCre?0msXNqy8g5>Y8Nc`$nwRgts(Ne;WAbrLKgboE_jre6 zW00VYEGX`N(}!{*J9w{+MILWt#T|Obd^`UCIB6M6${}yJ0UgI2Jsa&;?cFZnuRyX+nMxM%gpnSGXwkq>vS)FuBgd-&q?+-ZvJNV6g( zJ>2pGy4`H^gCfacw9KkFdY$wm;MC7A<=QuwmsZRcrGa_r7z_XSM;)PTWi4G@v?O0Z&g9PGs(n>^R*= zaO2IOK}vkxo|XMqACCZwD@Kh^qDp~_;&k^&&LG%-_9E*^);ln@$>Tq675^u_;BxC>KVX$65u-HYTgFk&Ts=O`@R~{%s%QJS@ zOFgIom3fhSJ+#_E(fhLN?S?u`Yv~AoS!_`7&u}!6ax53duQvoEgg0V4js4A`>X=pS z!?tck$J~1vd@o9pf%I*rK^-RLE>$A&jw9(xexcKyzwi>uXm7N5KR5yu3(>``uj@hN z1+AwN^>;!(oRmf6feuj%F)BJpaGc*oB*tg@K;mOq#n zT}kXY&bBom&1TP(B2EK(W_Z)B`M2MKv{s&B#KMB2fzvBPvSVen>$wYkk1ol4q@1)dlEvh1Q!21el2ZJ@UPYq~P1K>Yx z);_07bhU0xX>{!oM$F98a~g|T!t*|x9-El@pt?wmA@=~LXbR34k6_@fE`N6E^FbJu+AW?6P@ zg<@u_krex^b3>vQsIz&kT1T9-#G6JGMqRG;-VX4&Dz}GZ->86H< z=nIDfvoC6~n7cH;$0Uh#kskN(&g$az!CN=$DU4~xt)E*$ntsXRnroWz55~ej7}P`R zx3Qo;$6JwW_D|==i_akX{6KlvCz6VDwRe04Z%x$}-rfCKFtXU7z@hNSPHQ?O-h z2k}*o*>j=0xk0v)xb5;#MCYk=UPzJ6X_8U9J7o7nur1f+3#azQJPU zD%ucw)7$Lf{O%F-$iIITNVzwlO|IVe_ZO6*HS6v_(55HN_6;3+| zGEA`SF_lTOE|y@gZnqAJ+YhnRIUZa6x;cQM6!L6Q{&Un(=RXtW$OhEBw_rrUqlhs% z^pKVA8+XBm&yW;(klvwiMli&l(EVzjf4>Bqcuf5zZ%W6A-^(K&+>HZXX)E>oa9ekXxr>4sqhmmsGVNzhpBSS z=uX8C@6tkW+xpk;4 z^X!syoN9Dm)_W*Ru^p{j<+5XrTO}wMx98xB42W5k|6s-0$xDCAJ5ZYu?QPzJ>R88m z=1{()Y4oY^^#`9pnL-_BeP%YeW^g*-tZ5T)ExQtxT+RV)YrAtC3cfLXbpGIMKv(>f zclDK<(z$Wn=)I@a#wKb#yw1f=Fn+ z+@VB^qS8i%M0N>@0@(?56@;pRhNy4`a+eAM-SL)Jho8?t*GZ|8oG&=| zq4b=;`iyyKnkonMR7J$XbB5~AnkuvIe06cLV+}gq&p6Q{_?+U_;L9;G>ygq z_u}Af%HFUARX6!y7Y@|gemLNx^PACljGblVF)$il(l`XezLe$?3F7#gO9Pz}**TAZdT@SoC>q* zQA>R?7~}X9vO~HC>il8gLJ0K}y3&Bt$Grv!^#xjKKnkew1&GLLi12}@ICmfkjwZo@ z4e8W7Xrv*jqbbDE5}~6d#L*tfA>GoA5omhc<@8gtyV+?=G&r6h<`~nV(6rurmH3-= z2HZE6#?0UN6A1n;6FMZTmvH@|0Dl51imx-OzK%$~?x=iSk$k;T`FbMx`UIb4Mu#2; zEk5{`^iPII(Hx(^hn=S9;vlamY{fynp!wVC1(~%tC=f{Ub7V3C!8-mudjt* z%_t-P^reU8Eu@A4iPBgn1Kt;He=W{(dX@F~`mgucJC!wOrl_@G;vLhjOf9Yg@!LHL z@@Jbd>}8x1)SXfJ4daL`H$#tDF`<*Wn$%nH=}tUJLl0#(GBjS2K6I7Gt^b|hC42lT50^EamBNG1`}BqszqHU89T z`MKu&9Znby78PaId{biZH(?bx7&oM?<-b{r-xJ$e2t@hcfPb#O2|t|aIQZ7o+9t-{ zjz99W*$8C+rCGJw8)h>J>kKpm{@te2NSi+Fa^W(bEj4q(15bXiRCGvJv3 zJ#w1#9j0r|ykH$UYgFBR=MI#%y8QxS>*Mw29&f-7Lv{yVR5gOxjHeali>rZ^p2gq2 zwoTaG|I*^tfI6^>o@a69V;}tVn$Ob9;Vz@D@>04;Liq++cLBGxnuHDz+P-)u@SlMY2mx4)RDw2+_IIZOmf+Aj9m@}>zt zZ`2Wl+K+}HWV$+w%mWv89wg17LplbGLRy9&Tari{7m?Y`6p=Pe&aiSHT}CEl%TFK2 zZ2hCIyAKb8-5(t~er0{Y6#n|49VvbXGk`-+p6P1^myh3WbMX3rwI7fSx<5c?%=Jh; zv`$l>Hw*|zP?GaBn`vNYwdfv3{-nWShaT2BFX;NCZf8Y>Ro@#tE~?}(@O05ht^i6q z_R#o$wN!SiM8D^dCCQaewMQ#m$7?GBN1xc%|@y z1~u1+@dr2Aoqckyb0;$;$piV#pZiEHqIWnZqE(NPOtRH zY7+HoJ~xv&&xx^n^KTZ{1K2ILUO)L4R<-(e+?!?X*lDLr$#7ITCSBbgD;3s)K_`za znGstH4%&`0pM?4{6c0#zbbcnyOK3kK-AEO$>_N5XyzSVf`z?ii`=0($*M8i__W3(h zP=yVgRn5~6fi^xkoFREthQGe#`yo_ol)8ZI{Q}g>k10qZMr0v++m9*0S}4pSQ(@sk z1p4-1+rG=CbpBGs!oiyCFP`We1%6hV__Iq+q(7&ACHf=Ki8A++K9`C7O<6zAF+~{x zq_F_uCJAGKLdF6`vK9%k774RR`(cX^>Pht4B95twMfmzYMyce(RKYcNG5e}3b}?xx zNLYw4wM3}7B_dhDd=}X}yaZpqBa@1h*DCNw=K>C@ge;Rj*P_OcjAF2eaoie=P`9B) z!KAaL!fldmAR!2K9eN~$B!vo-2>Z)~jqO^BKrP{WZf2%T=8xc)r3lpmwG8D1%QF;# z!d{vwWIi?LbMiwGsys?v#^LBLLmK1$gljwF?KUSDh`C zZPVdzS{5!xAd^|U;O2f~-ljzYJ+gucEtV;4IU-Al5Y^AknLRe*o@nSmiNm3%MpHz21!Lj4f^0zia!A9;y2> z(7N!j3dD>(rbO8o!x5C=Jl|g05n!771yoUXfi)de775e-s5|F}Wdi0mg+0@VQ=G8w zJf*>${7nPk;^~*S#eJK&eqr;U@oQS|wu8+%v*8w(2OwsHSlzSdFTwT7xn)nTS~EVG z$KQ%8WnU=~b|H>Ut~|#ctoiwkN=f_&>`7v?rDciuA7$&D4I+X}P1xZjb~!v} zldZFCFDIB3)-9*#r87@I1&_wR=t|$;3`$IlN>i`aVg0+eUy0st$@sOW-AobJ<>t3E zM~}*R9{HBNX+`D$SdEoVcTgDvlQ8X%x?#4M$})10h=k$kqH|UQNU=xv(Px2}$Ph7E zv*~j1@X3B))igEWs3nC}oFCa`l-B`{-RV6Qq`xRK8&E_f)={wWR@^ zvvter*)S2lJEC0f-xGSiT{8 zwQA0Bte{r;Y|G+yOgm4#I4I~X_WXcR_L>bT;EmGltF60-*mc#HeFPEqE2i^nMNrBh zcIvjp@m;+G{CE@>FCKJm!UE3KD%qq#46qK7~#3hR344_h5K8^+w9o&Dz4TZ3K6M@=M? z8ZbH9zYo*2Td>G}$!l*V&tod)i_<1V)`PgX#Y2{AlNh};i|%1um%I6wWgl;BPWEP4 z?3`bV*}kUiE>FD;{-lzQoJe!Q?=HAUCtL-O#c)BvNx{k|ht65cgfySUOerPrG>Hgt z&&1q7O%U&PcF>T3lWU@{7oQm94hXB>NcT%i=_e3epg@^5?KMU{I$`?`uSUR-`Jy^D zV+@0_Z%dLrIjKbI&U^esb7PX*q$LQB+YNVQ+y-1<+iLSBz_Px439mu$)W?B9-;K; zy;V9E$xI1SF{;9JBj!(RSArSsuP&Bo3q)R?i2TE&eXIbF&!9lE=-;MR3hPfQMl9_I zY7+YCS3yX3D^1Pjxm_Jb!Zf)3$bg*PRx11_-RyT+ zja_VARr0W@fPRf+Lb2ZUjgh7{SfC`#FRlo5Unzum@3SN2h1g8QL-z%XZ8<~)Ejm)PA@_RFOJs2z0vEvP8 zMb#N%Ft=m!@9%rpI(4H78}*=q>>H6U1rc{W)&ZL=g~r5za&T>-{5!a@8M~v=fq?5Pk(*N7^rgTnI^z~i?WzIBto^q=sUG0@q*Bp58 z0(XbsjS>T?BBZ-#!=ObE)(=YlK6YMCo~ujyqpsB_-!=(+%Hwraq^^$rw4$NCu zJ;UhgXKtZ`dseJhkZoG26g6KXyHD~ot+(Gw%avx&>I3k3X*6Y^^l z`|g!T-T)SN%YIOy<`cI(z}5PUz$?%TEd7`flH~9TYsz5E6Wi1VOdMXVirxGT)>Y2A z;wj))SaKblCHzZeO}6i(opk)+S%Lq!)T068i~CKD%bwrM7|$`Dq!{f;vpUxN+Y8=oYX$ zV=u?+m(re5B*BOtGkMlOd!0wsrO4jj`r|%}m#vBgFUO{=ZTh1wvun*+Hybxz zxy1ih8_k5;wAJ@p%roXK+S=?eDm*Pe{I28B3v6wTXJFU4$0##e4~opW5Se#%I&X*x zrcFcVj{OJ2>afFoHyF!9zGL}L509oNwE+d&jgrpmYCwpjiT(K-*8%)sdeWSf5_sNY z^=KuEGjEa678;FI|7^H&Xc$YL-Y}{D%z4aJCa7F}Y~LSs=|hys*(Kh*s0r)#{j%?V z{^UD$?aA1$1EIY@G3T+gSYHLW`XMlP|J!;j%{JM6Pi7@p{qVAQx%(FoKY4Oux=k@0 zT=8ztBKNRSb=USh-uXSIAG0`Orug<)4=8Qf_{=J52;|Rl^e#{B1Pj!TEl;<>Kyl}< zjVEX1V}I2={MmXx688DIxa9q(s8My-FMo3O;7}hn2Ix&ObLs=jHb^s*&JP1q37=1f zneEuJZs+CHwj3}vV0yQ7;cNVwK2yK)X*e8J?R}{tZO^E>;xZ5IOP2IuoEie>jIUGB z^{NI-?k+sl?oj~_HxA8O{=5!k7#g*oc5B8~JgO@M|2zhh(&xvR{8h%=Qwzs;&MQsk z-?Sc{E~WNfLNm)AJBHdmp$^r8^nY(0v39M*a?8@6%I7v?iMz9_W=3BFV$pJzI!4b& z)opo0$-6PR1>5*u$5Qyk&^56PTJ@}R0c4^{|3hd#7V^NQcsxe4*PwQZAD;O@x ZGW~B#GSJ)n@9qo(Vl%43UYmve{vZ9g!(IRY diff --git a/tests/regression_tests/surface_source_write/case-07/results_true.dat b/tests/regression_tests/surface_source_write/case-07/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-07/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-07/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-07/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-07/surface_source_true.h5 index f84a5c4c5b6d8cb4ad3f720e40580f6309998d57..c276af40f4302f4e0feff883bc3c472bc4df7ca1 100644 GIT binary patch delta 16349 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 diff --git a/tests/regression_tests/surface_source_write/case-08/results_true.dat b/tests/regression_tests/surface_source_write/case-08/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-08/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-08/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-08/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-08/surface_source_true.h5 index 1fd302a7cd429beaee0a203ec8e5f1da09cb09d9..94cd377d40973fcdb8b1a30152b0e12ec12e09a1 100644 GIT binary patch delta 16540 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 P!D9IFE&iy17We-E%q{pF diff --git a/tests/regression_tests/surface_source_write/case-09/results_true.dat b/tests/regression_tests/surface_source_write/case-09/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-09/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-09/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-09/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-09/surface_source_true.h5 index af832f060cbfbfd6f25fd6cd2049a5bfef55e307..ebce87b36aff8050b2b6b9df2bf4292296045da5 100644 GIT binary patch delta 15792 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 Snzi?ammQdYX+<+Z;r>4*t+E>c delta 15900 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 Uq2BhUB_p9~^Oh3&ubP(s0|V?-tpET3 diff --git a/tests/regression_tests/surface_source_write/case-11/results_true.dat b/tests/regression_tests/surface_source_write/case-11/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-11/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-11/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-11/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-11/surface_source_true.h5 index 0edb06c88e9a4ba368a72bb0a16b698553dee244..b5b6036201bede37dac2749563dcd68620584009 100644 GIT binary patch delta 1887 zcmZ9Mc|4SP9LLQebC4W^bu3zGRGY;*qu(=<=7nD6$|jO?T^m-Hb{8q7EsGvfvt5YF zhNeSN{DxdvOU@A;j+!;OCQS{k%zB3LdNt2Kzt`{gyngTJ^Z9nEq zgb~Pkatn{%o%4i10=|ig&Mwm;_M0?^-_cS?#^DOl^CVq@SS&^#keCYVJ(p`C9UIWg zBn`=#0hx(U&_^T5I+AS~nTcyb+sO+T1oOKWs4Zn-w?b75jir2tn?UmxPdF4N{=O4R zp)OpeQ<=D2G>)q4IsY}^MOo5?ams$MD`Ofi>`9zGefS?~I!D3N{XMf=F7^RWgX)x? z2tF8X`Y5*Zdk&wxix{_x^hPfGH@xOOsJeSY$C zd1t~B*SIhJullpg5Z$hQOBOmA4OO^#PVI*dm)x|$0l zT&$LiMJ{1+1)s!LO7$~Q1&E@zQ^>6 zHc3EYiEho_TwfGWBoTSY$i06vhhBO>ENx4~ATVy?L6v)JYK z7O))?9G>hSfOYG85evUINIPw&a9chL5nM0|b~(OFiVcuayGs9qyPrb?49H{c>UN)5 z!VlP;YMkMBK|Q5`;lNGh(B9{ATZG;OoZ8W!f)6S|3Nm)*-)2r>MZg-0D4C%|RW(fm zw^_*haLcs3{28Q_aq&$jcz_*2-I;fV2evg@-K(#<1?scX(?aYbkw+)LkBzkzN@s{H zqpjuNU&e(55&Rq!K2pU}Ko(w;5dUhw!pcN%$h=U?B3$Bu>-xbzSQYT#Y;Ux>i9!ze zkQti8(wWAzVf`eFEzqg|e3bG`YL%m$%F%DzE&z{6_)asQZ1^B3q~USmBseD!UhGY7 z04|v}uGM?#jPMb0iuqdM(tm@BdA7MPiu#X7CnDLo-1fUS-b1^0fw|P6F_6!D8*Q)K z3Ea(aR^F$3K-8{l9b57bfR{xyqLUjLpev{}tSi-IOuJ^RTdg}R0E=ch8ssyqUpwX? zHM0E98LeLM>K~%x3d2UgHRPgkYU99-5@f)&bYyH&Ec~s(MjoA1mIR_FnQ&hsDFtt| z40-LhFNTma0!Zhx{iF5x@Yu>ypM=hwr5JRh_cjg|kAsHvYF1YZ#_V)?T(_GiSjc}Wa<)g_fID}D|>9@?p0zWX(N)nd7g$t{9U2Gjg4tNGyI zrN?2LghL=1-m*IB)Q-?P1YH0C delta 2822 zcmZvec|4SB8^>piWrk$QdXg;(bq-1yr2Cn?UP3BDC0nPom*td5l4Pl*Je4JBDoxrL zSqt4$O%madElXw?g9+Is$=l3$eBR@8o`0^-eLv6r{rs-qbzS#NhF;97D|#YC)ocS_ z0!beyeDrgY2|fgo3|aJtxQghGr2W1*DiYy%JPS=Gsu9lMaA+aXR-)Kxp$bxKf!-!6 z3HCHewjzf#(SxMLf@KWJ7SBX$NWueyzg8pg};9PG#a z^DO#+9oM03Ooa)RGIP$BDfGa$b2ZIYK^#CM+dmu))Im!0>)mz6htXps0aj`rmgbsa zZqYUb-E-b3=6;tzgs+LnLQdFWMS2P>VlBGQ^XP|a1uCySJwL(POS+Gb1SW$fx#wA5 zBBoIw`L9@Y!mzcaswk4w8usk<%_&SZqeEA-hxe`%co)gwtV|jq{+jx!(5+lRk?K*D zzb8(iTnI`q7n;DYg*5s~QrVRAHS}WKem0CB&!Oz~nSg~G-e038^Z^<2Ut-qBT7i$4 zp812EX88hL%8cZu79mi|~wRkpzZto5*NxS78MgbVIk8>bsl;9pG_P*fJ417f?s~cJwN> zfY68<>jjh~F#YXD0rc)d+ohD8e>piHYi|DL9CRwcOkilWpHEyLg=1{q*d4AV-2fwX z9BU5ecLM_t*~+8-9biwmy>!j-D`0JSerT?uI6zraivPwfu_W&`8ycSD4h_&>`Bc^vc$@QkUe9J0JSwM9^YH@*Xx5)%ijq3OeN)Q}rdK-B zWUl|FyK@VAMq1G9q}dXQ&PJ>>mSwMg+o#6{KI?UEc#9H{N*g1*Ye6Sikyv!|TQCWd9n4chDiJV~UaJr+BBl1Hq zz3!3=Gf4ztxm|XU8L9-X@jVYKiu<6-^k85|VV3% zhj3f^ft;Gi64&+?c;ad7pwgwk!I_{9{Y?{RVP=*~ie~Qs{8H;K=I0iUY&w6!;34{w1EKSrS87eF<`h) z%YS9^2;W$KkE;KpPB>hLrR~%Wtx7Q1o^^l54bQ;pciLYmh8i^h6Il)sD;D1Y@iLR` zT?!w;YJH1H56whyH2qw~DiR)`RH7o^CUrqG6^gE-SN66*-71m%)7iDaWZ=N$@-PIC)Fs_+4+G?Bi|8b=xOBTi>4}5spEVIe{L;i zy~bvvw{0S|W1GaB$Hb<;9%qkpA@|}1V>cBZ7%>absV`#z_4L>(b?0h$<*XygV6g%c zLZ)rr`XiEmeetpDXR%oD%x&oNvEl&Xn#ibjB2P9Z^S}!2Hp!g^JWyU1lwD`{4$Rm; z6|o3m!w9eEBTJhYNYbuO)2l&SFsvQMn~for7Ic~h0hz@j$F3{$l9O;q+R>E1Gy0xE zYL%y@+QetrN?rXVyZa05Ka_Z#6IzXosH*yxY+_>XNzJ7yi(boS+2|hS(U3vL`^m<46rIG{_k5rE2XdWqcvlH0KA3gaG1AIuLpCl z>u~_tY&yxrbIuHed>*O)5?cbEH|CvRlH3EXx{%ISX>p)z3X{s%x*L(Sdh#GOsg{rB zx3Pwxd8Dt|w1yQ+FcK*Xrz+7-DDK5N{-~q{dPU-nrd1Vzdm8IbrcwKVld{H=pZZCN zZ29yJce7b-Sjcsne9epzN2b(j0&OO7h;W~X%oH7=n;3Ni^Yl3Q0?&pgs-SM- zqE@K-uFs63q(zY;eM<93O0kqTVZ7OBl<26-P@jUcIL5niUt?P51l;3l5MM~Z7hMU{7A2cO~=#6t8e}-PK}BIf>GPO~uCebzk%=W$$^|{{aQqMX&$> diff --git a/tests/regression_tests/surface_source_write/case-12/results_true.dat b/tests/regression_tests/surface_source_write/case-12/results_true.dat index d793a7e4216..ad927bdf304 100644 --- a/tests/regression_tests/surface_source_write/case-12/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-12/results_true.dat @@ -1,2 +1,2 @@ k-combined: -4.752377E-02 6.773395E-03 +4.929000E-02 8.212396E-03 diff --git a/tests/regression_tests/surface_source_write/case-12/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-12/surface_source_true.h5 index ea81a8250956ba2f3da07bde3332e13963cd26d7..6c6925daba145c5db52a281023dd017f066e0732 100644 GIT binary patch literal 33344 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≪TBOCC)msyd~1gw1W{SrFcLBiq{1Dk)8Ldi{tuBSB@x+ZngnRYoUkFm)iAIKOc;ThTHfKBCG;0s>e$$`tcQ*e^elwnf zv|cV3m^v24E4E2J-X%V8*>gMNscu zLiBr)9uQ%A^l0nxFW~FXq1gQPT7*&W*s7WvIs^`WU1CPV`KRpJLc@tSO?diRKvb!@YUj~v_*`8)Eq&8QRN=BzKx@geIqlg> z!}+J|*+#>eIV2%|gE8a2i`xK$M#wu@UIO9+DdmTQdw}7?&UaTtgJ8yX@>nbacVxl=tJj1P;Fa znA33nsruRdFL5krI36Tk#Xi?K>OO_ZosxRj`wZlDs)pKHuRCGOS7y%F(O*H<>Xo-| z6jXp#IL~cir~&#B`60FcmB5^S+e5<%*f!kYzUlYAD8;FtvO{wO2A?6X%XBXS51uVW zU$;?U$K{sA-gQqvWl;Ey(;xIu*~GYgEWUH!58g||`KRi~@?YXu(QvrK#g1I=q+sm^ zseUZbQ^CVTE*$i?id>lw=Djgq6tbfSr1OTG`L}$5T%Zl)4%(vzq7xvL`{;4?FPs5q@6H@Y|M&R*01|%GadieMj z1G|ADpZbDEaKvUv@v3SUFg-IVQ}7@K7^s*lNa>2B%H&eJ<$cP8_Jbc6X!U&g=R=>q z;k<*z0h!h6^!Tx5AK;-98`EXGYrx70=PMO&dtmobPK9N5$)F?ANq?Y+53MJuexlzd zNZ?>~KD|#ttLIDB3KkvFVnCj`O$?gL4pRFCk9T$ld@j`j#z(rf+s|bJiPs_`B};pN z&_d3v@iY9WFZ;Eha+1XTH*5_*&7sxvVSamhDns6S`ocRwgJ|Vyx$tMA-siNwdFWT0;(TosCD?=a8@3lmtR@oD6;aH;(!Cz$#q_Z8 zz8-;Z*DgP6wxkKj`=1X9^PdzaBI`zH8`ooQrw`Z(gze8hPD*||9w6XOJX^J=un z|K6{ZeH9{Qf&2h3-MA)Pn4f_yiRTK&Ej!>{&vlI#-nRf3rd3uMx$Nlq6!n_SExH7I z@b!b`iFT0?zSgQG8LnSpo=>N|dTR zi@hL7@_bSUdo;UOovkZ|b=w$B8G5^bq}!W<3_V4Z>&KzIy~)IVe|)@Qd8~e-3|Wgc zUkm|{>ZAL3x~Te2#4bYK%zU^DrYCTGTPYk59oBNcl$>Y);@>XKyC##0m@OR%%5gLy z*n^cl?Kk53YDzzP(~GIaxEZs9?8#SIYr!!L&nOzNkpKJ$`tyI$lntXyrB_qluPp&W zZ8;1ZwxMX9SIn-sk<|naRu|J8?0yUu2d8z+J@SkPfm&o-&KI)*Dlg4{%X^Kkv%ppA zd+lY@Cg>rc9+Rcf1!KZ4Md$MDE_h1E^4Ehz zuD-BSY5PPk*!o!_*30@UT(ZD{qoB1LDy(kTwix;Z!lZRu(&w3=TbtRoG_4bz(;iwq zpW4rDA+KFpz$^!GdB1+2YIZO9goaC849kM)HLWKb_V zp-avZ&zBH5SS(N5L#yXAR+Cn^pGE=4G7|U|y_gV;SJ{@Xzj<*AJd+T9q&d3*_&7LQ zUFzrpj(JSpwZ9b5t;-*7?#-Ax-e~oFZ*zanC^}}vq{*zN; z5X7S&C*#vTLwD2qPvUO9@YUPJ2Trk-1Fp(c=T)aRqEV5VgiC52ojv@elS)LXOu&Y+{xf0$cdyDz@s6!zGIAbBAtrg1nwIO~vzZu&m#IT!+0G zp7c_ao%C9PqFKcn;*1Iezv25gT0P&gaTlSg!*s}*FZHoU3X3rRAzqY*u8fscfZpH~ z_ef(aT&e1N^XEh}cz1NO;k~EJP!OthJHSqrz`@tg9C|)-*2PCx?_3=K(#bEocE6rS zUYUKBP4h%2JeuG;-()xzkc0vjkTsiOUc6J5pXOH7^sd$QSMJ1pORO%Y;~LZRVdn(q zOS_@@rJ%>}gI85g1J;hn7oNW%9hO z;&q=_mMB}B1i9IcIFHBI53QbWJJ*fJ`Q}W>(b9O4cy+4o9|;O;pxEE51K;&lZ3^>D zgE#K78s-gkgT(bD_Wf1rsE~>AnO~K}c*EBZalij}yxrWoOKKi{IZ(}BdylL+2v@&3 zWk7oN6+FJux1iLc3pCWUc@$nKfrIfqZ1~VL_{e%<^)GNczTfbH5Cs(TF6SHYYy?ql+2SXJy5MUrC8u`9EEpizCMH~(f}}jy zESpOQ6{qE_QvI$k160nMe%pb!V(a7 zxs0sI+Y1f$4zT&OmVo}m^L_y?VrcoQ`0Jvd=AK{Ap&KO2g&sXms%(M#r4755I?y9d zS}k$adngbhu`TTvo-Hl(+DZtEUj1xt1J z4e&SjfXhy`&uu+SP^C9#Hm}Yi>S6KrteoXwbtWgVFt(uRCssb0RXlrRhs!sRa8Wcq zgsBmDk{PT!nY*E$*5k@+(NVC$Ui-0A*J?B&n(oWv8sa`5ejXxDV-GoIi`*#NFhm}) zT-gx7h|Ii9A`eH6D3^0ILD{a7F-rMscrAFN&ZI>bwBfy?yAepC=iVAE@E;}45Ac4I zpyAL-3555bpHE(zeM_UJcamz?o?m&ZPwc3Kspa<$y%cPN4I2%I&x|(1uT0Hr9`T^) z^;p6Tom7=jHXysjt^|d9K9mr_-04aV?F=*2+EPl14 z4Ad{Eo_C|T7ZhZPzBzUz6Kq>?N12x3hwH34O5_W*Gkj+ zdTLxFmye!Sul%e7xi1=T@YZYqwr>Z>cYV9Tdco*nuG!19w zkVNiyUhXeg)D0)-(j`pqFd_qoatC}g8esOBv)ZkiGe)JLpqKIu|c^^u>0o~hLo~$xa>s@2jx~bu(-@3 zBOy`+Wn&WV-#sOV2EX7vWl8gWCcNL~(hUyYE93BmbckH#0G(cS7kFEk-^cxCN-ug( zWs#y}AyhhXXjk9oR5+QY8|QzP6>T4MKJUUx+^4|XgXspbHWg%N(e~u>01!%a=iu!a z2bdpu&@IbE4%dS*3)RrJqR&7o?z>&kif-t;=0nHMn)RsOz72AWSBU)qKCUr6-%NQ^ z-?L{qUX$~c+8-d%<`2AAdrkm}#FO^A4mHqkM9wkpeJjvKUUO1-nt`&(weCx8>(QgHD9quLEPw`eJd zuC0e3?6u&CnF_jO9=wnxJNGz8tLMY~WTeAUub|C@+=vfmyWUy}I<74{z16Q9UUj_w z?GC8{*kt*QGTFs~6JO*V1WxOq3%LRhu^JQY!Pn0mdOqajDXZAfG6wQ0?}O`1jxr-- z;m2&>xqStpb-xC$SX9D~nRNT}?sbCe?Thb+`VS%|@4L;1QUM{Z@$)w&%we-BQZ)#J zB|1QDgjTAa)34wCLa6gQA*DvJH)-AH*V<)J!_@hwAVVjp>D!bFwWLtF5%ZOgmJoHF z_;!lv2C@Bv#EF0d(mNRujbSd0XubDTj>-2y331jAuy)1Mb85CZaIezn+2TblKwHb^ z<@0_6H2XnEnt&^@zs7TDb%R*_jI;ebw2{3Vj9DKz8LeFfvZRl1@bT}41|=$?>?<4K z%4c6!eo_nuF&p|=o%gIk-(~UY-ghU)HNJi@-5}9@Q{zoT&ygXCUf@@@xHbDTJt8}~ zIA87MC%BS#^#nIvDU@rtqBmqh0s5S>8`%oEP_F^~D{LEx`=fXcrW?dK4R0POnjQTN z1%LW%y*qCdi*K@*pJIQH%hdP2PA?lPeexC>EZ2X*~2Agxj8;Rp7 zzMW#aL2UeCF--}`cwR&;pNGxrnVWDk)RU}TD73N+m^g-VbL{Abd$_msTAZl{i(|Bd+>3M=>{>sVQ~<4kL7jKAPomWh62S$ zpLBub)bo$e(^0^3LDrnWoqeElZTB;|PgD1U-<-CU@yi4(BXvcabk?KX30qWT_7eSu zw})0YNRAC9m$(Ikw4ZI;50$lI?T5T>^yJ$dlUDeyZJ^_WZVFUy67rIDp3)odOHLV@ zP(`0T+&UiUOxzd4$HAEMUQqn5;ib886@1iwZh!Dn z1a;Fd3f6Qde!m`X&w3h;+qX3}lu+vZ7_#kx(-&{I7s1DiY|?f1S3?J%Zt+LLz0f`K zQr)GZ=TLi1s()iJFM9mcyibRZN+C1F^@Hh{#k?+86$CbkiY=43^eTFe^ncaZlYgmAq!B=p&uzo|>#x&>_w48ZswjWY`-Sg1m z)?)+?zJBzG0J^H4af@zc?*Qu!Pj?3(zvDWv(YV8yd=Dh; z8+N&F&;*q`oE%4yE@&UlC{e^kLXVrVXR4#b@dxiWgINyNU(ecsq@Rl%>fV(MQ{ec+ zPIqQ9cayTFX>&Iydm&i7_*FVcc)`ke{Y4#&-ZsE1PZ3AQ7V_S%YZjis_Hr;xxv zjyvakJnV9A2W>M*d=o-i>q`-LYWq{+d?L zCl-)VtL`}lu4#HmB7wi}Z%zz7EwN+vhpC^wKio3d4RZU)4J@MdkgM>nwMl|L8ta!_ z5^$Kv!N&ouo=?anWsTj15kS|Y!h5kTmg=|WZ2o~<<}AQ?BEHPlq7-}^E)^^r>V==^ zRz!U^Mp4^c7a!9fB6S;>W^v&n;d>HR;6n?Vk z1MtaY^eO#Lf$8nrlUF>@Mo*V5yxcW8w>_Ai4{N7IL)Wex^Zh*@>`$5CSW9L?E~UCG zr7t-RtonQMJ35+RvTgiD*P>3S&~eYeV)H8W*vpWQN9>979elq-tLG!tmoSwCGb6Kc zhJ=2|8Z>q4hLT=BMW|m5h#5&SzgX1`9%_toT=Xvh3h1KL75rA{Spj#FW)*Rq!?zz= zJs(!SyYs<{3tV;ZN~)i)&c+t#!`(x7@M0g(-k3}o=8J<#cLcLj+R}hkWoe?RnKT;r zWo3__GjW{5_t&&~zT6FJ%jGN?k-~sX`k)}{`jPzYhGkd8(O`;0!ZNMVt8GUT>@BaGEd&y@P@5I8Zykd0h zdkVo0=SAbgT@pfg?V{a1(V~m*`?zM=Z1`+)(_k@Z2y?DRT>iM?rU$kO4rV1)J z9G1D!If}I(B*^!vjHp97%$;B0JO6Dql-X{5kmFh}xX|R7Y!s!B^4r^e7Kg<982EJ- zrsu=rI$rqmO**OX(57|VJfVC(7I$Q^vrh^c7iLd=ZziOARYEriv463VKd=r8Be|ZV zL87Srr08?x3~@b&Z>O|+KFn`7$KNQtemIXDw~RY3owWf*uJ0s^OzBQukEWH^mzKiZ z+T?wD7L~xUu~pK_av5?&a_gfd0S^grfcG1%o)6<#jd}U4!t)6d>*R%7-Z;k*%z3neq z`x?P4mt2vw=HrCt8+dt%n$z{&Eg=^9vdmJ)#+}Dyi+XTNsnf>{8kG0*mLSXB`Kj-U!8_J zKZx;$uOC`HU-i()U1gtPASrg+$g(4!Y7bYH!*O2rD(GJF<;wSitw6;_(wpD41wOx8 zvLb0p=U^$upnQ{l?tXOdjALk?No0tedC_A`hdk=hzWeJMGg2&e3#Zf=;CdFbW75r-}^U1wi=J*jBCws!{YP0)}{;5H)dmT-qOVN9NuqMR02Lj zB43wU&T-3w0SU~KZ*|BWfM8A9<2)7$d?4X%M<$~q zx92RM(;jPl@zgwtY+v>b$VF6xl6z z7b6#U=j%4GyF97zws9NmtMyd7Qmi`lea&YXr{@#(qjgjTLg}#_P`y82uDPW({W>xRBFXyU%rB|;O~}K}7oI9gH-XTkv^zhxm4b)keSQym^?EgJaTqY6v($awf_-dAt8)FLLnL97m zE!U&KBAGId@Z=n*AX%2`EwBb96_-9gtvvTU5u3{q^=TyJgKxefZzD6=wrc0cq1!)z zo9|)+O`)lM>!Cb7Cbw>A@q~;f4Orysr|Cz-8}HN$Yukuw3Yuh$>w-xbwsIy%7{ReI~&84>g2Dz5zT^kmGw2gh8Dywh2P;8=k{LblB_>3F$a>@xx(;6cD9$*Y?m> zdgNYf!czXYX7FLd>GEY@my+_ zJ`*x?Od_AWca_J;=_g2W-zIxrxD>c7F#C2(mjXr1?s^$PivQOu0}70_ou98 zo;%)X^?V=KM7imGr|QjSVPP~7Lk2hL9AI1sPW^@<$GyzNQcnF;tuL2HZ zo#A`tw*bc8zUl*EjqvpjSL?B7jd1wvL%j`ldZ@D!;}*u|xjD3YK8(}g7+=B5#XR-< zD+^oNE?0s_?>ee)Oy+?YaZz1&j&!K16uOWtjRG6KTE5@V^BBpzki&EA%3(sh;qAfn zd^6=^&m?5utwxXFt_gVW`8bPGQa2FzG|8y7y9an)`gn1rWifn_;@icvunM+!`z@$n zC4tgiDMtAw=hoHCrRR&-wzRb2#t8If&rxvh8U?O`i(M)cr*vDkRv{glB`}lxv}l!T zH6ZgJxtSwtif(whB3|Gsv7O@Wq1E$YeiP)f2(?&5fjxe3;$vxLY9JkvvT%T?n14bPcF&xc$Y{C>reBM{ge^^#ha*$yh= zDjZ*zbb-j#l=AT1A#e@fsu5!N^{l^rsuYBxv<)Mk;>?lE@@%aokf-H`QWBV%`>$uLG;>o(F?6(L=L|F z(CX}-2v7DhyUs^u{YN$!zxC#*;#Y8C^p&PgblcQAPNX}#vL4zTm!;2}s0RnX?AFSi zG(wdwUQ*D%P4pX{GndZpQux-qI*$Q(Ij#0u^B4u5OLDkiicmo7iBjR65gAa3m&*k$ zF9!S7PsV?;Fh#fTdum*4LevG|>j%@>VdDZ82WL_h&hrWP!Jomx+#go-L&wV&Msi^k zfKaxT)&?d)j)B5`_i>5e+QD66@tIy4$)!99gSob)rjXG{4$B*qP+k20h zoQno(AIND2`&RHgu3gpvV!|FXJ&VbMlk0BmOkmVTLz>?2@OVp{Ct_pubpJ-Hvs22w z_9(N8`a7CPPJ4si%FG5(aIJsa`kkfl+wPOWi@kb*Qik%7+1>(Je{gSR$UZt$Ayenp z#?6|9c*ApOb#}MZ4}00AG9z~lD%8IyPc_ zTP)#D6+?HGs*kl7%)PFkOJ^5f!Pz4_KMcld4eUwXS_LOfzMT}=-3FN~550UlzX81R ze$B|Rs{tG^==eGEL>{?NYrbU`R7E3k$`NT+_cNFviPDzF94-@UoK-mVp{ zQsxU1igS|%1#`qYyj>%cGWDr^cm{#Y>>8P>jN>-)hvb5d7!jqI6i4j0xUL? zx=nVaL){ej#aul`T+iV-B82kk=x!eAjk>Q_0(qYJiyTk?{XK~tuN@8VY$AhSw}MV7 zUTy@-8FW)Go$CTE4x#+NG&Z9uNJqY3DDgf9e!e66FLA_ZID6H6^gdV)VCx^G_-5sf z_>4~2F>xPtepLn*3qf>~Dg`iYE*?)ZjE0Ww&qKZ+Rzr_e?PWDqAdcJk_Op_PlVQr6 z6cw0Fi6^Qi-_)UCo0oS>WuDE?@2fFvKs2rBqgeKVu?Fj9j zTVEyqFL5MjI7NelS7ndUlV?tokSN{VWy#z>p<7H|#J0oDaNpN;>ky|lV3nBPkXlm- zyDd|acLr`kH$?1c6cC-;9?5@+BSphGv;INILgSxciylYly^Cd7J(0Oh>YhHo*aRe{ z+r{7hdIw-D;zsd{5ruM}a*|MK1BhEvxHP3XvL#uzgY`fG%<5f3|yuX*s znm4s?^w)!gY)=z8d^olidK}wjQQ7qnbg_Q$=YP-xBo=38i8?8v^Npi=$Z^Eq0mQc- zTK(ItOwxwYoj>7oPrVQKQmd&P`ryi(w|hHaRD#X<{L(sLsaM(;R#FRY278Sau33u? zC?*E|R3MJqcn+=pO>W(O$R0fpd3(+wJ)dbF8M9~M6Agv?&)b1V8WMQl_6ukz_Yrk= zXat6hL412;QV@0B)w~-bw-fp|JZBF58)6?MeYq#94=fJaWU^GD9V&Iaf+2q0V55Su zh=^vZqTJf(R|Rj8jSs&SEI4mY;Nbf=O#e3Xx#{Ta-IPIPUoUXIx_y(; zZK|#Yc_K0SYUyMPJaFXo;uZIsU{8~s{JyHMpg<;%?=cilg_1cc}9pGYLKPA%WC&&?Jv;L*o4K&+zUyh$@00R0fkUlXH zhI3yW_IJ}j4~l=tXw@XnL+~70o!ynAWbw~T5s*D;_Dn)M0L3HYT?Ih-WLP!(&13N)Qa}n764fmEu* zIz?30`PRVVCSp6q`%QVK0%)G6erG>)lT#L@9u`zu?MJ@XLDsLRhgC%fv@u|@5Z+x5 zxrS|Cybx>zu4H)r{W1|W=S+RlGdH3=_<0qr&Q8YV_!5o2uTbOr)7wkd|GppmIde$1 zQy;=@J!R!mv9Ex*$(@u-iG6Tg2mB$pLJJk&Qeb;snmDh*+k@%sF!q)+raUrdn5gwb zNeDHIV4UiISc+cmb!dW*f&YmEr^~_1=4~pgzqG@=g?6nU2er`MhOO6ksuAa-`1+yM z*(r{MD66>AQ8}uD$?+1GQ$U$)A6vdoGqmiBZ@H(_2*|d2@mgg~Q@Y5&4e z*Ow$cJ&B+sy|TchAYvTg`yE=HU9PS|zdw2EcfKUrn4>l}Q#o3j-$#z1f#4knAd zGpBT_tF0N&_D=n-YsJz2@r{VSb^6$g7I#9wgXhrd>^6)qU02RE2_}Gu(sSo5>iCn_ zWRQ?)*acz^@p#56zK6{LuQhmBn}FN?92Zc%9_31`H|-Rg+a6k--LoV%_ov(p$f1Bu zHsx1-e@}0@^tBDg+8co2gHx>6lq;w7eJ4ch?sNb}*44iP1+>t~gDXFD)Dz8(Jt+khkpBDx%-;?FXR}W-<{ag=NXVn8`CoBy#=MZo2ONE_mul z(1#t5>!1x+(j^La56rY%kv7CkhH-iZo~D^wP{*Mo8gJJU=kfS;Jvvk1?BB7XqjM`) z-a28^LyfbA`MY)q{2YfX{TMsceLBF+?2$YX^)H~>_N8mMbOSua9Q}TxKn@)xiHu(2 zBF=a4?Nob~gC*Om-}?M)`#sNzQ&;DGXgCP-c63Xx+z=0jIllFH8TEjyfoeWhv<}`| zzq8FZbv^oR`-Ax$SBUpD@tpM-U^dk#c`@|7c&fkt>p?=8l9mYvy_x#mi=eX-(M?~W zKPQXuwkbXN(U)Gmb?<)8Md*a+29U4x~bt!I!gA8Phb7^S}Q~Cua zvP5Kn@m=LoNK#w4`9o7HaMYh<)6;K-<~Fs`t5#llE}%GEuOYz-{7f3b`PpK`{8H3^4M|yW|-5Yx|Hi>Clu0h zq@%NZ4s;7{t{!bQK%MFzo75x{`)kZc)9rKvp?vIsM79b{9#%<>0v;5XC-3gWK+}24 zg&l@FAYVlfqq$52lzX{roAirHAn+x`p@dHgeUzQ0?zoJof5UTV^>2l1-)>)}{yPpd zOvvw-T!;e)#ZT3lD(1q-ZQaX_noEAnnF`_e`IogaiL|Hy?0N)^!H-dhH~no4k)&OEZ+trzTB(%&m6o&dAA z9W8r#M;X0t_un~~{*8EllSH2E=C4+*oliD7$sV1OoC&sexyCQa?SQQ;?B5`L3%qCe zLoI?i9=tbtWaTC#k1o1R{~z|?>xWkVHWLXXa-!{OiDRh)Al;_u;vIt?IRE{%!V$M5dyn zZAvk`x$kRMU|kGJ;B~pWJ~`>FvkfoYOXA{{G#KA-%Qxzi*8NrwY_1Jr|^bj`9W4@t%FK z*=+6bxp84M^YbV3TrW9f=9B*CedjHh350Y?A8$O8EcoaX$YOUBc;4O&zc+1-;WVaz zAGvo8z3+a4!6uU2Jm zHA4-K*9QU^YJi^3Rk@H?-C*MFvx>Z1#gK97=Q6%}b+jP(*MD&E?R49$9T9 z&;@V$bGEBcQF0ito!K3(iJ_uIhc@He<6nh+3uBeRe%!X zl-{>aEx@qMk#cS7?*NH&udx0?X@EKofvbL;6+%<2%4$4)=H5@l^lw=G1SXk9r@b$x zj@#AmH=o_UyaT+?7+LYiclTnE%QzVu+5saa?%ZeF zejkKR#_!l*rG;1Sp_e& zj&8sDy#N|n^tAA~_CS{8dR00dF?7`ko%ph=#NWxn&#!6qZjr`2_7iW0 z7`vg#d>JjhLtWsJ{e@^z`?)<`Vdp&5~C${`DlOB5M*$LMOS)%ReL~F-a_&9KCu)AIX@5aBX{Z(2GEU&0nM5#{w{!W>Kcj%@vAc|-&UHNMg=~*Wo z6skM-eOgNz!q{dzp3GA{pxfZ`h*dsSPeJ}-C(xo$UjkhRtNZxTFp#m3^4i&h0(Yhq z53l|vfF?2RmoV%k-fzVF&5DK-qt||NT!jvi%(Jf89rn9FILSY%>b|WIZt>r}>NIZ$ zc=_z9*Y}&vP>zdJw)c}bddOl#x`ci1{=k}s6W^+O;p9bTWacypiP+&4be)Tl{6b1& z{Do!~g+R@F7I;QI1_GKWh8}aSOhK55ikQfYpQ2|s} zeUOwUPxUi@JxF9l`pul&SDWGasF3X*gK3o#bC9F%ZzHEAaO;5u)xnpvEP*EqCIZYxjN3DGN?MI=B zExG!W#1Ytez`g!Z!_?npS(@^e{bU^UF|PHW_@#}G{_0}*B}-hF;QMRh{BY{;ga1Pu zMjCr~yx%6qQ>gpNhginj;zA%Wn+<({rKc_pn$n5EY%6n?I zlxpWgraZyJRrV~XgJ;*{pWVcLWjqJ#gD}o)y&y`}5=@E374U|5h8cZlKXfhIuPHdM z3&bri75MP%EBx@GJzZ0|9LOkdlk5KyjOe}B*(tGm7a6nMIJNJS$;9R*(+%#2MKf^h=0zvf+IEosi*5sJvosv? zvS+(v@6%2FeVk15b?+X01DA7FJdZ4cI#uyg+lc~5Tg literal 33344 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 S)+dnMzTq}Zl@F~h?f(H)kZg?r diff --git a/tests/regression_tests/surface_source_write/case-13/results_true.dat b/tests/regression_tests/surface_source_write/case-13/results_true.dat index d793a7e4216..ad927bdf304 100644 --- a/tests/regression_tests/surface_source_write/case-13/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-13/results_true.dat @@ -1,2 +1,2 @@ k-combined: -4.752377E-02 6.773395E-03 +4.929000E-02 8.212396E-03 diff --git a/tests/regression_tests/surface_source_write/case-13/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-13/surface_source_true.h5 index 08bd809852152200e5449745616feef691f46778..6c6925daba145c5db52a281023dd017f066e0732 100644 GIT binary patch literal 33344 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≪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 literal 33344 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 Q0?F+gZo^dh(CX6uAE<_K5&!@I diff --git a/tests/regression_tests/surface_source_write/case-14/results_true.dat b/tests/regression_tests/surface_source_write/case-14/results_true.dat index d793a7e4216..ad927bdf304 100644 --- a/tests/regression_tests/surface_source_write/case-14/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-14/results_true.dat @@ -1,2 +1,2 @@ k-combined: -4.752377E-02 6.773395E-03 +4.929000E-02 8.212396E-03 diff --git a/tests/regression_tests/surface_source_write/case-14/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-14/surface_source_true.h5 index 50cddcc70cd27df73f37a288d86a906d7e7694fe..6c6925daba145c5db52a281023dd017f066e0732 100644 GIT binary patch literal 33344 zcmeI52{={X|L;xd6qyP|WXcd_mP~7JnUXRzOBpJSic-;}$q*&cq@t1{LnH~&I%b(? zGGv}PW{J|}%RcRWeqX=)zt7Y6`#kr#_w;nu+WYLYUgz^!pEd6HIc^x}=q*~vw~%i7 zK_byH(Q*8h#h!l6K9H+3XRu@Jb*tG7{cP$nn}#yXWa#M_>84*>I(wdDwtOMRnG+_n z=eL^a>e5YJiItC~voF&voj;Q!VJH57`u~&%40O@ILS^Ty)mS`b&&C<%j8i90pWJuA z(#HDu(Z5b%afx6T{2!*Av++tB*Q|7Mv*j)gZH_@|$38T9lsSIW%30ZSR_e_ul;nj#)b& z*l&68QaZCjc(_bfq=uVwJX={0SKb;Z&g1^b*-(zom((&-VW7IZf z@;BGxPvPG?Zz^i1+YJK)!(T0mG~3P?>8)nNxd99Bzlz|Rjq>S>tw7nKEt`#X=%-4+ zV&8tYz2bTQKmWh?0A>D(6(7C70ioNc>TGi+;LJNn<*1 z;s8e*{F*;`tD{I3B{`TJ(3O|anz_CoOs7~~OwSGes??bm|9almqPt0fW9YBzrmiH1 z>N<6P+{Q#c`K6*kowXVqYP@t|Ti+Mxw(iANF@-MZr+-*wz#c{WlFE{}R|pe0)BX1J zW12%VywLqq9NO?=sBsQAv#h7ub7r}0u}~NT`B%}(+#M>_aLehh9wS>C;IAmKN?5T2 z?(!BZ4bWSIHY{}$Slc_dJu~fb#=hxiE0eeYfwVCyC*wMOR**hDdEZL8^`jY`;6~*W z*G>1TVa~QC-Cpc9u+deF5}2%t%AT-!ZufC+&b;4|yEa9py%jp1dZRC`>V z$69`5e1mslij*QIS^>YlrgrtB{Mbtn2~PjPaYMSvwpZ{Iaq)CPu0)#dIkUZ zr#MUS5Ne);h$w_HuRYTR1DOwRJ2{UL8Ra`~FSKK--2~Ytyz%=4ub$Ybr(0bD0&lOF zx6gGg8dY+g-yl+);5W=i({asBEgPSi;yC(paF%w%wOQ-Y%M^N~NHrm}Wn&*uC~!a0 z`QKyENPo6= zvgl?8^28oJt8;yQU~f>h+J%Zn;4XPVjelz?RCw{BLJf96y7tZ#;axwF4)~}hAb#DP z^}|Ok8=v{}_VDA2r{@1WXF0WOeCE${1n|XE^CU#^_Gh8xjuc=w8F|+(ff0$xnQXqy z-w1X^FRqkT=mLq#G81fdIbd>GTZSc_3i@e{n>Xu0;`oDaKZ4Y<@tHqw&kB6;)cl|4 z2vN(%XZ}1#7+*X!PeNW5*{Yun>4P?s_j7(8phx(W#EZUm_W<@Z*eg;vTmrRzJSlszlOEx@cF*sf1qHmm z`e_BPUI}nF5;rx}PXU8sne^V5*P?49en!BEx%)TK+2V=ohClB&F}xYn{GaEnq?V1( z{CSQzzIbZ>&vPWGW#cn{o+F7bek$*ipn1LFVLQB9@z9@Z>o@AW=g~VlxwZ33fQajd zkCYYZAYyfMn3*93KH)#-E$^g`E*o2{-tj<|FfQQdy;3xsnL`pX7cwSD6$H7 zi)Ti3HL?P(Y-t0k0`fyfyku~*g@G>gP8+DYFy3cbu8JPd4`yTRks)yK?Pt~BbI7dG zz6U=Jj{#=8&TZNkdf->RHCcn69gz3g+jy^i!y=kHA+#H!XIR5pieys)lV4=Cj8>F=rUhDK(Bh1+c$^D#U5q5uIQNgek zxD~+62Bp@;I{-?$(NvhnA~mNytN$g=8XC@Zc|p_Lw@2X2X%b=;vR*(kp%v<%l-C*y zYKJeFe%?`QZUWy_e{s}RltH1(H&hCY0Lq@WJoe_Il>~dRwfuDb$j)+z>qio@NOkvJ zrNLIP>Ih=Pd$tlZ?H3iMFYEwI%0CBMB{jkD^$jn&widvy)j78}snsAYg^~A#b<_zQ ze7s@%yx2L+j+3`++C`%i@Ko+ub=Nops-<#Y%U_EP|KqOGvB) zK*O^Bk!}yX-*vDuI872|SS`xR8%vBgyx$aNIam@jY~ zmc31Cg)Vh93i=LR@b;P^O*M{2P*S16m7|aavohbJ{k&^YQAw%5rMu^jYh^*?n2 zBOeN*YHiIYUY4#U#2daJT{~Mow$`6HB#{~3%lizvkAlOjSA&i&dka~@+hUBu`rs~R zHaVtdG63=d18J%5^`HV5Zo zwc8TjZ3AF`GH20k+b*cGG$3DEl>!GB`Pd(}2muGOQ?`y(l|e44TLD?y0Xl3x=(&B} z-0`M9%c1EH$QSL|;#Tza0N*A#PGiSzcre>!AIDh=jALeh>N5NszLDSmX`5py%$8sF zEN_bQ;D%L_G&(m&143h8$vU?-|WNsA7bVi+aKr5egGO8>5p?}Cp7=TIVOnKu^VK= z@u-^k>^ltP`fCY&jrS%xqEbBNAf5(XXkP`U$$c+@bz?&v*E-lwP+; zpbT_uuei5&xEa`qHy0$dw*lL7P{r=L26er4!Si@J$DDDkGY98Sw;$a(IKcsnZXP+^ z4+>*1≪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 literal 33344 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 TdaX|&xqZWJm?|GyUE2QxR|Ib8 diff --git a/tests/regression_tests/surface_source_write/case-15/results_true.dat b/tests/regression_tests/surface_source_write/case-15/results_true.dat index d793a7e4216..ad927bdf304 100644 --- a/tests/regression_tests/surface_source_write/case-15/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-15/results_true.dat @@ -1,2 +1,2 @@ k-combined: -4.752377E-02 6.773395E-03 +4.929000E-02 8.212396E-03 diff --git a/tests/regression_tests/surface_source_write/case-15/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-15/surface_source_true.h5 index 3e15017a16626a9a66d903daf1721a97dc3c4058..5bdb39b2a703fa7cdb17a153a688cb0ea7664f1c 100644 GIT binary patch delta 17 YcmaDL@IYXL2s_I?%~KhhCD=U}0X^3S1ONa4 delta 17 YcmaDL@IYXL2s=ysjEuC+66_v~06HE8kN^Mx diff --git a/tests/regression_tests/surface_source_write/case-16/results_true.dat b/tests/regression_tests/surface_source_write/case-16/results_true.dat index a97be70caec..cd0619c1fe9 100644 --- a/tests/regression_tests/surface_source_write/case-16/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-16/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.496403E+00 3.891283E-02 +1.403371E+00 1.456192E-02 diff --git a/tests/regression_tests/surface_source_write/case-16/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-16/surface_source_true.h5 index 49f67e8205608e848f0130ed65b472ff98eee046..79ac8e1a65e38b5b4c38de45c29da9f3579a35aa 100644 GIT binary patch literal 33344 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 J^epFt{|~;VRf_-s literal 33344 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 NWw4>&FGk7_{y#Mh($ diff --git a/tests/regression_tests/surface_source_write/case-19/results_true.dat b/tests/regression_tests/surface_source_write/case-19/results_true.dat index a97be70caec..cd0619c1fe9 100644 --- a/tests/regression_tests/surface_source_write/case-19/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-19/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.496403E+00 3.891283E-02 +1.403371E+00 1.456192E-02 diff --git a/tests/regression_tests/surface_source_write/case-19/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-19/surface_source_true.h5 index f4261451dd4832b3ebf2e4f014543c850f8f35de..db8a49dceeb20ebdc3e0c1b8db765cafed5a4052 100644 GIT binary patch delta 17 YcmaDL@IYXL2s_I|%~KhhCD=U}0X^~t2LJ#7 delta 17 YcmaDL@IYXL2s=yKjEuC+66_v~06JX-mjD0& diff --git a/tests/regression_tests/surface_source_write/case-20/results_true.dat b/tests/regression_tests/surface_source_write/case-20/results_true.dat index 7ccce7cc3a6..44293cf0919 100644 --- a/tests/regression_tests/surface_source_write/case-20/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-20/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.149925E+00 2.542255E-01 +1.266853E+00 4.552028E-02 diff --git a/tests/regression_tests/surface_source_write/case-20/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-20/surface_source_true.h5 index fa8a4e628728deb4c4d75b03cd31f0aefe6d132c..01d2abf61cf8a41876d664d1aa505a967e7559cb 100644 GIT binary patch literal 33344 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

`BTVz zMB)c?1qpIG95ua!pEsVu;}p{9 z#_cYhfCb4xjcWC{`%mhpT$(D17i8z$d9tvt z8ho#&DRBQf2v1mhowJjS1A2ZLM4YaK$B*K3!aP^_q71u$(dVFjXKR|VesD>?+PAf% z31+Vb-Lp{`fxm*C`D?4&;Jz=rJ1-C=BPy>w)FW>35X>JfJiGa6O1{sx0+X7B2&*Z&Y!Xj1B^Cvgz~u>-!zsX$VxDOPUCSdE-qe@ zbpH-nsY^$`kKo#)9C9Xh_XNI!jva&i?O!Xw!|870mM0UiM&^)mm&65Gd zqpH*%i4*Pz<8x9vn=ZvX?}EJz!6oTzIL<`|p-1jP-@xMdYFPE*Y(OWje%1W?Bovbu zd}tF$gl3Yu^~oxJgrFW>JUy~(k@1Z#*%gGzd!&naQ z!J)vTqe(zW;iH)MXcPEz-u|rIt8qABlQnD2n+&+Y@b7yLKHAbQwpWHAB#U@ z!o?|w((+m+*Sew2@2LhckqlTo=UH!PFaj4$?VbchBj}OH??P+-!36W?44&Qio6guC zmHY-A{oV8r99)1Kn<+7}m0yi-8a2a%6_&Yz`Q@ZX<#u%&w5_A;z< zs7n9bL+uzF2cgBs&ZNJ}1W}K8 zTs#LG;MChF{*Eqyro9$n&lAf=(67(qaRjxgkN%(~au=#UOP41)ld?O%H zepJX+(hc8xlxs?&hTy^(i97J*1>~`9WU&AH?Q=*R4v71kEkNcntGRD#xcliPgR{dv>#X^Z{Wo?q!m}HRSP$u4 zK!RE2_Btw1hKp0sJ)hUO(>(yVK(dTjm}$y{=-3GRh#8kE#L>+M4)k?G6tF89Fdl5(FvmjjSg?^nDedmR0KxKc8tgDj3 z=5WWwyDzmE0l8-fw(m1zw6o8JgrbY#v96$++ossY$LK%6)5i@Mf$Z zRtrj>9uw+;^YsQ_=8yLwdx7iAzA<@%9P=%}X8QIj#q+DGBXCvp@VTddaDE+fO&k4j zp%}!$y1=NS=Wx<%I(W!_655}?ImmFX1OY33(}CmL=cISa7>`&kg6Jw&rj96Fzw!8! z#~jgOeQ;-@jzV-MGM0p{8lbn$IYOK?5L}r8 zPoC*fSGl}C-tMmtCFan1W9?DjX1Mp+vbfuWPT=k(^sX2+3=Oq9B`=(0MssEaAL@-f zOpvn`H`vOi1fsT&7ktK{O(MId&o$gQI}gV{^sniAf%5ycqW+{BsP<}#)@bh#+-;Gi zwWpyT@kCQRXgW){9^LZ2EzXJVrtY-aDUcjdvuJ68Yll2{a6M(3+YfGxaYzYTm&2KN zONQ0v15kWCb5t|_IZ(eYB^KGpPEZd%hxR#Z#`za-q2STsfk>%2xMep#sw!)-6A@7F zt4Gf1@8#fX&+}&iB9m}r%;`z|t3&ANW7CCUf`sEpWLrWu)7`vfjQek|&zEj@E+1)_ z#^%ql#;OZvgbIMF;=X&r5~DEZtBA8T=z@=8BH83`WB@38&C=C>`y7{_wl&Cb3-JAD z#$D(^j@iIdV#IIdc*G7(K#kSI!WpWGaHWJaSpQfx^evz@+c&_B2poUgU8g~qL%ykF zD+#F2DcyO004}h3)E`bG$84-$pYQBO%{!%$1rJaj&stUa32Pfh1n;cR7pJ>iGd|!G z380S{Gl9sJ*N?x%QNjN5Y7cYb7%&KznMRW&smO9;ufkP!PrLzTTcZ} zVEsDA%rP@lu^Ce6$ZNgoD}!9O#*Vp_jKPX8t9kks=^*2VUH5)p!sC1KIl02M;hcOZ z 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 I=Y?4Z0NP<`Z~y=R diff --git a/tests/regression_tests/surface_source_write/case-21/results_true.dat b/tests/regression_tests/surface_source_write/case-21/results_true.dat index 7ccce7cc3a6..44293cf0919 100644 --- a/tests/regression_tests/surface_source_write/case-21/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-21/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.149925E+00 2.542255E-01 +1.266853E+00 4.552028E-02 diff --git a/tests/regression_tests/surface_source_write/case-21/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-21/surface_source_true.h5 index ed87ce849f788a346f99843aa263565fd326040c..4e5dcb446c26e85f1f763b75e4a33e490c1ba01d 100644 GIT binary patch delta 17 YcmaDL@IYXL2s_Io%~KhhCD=U}0X_Q$2mk;8 delta 17 YcmaDL@IYXL2s=yWjEuC+66_v~06KUDng9R* diff --git a/tests/regression_tests/surface_source_write/case-a01/results_true.dat b/tests/regression_tests/surface_source_write/case-a01/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-a01/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-a01/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-a01/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-a01/surface_source_true.h5 index 4a86235679085a07458904653a5b63f162059dea..da36fc505eb67f3da0ce48511464b699a4fb16e3 100644 GIT binary patch literal 6720 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 delta 3367 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 delta 9466 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 Hqv8I4L9t>9 delta 18778 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 aQMJeStOfD{|Cz_a|9q$Cvjm9y`~LvP#Sf?e diff --git a/tests/regression_tests/surface_source_write/case-d03/results_true.dat b/tests/regression_tests/surface_source_write/case-d03/results_true.dat index 7fb415cb159..26b9e30a3b9 100644 --- a/tests/regression_tests/surface_source_write/case-d03/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-d03/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.263843E-01 3.193920E-02 +9.288719E-01 6.877101E-03 diff --git a/tests/regression_tests/surface_source_write/case-d03/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-d03/surface_source_true.h5 index 8435e8f17f4284ea1916ca71e048265aea650f19..0af7160d4bb91e4efc535bbfa8bb2aa24851db7e 100644 GIT binary patch delta 15119 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 Dx83k^ delta 15115 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%0Aql-Vqu@~HIk$GDEq6hZIj&^OD zR6tdyUnf?+rxx}}G*kAvzHNKl91G%hs8uRBL==nGKJ-vINdn8@WVH6==20;JYem10(15FcnKXt5_inXHg+h||d|LxsRnBu%oGm!GV@TEomzTnqu zv1>wiUNmkS1ou06tgE=X!EYn|*Pglg@Ty|Z*3B96sN-Hfm!Gy)xZlzi$CZ|xl&n7q zP`;wvsPeu=0IBXOO1#m>uk3?sOIsX&8RO?L)xm->XJ&Pri4aA4PdwHawO7Xc$qtt) z1Z&}1L(xx1UyTCcP9#ak;u~l^8=PBthYPLl{h4qf<|>Y*EjJehp1m@>TNLxWx9$`C zL_m_APnk$|%45wnfjqU1!*JcK)p4(9jqvzodL!RgH6YQZ_u8c5X4FrF&$h8H49D)I znX&*6&To4@)PvK(bo&c_6ESm@*`mWQWw7Goo!+tu1@L06XWXZ_aTw`)-Gun@4b;0< zI|FYFAz!>UymQGqf@AS=Gfw}wjgIXJC6zm}5bn(QmJa!_Z}?sA)>%+_JWOO{_A2@^+lkF6!h9|hDUP}{IQIDF2Gs;0Lek(w!gYBci{vQK5Hzxo9 delta 18496 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 delta 17721 zcmZ|0cRZHS|3B`wZhP#XNF*MkW{W*;F!fmX*iRp|&FGm${E@{gGI zkj{yYw&`f(Jfjf(?FVj0(u9bC1VV7+Lnada!bKXI$V?_O@pNopljC`Z$ap6H|71!s zlNpKY>fBpcBIB3@{*xENOeP3M)-bRBZi1OiWa*V(mwnWd@;hr5GU0q=0t<=#A2#tn zBxnecnyi4ZJJOq#Wce?jX*C~Djt;5NUCHw2=>40nv`<&C{{FD*yhv zQY$lF-D;|TZ{{Zh=56ej<>O+u+47Z!;eQm%f=g+!aD zcS# zs3~Ghk=l`sOx#$U_d0ZDh01^WsFaONNQ&fUU+p6eb~52fq#yp@2kc~`#At}!t3{(V zoI4z3Mt@Fv&mFrdJ?+NvuNPA}R#B=s$i&KB2=T4F+1k${bvVhy1B!7oCm93(G5$~W zkC!vuOPjyPJwHGx$;3q_>d=p-Byu07lsvJVd4*yBWO0luC9{c(Oc;)o;$E#6;U*IW zKiekfTgXw+5|=Zl(Krs`ya6SXi-$~X=zhjOJY+^eJG-2z_ZSQIVh!WqEmWtJu@)o~3?mZ+SIc06WTNWi6He}5c9cdb2$2b?k={b9 zWg>*g!~j=CbSP1uf-|>V#wijNUM=G&OeVe=f~R&&{TInnVKSj0l3Qf8jD`rAconKS z@UVMPa2|+|2`Z7Dt7Yzx$i!slEz^t#OejU%NMu4@WGZPDrh2)|z8psp=i~p?;X0yZ z!luX|(bY1KMajhD$;Ly{ZeJ`4X%3 zb}W}^irM!r=lFm1JXw-Vr2lx7PE*{5^22w_nf7`~+uuk#Q!<65$OPF)C#nBTl8&p> z3hin-Ri(D+iX076WWDQ1Sd|EJp>v?FPDTOyk@!yg^UE^88FtXUTeuS#YNnY#+cX4{ z;t$lmjI~2K7qdLS9bAc%l}VC*6^|zJx)dOOMngl=gH}fC$|T8v{}r#@dSEeHMFbID z0?ggrbjaqQy^#Y|T$tC+uAMB>qu}jt@0*QJYeB8*=NCeiwNNQx1pWC$6`jpHEoQsL z>R;nla2Z$e@JZ5Q+rHlg4AV_VDwn>IuwK_au+Pw{_EENU);vloqIn`ldw|*w~NHa8)1<>xwi*RyqnD3wqmKZrGK8hC zH=4mlf1c=pQZ_WlB-X>F|HzuY_+o+UOjHu7uQcRFwmz_AIlv--Na;K>`FV|mM0r&> zo6~iIy=6feor_iA^-_=w=pBTPX_e&(97^b=vU?s+Q&(n#6~1g#{T5VzZ?g1E2h^3n z!W%t8!W_&m>PcP`K`zq_RqXls4SESZ8g<&(11tHS&bb8ifx-GSL>@05G{)SuHrs0d z8edK-+?yqjcX8~e!H&l5mWS7*Fl#rDb6V~sWMo6S(36AB!1)g6jt2P=z;k>4LRon= z9QM^{Hhs{5bi4PrMD07c77sWsK5Eocie}3K`{BUoJ4ufw687^uw}e}_3}PXW=vt`t z1RfZ1*ZTXW6<%`vrmg#J1lZ9sNeh`MaBsG6)X;bXXbXYq*gQ&EDKrVugCkBZ0l}_-p6x zH?}mYYJ#?O3q?7iL-1L3;FS+m-;wy) z_rc+nSJwI*$Hmu`+R%`bUINUBm7X18bGsxmF;9O+BTO3EC+s11;(I@s2R=8I=Xzi{ zo4&YXW*%77HnrH-G=wNSvZQR^d2WrbIF$}@&!22klxN2VGSM`L0YSt~Kh?upp8;d% zi)iA?9f3z5#pp)U)WYNY2%83;)`Nq>yB=ITxfxaI*WQveb#RTZ1QjmVjzTle&ypC! z*3ZW>#aWQNvqCe;&!=J0_DJaaw-d;V`p$f^=z&+W{G%>Tcfcz=F+VlfHlpjY%|~bIV{;vc*m*%V6`xZ0Wd6YXoRKkl?Dw#5NIbfxgA^6+Q@t4j-S>2ez>PxA-y21+ zLr?UZel}TYu>a%=Pe9pv;2NCVL9KK(eA1m)1cG^#;j=e}umV2jL5AQvF z@+p_83yxSkW=q&O0Nqkl&#IR#B43`G%Sle`Tx-WVyuQ`+V9g=54}=A{NdLR?2rCJR zzr$mxzgY!)wmINk!lv&~-{fVq!M7p6C9eCbo3joM{MmXgrE*dMzbYPg20NQEnMmMu=IOB_@CyCJybA`fOHVqdyYB7|Inqq`l^XA=_I?>rCsaM2J*l) zVJnL@9aL9w=~h!8S4pMWZ|n#|>8(?n-V0)ihVj9lXxAaPLbr*hOE&=0li2qgLWiK- z_IOJocN=`$TX1gw^cM7!*0~q$wiLeVRQeXvws1T(6+xO}uwC8ybcnbzkIsgx^hk0~ z+M^8*`oOames{-9UC>k|*leG43#>9-D78=FMb*y*cia{~zQ$K`6&K$D$X-l~NtF=B zDzq}eH|Nb8r*@t+1DYyC$L?svKH3p~cNWx5+weSVJ(xX7a)Z|7hC z-gtNoSBr}8!0*pB9lOT?@=N+rd=?4Wy-md7OpGRSQI*dr3+n|s^4vpGEPa6IY?7R; zbT#;sJ+1x8S`Cdl5^zwqY9)Rx{+TT6sraUfw443h!;5X7jXNc4%!hm!g?k;PwUCZ` z>65;bMH zv$$(5d~sa-fM9;`TW(kh3A^hxb>E9^1fIOo!4h>)13P@vBUj+kILwtz+#F(91h!1i z?3nU?590PPev4WZMF-SI4jO&b`zPs^9O;oK>WYK+J zm@0y46#8r5?V~{)lDGT{aeEJvlrJoHvi8EK4sD$(SC_Yw`a5rSGZ(|Vv-f9TEh(U7 z9|Y7mZCuuHb?{nO)2hZCRB<047XHh{SODS0PTE)9lu?sG_E<%`=RD7c-;ZCvC0R5I z)4fKo)fd-;=@K^A_`O1?ZbrfDZ3!zIp%wLYSMl&5wC}SYHHa5L+UBKk7a@gE2T;?JILpU^_a#;VjJ~{S9k;w@~RYy^wV@ z=#BuU$JohaahnU}u!EOK2jGX6if_@<*<(@&WTAz|dtO7YwBenSo61=5C> zYFN31Tfk+uLHKOywE2(w9ne@On}&m-0bB{1UlerhM67F1k*2nJujv4&^u4_6hB~v8 zBzEX^sxo66J9hZ`8KwmW73`M&oAl@TePDOeI z7;tqu^)I>^{tZSDN!VyY95hfhIH+-Atu};8^+{*Nl+@oOJf2~toCJ_X7mY@8E- zt!2*q*tO*;;p^>^O!IUo$sWtR;8+O6stGd}PHjamzwPk*s=H#(tf+%h;W{XWCyCCo zBckVv$IrYJL>31}Hcdu~Al5=wrj-^0AXcY{gJ9eRI%-*uC^yx?du$Ol{uL@{Z8-ZM zI~vO2Ri6sCYx<0l_eXw&@HlbC@PjBKoI&@wutE?is&3@yvmb$0Em?C*htvm5*#|LKN&wl#c1Zt|$giF1|Q4UTL2;<)&nV%tbm)+2BtY+e^T z8}%d+tT(<*nq3l;=9h>f^^U^;?@Rft!l8f%Rap%2Nr%=v&ux$XHb!|;ypk)jj<4}G zq|#xa)K1w@x)JOTEAe!lAtA~cjEBy=m&62*{NyU&=mSKTV3qpDR=~6_$o$RqE?C+J zKb9D1ptrS;_6={K=xe-+i}S7e{=I<=K~9p#*gZ3CA9C7e{;az6<>TM9!#ik74?(_?HnW#9%NHS+!Q;O zD)(yh?zt|YuoPi!me~hsO+)Mr&vgR&XHsS3K5gJ+Pi?f{HU+d#X3^vwzAA9qvg)Y?ZXpxTXM9|rVYgzRt+Z$NYJ2dlL)6z>1C0Cv*nBB1W2l!Xa<^b~ z$|q0=vtu}^`8={3Mkrn1rTS=G7{#fnJ&m<#AazyQWW`XFnex=48PKdlO zT}O`?a6I-MTM$MJn5sHVvlOw9yFB3&vp#UOBKad*atE;8rUg$0w}WY~VmnpWEvTex zELrvlrC;|@#mkf8m!)=3=n>SR+^FH0)EwU*{T&w@!fY0CXg z<1qm+YT%Q{Ro@66G;{tkFA zc|jZ4cEaQ>T&0A89@yb5efxEu9Lo35uw?UPr!{@|Q|aLIwWo-ILj>FD`*Ddcm>wgG zPk$Ij*J0(2i-BiOb-^FUFV+n@^uUXvXpf;&2h2-5D_g-kiEKTo6#wP)iqpFizt&W^ z*+p3Vj(ib}X4#+Py+niYFp0gis8Gii!zDyd?Cyech?1Gt(ktk)IbT0>CBuekg{ zH5uhU8~U}(pMq;ch5OXC4k}BK@{A0&*pNz+oQAcFbx85yn`WQTb*DqJ@Wq)Q2=COV#EBvF7bV9 z!GI4kobv~X{?OSEB!t%TSN@6aad508_^ZuRDU3ga<((dT9f*HX*s;*o4Tbp+eE71l zA7+|oy`(K*Mj1y#SwH%&kX;c0-@@Qqx|@Rjfo(}bh_BE=ar%oa$j@8C{3rI#gYGdV zWv!WFu+X`0Zai-ke2;!L=GOHMhLjkLX?9N|Mjsmf{)nb{akvwV^F5o^7qwAP7@2SO zwN`6oLU`|pls zjwSA3<9x}Yp3_c`gpjwTL2i7hEQpN0zwMr{{Fn(bBD7z>j>CD7!+fr+>meUD%pg%ixWrtDgc@NxIO6kf)1NK|(8 z&G*tq#|8|QU*20;6<6Y6&ADC0Z_7R#nRSm1+c2t_uYW}nTtg|u>CbrxVI32bmTn%2@W7?`X*=y7z-=Adi$SFkke%wEO$w1g z-)+B8U9x1iHt$fo+XE-Khg3Lbph|+H*yAr!$li7C9qsB<@F6cb=yy^V^b*@rEJ=)`Y zJ(YwcWNtq2&`SV0ws)9~Hl+zLXg(cB`Fnw>s`hMVau1m9>!P_bvxo@HI_}swN*TvE zUwpi^?#O3VC-wtz{Rh!Y%_PL@V#1`Rm?qX#kZ!~>mkwNry?gf6jDyFs7M_`>Qo(3J z(goM$ct}g*e@ClL(HD2)@vv|hcop`jTL_Uo?LB;xRs{Qab@wp+hyZdl_K|D*%?>D& zuV3PLs1tOACGdyH_kv5-H(XB6FrYaui9-&9!E56U_r-BsmGsS_h^Qc9;ro|+@DV3s zezsSAZ!iz?)$S^GnPCLny{O7s!Cwk^v*65)(`}IEaj)}vzYQpVPK=I5&9OCo#c;sY zG`THUCbmurIoN0*<1ju2r+;_)E%nkMjQ&oOEIk9z)JJdk%-3dc!AzYUZT$gjU0AP4 z{(1pI{7CDIqZ-!uQv2;Axj8?c^49{r3yED4e@NKbuQb;t(>0OoyJ7K@zjGlJXK(aR z8iE2o^*5`xcY&1j{JusA7nr+t;_yc*@GF0+b@$HOJP z8w+}itXQe2>qA*Y2>WwIF|hlDIC71zKHlT_5PTf0@X^=11Im6=nm-g<0goi-2cL;R z(7k8MJm=Ubn^fGt#%TvhzqhZgT0V>pS)@)aiC`J$E4mzdMUiB;hZZq^N5KY3+p(vi zuVCHjd1q_s1~|N{ee>T|LDcMa`hof9``7fP#?5`?d}w_kCzfMisN%~hhn+DH=hUC#i8S%bq(lJI9MK z7Eep0#PeeB1dSzZ52<3IjJ%y8ZEZkH;MGJx#`2-LeSb^e@_187-*h;1R2#K?O>g(c zoMPQj`}J<8v|U^~Nl2+izv7?d9;lJ`S%+SdgxxqCZ9Q`KI|vFZ2=_cP0=CXt9~$V5 z02gk;r4P*OPz#wjQF)e?^WjQ7;J!NEZy|!3$C2OtP$0lPu6+6NSKxlhHhV1?~> zwa|+$Fn)mluGT^?EHx%5o-S+!N=l&}y(xO=ZaIb=k6FroM+xt+)%1<7a?=Hd89<*> zH&y;c3cF_Xb3Djd5J_xiQ3$@%2ou2ecYN>rK!k2d+vcs^z}ftIBtxh<(s09s=Y+}a zwSJ?<-8D~q@u``FDZR3MQbOtnVp88XoKxmRicAJ~2Iuv{uML7xbH4rHaA&w?lXL>i zJhan^&PX4vcyzb@W-sMXu1v)j2~N3YxG06~jFx%z!KDfqeTh95JHUbjzp<3LOzZ$h ziwqkrzYKzrYa3$bHhu%5(w)Atp{nS_kOOTtwr`Cuj*IJ?Jmz3m6t)}>+h47}%*uyM zMG@%|~ zzoq!@BMH$F2-eBS8HX4BU2m|c(;~bz#}CC>w}Y!r0-;-W48h8tL}l=@7IsM`7Hq$x zi&iTBY2zbP_P_W&04|67?${dMqf*G$T8u|jn-=-3x?$6vL1|?E>3Vyk$S$az!9py% z(hb)2Cd5snognUBHG|e!di3G7QBpyv_nHnkF0R85nWl?8X-l9%(`0XFiwF| ziMy=t8ebe2=WCI+H~s1-5@wy%xB{*UMo`-}STvzRpzgU>ld zPow*QJEODPiHvNJ@S%XD@7f1WVvAc{^>tByr^jmHIr?ks5Plzmn=pCmtTzKv1u^IF zH`AbT`5tFCYeh?_2=d`EP_X3dgSCtG&3_N{fcTU0W;L7*%kli@`JXfr8WHmPcz87B zK7`tm*YU{mx&BueORo>vMrfx;a@V`rN~dZdrejV&4t5VhgT@z59D6#U(Y>4J^n5Fz z4yj9Lovs2pC}^rRww+?O;+8xvM?~BnhnIT=vFdZ~!#*<{*wouHj;JltNVl#LJu~cq zD7Q(_ZNFZ~65Q~mjjjfNf3L;*!RfzA6;Nr(gwa;@B)X-Px^DZ3TI+@+_92@8OUSm`0?`QkaTw=V`3ANx9*?cD{m zw@gK3uyLbA|B8Ii_`Pd!hU4PnSiSvc1fLZT_C`0=Rz{H@X)zk*NY+%tCiea6z5Apa z)(d&QIvzg&jo- zrbPv0pK@(@^y~wmTzh}Lo>DuU?$P(%H!%!O+kMg8{y_&lS7zI*>_;)>a1$5rw_rV< z{F+d1Oj7fK|6&b4)}JJK!2639qOHbo_K)p2tgh4dYP0(YOiDdoE`9n80>$rE49MxB z-lJ3Pyc3j{dD~ZYz>}t;vfS2P$)N8zpGVOW36oZckyAP&gh{1uG0F(5gq06$H@~*( zhWmB1ro=1BilYN~Ml!)?}?SxCP#laJAsg!OJ`-#b6BX4lz2T)xr) zszEZ7t7Z!*IC(?7|4C(Rp%)DIaedO?d=)w!wX}Ti%ZZx!?EO)H=YRR)xIgw(rf|>; zA%%L*XCrDvkf_;hTb@6bMe=A5U2OKRfFF1|2w8i2VR%;chyBa%2IvlHxofJy$3_9@*M&Hfz5P8xE7tfn+_EYPD zFTA6gZhTTkjrVcPTTMM#>z%!;xOntGEB_n7S;dMJtt0JD+a-ieiWzApLq*Kz@~vjB z+kN2Gx*sB^hn6q=T!lK-w*7!i9|HUue#xV5l|Dgzx1RnFF5c^bM{^B`V$4{RTY_K- zqcGObn0Jj+bv+iJCb(Ja<^T-*kjBuF9R(8Vyt6+B^+4tQd#1$p$f19$CS%Z+{~PxZ zXVVsg9${p{{5h?+IRkdVYUm+-wKB#OROqZ$@dJ1|U*s27tcJVuEUeG94MC^p++9nq zB51)2!{8THyVv;QRyQv5&$?-e9iCE1r>Wu6TLxMz@D_WzG^-}YTJZ$>rF{eu7NP8+ zDq~=&tg#6_`wf&u1t^OD;ztox`Ls*1E7vY7QA&;Lmix%KI#&vrmFGR2Xf_8A%-A+8 zpB=Eddkb!6#ej=&e1c` zNY=vkpWcF_4rFxjNy+daq`Zp4Ep$8{8hO$`AABi{JSo%jIedZvELAX~h{R#O-CR1VH>%crT% z%6CSE17JgQu4WPsE%Lr1(JtAu7v%j>Pu!_m0_{}K30-3Ahl9sGT@AM^Ah)X1C%qz8 zK4@6!Hyjrq7eN&oerlIEu}yc|-0kHAvG-n!6E@e^BUX?43{ozRz+dO&Hb^SB!Jh7& zHYwJ*P~I+e=BK?FO5RbJvu_8*Wxy?eoOYYwH4UaPRxFc~zOc|y2pLS5&lYKD7&K~gGHq%%Yeg|!L(~zqptNJEHtR)4-V;ub_QRHHGhmEy2Sf8dB0Px z67crpxP<8pE+zq93->BXBGyLOUZHq;a(|(5pV%%u3 zO-uKm(_6@6zgq9a1g%?s2Y!F3dp0r&UL~4(o>OUo88n1 zYPb6+QhqDwC?E1;BpW%S$cymYlu$nz#ELDbE#+J04udnC^%M5AKY(GjpOE33Vi2F6 zbXR_Z8Cq3wKiTsb1($tQ09@zy#M{@RwhAK-^mg?NC=;gBRZuCDvIK+EuQgqM-3LCk z35RFNbU|HAVc=+Q3)uO7>w_InHlw?rxLo=`PuYFoE;_C+&wRCfCFc}qmps+#*(ilz zi%}V!_EMOnsd}zpNF6xv@jc6}ePdANwEP2i$e-CSh_o(5@FZc{7dZ?l7C;^&9r=~KBn9#Y8cLoeEyXscju!xLaRk6aGM$juBYm( zeHdTB^{)!%IC>I5?P+xh>02_We2M4H+s7!kDk7@_;NwH#XP)VuSy8M#TJ#pPBR?Xr z_x?gw4FlGFY1`SY%db+o=aO!TyzYdbi#A&SO7DhBE%V_n8#kfn1Cl-qaZ_H8l5k;H zQzb{*88}J8zF(7juB6=x+0=A|#SXPYhZMhO3!lbdKR>@wqWyc&@!o7gRkH@{HX9n; zBEXNnB2WC>$W7Um`T$Xxx<0e0%4L@T#r+0h4QO|9_ok(QoQbR<;eW%J&Tft2-v+BGe(h&#lj z!i}8%8rt?oOaM!Lrt2Qe0Aq>1@fZ z^y=<_*Hs%i1sI2+W{j!YnE6K-b)%s;S9AeU^fLFcoQqwHU;MQ!9u`bFdD)%;?3lHl z>9(yEg4mqr64d8VLfqd7?<;*Z4*Sz0gX1_0VB+A*dy5{Ap>yyfZwt?PWOvGSx3QGC z{}cCT7$f`Wn+_0+))07?`|s-ACkI^hq>)p4YQ}AG?eOWFG+A29Ua0ctLD}^monTHS zvEh#CJd(+tX%YD_Dsx1NM> z8M}o|xx9gkvF%;h<^hn_C?7NS_6N9?6Me+NwG9Lp2Kl~Oe(J#$ex^(K0p*s0+I2c? zlzp7Xl?(BT5^C9%Du7h*U+#E%R~7l7YLN84un*WgBgFG`cYy{$1|o|`6L_F**L77D zMFsvUzL0o`tm%NiYQ_1IZf;7uv3~ixp_jR7>W~gOaEa;u&Ixsdbo-jF@0LDL85H=v zef&1KoWD727i~W{3QEH&S!7Y}I)@{HT@?2McZYCXMpv}D+lPRuI=%0Fd|C?0Jn1-} zbX^Pi9#ejsEYt#K9?;15%#T1WLv}YQ`&_s?^Ylx(qjO-}h(J|r;ka^iZC*;nJgArcI>pKmL zpnXP3`jhbtpx)!;N01Xj&qUZ+a_pkG^V&Gk)l>@e!4mm|F#C74oImccA%zu_S?&x9 zh<45}i)%+G%&!s&y8WyhsFJkVt(!Zc*tM>cdGUg1qqANUTLxvngX7}*VzxU%Tf;@L zaq_di4xn7 z2vFQ^+|9!GCn_3#Z^n*EVT3H}*sZLzSS{U+F0?@oL)({39IJ-F@~$^xfvp2ZH0RhK zdr%G@X)DdP$@C)S*94}Gx;)nU4R?odIgYF=7h4YmG4c+}qP$I<$g7C4^8LXwh}lBr ztzR2P;9U>d_*kSG2;>we1o$_DIy1tA>LU~M^0o!(7(2>sjXn;zn!YVfk(*gwhrU)B z8%i&u?0@c?;S(#rALJ_Y39r*S; zywZQ;z2l?=noW~kQs=qyx#-INfg0CdcH2I1jUOYj67Tx8h+?#hPdZHkE1<#p@b4R9 zdO=On>y5{s^#Y0h3lkbmweV%QSw`$q2l%68yI{(exu!2QE+a?K(n;+FIC@WrznVxw zkU6Ksu;D`RSAEZhtfCg^ZF;8m)yW=^{ET_qu@^ls>cSD!Pfr)+h#Hi9`GT@u7_RDo z&y$knMw2`Z0$443QE2jdF6688so*M|^%z&>Q0w~ek5KQ!ky84)eh|Df#J+#|d{i_Z zqvu(riCQRXZF|*5*_V*1^nL3xe`Xhn4oRQoVQ(=PK@7bw)O3rr0_Oam*4X7*aGA^W zv9iJ#coE~_(CSwVvW603H~rQ{A7)%Xz-&cvFQ{Fo$>_46GifADc46;6S&Ip9<=Lyz zB6E7=3+cCZ)zuN`^U9jDJwE}$KhB0DgKZ#0SoG8N1|#&_F-MMYdkQY@4z1FrG0L5I z8oB&2eyk1V@v$HeT#>BQoY7wZTsPQ9&Nhz&k5fbM(3v#w_HfPp&z>o;kYp5Vn zU~!~jq^^3c-*8+!&Zb{^np|9(2Rg!?kHeO~GAXqkURWIa3-;via@@LD4}LP64<7o` z13rj1d@fDvg>imbHTmZ?(B9<53U)*iMaqsZZh=n?k5UGIAr7g?1RVP?Ozh+6R zAaZm*EIJZhkXKHxLqee#*gbs0{-|LPs4NvpZobfkuNYiHd0%x7I7 zu>J3L+O9!3yi7V1Y4<@Z0$Q)(n&W`0=@&lY`QkGq%#+lxek6MuxNv0u8Om41 z#+#2mXq+5{?%Uh%s2&W19~xd1Szc>^gmX?0$&aPc#_m_LODzBE!{GW>9n@(+`Z%!B z)4?`GTS3h2z$LQ#W_2uAO?lv0)F>9E{Wrb`* z8IZ+f+i~W@g9xKph>ZIl%KicOOK`qDn*96w`bd~*uWI#&k6i!@Y)~1ttAVsf89h$a z55bNXH!QWnzkrGocj+RX4)EQTB~Qy>6Ur{{czQC*bWPv=RQldLX6W)xO9biLHFPMa zkPeG*8@yd6Er1OP{5n^cFans$TXe1()dLm}Zr1$*b+A=X^@xqTEV_s5P3*>b%4;QR zA7;T<%1?2A`4;y(S^n*Y3TSIE^*#NY6cV$A)kPq51iEXzxzWPY08@_9lzXSw!ibOX zo?n**T68NSaD0Ih5BL*4oOY=vx`QxJLL&Hj5Z^Bquvp!}ESO#$IrXa2^YHR5c456r s!o6EPpoi;0uYz+6JU6(>S4NA7D!zTWojcX@pALNg9^yN%0^<7qKhRc}SpWb4 diff --git a/tests/regression_tests/surface_source_write/case-d07/results_true.dat b/tests/regression_tests/surface_source_write/case-d07/results_true.dat index 63ea1a64d41..5a4ea66898d 100644 --- a/tests/regression_tests/surface_source_write/case-d07/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-d07/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.756086E-01 4.639209E-02 +9.947197E-01 3.711779E-02 diff --git a/tests/regression_tests/surface_source_write/case-d07/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-d07/surface_source_true.h5 index 0332f2dcfb100123fe3a4ee3a47f690be2af1bab..fd9f0dc572af098b9d8a53fd7c1311f3bf4dd28f 100644 GIT binary patch literal 33344 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 F{{Vj8gvqk-|zP5p1E`9p69&Y=Y8Ji%sFRjSMzz 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 diff --git a/tests/regression_tests/surface_source_write/case-d08/results_true.dat b/tests/regression_tests/surface_source_write/case-d08/results_true.dat index 63ea1a64d41..5a4ea66898d 100644 --- a/tests/regression_tests/surface_source_write/case-d08/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-d08/results_true.dat @@ -1,2 +1,2 @@ k-combined: -9.756086E-01 4.639209E-02 +9.947197E-01 3.711779E-02 diff --git a/tests/regression_tests/surface_source_write/case-d08/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-d08/surface_source_true.h5 index 2525592045ca7912138b0559d72d9d4eaeda6118..fd9f0dc572af098b9d8a53fd7c1311f3bf4dd28f 100644 GIT binary patch literal 33344 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 F{{Vj8gvqk-|zP5p1E`9p69&Y=Y8Ji%sFRjSMzz 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 diff --git a/tests/regression_tests/surface_source_write/case-e01/results_true.dat b/tests/regression_tests/surface_source_write/case-e01/results_true.dat index 8979eb55477..d4d1d1e5ad4 100644 --- a/tests/regression_tests/surface_source_write/case-e01/results_true.dat +++ b/tests/regression_tests/surface_source_write/case-e01/results_true.dat @@ -1,2 +1,2 @@ k-combined: -5.169123E-02 9.144814E-03 +5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source_write/case-e01/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-e01/surface_source_true.h5 index 3047519e8c52b140a4756266192c9d81c7d204fb..bbfbd152bc6543871750cb9bd4cc55fe0899754a 100644 GIT binary patch delta 16392 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 BLOTEe delta 16353 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 BLOTEe delta 16353 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%0Da_Gq9lf|96Ebiyb#16 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 literal 33344 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

l11eivG9^A2FF@o(kK8lbM?n}(nd+t7C#e>`?H zC6C)gdGK=|xNVf6k)K$De&^fTD6DwFa;qE2&u7ybxseT<>-PJ~OtzUXh^T>XbIBxI74S-f2E^v>Q+dKd( z-#@rNdTB^j%8i$t=S}3$pUa_fFekOBW2V6=uy}!eJX0wPR=U(7 z-GrqAvaX#KlQAn0?px1zPh6=DK8ntz%zLklo>gGUN;pEc1HA7~%7f?O-XZe%u0Ozo*!suD$6BDRzI&-Os)jl?)epW= zAajWQhgQ*4brXM0B%Lphy-S|1Um@@I;ti|1A@|)`%!c%ldU<||3O|?Dx6d>(8*WqOWqHTV=3xy;CZ86jVurT+b7$HKF`5_`Nw|s zCnLDt5RY-ogE`f+u!SD1bE?i(0mBEu@)5VH!NR)jch+;&L*ETsZ=K&Ijb366otJAp zb3et;mrOSht=${GHkjXWR}q0>(fFnYN|~IQ2FaS-E9c_x}14*rw?z z_1rEB$ff2O)h%oXo<3{uJkAtEAAkAf(63CM{}BBFeofv_r(&0SeRb0`8L_nrx=$i| zi{LBIGqWl-cfcFT`Jh@L8Jz8i@!WGa8zu~T9*`UCN028cn+1oINp?V#ho7u4+8q@u zi7rN4EcyV0Yowc!Tou%aKSXt(h}%aSBCI7>rGYt>#|0UmPt5=8Uwkt9)`+BzTOMvS zA?J@0IrzU%f$Ob9HMHmZi3T90J;=TA(nS8|KQAgGAE_vFtM3g+IWAM#ZJ7#&+HWVu z?d$}WT8|d08uTK_je-4dT1`mu;JTW$H~f4FSu83N+s@z9HnINcka^L@?#mc>*_ib@ z+^G{BU1{I+=*bs&@`H#?^>`dG`D`|nsW=-ov*9{p`C#V!H$3kNkAXg9AK=U0HogCY z%<1VCe%Cn);+gElTQ}vwRK3W`+wyH7*3UF4+PVPTDhl8%PZmS>MO>C*yGV}Th~v+0 zvLF;@CU5F&CPqwkyPK#R7b7zDHWlfIF&8u@^8D|+RPs}BorJmj|~wGUAq`g5W9?{BFuj6gZNL9d#G^VNu9$kVCl znUv551WJRnm@Wl?TgJBTL#$;$&y;OVjVw?lj4xaTEwQ7Pa-G};$tU1xtWt+FkYLL%o5&bC6 z#O<1|`jN3jei4lPaNm*7@b@}}&%47F(Zc0$SZZC|ouLxom1ckZ7;iHaI(nINEWsaP z1)N^|ZYN24BXa1^N#J^06Y|wtazO(~q(q;UIm3cgItU!fJU4NUp!(y^c$2rl$vyL8 z0bdfB_h8)m!2A~omUr^Uu=P8|47r?AMd+3C+7vGp5-?N7n!YiZCu5S8N01^ z+PSU`AmV1ej`d}*)3x|03)e(`-0}?^xtuM?Xg@{MD2F`$5IMp$4qiCizU8~mb2@&* zGPjn#mv}!4mWfFK_7kxncbA*=tNv_Q&A_^X9}xQw-u}2ec)f#x0}F=@`r+ly^RdB;s^O*TOII%1wS%Z#2lMwb zyn+L_zDu7dErLud9+YH7uR)U^-@i5cEqR@fs5g8)jE;jjGOoN3S;>Ow$aZcOIMNMI z^hc*3C}@MthxXQnX6HkPeH8*#!r8F)e)oY+e}FD)LNa(Zk>}fZn@{Qu*B8!NaOwJm zScB>F=-5|?2DNql1krQ#mKR@3g=pAuYpPl&%*ruecKOr?sM+yqVPmcw>Ma%akohoq z9hTTW!~b=-c=JgcN z!aP`ZTCW_J2gCZp`^%LaL03V$$jjm{V8y9JjBdf5P;p}8r2m2(TDrw5?4<~KzCh%N z;{aNDCZaV0p;&S}6o$Tpo@z5LHUfGpNxulVi;;Mmynf?c2iyzKWiRID;V zZ&Me~MeG57{;! edE5?HrP?A#ixAW#=z`r^N%DD3qCE8bS^o!D&vB6e diff --git a/tests/regression_tests/surface_tally/results_true.dat b/tests/regression_tests/surface_tally/results_true.dat index 8b27fa19280..70d5cad2c64 100644 --- a/tests/regression_tests/surface_tally/results_true.dat +++ b/tests/regression_tests/surface_tally/results_true.dat @@ -1,52 +1,52 @@ mean,std. dev. -2.1200000e-02,1.8366636e-03 -7.4900000e-02,2.2083176e-03 -1.6220000e-01,2.8079253e-03 -6.4010000e-01,8.6838931e-03 -2.1000000e-03,3.7859389e-04 -5.6000000e-03,6.8637534e-04 -1.1700000e-02,1.4456832e-03 -4.1700000e-02,2.7041121e-03 -2.1200000e-02,1.8366636e-03 -7.4900000e-02,2.2083176e-03 -1.6220000e-01,2.8079253e-03 -6.4010000e-01,8.6838931e-03 -2.1000000e-03,3.7859389e-04 -5.6000000e-03,6.8637534e-04 -1.1700000e-02,1.4456832e-03 -4.1700000e-02,2.7041121e-03 -5.2000000e-03,5.9254629e-04 -3.9200000e-02,2.5508169e-03 -4.0200000e-02,1.9310331e-03 -4.1360000e-01,8.0072190e-03 -0.0000000e+00,0.0000000e+00 -1.9000000e-03,3.7859389e-04 +2.4100000e-02,2.1052844e-03 +6.7900000e-02,2.3211587e-03 +1.6860000e-01,4.4800794e-03 +6.4710000e-01,9.1826527e-03 +2.2000000e-03,3.8873013e-04 +5.5000000e-03,1.0979779e-03 +1.2500000e-02,1.5438048e-03 +4.4700000e-02,1.9035055e-03 +2.4100000e-02,2.1052844e-03 +6.7900000e-02,2.3211587e-03 +1.6860000e-01,4.4800794e-03 +6.4710000e-01,9.1826527e-03 +2.2000000e-03,3.8873013e-04 +5.5000000e-03,1.0979779e-03 +1.2500000e-02,1.5438048e-03 +4.4700000e-02,1.9035055e-03 +7.3000000e-03,9.8938814e-04 +3.6600000e-02,2.5086517e-03 +4.1600000e-02,2.4864075e-03 +4.2380000e-01,9.6087923e-03 1.0000000e-04,1.0000000e-04 -1.6400000e-02,1.2840907e-03 --5.2000000e-03,5.9254629e-04 --3.9200000e-02,2.5508169e-03 --4.0200000e-02,1.9310331e-03 --4.1360000e-01,8.0072190e-03 -0.0000000e+00,0.0000000e+00 --1.9000000e-03,3.7859389e-04 +1.5000000e-03,4.5338235e-04 +3.0000000e-04,1.5275252e-04 +1.7300000e-02,1.4609738e-03 +-7.3000000e-03,9.8938814e-04 +-3.6600000e-02,2.5086517e-03 +-4.1600000e-02,2.4864075e-03 +-4.2380000e-01,9.6087923e-03 -1.0000000e-04,1.0000000e-04 --1.6400000e-02,1.2840907e-03 -1.6000000e-02,2.1602469e-03 -3.5700000e-02,2.9441090e-03 -1.2200000e-01,3.5932035e-03 -2.2650000e-01,9.2463206e-03 +-1.5000000e-03,4.5338235e-04 +-3.0000000e-04,1.5275252e-04 +-1.7300000e-02,1.4609738e-03 +1.6800000e-02,1.5902481e-03 +3.1300000e-02,3.8094911e-03 +1.2700000e-01,5.0990195e-03 +2.2330000e-01,9.3631073e-03 2.1000000e-03,3.7859389e-04 -3.7000000e-03,8.1717671e-04 -1.1600000e-02,1.4772347e-03 -2.5300000e-02,1.9723083e-03 +4.0000000e-03,1.0540926e-03 +1.2200000e-02,1.6110728e-03 +2.7400000e-02,1.6613248e-03 0.0000000e+00,0.0000000e+00 --2.9700000e-02,2.4587711e-03 +-3.2000000e-02,1.5634719e-03 0.0000000e+00,0.0000000e+00 --3.5090000e-01,3.7161808e-03 +-3.5400000e-01,7.5938572e-03 0.0000000e+00,0.0000000e+00 --2.1000000e-03,4.8189441e-04 +-3.0000000e-03,6.4978629e-04 0.0000000e+00,0.0000000e+00 --2.1400000e-02,1.7397318e-03 +-2.1800000e-02,1.4892205e-03 0.0000000e+00,0.0000000e+00 0.0000000e+00,0.0000000e+00 0.0000000e+00,0.0000000e+00 diff --git a/tests/regression_tests/survival_biasing/results_true.dat b/tests/regression_tests/survival_biasing/results_true.dat index 74027220170..932414e98b1 100644 --- a/tests/regression_tests/survival_biasing/results_true.dat +++ b/tests/regression_tests/survival_biasing/results_true.dat @@ -1,20 +1,20 @@ k-combined: -9.879232E-01 8.097582E-03 +9.517646E-01 1.303111E-02 tally 1: -4.295331E+01 -3.691096E+02 -1.802724E+01 -6.501934E+01 -2.193500E+00 -9.627609E-01 -1.893529E+00 -7.174104E-01 -4.902380E+00 -4.808570E+00 -3.418014E-02 -2.337353E-04 -3.667128E+08 -2.690758E+16 +4.164635E+01 +3.470110E+02 +1.724300E+01 +5.949580E+01 +2.124917E+00 +9.034789E-01 +1.844790E+00 +6.809026E-01 +4.784396E+00 +4.579552E+00 +3.348849E-02 +2.243613E-04 +3.573090E+08 +2.554338E+16 tally 2: -1.802724E+01 -6.501934E+01 +1.724300E+01 +5.949580E+01 diff --git a/tests/regression_tests/tallies/results_true.dat b/tests/regression_tests/tallies/results_true.dat index 3dda0f9b211..1d3aca4b079 100644 --- a/tests/regression_tests/tallies/results_true.dat +++ b/tests/regression_tests/tallies/results_true.dat @@ -1 +1 @@ -ddfbb0a6f5498eb8ff33bb10beb64e244b015861919eb4837bd82855e5fd87c3ff97dfa382d3d60afa81c48d9f857fba8e0b99263e7b35587f8adb75be1fc0ec \ No newline at end of file +d01c3accd5b4de2aa166a77df28cfe42f5738a44c2480752fcfae7564a507362fff006b6dffb7b1dfe248e14bacef0070cabacea5d75c5996653e5605f7c7384 \ No newline at end of file diff --git a/tests/regression_tests/tally_aggregation/results_true.dat b/tests/regression_tests/tally_aggregation/results_true.dat index 172adbfe132..ee6263373ad 100644 --- a/tests/regression_tests/tally_aggregation/results_true.dat +++ b/tests/regression_tests/tally_aggregation/results_true.dat @@ -1,97 +1,97 @@ -[[1.6001087e-05 5.4190949e-04] - [3.2669968e-01 1.7730523e-01] - [1.8149266e-02 7.1525113e-01]], [[1.6239097e-05 5.7499676e-04] - [3.1268633e-01 1.7004165e-01] - [1.8873778e-02 7.0217885e-01]], [[1.6693071e-05 5.4106379e-04] - [3.3370208e-01 1.8051505e-01] - [1.9081306e-02 7.3647547e-01]], [[1.6725399e-05 5.1680146e-04] - [3.2854628e-01 1.7757185e-01] - [1.9529646e-02 7.1005198e-01]][[2.4751834e-07 4.3304565e-05] - [8.6840718e-03 4.3442535e-03] - [3.7054051e-04 6.5678133e-03]], [[4.0830852e-07 4.9612204e-05] - [1.2104241e-02 5.9708675e-03] - [7.1398189e-04 8.2408482e-03]], [[2.6546344e-07 2.5234256e-05] - [6.5083211e-03 3.2185071e-03] - [4.2935150e-04 5.1707774e-03]], [[2.7845203e-07 3.4453402e-05] - [3.3125427e-03 1.7749508e-03] - [6.0407731e-04 7.5353872e-03]][[1.0455251e-06 8.1938339e-04] - [1.1392765e+00 5.6434761e-01] - [1.4142831e-06 5.1213654e-01]], [[2.2009815e-06 1.0418935e-03] - [1.4422554e-01 1.0070647e-01] - [3.9488382e-05 7.9236390e-01]], [[1.4606612e-05 2.2374470e-04] - [1.2962842e-02 2.9268594e-02] - [3.1339824e-04 1.1056439e+00]], [[4.7805535e-05 8.9749934e-05] - [5.1694597e-03 1.1111105e-02] - [7.5279695e-02 4.5381305e-01]][[1.4955183e-08 1.1461548e-05] - [1.6454649e-02 8.1236707e-03] - [2.0028007e-08 6.8264819e-03]], [[1.6334486e-07 7.7617340e-05] - [2.1161584e-03 1.4078445e-03] - [1.4742097e-05 6.9350862e-03]], [[1.7444757e-07 1.9026095e-06] - [1.4084092e-04 2.0345990e-04] - [5.9546175e-06 8.6038812e-03]], [[5.6449127e-07 1.0110585e-06] - [5.9158873e-05 1.2485325e-04] - [1.0936497e-03 5.0836702e-03]][[0.2866239 0.2725595]], [[0.2729156 0.258831 ]], [[0.2920724 0.2755922]], [[0.287667 0.2703207]], [[0.035617 0.2232707]], [[0.0353082 0.2224423]], [[0.0370072 0.2288263]], [[0.0363348 0.219573 ]], [[0.0033013 0.2850034]], [[0.0032726 0.2771099]], [[0.0034234 0.2951295]], [[0.0032935 0.2778935]], [[0.0193227 0.1122647]], [[0.0200799 0.1144123]], [[0.0202971 0.1179836]], [[0.0207973 0.1203534]][[0.0086351 0.0061876]], [[0.0120688 0.0074831]], [[0.0064221 0.0035246]], [[0.0030483 0.0024267]], [[0.0009185 0.0033896]], [[0.0009223 0.0039584]], [[0.0010541 0.0038599]], [[0.0012934 0.0028331]], [[6.5126963e-05 2.8486593e-03]], [[7.1110242e-05 4.3424340e-03]], [[5.8911409e-05 2.4296178e-03]], [[8.4278765e-05 6.4182190e-03]], [[0.0003712 0.0020298]], [[0.0007152 0.0036115]], [[0.0004298 0.0019677]], [[0.0006046 0.0021965]][[2.0694650e-04] - [4.2868191e-01] - [1.3029457e-01]], [[1.9694048e-04] - [4.0809445e-01] - [1.2345525e-01]], [[2.1012645e-04] - [4.3670571e-01] - [1.3074883e-01]], [[2.0641548e-04] - [4.3014207e-01] - [1.2763930e-01]], [[0.0002584] - [0.0608867] - [0.1977426]], [[0.0003026] - [0.0602368] - [0.1972111]], [[0.0002509] - [0.0624699] - [0.2031126]], [[0.0002322] - [0.0613385] - [0.1943371]], [[5.9349736e-05] - [1.0506741e-02] - [2.7773865e-01]], [[5.7855564e-05] - [1.0389781e-02] - [2.6993483e-01]], [[6.1819700e-05] - [1.0910874e-02] - [2.8758020e-01]], [[5.9326317e-05] - [1.0424040e-02] - [2.7070367e-01]], [[3.3192167e-05] - [3.9295320e-03] - [1.2762462e-01]], [[3.3882691e-05] - [4.0069157e-03] - [1.3045143e-01]], [[3.4882103e-05] - [4.1306182e-03] - [1.3411514e-01]], [[3.5598508e-05] - [4.2134987e-03] - [1.3690156e-01]][[6.4505980e-06] - [9.6369034e-03] - [4.4700460e-03]], [[8.2880772e-06] - [1.3456171e-02] - [4.5368708e-03]], [[3.9384462e-06] - [7.1570638e-03] - [1.5629142e-03]], [[2.3565894e-06] - [3.4040401e-03] - [1.8956916e-03]], [[4.2806047e-05] - [1.1841015e-03] - [3.3058802e-03]], [[4.8905696e-05] - [1.0360139e-03] - [3.9298937e-03]], [[2.4911390e-05] - [1.2173305e-03] - [3.8114473e-03]], [[3.4347869e-05] - [1.5820360e-03] - [2.6824612e-03]], [[1.0809230e-06] - [1.0316180e-04] - [2.8475354e-03]], [[6.4150814e-07] - [1.1179425e-04] - [4.3415770e-03]], [[7.3848139e-07] - [9.3111666e-05] - [2.4285475e-03]], [[1.2349384e-06] - [1.7152843e-04] - [6.4164799e-03]], [[4.5871493e-07] - [5.4732075e-05] - [2.0627309e-03]], [[8.1649994e-07] - [9.7699188e-05] - [3.6803256e-03]], [[4.5174850e-07] - [5.3913784e-05] - [2.0133571e-03]], [[5.0962865e-07] - [6.0338032e-05] - [2.2773911e-03]] \ No newline at end of file +[[1.6242805e-05 6.2367673e-04] + [3.2895972e-01 1.7786452e-01] + [1.8044266e-02 7.0451122e-01]], [[1.6113947e-05 5.3572864e-04] + [3.1517504e-01 1.7132833e-01] + [1.8305682e-02 7.0072832e-01]], [[1.6472052e-05 5.5758006e-04] + [3.2362364e-01 1.7597163e-01] + [1.9107080e-02 7.2600440e-01]], [[1.6693277e-05 4.9204218e-04] + [3.2429262e-01 1.7600573e-01] + [1.9042489e-02 7.3053854e-01]][[2.9719061e-07 8.0925438e-05] + [8.9432259e-03 4.4057583e-03] + [5.2078407e-04 6.4387688e-03]], [[1.8572081e-07 2.5667235e-05] + [1.1641603e-02 5.7444311e-03] + [2.6983611e-04 6.9783224e-03]], [[2.4994113e-07 5.4993390e-05] + [6.0464041e-03 3.0764811e-03] + [2.6559118e-04 7.7279780e-03]], [[2.5965232e-07 3.9618775e-05] + [1.0409564e-02 5.1850104e-03] + [2.7831231e-04 7.4480576e-03]][[1.0329435e-06 8.0861229e-04] + [1.1265142e+00 5.5796079e-01] + [1.3965860e-06 5.0338828e-01]], [[2.2264172e-06 1.0828687e-03] + [1.4724979e-01 1.0226107e-01] + [2.2656045e-05 7.7618945e-01]], [[1.4789782e-05 2.2786630e-04] + [1.3149968e-02 2.9847169e-02] + [3.2638111e-04 1.1287326e+00]], [[4.7472938e-05 8.9680338e-05] + [5.1371041e-03 1.1101179e-02] + [7.4149084e-02 4.5347217e-01]][[1.7024771e-08 1.2878244e-05] + [1.8795566e-02 9.2705008e-03] + [2.2676749e-08 7.0878353e-03]], [[2.2018925e-07 1.0785388e-04] + [2.6715019e-03 1.6657928e-03] + [1.2479083e-05 8.6814018e-03]], [[2.0928485e-07 1.6600875e-06] + [1.1859535e-04 1.7969083e-04] + [1.5981387e-05 8.0489308e-03]], [[4.0016381e-07 7.6799157e-07] + [4.4157583e-05 9.4462925e-05] + [7.0115110e-04 3.8678806e-03]][[0.287433 0.2698042]], [[0.2751228 0.2598525]], [[0.280516 0.2648274]], [[0.2834448 0.2676736]], [[0.0370558 0.2148509]], [[0.0355217 0.2130189]], [[0.0385317 0.2292804]], [[0.0361655 0.2223832]], [[0.0033268 0.2855078]], [[0.0033498 0.2849403]], [[0.003359 0.2901157]], [[0.0034555 0.2982438]], [[0.0192046 0.1128364]], [[0.0195026 0.1147807]], [[0.0203405 0.1183102]], [[0.0202861 0.1187358]][[0.00889 0.0051934]], [[0.0115249 0.0072767]], [[0.0058841 0.0040289]], [[0.0103341 0.0063266]], [[0.0009734 0.0048865]], [[0.0016425 0.0038133]], [[0.0013902 0.0048875]], [[0.0012487 0.0039808]], [[1.8994140e-05 2.0410145e-03]], [[6.8277082e-05 3.4865782e-03]], [[6.1643568e-05 4.9220817e-03]], [[7.4147413e-05 4.9263295e-03]], [[0.0005213 0.0024208]], [[0.0002702 0.0014313]], [[0.0002665 0.0022006]], [[0.0002788 0.0014892]][[2.0601081e-04] + [4.2976789e-01] + [1.2726338e-01]], [[1.9802070e-04] + [4.1138025e-01] + [1.2339705e-01]], [[2.0174854e-04] + [4.1947542e-01] + [1.2566615e-01]], [[2.0386518e-04] + [4.2385140e-01] + [1.2706310e-01]], [[0.0003403] + [0.0624955] + [0.189071 ]], [[0.0002601] + [0.060449 ] + [0.1878314]], [[0.0002765] + [0.0652412] + [0.2022944]], [[0.0002082] + [0.0613252] + [0.1970153]], [[6.0336874e-05] + [1.0617692e-02] + [2.7815664e-01]], [[5.9823997e-05] + [1.0664059e-02] + [2.7756620e-01]], [[6.0873689e-05] + [1.0744209e-02] + [2.8266963e-01]], [[6.1621521e-05] + [1.0971177e-02] + [2.9066650e-01]], [[3.3297391e-05] + [3.9432037e-03] + [1.2806450e-01]], [[3.3863464e-05] + [4.0100180e-03] + [1.3023932e-01]], [[3.4930617e-05] + [4.1344613e-03] + [1.3448129e-01]], [[3.5061805e-05] + [4.1505999e-03] + [1.3483614e-01]][[5.8259835e-06] + [9.9096571e-03] + [2.7933778e-03]], [[8.0858909e-06] + [1.2843377e-02] + [4.5631248e-03]], [[4.3418585e-06] + [6.5638646e-03] + [2.7874612e-03]], [[6.9046376e-06] + [1.1531588e-02] + [3.7205377e-03]], [[8.0710599e-05] + [1.0889301e-03] + [4.8613465e-03]], [[2.4337121e-05] + [1.8861117e-03] + [3.6987509e-03]], [[5.4812439e-05] + [1.7085353e-03] + [4.7852139e-03]], [[3.9007791e-05] + [1.4998363e-03] + [3.8929646e-03]], [[7.5757577e-07] + [2.5845755e-05] + [2.0409391e-03]], [[1.0302346e-06] + [1.1907557e-04] + [3.4852130e-03]], [[9.1936614e-07] + [1.2974020e-04] + [4.9207575e-03]], [[5.6493555e-07] + [1.2113685e-04] + [4.9253980e-03]], [[5.4602210e-07] + [6.5233025e-05] + [2.4754550e-03]], [[3.2091909e-07] + [3.8472906e-05] + [1.4560974e-03]], [[4.8475651e-07] + [5.9108262e-05] + [2.2158781e-03]], [[3.3737822e-07] + [4.0544269e-05] + [1.5145628e-03]] \ No newline at end of file diff --git a/tests/regression_tests/tally_arithmetic/results_true.dat b/tests/regression_tests/tally_arithmetic/results_true.dat index 143930dd419..baa38058713 100644 --- a/tests/regression_tests/tally_arithmetic/results_true.dat +++ b/tests/regression_tests/tally_arithmetic/results_true.dat @@ -1,49 +1,49 @@ -[2.04229e-07 1.28343e-13 1.79333e-04 1.12698e-10 1.89952e-07 1.51210e-07 - 1.66796e-04 1.32777e-04 6.13215e-03 3.85362e-09 3.14746e-03 1.97795e-09 - 5.70345e-03 4.54021e-03 2.92742e-03 2.33037e-03 2.10575e-07 1.28419e-13 - 1.84905e-04 1.12764e-10 1.89188e-07 1.50221e-07 1.66125e-04 1.31908e-04 - 6.32269e-03 3.85587e-09 3.24526e-03 1.97911e-09 5.68054e-03 4.51051e-03 - 2.91566e-03 2.31512e-03 1.96696e-07 1.26388e-13 1.72718e-04 1.10981e-10 - 1.91283e-07 1.53449e-07 1.67964e-04 1.34743e-04 5.90596e-03 3.79491e-09 - 3.03136e-03 1.94782e-09 5.74342e-03 4.60742e-03 2.94794e-03 2.36486e-03 - 2.06016e-07 1.35264e-13 1.80901e-04 1.18775e-10 2.05873e-07 1.65814e-07 - 1.80776e-04 1.45600e-04 6.18579e-03 4.06142e-09 3.17499e-03 2.08461e-09 - 6.18150e-03 4.97869e-03 3.17279e-03 2.55542e-03 2.36089e-03 4.46651e-05 - 1.02263e-02 1.93469e-04 1.18179e-04 2.62375e-05 5.11897e-04 1.13649e-04 - 2.56040e-02 4.84394e-04 4.55595e-02 8.61927e-04 1.28165e-03 2.84546e-04 - 2.28056e-03 5.06320e-04 2.29877e-03 4.53056e-05 9.95724e-03 1.96244e-04 - 1.14803e-04 2.57898e-05 4.97276e-04 1.11710e-04 2.49302e-02 4.91340e-04 - 4.43606e-02 8.74289e-04 1.24504e-03 2.79691e-04 2.21542e-03 4.97680e-04 - 2.31940e-03 4.34238e-05 1.00466e-02 1.88093e-04 1.17620e-04 2.69280e-05 - 5.09479e-04 1.16640e-04 2.51540e-02 4.70932e-04 4.47588e-02 8.37974e-04 - 1.27560e-03 2.92034e-04 2.26979e-03 5.19644e-04 2.19212e-03 4.53914e-05 - 9.49530e-03 1.96615e-04 1.09609e-04 2.41615e-05 4.74778e-04 1.04657e-04 - 2.37736e-02 4.92271e-04 4.23026e-02 8.75944e-04 1.18871e-03 2.62032e-04 - 2.11519e-03 4.66257e-04][2.04229e-07 1.28343e-13 1.79333e-04 1.12698e-10 1.89952e-07 1.51210e-07 - 1.66796e-04 1.32777e-04 6.13215e-03 3.85362e-09 3.14746e-03 1.97795e-09 - 5.70345e-03 4.54021e-03 2.92742e-03 2.33037e-03 2.10575e-07 1.28419e-13 - 1.84905e-04 1.12764e-10 1.89188e-07 1.50221e-07 1.66125e-04 1.31908e-04 - 6.32269e-03 3.85587e-09 3.24526e-03 1.97911e-09 5.68054e-03 4.51051e-03 - 2.91566e-03 2.31512e-03 1.96696e-07 1.26388e-13 1.72718e-04 1.10981e-10 - 1.91283e-07 1.53449e-07 1.67964e-04 1.34743e-04 5.90596e-03 3.79491e-09 - 3.03136e-03 1.94782e-09 5.74342e-03 4.60742e-03 2.94794e-03 2.36486e-03 - 2.06016e-07 1.35264e-13 1.80901e-04 1.18775e-10 2.05873e-07 1.65814e-07 - 1.80776e-04 1.45600e-04 6.18579e-03 4.06142e-09 3.17499e-03 2.08461e-09 - 6.18150e-03 4.97869e-03 3.17279e-03 2.55542e-03 2.36089e-03 4.46651e-05 - 1.02263e-02 1.93469e-04 1.18179e-04 2.62375e-05 5.11897e-04 1.13649e-04 - 2.56040e-02 4.84394e-04 4.55595e-02 8.61927e-04 1.28165e-03 2.84546e-04 - 2.28056e-03 5.06320e-04 2.29877e-03 4.53056e-05 9.95724e-03 1.96244e-04 - 1.14803e-04 2.57898e-05 4.97276e-04 1.11710e-04 2.49302e-02 4.91340e-04 - 4.43606e-02 8.74289e-04 1.24504e-03 2.79691e-04 2.21542e-03 4.97680e-04 - 2.31940e-03 4.34238e-05 1.00466e-02 1.88093e-04 1.17620e-04 2.69280e-05 - 5.09479e-04 1.16640e-04 2.51540e-02 4.70932e-04 4.47588e-02 8.37974e-04 - 1.27560e-03 2.92034e-04 2.26979e-03 5.19644e-04 2.19212e-03 4.53914e-05 - 9.49530e-03 1.96615e-04 1.09609e-04 2.41615e-05 4.74778e-04 1.04657e-04 - 2.37736e-02 4.92271e-04 4.23026e-02 8.75944e-04 1.18871e-03 2.62032e-04 - 2.11519e-03 4.66257e-04][0.0057 0.00454 0.00293 0.00233 0.00568 0.00451 0.00292 0.00232 0.00574 - 0.00461 0.00295 0.00236 0.00618 0.00498 0.00317 0.00256 0.00128 0.00028 - 0.00228 0.00051 0.00125 0.00028 0.00222 0.0005 0.00128 0.00029 0.00227 - 0.00052 0.00119 0.00026 0.00212 0.00047][0.00018 0.00017 0.00315 0.00293 0.00018 0.00017 0.00325 0.00292 0.00017 - 0.00017 0.00303 0.00295 0.00018 0.00018 0.00317 0.00317 0.01023 0.00051 - 0.04556 0.00228 0.00996 0.0005 0.04436 0.00222 0.01005 0.00051 0.04476 - 0.00227 0.0095 0.00047 0.0423 0.00212][0.00293 0.00292 0.00295 0.00317 0.00228 0.00222 0.00227 0.00212] \ No newline at end of file +[2.29467e-07 1.47622e-13 2.02646e-04 1.30367e-10 2.20704e-07 1.76624e-07 + 1.94907e-04 1.55980e-04 6.32267e-03 4.06754e-09 3.26873e-03 2.10286e-09 + 6.08121e-03 4.86666e-03 3.14390e-03 2.51599e-03 1.89223e-07 1.06256e-13 + 1.67106e-04 9.38364e-11 1.53300e-07 1.20220e-07 1.35382e-04 1.06168e-04 + 5.21380e-03 2.92775e-09 2.69546e-03 1.51361e-09 4.22399e-03 3.31252e-03 + 2.18374e-03 1.71253e-03 2.21146e-07 1.41349e-13 1.95297e-04 1.24828e-10 + 2.11844e-07 1.69398e-07 1.87083e-04 1.49598e-04 6.09339e-03 3.89470e-09 + 3.15020e-03 2.01351e-09 5.83710e-03 4.66754e-03 3.01770e-03 2.41305e-03 + 1.92872e-07 1.05908e-13 1.70328e-04 9.35293e-11 1.59466e-07 1.25399e-07 + 1.40827e-04 1.10741e-04 5.31433e-03 2.91817e-09 2.74744e-03 1.50865e-09 + 4.39388e-03 3.45520e-03 2.27158e-03 1.78629e-03 2.44601e-03 4.71663e-05 + 1.09430e-02 2.11013e-04 1.23573e-04 2.76181e-05 5.52841e-04 1.23558e-04 + 2.71755e-02 5.24023e-04 4.76200e-02 9.18253e-04 1.37291e-03 3.06841e-04 + 2.40577e-03 5.37681e-04 2.29014e-03 4.44674e-05 1.02456e-02 1.98938e-04 + 1.12524e-04 2.48126e-05 5.03411e-04 1.11007e-04 2.54438e-02 4.94038e-04 + 4.45855e-02 8.65710e-04 1.25016e-03 2.75671e-04 2.19067e-03 4.83061e-04 + 2.38500e-03 4.58053e-05 1.06700e-02 2.04924e-04 1.22899e-04 2.95267e-05 + 5.49826e-04 1.32097e-04 2.64977e-02 5.08903e-04 4.64323e-02 8.91758e-04 + 1.36542e-03 3.28045e-04 2.39265e-03 5.74839e-04 2.17094e-03 4.21772e-05 + 9.71236e-03 1.88693e-04 1.09358e-04 2.46984e-05 4.89245e-04 1.10496e-04 + 2.41194e-02 4.68594e-04 4.22648e-02 8.21124e-04 1.21498e-03 2.74402e-04 + 2.12902e-03 4.80839e-04][2.29467e-07 1.47622e-13 2.02646e-04 1.30367e-10 2.20704e-07 1.76624e-07 + 1.94907e-04 1.55980e-04 6.32267e-03 4.06754e-09 3.26873e-03 2.10286e-09 + 6.08121e-03 4.86666e-03 3.14390e-03 2.51599e-03 1.89223e-07 1.06256e-13 + 1.67106e-04 9.38364e-11 1.53300e-07 1.20220e-07 1.35382e-04 1.06168e-04 + 5.21380e-03 2.92775e-09 2.69546e-03 1.51361e-09 4.22399e-03 3.31252e-03 + 2.18374e-03 1.71253e-03 2.21146e-07 1.41349e-13 1.95297e-04 1.24828e-10 + 2.11844e-07 1.69398e-07 1.87083e-04 1.49598e-04 6.09339e-03 3.89470e-09 + 3.15020e-03 2.01351e-09 5.83710e-03 4.66754e-03 3.01770e-03 2.41305e-03 + 1.92872e-07 1.05908e-13 1.70328e-04 9.35293e-11 1.59466e-07 1.25399e-07 + 1.40827e-04 1.10741e-04 5.31433e-03 2.91817e-09 2.74744e-03 1.50865e-09 + 4.39388e-03 3.45520e-03 2.27158e-03 1.78629e-03 2.44601e-03 4.71663e-05 + 1.09430e-02 2.11013e-04 1.23573e-04 2.76181e-05 5.52841e-04 1.23558e-04 + 2.71755e-02 5.24023e-04 4.76200e-02 9.18253e-04 1.37291e-03 3.06841e-04 + 2.40577e-03 5.37681e-04 2.29014e-03 4.44674e-05 1.02456e-02 1.98938e-04 + 1.12524e-04 2.48126e-05 5.03411e-04 1.11007e-04 2.54438e-02 4.94038e-04 + 4.45855e-02 8.65710e-04 1.25016e-03 2.75671e-04 2.19067e-03 4.83061e-04 + 2.38500e-03 4.58053e-05 1.06700e-02 2.04924e-04 1.22899e-04 2.95267e-05 + 5.49826e-04 1.32097e-04 2.64977e-02 5.08903e-04 4.64323e-02 8.91758e-04 + 1.36542e-03 3.28045e-04 2.39265e-03 5.74839e-04 2.17094e-03 4.21772e-05 + 9.71236e-03 1.88693e-04 1.09358e-04 2.46984e-05 4.89245e-04 1.10496e-04 + 2.41194e-02 4.68594e-04 4.22648e-02 8.21124e-04 1.21498e-03 2.74402e-04 + 2.12902e-03 4.80839e-04][0.00608 0.00487 0.00314 0.00252 0.00422 0.00331 0.00218 0.00171 0.00584 + 0.00467 0.00302 0.00241 0.00439 0.00346 0.00227 0.00179 0.00137 0.00031 + 0.00241 0.00054 0.00125 0.00028 0.00219 0.00048 0.00137 0.00033 0.00239 + 0.00057 0.00121 0.00027 0.00213 0.00048][0.0002 0.00019 0.00327 0.00314 0.00017 0.00014 0.0027 0.00218 0.0002 + 0.00019 0.00315 0.00302 0.00017 0.00014 0.00275 0.00227 0.01094 0.00055 + 0.04762 0.00241 0.01025 0.0005 0.04459 0.00219 0.01067 0.00055 0.04643 + 0.00239 0.00971 0.00049 0.04226 0.00213][0.00314 0.00218 0.00302 0.00227 0.00241 0.00219 0.00239 0.00213] \ No newline at end of file diff --git a/tests/regression_tests/tally_assumesep/results_true.dat b/tests/regression_tests/tally_assumesep/results_true.dat index 9d7cbf9c3d4..c9ccf092824 100644 --- a/tests/regression_tests/tally_assumesep/results_true.dat +++ b/tests/regression_tests/tally_assumesep/results_true.dat @@ -1,11 +1,11 @@ k-combined: -5.683578E-01 1.129170E-02 +6.268465E-01 1.154810E-02 tally 1: -6.753950E+00 -9.188305E+00 +7.828708E+00 +1.230478E+01 tally 2: -2.278558E-01 -1.052944E-02 +2.582239E-01 +1.360117E-02 tally 3: -1.179091E+01 -2.795539E+01 +1.339335E+01 +3.663458E+01 diff --git a/tests/regression_tests/tally_nuclides/results_true.dat b/tests/regression_tests/tally_nuclides/results_true.dat index 7f9641fc8f5..93a0e03fb5d 100644 --- a/tests/regression_tests/tally_nuclides/results_true.dat +++ b/tests/regression_tests/tally_nuclides/results_true.dat @@ -1,28 +1,28 @@ k-combined: -1.132463E+00 5.721067E-02 +9.732610E-01 1.400780E-02 tally 1: -7.310528E+00 -1.080411E+01 -1.664215E+00 -5.567756E-01 -1.609340E+00 -5.205634E-01 -5.646313E+00 -6.459724E+00 -7.310528E+00 -1.080411E+01 -1.664215E+00 -5.567756E-01 -1.609340E+00 -5.205634E-01 -5.646313E+00 -6.459724E+00 +7.123025E+00 +1.021136E+01 +1.619905E+00 +5.258592E-01 +1.561322E+00 +4.881841E-01 +5.503120E+00 +6.105683E+00 +7.123025E+00 +1.021136E+01 +1.619905E+00 +5.258592E-01 +1.561322E+00 +4.881841E-01 +5.503120E+00 +6.105683E+00 tally 2: -7.310528E+00 -1.080411E+01 -1.664215E+00 -5.567756E-01 -1.609340E+00 -5.205634E-01 -5.646313E+00 -6.459724E+00 +7.123025E+00 +1.021136E+01 +1.619905E+00 +5.258592E-01 +1.561322E+00 +4.881841E-01 +5.503120E+00 +6.105683E+00 diff --git a/tests/regression_tests/tally_slice_merge/results_true.dat b/tests/regression_tests/tally_slice_merge/results_true.dat index 58b15fc18d9..4b2cbdf1adf 100644 --- a/tests/regression_tests/tally_slice_merge/results_true.dat +++ b/tests/regression_tests/tally_slice_merge/results_true.dat @@ -1,45 +1,45 @@ cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 0.00e+00 6.25e-01 U235 fission 1.75e-01 1.20e-02 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 0.00e+00 6.25e-01 U235 nu-fission 4.26e-01 2.92e-02 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 0.00e+00 6.25e-01 U238 fission 2.41e-07 1.61e-08 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 0.00e+00 6.25e-01 U238 nu-fission 6.00e-07 4.01e-08 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 6.25e-01 2.00e+07 U235 fission 2.89e-02 2.07e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 6.25e-01 2.00e+07 U235 nu-fission 7.07e-02 5.06e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 6.25e-01 2.00e+07 U238 fission 1.41e-02 5.76e-04 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 6.25e-01 2.00e+07 U238 nu-fission 3.95e-02 1.90e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 27 0.00e+00 6.25e-01 U235 fission 1.51e-01 1.17e-02 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 27 0.00e+00 6.25e-01 U235 nu-fission 3.69e-01 2.86e-02 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 27 0.00e+00 6.25e-01 U238 fission 2.07e-07 1.47e-08 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 27 0.00e+00 6.25e-01 U238 nu-fission 5.17e-07 3.66e-08 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 27 6.25e-01 2.00e+07 U235 fission 2.57e-02 2.43e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 27 6.25e-01 2.00e+07 U235 nu-fission 6.30e-02 5.92e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 27 6.25e-01 2.00e+07 U238 fission 1.47e-02 1.41e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 27 6.25e-01 2.00e+07 U238 nu-fission 4.12e-02 4.02e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. -0 21 0.00e+00 6.25e-01 U235 fission 1.75e-01 1.20e-02 -1 21 0.00e+00 6.25e-01 U235 nu-fission 4.26e-01 2.92e-02 -2 21 0.00e+00 6.25e-01 U238 fission 2.41e-07 1.61e-08 -3 21 0.00e+00 6.25e-01 U238 nu-fission 6.00e-07 4.01e-08 -4 21 6.25e-01 2.00e+07 U235 fission 2.89e-02 2.07e-03 -5 21 6.25e-01 2.00e+07 U235 nu-fission 7.07e-02 5.06e-03 -6 21 6.25e-01 2.00e+07 U238 fission 1.41e-02 5.76e-04 -7 21 6.25e-01 2.00e+07 U238 nu-fission 3.95e-02 1.90e-03 -8 27 0.00e+00 6.25e-01 U235 fission 1.51e-01 1.17e-02 -9 27 0.00e+00 6.25e-01 U235 nu-fission 3.69e-01 2.86e-02 -10 27 0.00e+00 6.25e-01 U238 fission 2.07e-07 1.47e-08 -11 27 0.00e+00 6.25e-01 U238 nu-fission 5.17e-07 3.66e-08 -12 27 6.25e-01 2.00e+07 U235 fission 2.57e-02 2.43e-03 -13 27 6.25e-01 2.00e+07 U235 nu-fission 6.30e-02 5.92e-03 -14 27 6.25e-01 2.00e+07 U238 fission 1.47e-02 1.41e-03 -15 27 6.25e-01 2.00e+07 U238 nu-fission 4.12e-02 4.02e-03 +0 21 0.00e+00 6.25e-01 U235 fission 1.93e-01 1.92e-02 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-01 U235 nu-fission 4.70e-01 4.67e-02 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-01 U238 fission 2.65e-07 2.60e-08 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-01 U238 nu-fission 6.60e-07 6.47e-08 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 21 6.25e-01 2.00e+07 U235 fission 3.39e-02 1.53e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 21 6.25e-01 2.00e+07 U235 nu-fission 8.30e-02 3.75e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 21 6.25e-01 2.00e+07 U238 fission 1.70e-02 2.01e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 21 6.25e-01 2.00e+07 U238 nu-fission 4.76e-02 6.12e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 27 0.00e+00 6.25e-01 U235 fission 7.61e-02 5.84e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 27 0.00e+00 6.25e-01 U235 nu-fission 1.85e-01 1.42e-02 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 27 0.00e+00 6.25e-01 U238 fission 1.06e-07 7.62e-09 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 27 0.00e+00 6.25e-01 U238 nu-fission 2.64e-07 1.90e-08 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 27 6.25e-01 2.00e+07 U235 fission 1.69e-02 1.34e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 27 6.25e-01 2.00e+07 U235 nu-fission 4.15e-02 3.29e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 27 6.25e-01 2.00e+07 U238 fission 1.10e-02 1.69e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 27 6.25e-01 2.00e+07 U238 nu-fission 3.13e-02 5.35e-03 cell energy low [eV] energy high [eV] nuclide score mean std. dev. +0 21 0.00e+00 6.25e-01 U235 fission 1.93e-01 1.92e-02 +1 21 0.00e+00 6.25e-01 U235 nu-fission 4.70e-01 4.67e-02 +2 21 0.00e+00 6.25e-01 U238 fission 2.65e-07 2.60e-08 +3 21 0.00e+00 6.25e-01 U238 nu-fission 6.60e-07 6.47e-08 +4 21 6.25e-01 2.00e+07 U235 fission 3.39e-02 1.53e-03 +5 21 6.25e-01 2.00e+07 U235 nu-fission 8.30e-02 3.75e-03 +6 21 6.25e-01 2.00e+07 U238 fission 1.70e-02 2.01e-03 +7 21 6.25e-01 2.00e+07 U238 nu-fission 4.76e-02 6.12e-03 +8 27 0.00e+00 6.25e-01 U235 fission 7.61e-02 5.84e-03 +9 27 0.00e+00 6.25e-01 U235 nu-fission 1.85e-01 1.42e-02 +10 27 0.00e+00 6.25e-01 U238 fission 1.06e-07 7.62e-09 +11 27 0.00e+00 6.25e-01 U238 nu-fission 2.64e-07 1.90e-08 +12 27 6.25e-01 2.00e+07 U235 fission 1.69e-02 1.34e-03 +13 27 6.25e-01 2.00e+07 U235 nu-fission 4.15e-02 3.29e-03 +14 27 6.25e-01 2.00e+07 U238 fission 1.10e-02 1.69e-03 +15 27 6.25e-01 2.00e+07 U238 nu-fission 3.13e-02 5.35e-03 sum(distribcell) energy low [eV] energy high [eV] nuclide score mean std. dev. 0 (0, 100, 2000, 30000) 0.00e+00 6.25e-01 U235 fission 0.00e+00 0.00e+00 1 (0, 100, 2000, 30000) 0.00e+00 6.25e-01 U235 nu-fission 0.00e+00 0.00e+00 2 (0, 100, 2000, 30000) 0.00e+00 6.25e-01 U238 fission 0.00e+00 0.00e+00 3 (0, 100, 2000, 30000) 0.00e+00 6.25e-01 U238 nu-fission 0.00e+00 0.00e+00 -4 (0, 100, 2000, 30000) 6.25e-01 2.00e+07 U235 fission 9.53e-07 9.53e-07 -5 (0, 100, 2000, 30000) 6.25e-01 2.00e+07 U235 nu-fission 2.37e-06 2.37e-06 -6 (0, 100, 2000, 30000) 6.25e-01 2.00e+07 U238 fission 1.25e-08 1.25e-08 -7 (0, 100, 2000, 30000) 6.25e-01 2.00e+07 U238 nu-fission 3.15e-08 3.15e-08 +4 (0, 100, 2000, 30000) 6.25e-01 2.00e+07 U235 fission 0.00e+00 0.00e+00 +5 (0, 100, 2000, 30000) 6.25e-01 2.00e+07 U235 nu-fission 0.00e+00 0.00e+00 +6 (0, 100, 2000, 30000) 6.25e-01 2.00e+07 U238 fission 0.00e+00 0.00e+00 +7 (0, 100, 2000, 30000) 6.25e-01 2.00e+07 U238 nu-fission 0.00e+00 0.00e+00 8 (500, 5000, 50000) 0.00e+00 6.25e-01 U235 fission 0.00e+00 0.00e+00 9 (500, 5000, 50000) 0.00e+00 6.25e-01 U235 nu-fission 0.00e+00 0.00e+00 10 (500, 5000, 50000) 0.00e+00 6.25e-01 U238 fission 0.00e+00 0.00e+00 @@ -49,19 +49,19 @@ 14 (500, 5000, 50000) 6.25e-01 2.00e+07 U238 fission 0.00e+00 0.00e+00 15 (500, 5000, 50000) 6.25e-01 2.00e+07 U238 nu-fission 0.00e+00 0.00e+00 sum(mesh) energy low [eV] energy high [eV] nuclide score mean std. dev. -0 ((1, 1), (1, 2)) 0.00e+00 6.25e-01 U235 fission 6.73e-03 3.04e-03 -1 ((1, 1), (1, 2)) 0.00e+00 6.25e-01 U235 nu-fission 1.64e-02 7.40e-03 -2 ((1, 1), (1, 2)) 0.00e+00 6.25e-01 U238 fission 8.80e-09 3.84e-09 -3 ((1, 1), (1, 2)) 0.00e+00 6.25e-01 U238 nu-fission 2.19e-08 9.56e-09 -4 ((1, 1), (1, 2)) 6.25e-01 2.00e+07 U235 fission 9.89e-04 3.53e-04 -5 ((1, 1), (1, 2)) 6.25e-01 2.00e+07 U235 nu-fission 2.42e-03 8.60e-04 -6 ((1, 1), (1, 2)) 6.25e-01 2.00e+07 U238 fission 5.01e-04 2.13e-04 -7 ((1, 1), (1, 2)) 6.25e-01 2.00e+07 U238 nu-fission 1.36e-03 5.86e-04 -8 ((2, 1), (2, 2)) 0.00e+00 6.25e-01 U235 fission 1.63e-02 4.21e-03 -9 ((2, 1), (2, 2)) 0.00e+00 6.25e-01 U235 nu-fission 3.98e-02 1.02e-02 -10 ((2, 1), (2, 2)) 0.00e+00 6.25e-01 U238 fission 2.28e-08 5.90e-09 -11 ((2, 1), (2, 2)) 0.00e+00 6.25e-01 U238 nu-fission 5.67e-08 1.47e-08 -12 ((2, 1), (2, 2)) 6.25e-01 2.00e+07 U235 fission 1.79e-03 4.31e-04 -13 ((2, 1), (2, 2)) 6.25e-01 2.00e+07 U235 nu-fission 4.37e-03 1.05e-03 -14 ((2, 1), (2, 2)) 6.25e-01 2.00e+07 U238 fission 7.51e-04 2.51e-04 -15 ((2, 1), (2, 2)) 6.25e-01 2.00e+07 U238 nu-fission 2.02e-03 6.71e-04 +0 ((1, 1), (1, 2)) 0.00e+00 6.25e-01 U235 fission 1.94e-03 1.03e-03 +1 ((1, 1), (1, 2)) 0.00e+00 6.25e-01 U235 nu-fission 4.74e-03 2.50e-03 +2 ((1, 1), (1, 2)) 0.00e+00 6.25e-01 U238 fission 2.74e-09 1.42e-09 +3 ((1, 1), (1, 2)) 0.00e+00 6.25e-01 U238 nu-fission 6.83e-09 3.53e-09 +4 ((1, 1), (1, 2)) 6.25e-01 2.00e+07 U235 fission 9.02e-04 3.69e-04 +5 ((1, 1), (1, 2)) 6.25e-01 2.00e+07 U235 nu-fission 2.24e-03 9.12e-04 +6 ((1, 1), (1, 2)) 6.25e-01 2.00e+07 U238 fission 1.44e-03 8.42e-04 +7 ((1, 1), (1, 2)) 6.25e-01 2.00e+07 U238 nu-fission 4.37e-03 2.64e-03 +8 ((2, 1), (2, 2)) 0.00e+00 6.25e-01 U235 fission 1.27e-02 2.76e-03 +9 ((2, 1), (2, 2)) 0.00e+00 6.25e-01 U235 nu-fission 3.09e-02 6.72e-03 +10 ((2, 1), (2, 2)) 0.00e+00 6.25e-01 U238 fission 1.70e-08 3.57e-09 +11 ((2, 1), (2, 2)) 0.00e+00 6.25e-01 U238 nu-fission 4.25e-08 8.90e-09 +12 ((2, 1), (2, 2)) 6.25e-01 2.00e+07 U235 fission 1.43e-03 1.69e-04 +13 ((2, 1), (2, 2)) 6.25e-01 2.00e+07 U235 nu-fission 3.52e-03 4.20e-04 +14 ((2, 1), (2, 2)) 6.25e-01 2.00e+07 U238 fission 1.37e-03 2.98e-04 +15 ((2, 1), (2, 2)) 6.25e-01 2.00e+07 U238 nu-fission 4.16e-03 1.08e-03 diff --git a/tests/regression_tests/torus/results_true.dat b/tests/regression_tests/torus/results_true.dat index 42fb209cce3..84cd3c7a444 100644 --- a/tests/regression_tests/torus/results_true.dat +++ b/tests/regression_tests/torus/results_true.dat @@ -1,2 +1,2 @@ k-combined: -7.667201E-01 1.136882E-02 +7.666453E-01 1.478848E-02 diff --git a/tests/regression_tests/trace/results_true.dat b/tests/regression_tests/trace/results_true.dat index bbf03de9437..97b997ae6b9 100644 --- a/tests/regression_tests/trace/results_true.dat +++ b/tests/regression_tests/trace/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.070134E-01 3.900396E-03 +2.940336E-01 7.338463E-04 diff --git a/tests/regression_tests/track_output/results_true.dat b/tests/regression_tests/track_output/results_true.dat index 148b54a30b0..205ac3eecb6 100644 --- a/tests/regression_tests/track_output/results_true.dat +++ b/tests/regression_tests/track_output/results_true.dat @@ -143,76 +143,74 @@ neutron [((-9.469716e-01, -2.580266e-01, 1.414357e-01), (1.438873e-01, 2.365819e ((-3.920090e+00, -9.211794e-01, 2.908406e+00), (9.094673e-01, -3.659267e-01, -1.974002e-01), 9.547085e+00, 1.260840e-07, 1.000000e+00, 23, 2387, 1) ((-3.729948e+00, -9.976834e-01, 2.867135e+00), (-2.916959e-01, -6.494657e-01, -7.022164e-01), 8.590591e+00, 1.750036e-07, 1.000000e+00, 23, 2387, 1) ((-3.744933e+00, -1.031047e+00, 2.831062e+00), (-2.916959e-01, -6.494657e-01, -7.022164e-01), 8.590591e+00, 1.876753e-07, 0.000000e+00, 23, 2387, 1)] -neutron [((6.474155e+00, -5.192870e+00, 5.413003e+00), (-9.112559e-01, 3.950037e-01, 1.165536e-01), 2.052226e+06, 4.450859e-05, 1.000000e+00, 21, 2367, 2) - ((6.037250e+00, -5.003484e+00, 5.468885e+00), (-9.112559e-01, 3.950037e-01, 1.165536e-01), 2.052226e+06, 4.450883e-05, 1.000000e+00, 22, 2367, 3) - ((5.942573e+00, -4.962444e+00, 5.480995e+00), (-9.112559e-01, 3.950037e-01, 1.165536e-01), 2.052226e+06, 4.450889e-05, 1.000000e+00, 23, 2367, 1) - ((5.861800e+00, -4.927431e+00, 5.491326e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.450893e-05, 1.000000e+00, 23, 2367, 1) - ((5.725160e+00, -4.971424e+00, 5.491002e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.450903e-05, 1.000000e+00, 23, 2366, 1) - ((5.494150e+00, -5.045802e+00, 5.490454e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.450919e-05, 1.000000e+00, 22, 2366, 3) - ((5.392865e+00, -5.078412e+00, 5.490213e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.450927e-05, 1.000000e+00, 21, 2366, 2) - ((4.612759e+00, -5.329579e+00, 5.488362e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.450982e-05, 1.000000e+00, 22, 2366, 3) - ((4.511474e+00, -5.362189e+00, 5.488121e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.450989e-05, 1.000000e+00, 23, 2366, 1) - ((4.089400e+00, -5.498082e+00, 5.487119e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.451019e-05, 1.000000e+00, 23, 2365, 1) - ((3.384113e+00, -5.725160e+00, 5.485445e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.451069e-05, 1.000000e+00, 23, 2351, 1) - ((2.453640e+00, -6.024740e+00, 5.483237e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.451136e-05, 1.000000e+00, 23, 2350, 1) - ((2.086813e+00, -6.142846e+00, 5.482366e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.451162e-05, 1.000000e+00, 22, 2350, 3) - ((1.993594e+00, -6.172859e+00, 5.482145e+00), (-9.518772e-01, -3.064714e-01, -2.259335e-03), 1.141417e+06, 4.451168e-05, 1.000000e+00, 21, 2350, 2) - ((1.325704e+00, -6.387896e+00, 5.480560e+00), (8.986086e-01, -4.380574e-01, -2.466265e-02), 9.775839e+05, 4.451216e-05, 1.000000e+00, 21, 2350, 2) - ((2.061403e+00, -6.746538e+00, 5.460368e+00), (-7.778764e-01, 2.051975e-01, -5.939716e-01), 7.813219e+05, 4.451276e-05, 1.000000e+00, 21, 2350, 2) - ((1.122794e+00, -6.498940e+00, 4.743664e+00), (-7.778764e-01, 2.051975e-01, -5.939716e-01), 7.813219e+05, 4.451375e-05, 1.000000e+00, 22, 2350, 3) - ((1.036483e+00, -6.476172e+00, 4.677758e+00), (-7.778764e-01, 2.051975e-01, -5.939716e-01), 7.813219e+05, 4.451384e-05, 1.000000e+00, 23, 2350, 1) - ((8.178800e-01, -6.418507e+00, 4.510837e+00), (-7.778764e-01, 2.051975e-01, -5.939716e-01), 7.813219e+05, 4.451407e-05, 1.000000e+00, 23, 2349, 1) - ((5.725264e-01, -6.353784e+00, 4.323490e+00), (-7.778764e-01, 2.051975e-01, -5.939716e-01), 7.813219e+05, 4.451432e-05, 1.000000e+00, 22, 2349, 3) - ((4.668297e-01, -6.325902e+00, 4.242782e+00), (-7.778764e-01, 2.051975e-01, -5.939716e-01), 7.813219e+05, 4.451444e-05, 1.000000e+00, 21, 2349, 2) - ((-2.989816e-01, -6.123888e+00, 3.658023e+00), (-7.778764e-01, 2.051975e-01, -5.939716e-01), 7.813219e+05, 4.451524e-05, 1.000000e+00, 22, 2349, 3) - ((-4.046782e-01, -6.096006e+00, 3.577315e+00), (-7.778764e-01, 2.051975e-01, -5.939716e-01), 7.813219e+05, 4.451535e-05, 1.000000e+00, 23, 2349, 1) - ((-8.040445e-01, -5.990656e+00, 3.272367e+00), (-7.989001e-01, -1.890553e-01, -5.709787e-01), 6.637114e+05, 4.451577e-05, 1.000000e+00, 23, 2349, 1) - ((-8.178800e-01, -5.993930e+00, 3.262478e+00), (-7.989001e-01, -1.890553e-01, -5.709787e-01), 6.637114e+05, 4.451579e-05, 1.000000e+00, 23, 2348, 1) - ((-1.077910e+00, -6.055465e+00, 3.076633e+00), (-4.487118e-01, 1.670254e-01, -8.779295e-01), 4.550608e+05, 4.451608e-05, 1.000000e+00, 23, 2348, 1) - ((-1.215611e+00, -6.004208e+00, 2.807214e+00), (7.872329e-01, 4.481433e-01, -4.235941e-01), 3.544207e+03, 4.451641e-05, 1.000000e+00, 23, 2348, 1) - ((-1.100296e+00, -5.938564e+00, 2.745166e+00), (8.468456e-01, 5.310954e-01, 2.811230e-02), 2.812308e+03, 4.451819e-05, 1.000000e+00, 23, 2348, 1) - ((-8.178800e-01, -5.761448e+00, 2.754541e+00), (8.468456e-01, 5.310954e-01, 2.811230e-02), 2.812308e+03, 4.452273e-05, 1.000000e+00, 23, 2349, 1) - ((-7.600184e-01, -5.725160e+00, 2.756462e+00), (8.468456e-01, 5.310954e-01, 2.811230e-02), 2.812308e+03, 4.452366e-05, 1.000000e+00, 23, 2363, 1) - ((-2.947156e-01, -5.433347e+00, 2.771908e+00), (8.468456e-01, 5.310954e-01, 2.811230e-02), 2.812308e+03, 4.453115e-05, 1.000000e+00, 22, 2363, 3) - ((-2.073333e-01, -5.378546e+00, 2.774809e+00), (8.468456e-01, 5.310954e-01, 2.811230e-02), 2.812308e+03, 4.453256e-05, 1.000000e+00, 21, 2363, 2) - ((-1.746705e-01, -5.358062e+00, 2.775893e+00), (5.278774e-01, 5.459205e-01, 6.506276e-01), 2.806481e+03, 4.453309e-05, 1.000000e+00, 21, 2363, 2) - ((-8.681718e-02, -5.267205e+00, 2.884176e+00), (-8.975500e-01, 8.968076e-04, -4.409119e-01), 2.764929e+03, 4.453536e-05, 1.000000e+00, 21, 2363, 2) - ((-3.684221e-01, -5.266924e+00, 2.745840e+00), (-8.975500e-01, 8.968076e-04, -4.409119e-01), 2.764929e+03, 4.453967e-05, 1.000000e+00, 22, 2363, 3) - ((-4.840903e-01, -5.266809e+00, 2.689019e+00), (-8.975500e-01, 8.968076e-04, -4.409119e-01), 2.764929e+03, 4.454144e-05, 1.000000e+00, 23, 2363, 1) - ((-8.178800e-01, -5.266475e+00, 2.525049e+00), (-8.975500e-01, 8.968076e-04, -4.409119e-01), 2.764929e+03, 4.454656e-05, 1.000000e+00, 23, 2362, 1) - ((-1.151175e+00, -5.266142e+00, 2.361321e+00), (-8.975500e-01, 8.968076e-04, -4.409119e-01), 2.764929e+03, 4.455166e-05, 1.000000e+00, 22, 2362, 3) - ((-1.266464e+00, -5.266027e+00, 2.304687e+00), (-8.975500e-01, 8.968076e-04, -4.409119e-01), 2.764929e+03, 4.455343e-05, 1.000000e+00, 21, 2362, 2) - ((-2.005772e+00, -5.265288e+00, 1.941509e+00), (-8.975500e-01, 8.968076e-04, -4.409119e-01), 2.764929e+03, 4.456475e-05, 1.000000e+00, 22, 2362, 3) - ((-2.121061e+00, -5.265173e+00, 1.884875e+00), (-8.975500e-01, 8.968076e-04, -4.409119e-01), 2.764929e+03, 4.456652e-05, 1.000000e+00, 23, 2362, 1) - ((-2.393759e+00, -5.264900e+00, 1.750915e+00), (-9.607392e-01, -1.749373e-01, 2.153533e-01), 1.619469e+03, 4.457070e-05, 1.000000e+00, 23, 2362, 1) - ((-2.453640e+00, -5.275804e+00, 1.764337e+00), (-9.607392e-01, -1.749373e-01, 2.153533e-01), 1.619469e+03, 4.457182e-05, 1.000000e+00, 23, 2361, 1) - ((-2.470658e+00, -5.278903e+00, 1.768152e+00), (-6.728606e-01, -2.916408e-01, -6.798561e-01), 4.873672e+02, 4.457214e-05, 1.000000e+00, 23, 2361, 1) - ((-3.463692e+00, -5.709318e+00, 7.647939e-01), (-2.249302e-01, -9.330150e-01, -2.808728e-01), 1.790901e+02, 4.462047e-05, 1.000000e+00, 23, 2361, 1) - ((-3.467511e+00, -5.725160e+00, 7.600247e-01), (-2.249302e-01, -9.330150e-01, -2.808728e-01), 1.790901e+02, 4.462139e-05, 1.000000e+00, 23, 2347, 1) - ((-3.533785e+00, -6.000066e+00, 6.772677e-01), (-2.249302e-01, -9.330150e-01, -2.808728e-01), 1.790901e+02, 4.463730e-05, 1.000000e+00, 22, 2347, 3) - ((-3.562245e+00, -6.118119e+00, 6.417291e-01), (-2.249302e-01, -9.330150e-01, -2.808728e-01), 1.790901e+02, 4.464414e-05, 1.000000e+00, 21, 2347, 2) - ((-3.723934e+00, -6.788806e+00, 4.398272e-01), (-2.249302e-01, -9.330150e-01, -2.808728e-01), 1.790901e+02, 4.468297e-05, 1.000000e+00, 22, 2347, 3) - ((-3.752394e+00, -6.906859e+00, 4.042885e-01), (-2.249302e-01, -9.330150e-01, -2.808728e-01), 1.790901e+02, 4.468981e-05, 1.000000e+00, 23, 2347, 1) - ((-3.848515e+00, -7.305571e+00, 2.842613e-01), (6.498448e-01, -3.243413e-01, -6.873896e-01), 2.328979e+01, 4.471290e-05, 1.000000e+00, 23, 2347, 1) - ((-3.737619e+00, -7.360920e+00, 1.669579e-01), (6.498448e-01, -3.243413e-01, -6.873896e-01), 2.328979e+01, 4.473846e-05, 1.000000e+00, 11, 1750, 1) - ((-3.574308e+00, -7.442429e+00, -5.788041e-03), (6.794505e-01, 3.157106e-01, -6.623246e-01), 1.590416e+01, 4.477611e-05, 1.000000e+00, 11, 1750, 1) - ((-3.398889e+00, -7.360920e+00, -1.767852e-01), (6.794505e-01, 3.157106e-01, -6.623246e-01), 1.590416e+01, 4.482292e-05, 1.000000e+00, 23, 2347, 1) - ((-2.904712e+00, -7.131298e+00, -6.585068e-01), (-4.836985e-02, -2.819627e-01, -9.582053e-01), 2.610202e+00, 4.495477e-05, 1.000000e+00, 23, 2347, 1) - ((-2.923579e+00, -7.241285e+00, -1.032280e+00), (-6.089807e-01, -2.347428e-01, -7.576532e-01), 1.671268e+00, 4.512933e-05, 1.000000e+00, 23, 2347, 1) - ((-3.012516e+00, -7.275567e+00, -1.142930e+00), (3.221931e-01, -5.406104e-01, -7.771306e-01), 1.275709e-01, 4.521100e-05, 1.000000e+00, 23, 2347, 1) - ((-2.984032e+00, -7.323360e+00, -1.211633e+00), (-8.629564e-01, -1.719529e-01, -4.751195e-01), 1.897424e-02, 4.538995e-05, 1.000000e+00, 23, 2347, 1) - ((-3.172528e+00, -7.360920e+00, -1.315413e+00), (-8.629564e-01, -1.719529e-01, -4.751195e-01), 1.897424e-02, 4.653641e-05, 1.000000e+00, 11, 1750, 1) - ((-3.602328e+00, -7.446562e+00, -1.552049e+00), (-1.530190e-01, -7.092235e-01, 6.881767e-01), 1.306951e-02, 4.915052e-05, 1.000000e+00, 11, 1750, 1) - ((-3.625236e+00, -7.552741e+00, -1.449021e+00), (-1.976867e-01, 2.826475e-01, 9.386322e-01), 2.145548e-02, 5.009730e-05, 1.000000e+00, 11, 1750, 1) - ((-3.636290e+00, -7.536936e+00, -1.396537e+00), (1.266676e-01, 2.265353e-01, -9.657314e-01), 1.815564e-02, 5.037329e-05, 1.000000e+00, 11, 1750, 1) - ((-3.621792e+00, -7.511008e+00, -1.507069e+00), (-4.275550e-01, 8.441443e-01, 3.234457e-01), 1.848049e-02, 5.098741e-05, 1.000000e+00, 11, 1750, 1) - ((-3.697811e+00, -7.360920e+00, -1.449560e+00), (-4.275550e-01, 8.441443e-01, 3.234457e-01), 1.848049e-02, 5.193300e-05, 1.000000e+00, 23, 2347, 1) - ((-3.703436e+00, -7.349814e+00, -1.445305e+00), (-7.832167e-01, 5.713670e-01, 2.451762e-01), 1.861705e-02, 5.200297e-05, 1.000000e+00, 23, 2347, 1) - ((-3.823243e+00, -7.262414e+00, -1.407801e+00), (-9.917106e-01, 5.069164e-02, 1.180695e-01), 4.703334e-02, 5.281350e-05, 1.000000e+00, 23, 2347, 1) - ((-4.089400e+00, -7.248809e+00, -1.376113e+00), (-9.917106e-01, 5.069164e-02, 1.180695e-01), 4.703334e-02, 5.370820e-05, 1.000000e+00, 23, 2346, 1) - ((-4.131081e+00, -7.246679e+00, -1.371151e+00), (9.108632e-01, -4.018526e-01, 9.403556e-02), 8.057393e-02, 5.384831e-05, 1.000000e+00, 23, 2346, 1) - ((-4.089400e+00, -7.265067e+00, -1.366848e+00), (9.108632e-01, -4.018526e-01, 9.403556e-02), 8.057393e-02, 5.396486e-05, 1.000000e+00, 23, 2347, 1) - ((-3.872134e+00, -7.360920e+00, -1.344418e+00), (9.108632e-01, -4.018526e-01, 9.403556e-02), 8.057393e-02, 5.457240e-05, 1.000000e+00, 11, 1750, 1) - ((-3.673062e+00, -7.448746e+00, -1.323866e+00), (2.976906e-01, 8.174443e-01, -4.931178e-01), 5.538060e-02, 5.512905e-05, 1.000000e+00, 11, 1750, 1) - ((-3.658580e+00, -7.408978e+00, -1.347855e+00), (-5.409120e-01, 8.345378e-01, -1.046943e-01), 8.122576e-02, 5.527851e-05, 1.000000e+00, 11, 1750, 1) - ((-3.682981e+00, -7.371331e+00, -1.352578e+00), (-5.409120e-01, 8.345378e-01, -1.046943e-01), 8.122576e-02, 5.539295e-05, 0.000000e+00, 11, 1750, 1)] +neutron [((6.474155e+00, -5.192870e+00, 5.413003e+00), (-9.597810e-01, -1.081529e-01, -2.590820e-01), 9.900333e+05, 4.450859e-05, 1.000000e+00, 21, 2367, 2) + ((6.142109e+00, -5.230286e+00, 5.323371e+00), (-9.597810e-01, -1.081529e-01, -2.590820e-01), 9.900333e+05, 4.450884e-05, 1.000000e+00, 22, 2367, 3) + ((6.041244e+00, -5.241652e+00, 5.296144e+00), (-9.597810e-01, -1.081529e-01, -2.590820e-01), 9.900333e+05, 4.450892e-05, 1.000000e+00, 23, 2367, 1) + ((6.004037e+00, -5.245845e+00, 5.286100e+00), (-6.195407e-01, -7.332723e-01, -2.801446e-01), 5.512347e+05, 4.450895e-05, 1.000000e+00, 23, 2367, 1) + ((5.725160e+00, -5.575916e+00, 5.159997e+00), (-6.195407e-01, -7.332723e-01, -2.801446e-01), 5.512347e+05, 4.450939e-05, 1.000000e+00, 23, 2366, 1) + ((5.599064e+00, -5.725160e+00, 5.102979e+00), (-6.195407e-01, -7.332723e-01, -2.801446e-01), 5.512347e+05, 4.450958e-05, 1.000000e+00, 23, 2352, 1) + ((5.296886e+00, -6.082810e+00, 4.966340e+00), (-6.195407e-01, -7.332723e-01, -2.801446e-01), 5.512347e+05, 4.451006e-05, 1.000000e+00, 22, 2352, 3) + ((5.240003e+00, -6.150135e+00, 4.940619e+00), (-6.195407e-01, -7.332723e-01, -2.801446e-01), 5.512347e+05, 4.451015e-05, 1.000000e+00, 21, 2352, 2) + ((4.752072e+00, -6.727638e+00, 4.719986e+00), (3.721510e-02, -9.647240e-01, 2.606197e-01), 5.045933e+05, 4.451092e-05, 1.000000e+00, 21, 2352, 2) + ((4.764028e+00, -7.037568e+00, 4.803713e+00), (3.721510e-02, -9.647240e-01, 2.606197e-01), 5.045933e+05, 4.451124e-05, 1.000000e+00, 22, 2352, 3) + ((4.767580e+00, -7.129630e+00, 4.828584e+00), (3.721510e-02, -9.647240e-01, 2.606197e-01), 5.045933e+05, 4.451134e-05, 1.000000e+00, 23, 2352, 1) + ((4.776502e+00, -7.360920e+00, 4.891066e+00), (3.721510e-02, -9.647240e-01, 2.606197e-01), 5.045933e+05, 4.451158e-05, 1.000000e+00, 23, 2338, 1) + ((4.778286e+00, -7.407162e+00, 4.903559e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451163e-05, 1.000000e+00, 23, 2338, 1) + ((4.981926e+00, -7.580442e+00, 5.259893e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451239e-05, 1.000000e+00, 22, 2338, 3) + ((5.154144e+00, -7.726985e+00, 5.561246e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451303e-05, 1.000000e+00, 21, 2338, 2) + ((5.313757e+00, -7.862801e+00, 5.840540e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451362e-05, 1.000000e+00, 22, 2338, 3) + ((5.485976e+00, -8.009344e+00, 6.141893e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451426e-05, 1.000000e+00, 23, 2338, 1) + ((5.725160e+00, -8.212869e+00, 6.560424e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451515e-05, 1.000000e+00, 23, 2339, 1) + ((6.004950e+00, -8.450945e+00, 7.050007e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451618e-05, 1.000000e+00, 22, 2339, 3) + ((6.360530e+00, -8.753512e+00, 7.672210e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451750e-05, 1.000000e+00, 23, 2339, 1) + ((6.646303e+00, -8.996680e+00, 8.172263e+00), (4.571054e-01, -3.889563e-01, 7.998548e-01), 1.818775e+05, 4.451856e-05, 1.000000e+00, 23, 2326, 1) + ((6.702490e+00, -9.044491e+00, 8.270582e+00), (2.028534e-01, -9.607965e-01, -1.889990e-01), 1.805295e+04, 4.451877e-05, 1.000000e+00, 23, 2326, 1) + ((6.745127e+00, -9.246436e+00, 8.230857e+00), (2.028534e-01, -9.607965e-01, -1.889990e-01), 1.805295e+04, 4.451990e-05, 1.000000e+00, 22, 2326, 3) + ((6.767219e+00, -9.351070e+00, 8.210274e+00), (2.028534e-01, -9.607965e-01, -1.889990e-01), 1.805295e+04, 4.452049e-05, 1.000000e+00, 21, 2326, 2) + ((6.885344e+00, -9.910562e+00, 8.100216e+00), (-3.857824e-01, -3.006310e-01, -8.722344e-01), 1.795765e+04, 4.452362e-05, 1.000000e+00, 21, 2326, 2) + ((6.803615e+00, -9.974251e+00, 7.915431e+00), (-7.096135e-01, 6.778415e-01, 1.923009e-01), 1.779137e+04, 4.452476e-05, 1.000000e+00, 21, 2326, 2) + ((6.334815e+00, -9.526441e+00, 8.042473e+00), (-1.748210e-01, 9.821705e-01, -6.912779e-02), 1.729669e+04, 4.452835e-05, 1.000000e+00, 21, 2326, 2) + ((6.304853e+00, -9.358111e+00, 8.030625e+00), (-1.748210e-01, 9.821705e-01, -6.912779e-02), 1.729669e+04, 4.452929e-05, 1.000000e+00, 22, 2326, 3) + ((6.288777e+00, -9.267793e+00, 8.024268e+00), (-1.748210e-01, 9.821705e-01, -6.912779e-02), 1.729669e+04, 4.452979e-05, 1.000000e+00, 23, 2326, 1) + ((6.275105e+00, -9.190979e+00, 8.018862e+00), (-7.174952e-01, 5.897531e-01, -3.706642e-01), 9.207900e+03, 4.453022e-05, 1.000000e+00, 23, 2326, 1) + ((6.038719e+00, -8.996680e+00, 7.896743e+00), (-7.174952e-01, 5.897531e-01, -3.706642e-01), 9.207900e+03, 4.453271e-05, 1.000000e+00, 23, 2339, 1) + ((6.028805e+00, -8.988531e+00, 7.891621e+00), (-2.989803e-01, 4.300779e-01, -8.518473e-01), 5.653774e+03, 4.453281e-05, 1.000000e+00, 23, 2339, 1) + ((5.725160e+00, -8.551743e+00, 7.026484e+00), (-2.989803e-01, 4.300779e-01, -8.518473e-01), 5.653774e+03, 4.454257e-05, 1.000000e+00, 23, 2338, 1) + ((5.507324e+00, -8.238390e+00, 6.405832e+00), (-2.989803e-01, 4.300779e-01, -8.518473e-01), 5.653774e+03, 4.454958e-05, 1.000000e+00, 22, 2338, 3) + ((5.417387e+00, -8.109017e+00, 6.149584e+00), (-2.989803e-01, 4.300779e-01, -8.518473e-01), 5.653774e+03, 4.455247e-05, 1.000000e+00, 21, 2338, 2) + ((5.162017e+00, -7.741671e+00, 5.421991e+00), (7.522612e-01, -1.036919e-01, -6.506543e-01), 5.619608e+03, 4.456069e-05, 1.000000e+00, 21, 2338, 2) + ((5.184146e+00, -7.744722e+00, 5.402851e+00), (7.522612e-01, -1.036919e-01, -6.506543e-01), 5.619608e+03, 4.456097e-05, 1.000000e+00, 22, 2338, 3) + ((5.348057e+00, -7.767315e+00, 5.261079e+00), (7.522612e-01, -1.036919e-01, -6.506543e-01), 5.619608e+03, 4.456307e-05, 1.000000e+00, 23, 2338, 1) + ((5.581568e+00, -7.799502e+00, 5.059108e+00), (2.029690e-01, -4.131185e-01, -8.877706e-01), 3.359662e+03, 4.456606e-05, 1.000000e+00, 23, 2338, 1) + ((5.707007e+00, -8.054818e+00, 4.510447e+00), (3.894183e-01, -7.459178e-01, -5.403333e-01), 3.303714e+03, 4.457377e-05, 1.000000e+00, 23, 2338, 1) + ((5.725160e+00, -8.089590e+00, 4.485259e+00), (3.894183e-01, -7.459178e-01, -5.403333e-01), 3.303714e+03, 4.457436e-05, 1.000000e+00, 23, 2339, 1) + ((5.750893e+00, -8.138881e+00, 4.449554e+00), (-2.879829e-01, -5.545287e-01, -7.807456e-01), 1.744626e+03, 4.457519e-05, 1.000000e+00, 23, 2339, 1) + ((5.725160e+00, -8.188431e+00, 4.379790e+00), (-2.879829e-01, -5.545287e-01, -7.807456e-01), 1.744626e+03, 4.457674e-05, 1.000000e+00, 23, 2338, 1) + ((5.532143e+00, -8.560097e+00, 3.856504e+00), (-6.185172e-01, -7.766669e-01, -1.192687e-01), 8.559363e+02, 4.458834e-05, 1.000000e+00, 23, 2338, 1) + ((5.522333e+00, -8.572415e+00, 3.854613e+00), (-3.452053e-01, -2.657159e-02, -9.381510e-01), 9.272133e+01, 4.458873e-05, 1.000000e+00, 23, 2338, 1) + ((5.366948e+00, -8.584375e+00, 3.432328e+00), (4.761677e-01, -8.187551e-01, -3.207871e-01), 6.522002e+00, 4.462253e-05, 1.000000e+00, 23, 2338, 1) + ((5.516634e+00, -8.841755e+00, 3.331487e+00), (4.237115e-01, -6.022578e-01, 6.765752e-01), 9.968491e-01, 4.471152e-05, 1.000000e+00, 23, 2338, 1) + ((5.625629e+00, -8.996680e+00, 3.505530e+00), (4.237115e-01, -6.022578e-01, 6.765752e-01), 9.968491e-01, 4.489779e-05, 1.000000e+00, 23, 2325, 1) + ((5.723424e+00, -9.135684e+00, 3.661687e+00), (7.706137e-01, -6.358415e-01, 4.312932e-02), 5.695813e-01, 4.506493e-05, 1.000000e+00, 23, 2325, 1) + ((5.725160e+00, -9.137116e+00, 3.661784e+00), (7.706137e-01, -6.358415e-01, 4.312932e-02), 5.695813e-01, 4.506708e-05, 1.000000e+00, 23, 2326, 1) + ((6.079210e+00, -9.429247e+00, 3.681599e+00), (7.706137e-01, -6.358415e-01, 4.312932e-02), 5.695813e-01, 4.550721e-05, 1.000000e+00, 22, 2326, 3) + ((6.147194e+00, -9.485341e+00, 3.685404e+00), (7.706137e-01, -6.358415e-01, 4.312932e-02), 5.695813e-01, 4.559172e-05, 1.000000e+00, 21, 2326, 2) + ((6.864744e+00, -1.007740e+01, 3.725564e+00), (3.888690e-01, -8.895503e-01, -2.397522e-01), 5.691123e-01, 4.648372e-05, 1.000000e+00, 21, 2326, 2) + ((6.908415e+00, -1.017730e+01, 3.698639e+00), (3.888690e-01, -8.895503e-01, -2.397522e-01), 5.691123e-01, 4.659135e-05, 1.000000e+00, 22, 2326, 3) + ((6.945959e+00, -1.026318e+01, 3.675492e+00), (3.888690e-01, -8.895503e-01, -2.397522e-01), 5.691123e-01, 4.668388e-05, 1.000000e+00, 23, 2326, 1) + ((6.966122e+00, -1.030930e+01, 3.663060e+00), (7.493672e-01, -6.303754e-01, 2.026713e-01), 2.849108e-01, 4.673357e-05, 1.000000e+00, 23, 2326, 1) + ((7.350254e+00, -1.063244e+01, 3.766951e+00), (7.493672e-01, -6.303754e-01, 2.026713e-01), 2.849108e-01, 4.742789e-05, 1.000000e+00, 23, 2311, 1) + ((7.360920e+00, -1.064141e+01, 3.769836e+00), (7.493672e-01, -6.303754e-01, 2.026713e-01), 2.849108e-01, 4.744717e-05, 1.000000e+00, 23, 2312, 1) + ((7.449168e+00, -1.071565e+01, 3.793703e+00), (1.626881e-01, -1.480918e-01, 9.755006e-01), 2.025207e-01, 4.760667e-05, 1.000000e+00, 23, 2312, 1) + ((7.495754e+00, -1.075805e+01, 4.073039e+00), (-1.185723e-01, -6.787603e-01, 7.247241e-01), 2.121260e-01, 4.806671e-05, 1.000000e+00, 23, 2312, 1) + ((7.451135e+00, -1.101347e+01, 4.345753e+00), (-4.978877e-01, -3.750598e-02, 8.664301e-01), 2.609768e-02, 4.865741e-05, 1.000000e+00, 23, 2312, 1) + ((7.426401e+00, -1.101533e+01, 4.388795e+00), (9.221835e-01, -6.407530e-02, 3.814078e-01), 2.031765e-02, 4.887973e-05, 1.000000e+00, 23, 2312, 1) + ((7.438938e+00, -1.101621e+01, 4.393980e+00), (8.832139e-01, 3.563144e-01, 3.049151e-01), 2.038019e-02, 4.894869e-05, 1.000000e+00, 23, 2312, 1) + ((7.578355e+00, -1.095996e+01, 4.442112e+00), (5.564936e-01, 8.135970e-01, 1.684482e-01), 4.869241e-02, 4.974811e-05, 1.000000e+00, 23, 2312, 1) + ((7.802376e+00, -1.063244e+01, 4.509922e+00), (5.564936e-01, 8.135970e-01, 1.684482e-01), 4.869241e-02, 5.106705e-05, 1.000000e+00, 23, 2327, 1) + ((7.826035e+00, -1.059785e+01, 4.517083e+00), (-8.227572e-01, -5.662268e-01, 4.957651e-02), 8.202195e-02, 5.120634e-05, 1.000000e+00, 23, 2327, 1) + ((7.775776e+00, -1.063244e+01, 4.520112e+00), (-8.227572e-01, -5.662268e-01, 4.957651e-02), 8.202195e-02, 5.136055e-05, 1.000000e+00, 23, 2312, 1) + ((7.360920e+00, -1.091795e+01, 4.545109e+00), (-8.227572e-01, -5.662268e-01, 4.957651e-02), 8.202195e-02, 5.263343e-05, 1.000000e+00, 23, 2311, 1) + ((7.180267e+00, -1.104227e+01, 4.555995e+00), (5.568446e-01, -6.706436e-01, -4.900625e-01), 5.560680e-02, 5.318772e-05, 1.000000e+00, 23, 2311, 1) + ((7.207392e+00, -1.107494e+01, 4.532123e+00), (9.936512e-01, 4.529367e-02, -1.029847e-01), 8.142074e-02, 5.333706e-05, 1.000000e+00, 23, 2311, 1) + ((7.252245e+00, -1.107290e+01, 4.527474e+00), (9.936512e-01, 4.529367e-02, -1.029847e-01), 8.142074e-02, 5.345144e-05, 0.000000e+00, 23, 2311, 1)] diff --git a/tests/regression_tests/translation/results_true.dat b/tests/regression_tests/translation/results_true.dat index f832aa29643..6e03d2224fe 100644 --- a/tests/regression_tests/translation/results_true.dat +++ b/tests/regression_tests/translation/results_true.dat @@ -1,2 +1,2 @@ k-combined: -4.087580E-01 4.466279E-03 +4.076610E-01 6.454244E-03 diff --git a/tests/regression_tests/trigger_batch_interval/results_true.dat b/tests/regression_tests/trigger_batch_interval/results_true.dat index 0571d6c4f9e..92fa99d87af 100644 --- a/tests/regression_tests/trigger_batch_interval/results_true.dat +++ b/tests/regression_tests/trigger_batch_interval/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.767929E-01 5.327552E-03 +9.863217E-01 6.499354E-03 tally 1: -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 tally 2: -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 diff --git a/tests/regression_tests/trigger_no_batch_interval/results_true.dat b/tests/regression_tests/trigger_no_batch_interval/results_true.dat index 0571d6c4f9e..92fa99d87af 100644 --- a/tests/regression_tests/trigger_no_batch_interval/results_true.dat +++ b/tests/regression_tests/trigger_no_batch_interval/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.767929E-01 5.327552E-03 +9.863217E-01 6.499354E-03 tally 1: -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 tally 2: -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 diff --git a/tests/regression_tests/trigger_no_status/results_true.dat b/tests/regression_tests/trigger_no_status/results_true.dat index fb6c0086ab2..a62e1b3fe5b 100644 --- a/tests/regression_tests/trigger_no_status/results_true.dat +++ b/tests/regression_tests/trigger_no_status/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.682315E-01 3.302924E-03 +9.858966E-01 1.500542E-02 tally 1: -7.046510E+00 -9.932168E+00 -1.591675E+00 -5.067777E-01 -1.541572E+00 -4.753743E-01 -5.454835E+00 -5.951990E+00 -7.046510E+00 -9.932168E+00 -1.591675E+00 -5.067777E-01 -1.541572E+00 -4.753743E-01 -5.454835E+00 -5.951990E+00 +7.081828E+00 +1.003709E+01 +1.607382E+00 +5.171386E-01 +1.559242E+00 +4.866413E-01 +5.474447E+00 +5.997737E+00 +7.081828E+00 +1.003709E+01 +1.607382E+00 +5.171386E-01 +1.559242E+00 +4.866413E-01 +5.474447E+00 +5.997737E+00 tally 2: -7.046510E+00 -9.932168E+00 -1.591675E+00 -5.067777E-01 -1.541572E+00 -4.753743E-01 -5.454835E+00 -5.951990E+00 +7.081828E+00 +1.003709E+01 +1.607382E+00 +5.171386E-01 +1.559242E+00 +4.866413E-01 +5.474447E+00 +5.997737E+00 diff --git a/tests/regression_tests/trigger_statepoint_restart/inputs_true.dat b/tests/regression_tests/trigger_statepoint_restart/inputs_true.dat index 01755ad8bc2..59a8297009d 100644 --- a/tests/regression_tests/trigger_statepoint_restart/inputs_true.dat +++ b/tests/regression_tests/trigger_statepoint_restart/inputs_true.dat @@ -16,7 +16,7 @@ 15 10 - 0.003 + 0.002 std_dev diff --git a/tests/regression_tests/trigger_statepoint_restart/results_true.dat b/tests/regression_tests/trigger_statepoint_restart/results_true.dat index 3e6619d74db..3cb1e230ddc 100644 --- a/tests/regression_tests/trigger_statepoint_restart/results_true.dat +++ b/tests/regression_tests/trigger_statepoint_restart/results_true.dat @@ -1,5 +1,5 @@ k-combined: -3.014717E-01 2.864764E-03 +2.948661E-01 1.949846E-03 tally 1: -8.946107E+01 -7.281263E+02 +5.515170E+01 +4.349007E+02 diff --git a/tests/regression_tests/trigger_statepoint_restart/test.py b/tests/regression_tests/trigger_statepoint_restart/test.py index 8144c1d0b0a..b242f7f1cff 100644 --- a/tests/regression_tests/trigger_statepoint_restart/test.py +++ b/tests/regression_tests/trigger_statepoint_restart/test.py @@ -29,7 +29,7 @@ def model(): settings.inactive = 10 settings.particles = 400 # Choose a sufficiently low threshold to enable use of trigger - settings.keff_trigger = {'type': 'std_dev', 'threshold': 0.003} + settings.keff_trigger = {'type': 'std_dev', 'threshold': 0.002} settings.trigger_max_batches = 1000 settings.trigger_batch_interval = 1 settings.trigger_active = True @@ -41,10 +41,10 @@ def model(): tallies = openmc.Tallies([t]) # Put it all together - model = openmc.model.Model(materials=materials, - geometry=geometry, - settings=settings, - tallies=tallies) + model = openmc.Model(materials=materials, + geometry=geometry, + settings=settings, + tallies=tallies) return model diff --git a/tests/regression_tests/trigger_tallies/results_true.dat b/tests/regression_tests/trigger_tallies/results_true.dat index 0571d6c4f9e..92fa99d87af 100644 --- a/tests/regression_tests/trigger_tallies/results_true.dat +++ b/tests/regression_tests/trigger_tallies/results_true.dat @@ -1,28 +1,28 @@ k-combined: -9.767929E-01 5.327552E-03 +9.863217E-01 6.499354E-03 tally 1: -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 tally 2: -1.405471E+01 -1.976444E+01 -3.186139E+00 -1.015515E+00 -3.088643E+00 -9.542994E-01 -1.086857E+01 -1.182011E+01 +1.423436E+01 +2.027258E+01 +3.223740E+00 +1.039872E+00 +3.125016E+00 +9.771709E-01 +1.101062E+01 +1.212977E+01 diff --git a/tests/regression_tests/triso/results_true.dat b/tests/regression_tests/triso/results_true.dat index fa1842e547d..d9850e410ff 100644 --- a/tests/regression_tests/triso/results_true.dat +++ b/tests/regression_tests/triso/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.716873E+00 5.266107E-02 +1.604832E+00 2.031393E-03 diff --git a/tests/regression_tests/uniform_fs/results_true.dat b/tests/regression_tests/uniform_fs/results_true.dat index 46654b49b43..f7ceecfb733 100644 --- a/tests/regression_tests/uniform_fs/results_true.dat +++ b/tests/regression_tests/uniform_fs/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.685309E-01 1.861720E-03 +3.675645E-01 4.342970E-03 diff --git a/tests/regression_tests/universe/results_true.dat b/tests/regression_tests/universe/results_true.dat index bbf03de9437..97b997ae6b9 100644 --- a/tests/regression_tests/universe/results_true.dat +++ b/tests/regression_tests/universe/results_true.dat @@ -1,2 +1,2 @@ k-combined: -3.070134E-01 3.900396E-03 +2.940336E-01 7.338463E-04 diff --git a/tests/regression_tests/unstructured_mesh/test.py b/tests/regression_tests/unstructured_mesh/test.py index 0082198ddec..7607531d8ba 100644 --- a/tests/regression_tests/unstructured_mesh/test.py +++ b/tests/regression_tests/unstructured_mesh/test.py @@ -256,7 +256,7 @@ def model(): def test_unstructured_mesh_tets(model, test_opts): # skip the test if the library is not enabled if test_opts['library'] == 'moab' and not openmc.lib._dagmc_enabled(): - pytest.skip("DAGMC (and MOAB) mesh not enbaled in this build.") + pytest.skip("DAGMC (and MOAB) mesh not enabled in this build.") if test_opts['library'] == 'libmesh' and not openmc.lib._libmesh_enabled(): pytest.skip("LibMesh is not enabled in this build.") diff --git a/tests/regression_tests/weightwindows_fw_cadis/inputs_true.dat b/tests/regression_tests/weightwindows_fw_cadis/inputs_true.dat index 448b4b145c1..5fa6505ddf4 100644 --- a/tests/regression_tests/weightwindows_fw_cadis/inputs_true.dat +++ b/tests/regression_tests/weightwindows_fw_cadis/inputs_true.dat @@ -227,7 +227,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true naive diff --git a/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/inputs_true.dat b/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/inputs_true.dat index d82aa6fae86..ceb89e6e34c 100644 --- a/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/inputs_true.dat +++ b/tests/regression_tests/weightwindows_fw_cadis_mesh/flat/inputs_true.dat @@ -227,7 +227,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/inputs_true.dat b/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/inputs_true.dat index 9e4b21d27be..c7691e950c4 100644 --- a/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/inputs_true.dat +++ b/tests/regression_tests/weightwindows_fw_cadis_mesh/linear/inputs_true.dat @@ -227,7 +227,7 @@ 0.0 0.0 0.0 30.0 30.0 30.0 - True + true diff --git a/tests/regression_tests/white_plane/results_true.dat b/tests/regression_tests/white_plane/results_true.dat index 6f1d064eb36..ffb19491ddd 100644 --- a/tests/regression_tests/white_plane/results_true.dat +++ b/tests/regression_tests/white_plane/results_true.dat @@ -1,2 +1,2 @@ k-combined: -2.279719E+00 5.380792E-03 +2.274312E+00 4.223342E-03 diff --git a/tests/testing_harness.py b/tests/testing_harness.py index 11ced5b38a7..1ad91b7a89f 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -68,7 +68,7 @@ def _run_openmc(self): if config['mpi']: mpi_args = [config['mpiexec'], '-n', config['mpi_np']] openmc.run(openmc_exec=config['exe'], mpi_args=mpi_args, - event_based=config['event']) + event_based=config['event']) else: openmc.run(openmc_exec=config['exe'], event_based=config['event']) @@ -305,9 +305,12 @@ def main(self): else: self.execute_test() - def execute_test(self): + def execute_test(self, change_dir=False): """Build input XMLs, run OpenMC, and verify correct results.""" + base_dir = os.getcwd() if change_dir else None try: + if change_dir: + os.chdir(self.workdir) self._build_inputs() inputs = self._get_inputs() self._write_inputs(inputs) @@ -319,10 +322,15 @@ def execute_test(self): self._compare_results() finally: self._cleanup() + if base_dir: + os.chdir(base_dir) - def update_results(self): + def update_results(self, change_dir=False): """Update results_true.dat and inputs_true.dat""" + base_dir = os.getcwd() if change_dir else None try: + if change_dir: + os.chdir(self.workdir) self._build_inputs() inputs = self._get_inputs() self._write_inputs(inputs) @@ -334,6 +342,8 @@ def update_results(self): self._overwrite_results() finally: self._cleanup() + if base_dir: + os.chdir(base_dir) def _build_inputs(self): """Write input XML files.""" @@ -371,7 +381,8 @@ def _cleanup(self): """Delete XMLs, statepoints, tally, and test files.""" super()._cleanup() output = ['materials.xml', 'geometry.xml', 'settings.xml', - 'tallies.xml', 'plots.xml', 'inputs_test.dat', 'model.xml'] + 'tallies.xml', 'plots.xml', 'inputs_test.dat', 'model.xml', + 'collision_track.h5', 'collision_track.mcpl'] for f in output: if os.path.exists(f): os.remove(f) @@ -389,6 +400,7 @@ class TolerantPyAPITestHarness(PyAPITestHarness): due to single precision usage (e.g., as in the random ray solver). """ + def _are_files_equal(self, actual_path, expected_path, tolerance): def isfloat(value): try: @@ -428,7 +440,8 @@ def compare_tokens(token1, token2): def _compare_results(self): """Make sure the current results agree with the reference.""" - compare = self._are_files_equal('results_test.dat', 'results_true.dat', 1e-6) + compare = self._are_files_equal( + 'results_test.dat', 'results_true.dat', 1e-6) if not compare: expected = open('results_true.dat').readlines() actual = open('results_test.dat').readlines() @@ -476,6 +489,7 @@ def _cleanup(self): class PlotTestHarness(TestHarness): """Specialized TestHarness for running OpenMC plotting tests.""" + def __init__(self, plot_names, voxel_convert_checks=[]): super().__init__(None) self._plot_names = plot_names @@ -523,3 +537,105 @@ def _get_results(self): outstr = sha512.hexdigest() return outstr + + +class CollisionTrackTestHarness(PyAPITestHarness): + def __init__(self, statepoint_name, model=None, inputs_true=None, workdir=None): + super().__init__(statepoint_name, model, inputs_true) + self.workdir = workdir + + def _test_output_created(self): + """Make sure collision_track.h5 has also been created.""" + super()._test_output_created() + if self._model.settings.collision_track: + assert os.path.exists( + "collision_track.h5" + ), "collision_track file has not been created." + + def _compare_output(self): + """Compare collision_track.h5 files.""" + if self._model.settings.collision_track: + collision_track_true = self._return_collision_track_data( + "collision_track_true.h5") + collision_track_test = self._return_collision_track_data( + "collision_track.h5") + np.testing.assert_allclose( + collision_track_true, collision_track_test, rtol=1e-07) + + def main(self): + """Accept commandline arguments and either run or update tests.""" + if config["build_inputs"]: + self.build_inputs() + elif config["update"]: + self.update_results(change_dir=True) + else: + self.execute_test(change_dir=True) + + def build_inputs(self): + """Build inputs.""" + base_dir = os.getcwd() + try: + os.chdir(self.workdir) + self._build_inputs() + finally: + os.chdir(base_dir) + + def _overwrite_results(self): + """Also add the 'collision_track.h5' file during overwriting.""" + super()._overwrite_results() + if os.path.exists("collision_track.h5"): + shutil.copyfile("collision_track.h5", "collision_track_true.h5") + + @staticmethod + def _return_collision_track_data(filepath): + """ + Read a collision_track file and return a sorted array composed + of flatten arrays of collision information. + + Parameters + ---------- + filepath : str + Path to the collision_track file + + Returns + ------- + data : np.array + Sorted array composed of flatten arrays of collision_track data for + each collision information + """ + data = [] + keys = [] + + # Read source file + source = openmc.read_collision_track_file(filepath) + for src in source: + r = src['r'] + u = src['u'] + e = src['E'] + de = src['dE'] + time = src['time'] + wgt = src['wgt'] + delayed_group = src['delayed_group'] + cell_id = src['cell_id'] + nuclide_id = src['nuclide_id'] + material_id = src['material_id'] + universe_id = src['universe_id'] + n_collision = src['n_collision'] + event_mt = src['event_mt'] + key = ( + f"{r[0]:.10e} {r[1]:.10e} {r[2]:.10e} {u[0]:.10e} {u[1]:.10e} {u[2]:.10e}" + f"{e:.10e} {de:.10e} {time:.10e} {wgt:.10e} {event_mt} {delayed_group} {cell_id}" + f"{nuclide_id} {material_id} {universe_id} {n_collision} " + ) + keys.append(key) + values = [*r, *u, e, de, time, wgt, event_mt, + delayed_group, cell_id, nuclide_id, material_id, + universe_id, n_collision] + assert len(values) == 17 + data.append(values) + + data = np.array(data) + keys = np.array(keys) + sorted_idx = np.argsort(keys, kind='stable') + + return data[sorted_idx] diff --git a/tests/unit_tests/dagmc/test_lost_particles.py b/tests/unit_tests/dagmc/test_lost_particles.py index 502bd795e85..3a4166009df 100644 --- a/tests/unit_tests/dagmc/test_lost_particles.py +++ b/tests/unit_tests/dagmc/test_lost_particles.py @@ -70,12 +70,12 @@ def test_lost_particles(run_in_tmpdir, broken_dagmc_model): openmc.run() # run this again, but with the dagmc universe as the root unvierse + # to ensure that lost particles are still caught in this case for univ in broken_dagmc_model.geometry.get_all_universes().values(): if isinstance(univ, openmc.DAGMCUniverse): - broken_dagmc_model.geometry.root_unvierse = univ + broken_dagmc_model.geometry.root_universe = univ break broken_dagmc_model.export_to_xml() with pytest.raises(RuntimeError, match='Maximum number of lost particles has been reached.'): openmc.run() - diff --git a/tests/unit_tests/dagmc/test_model.py b/tests/unit_tests/dagmc/test_model.py index 0de4f6092db..0917f5b237c 100644 --- a/tests/unit_tests/dagmc/test_model.py +++ b/tests/unit_tests/dagmc/test_model.py @@ -31,7 +31,7 @@ def model(request): p = Path(request.fspath).parent / "dagmc.h5m" - daguniv = openmc.DAGMCUniverse(p, auto_geom_ids=True) + daguniv = openmc.DAGMCUniverse(p, name='simple-dagmc', auto_geom_ids=True) lattice = openmc.RectLattice() lattice.dimension = [2, 2] @@ -232,6 +232,7 @@ def test_dagmc_xml(model): dagmc_ele = root.find('dagmc_universe') assert dagmc_ele.get('id') == str(dag_univ.id) + assert dagmc_ele.get('name') == str(dag_univ.name) assert dagmc_ele.get('filename') == str(dag_univ.filename) assert dagmc_ele.get('auto_geom_ids') == str(dag_univ.auto_geom_ids).lower() diff --git a/tests/unit_tests/dagmc/test_plot.py b/tests/unit_tests/dagmc/test_plot.py index 62022b25837..6ce1d79a22d 100644 --- a/tests/unit_tests/dagmc/test_plot.py +++ b/tests/unit_tests/dagmc/test_plot.py @@ -64,5 +64,8 @@ def test_plotting_geometry_filled_with_dagmc_universe(request): cell2 = openmc.Cell(fill=csg_material, region=+sphere1 & -sphere2) geometry = openmc.Geometry([cell1, cell2]) - geometry.plot() + + # Close plot to avoid warning + import matplotlib.pyplot as plt + plt.close() diff --git a/tests/unit_tests/test_cell.py b/tests/unit_tests/test_cell.py index 95c8249bb33..60b20581868 100644 --- a/tests/unit_tests/test_cell.py +++ b/tests/unit_tests/test_cell.py @@ -126,6 +126,29 @@ def test_temperature(cell_with_lattice): c.temperature = (300., 600., 900.) +def test_densities(cell_with_lattice): + # Make sure density propagates through universes + m = openmc.Material() + s = openmc.XPlane() + c1 = openmc.Cell(fill=m, region=+s) + c2 = openmc.Cell(fill=m, region=-s) + u1 = openmc.Universe(cells=[c1, c2]) + c = openmc.Cell(fill=u1) + + c.density = 1. + assert c1.density == 1. + assert c2.density == 1. + with pytest.raises(ValueError): + c.density = -1. + c.density = None + assert c1.density == None + assert c2.density == None + + # distributed density + cells, _, _, _ = cell_with_lattice + c = cells[0] + c.density = (1., 2., 3.) + def test_rotation(): u = openmc.Universe() c = openmc.Cell(fill=u) diff --git a/tests/unit_tests/test_collision_track.py b/tests/unit_tests/test_collision_track.py new file mode 100644 index 00000000000..9bc6a8c15f5 --- /dev/null +++ b/tests/unit_tests/test_collision_track.py @@ -0,0 +1,127 @@ +"""Test the 'collision_track' setting used to store particle information +during specified collision conditions in a file for a given simulation.""" + +import openmc +import pytest +import h5py +import numpy as np + +from tests.testing_harness import CollisionTrackTestHarness as ctt + + +@pytest.fixture(scope="module") +def geometry(): + """Simple hydrogen sphere geometry""" + openmc.reset_auto_ids() + material = openmc.Material(name="H1") + material.add_element("H", 1.0) + sphere = openmc.Sphere(r=1.0, boundary_type="vacuum") + cell = openmc.Cell(region=-sphere, fill=material) + return openmc.Geometry([cell]) + + +@pytest.mark.parametrize( + "parameter", + [ + {"max_collisions": 200}, + {"max_collisions": 200, "reactions": ["(n,disappear)"]}, + {"max_collisions": 200, "cell_ids": [1]}, + {"max_collisions": 200, "material_ids": [1]}, + {"max_collisions": 200, "universe_ids": [1]}, + {"max_collisions": 200, "nuclides": ["H1"]}, + {"max_collisions": 200, "deposited_E_threshold": 200000.0}, + {"max_collisions": 200, "mcpl": True} + + ], +) +def test_xml_serialization(parameter, run_in_tmpdir): + """Check that the different use cases can be written and read in XML.""" + settings = openmc.Settings() + settings.collision_track = parameter + settings.export_to_xml() + + read_settings = openmc.Settings.from_xml() + assert read_settings.collision_track == parameter + + +@pytest.fixture(scope="module") +def model(): + """Simple hydrogen sphere divided in two hemispheres + by a z-plane to form 2 cells.""" + openmc.reset_auto_ids() + model = openmc.Model() + + # Material + material = openmc.Material(name="H1") + material.add_element("H", 1.0) + + # Geometry + radius = 1.0 + sphere = openmc.Sphere(r=radius, boundary_type="reflective") + plane = openmc.ZPlane(0.0) + cell_1 = openmc.Cell(region=-sphere & -plane, fill=material, cell_id=1) + cell_2 = openmc.Cell(region=-sphere & +plane, fill=material, cell_id=2) + root = openmc.Universe(cells=[cell_1, cell_2]) + model.geometry = openmc.Geometry(root) + + # Settings + model.settings = openmc.Settings() + model.settings.run_mode = "fixed source" + model.settings.particles = 1 + model.settings.batches = 1 + model.settings.seed = 2 + + bounds = [-radius, -radius, -radius, radius, radius, radius] + distribution = openmc.stats.Box(bounds[:3], bounds[3:]) + model.settings.source = openmc.IndependentSource(space=distribution) + + return model + + +def test_particle_location(run_in_tmpdir, model): + """Test the location of particles with respected to the "cell_ids" + and the location x, y, z of the particle itself. the upper sphere will + have positive z component and the bottom sphere a negative z compnent. + + """ + model.settings.collision_track = { + "max_collisions": 200, + "reactions": ["elastic"], + "cell_ids": [1, 2] + } + model.run() + + with h5py.File("collision_track.h5", "r") as f: + source = f["collision_track_bank"] + + assert len(source) == 60 + + # We want to verify that the collisions happenening are in the right cells + # and the position of the particle is either positive or negative relative + # to the z plane. In this case, we track the position of the particle + # relative to the cell_id already set. + for point in source: + if point['cell_id'] == 1: + assert point['r'][2] < 0.0 # z component negative + elif point['cell_id'] == 2: + assert point["r"][2] > 0.0 # z component positive + else: + assert False + + +def test_format_similarity(run_in_tmpdir, model): + model.settings.collision_track = {"max_collisions": 200, "reactions": ['elastic'], + "cell_ids": [1, 2], "mcpl": False} + model.run() + data_h5 = ctt._return_collision_track_data('collision_track.h5') + + model.settings.collision_track["mcpl"] = True + model.run() + data_mcpl = ctt._return_collision_track_data('collision_track.mcpl') + + assert len(data_h5) == 60 + assert len(data_mcpl) == 60 + + np.testing.assert_allclose(data_h5, data_mcpl, rtol=1e-05) + # tolerance not that low due to the strings that is saved in MCPL, + # not enough precision! diff --git a/tests/unit_tests/test_d1s.py b/tests/unit_tests/test_d1s.py index 9410f2da2e0..8f3b62f4000 100644 --- a/tests/unit_tests/test_d1s.py +++ b/tests/unit_tests/test_d1s.py @@ -120,6 +120,13 @@ def test_apply_time_correction(run_in_tmpdir): tally = sp.tallies[tally.id] flux = tally.mean.flatten() + # Copy attributes from original tally + tally_filters = list(tally.filters) + tally_sum = tally.sum.copy() + tally_sum_sq = tally.sum_sq.copy() + tally_mean = tally.mean.copy() + tally_std_dev = tally.std_dev.copy() + # Apply TCF and make sure results are consistent result = d1s.apply_time_correction(tally, factors, sum_nuclides=False) tcf = np.array([factors[nuc][-1] for nuc in nuclides]) @@ -129,6 +136,13 @@ def test_apply_time_correction(run_in_tmpdir): result_summed = d1s.apply_time_correction(tally, factors) assert result_summed.mean.flatten()[0] == pytest.approx(result.mean.sum()) + # Make sure original tally is unchanged + assert tally.filters == tally_filters + assert np.all(tally.sum == tally_sum) + assert np.all(tally.sum_sq == tally_sum_sq) + assert np.all(tally.mean == tally_mean) + assert np.all(tally.std_dev == tally_std_dev) + # Make sure various tally methods work result.get_values() result_summed.get_values() diff --git a/tests/unit_tests/test_deplete_activation.py b/tests/unit_tests/test_deplete_activation.py index cbe00d680c9..eace1976ef6 100644 --- a/tests/unit_tests/test_deplete_activation.py +++ b/tests/unit_tests/test_deplete_activation.py @@ -49,6 +49,7 @@ def model(): ("flux", {'energies': ENERGIES, 'reactions': ['(n,gamma)']}, 1e-5), ("flux", {'energies': ENERGIES, 'reactions': ['(n,gamma)'], 'nuclides': ['W186', 'H3']}, 1e-2), ]) +@pytest.mark.flaky(reruns=1) def test_activation(run_in_tmpdir, model, reaction_rate_mode, reaction_rate_opts, tolerance): # Determine (n.gamma) reaction rate using initial run sp = model.run() diff --git a/tests/unit_tests/test_deplete_continue.py b/tests/unit_tests/test_deplete_continue.py index 637c9d5e440..1b6eac2384f 100644 --- a/tests/unit_tests/test_deplete_continue.py +++ b/tests/unit_tests/test_deplete_continue.py @@ -17,7 +17,7 @@ def test_continue(run_in_tmpdir): operator = dummy_operator.DummyOperator() # initial depletion - bundle.solver(operator, [1.0, 2.0], [1.0, 2.0]).integrate() + bundle.solver(operator, [1.0, 2.0], [1.0, 2.0]).integrate(write_rates=True) # set up continue run prev_res = openmc.deplete.Results(operator.output_dir / "depletion_results.h5") @@ -25,7 +25,7 @@ def test_continue(run_in_tmpdir): # if continue run happens, test passes bundle.solver(operator, [1.0, 2.0, 3.0, 4.0], [1.0, 2.0, 3.0, 4.0], - continue_timesteps=True).integrate() + continue_timesteps=True).integrate(write_rates=True) final_res = openmc.deplete.Results(operator.output_dir / "depletion_results.h5") @@ -42,7 +42,7 @@ def test_continue_continue(run_in_tmpdir): operator = dummy_operator.DummyOperator() # initial depletion - bundle.solver(operator, [1.0, 2.0], [1.0, 2.0]).integrate() + bundle.solver(operator, [1.0, 2.0], [1.0, 2.0]).integrate(write_rates=True) # set up continue run prev_res = openmc.deplete.Results(operator.output_dir / "depletion_results.h5") @@ -50,7 +50,7 @@ def test_continue_continue(run_in_tmpdir): # first continue run bundle.solver(operator, [1.0, 2.0, 3.0, 4.0], [1.0, 2.0, 3.0, 4.0], - continue_timesteps=True).integrate() + continue_timesteps=True).integrate(write_rates=True) prev_res = openmc.deplete.Results(operator.output_dir / "depletion_results.h5") # second continue run diff --git a/tests/unit_tests/test_deplete_integrator.py b/tests/unit_tests/test_deplete_integrator.py index b1d2cb950eb..6463eaa2084 100644 --- a/tests/unit_tests/test_deplete_integrator.py +++ b/tests/unit_tests/test_deplete_integrator.py @@ -10,6 +10,7 @@ from random import uniform from unittest.mock import MagicMock +import h5py import numpy as np from uncertainties import ufloat import pytest @@ -38,8 +39,6 @@ def test_results_save(run_in_tmpdir): """Test data save module""" - stages = 3 - rng = np.random.RandomState(comm.rank) # Mock geometry @@ -63,31 +62,22 @@ def test_results_save(run_in_tmpdir): op.get_results_info.return_value = ( vol_dict, nuc_list, burn_list, full_burn_list) - # Construct x - x1 = [] - x2 = [] - - for i in range(stages): - x1.append([rng.random(2), rng.random(2)]) - x2.append([rng.random(2), rng.random(2)]) + # Construct end-of-step concentrations + x1 = [rng.random(2), rng.random(2)] + x2 = [rng.random(2), rng.random(2)] - # Construct r + # Construct reaction rates r1 = ReactionRates(burn_list, ["na", "nb"], ["ra", "rb"]) r1[:] = rng.random((2, 2, 2)) + rate1 = copy.deepcopy(r1) - rate1 = [] - rate2 = [] - - for i in range(stages): - rate1.append(copy.deepcopy(r1)) - r1[:] = rng.random((2, 2, 2)) - rate2.append(copy.deepcopy(r1)) - r1[:] = rng.random((2, 2, 2)) + r2 = ReactionRates(burn_list, ["na", "nb"], ["ra", "rb"]) + r2[:] = rng.random((2, 2, 2)) + rate2 = copy.deepcopy(r2) - # Create global terms - # Col 0: eig, Col 1: uncertainty - eigvl1 = rng.random((stages, 2)) - eigvl2 = rng.random((stages, 2)) + # Create global terms (eigenvalue and uncertainty) + eigvl1 = rng.random(2) + eigvl2 = rng.random(2) eigvl1 = comm.bcast(eigvl1, root=0) eigvl2 = comm.bcast(eigvl2, root=0) @@ -95,29 +85,35 @@ def test_results_save(run_in_tmpdir): t1 = [0.0, 1.0] t2 = [1.0, 2.0] - op_result1 = [OperatorResult(ufloat(*k), rates) - for k, rates in zip(eigvl1, rate1)] - op_result2 = [OperatorResult(ufloat(*k), rates) - for k, rates in zip(eigvl2, rate2)] + op_result1 = OperatorResult(ufloat(*eigvl1), rate1) + op_result2 = OperatorResult(ufloat(*eigvl2), rate2) # saves within a subdirectory - StepResult.save(op, x1, op_result1, t1, 0, 0, path='out/put/depletion.h5') + StepResult.save( + op, + x1, + op_result1, + t1, + 0, + 0, + write_rates=True, + path='out/put/depletion.h5' + ) res = Results('out/put/depletion.h5') # saves with default filename - StepResult.save(op, x1, op_result1, t1, 0, 0) - StepResult.save(op, x2, op_result2, t2, 0, 1) + StepResult.save(op, x1, op_result1, t1, 0, 0, write_rates=True) + StepResult.save(op, x2, op_result2, t2, 0, 1, write_rates=True) # Load the files res = Results("depletion_results.h5") - for i in range(stages): - for mat_i, mat in enumerate(burn_list): - for nuc_i, nuc in enumerate(nuc_list): - assert res[0][i, mat, nuc] == x1[i][mat_i][nuc_i] - assert res[1][i, mat, nuc] == x2[i][mat_i][nuc_i] - np.testing.assert_array_equal(res[0].rates[i], rate1[i]) - np.testing.assert_array_equal(res[1].rates[i], rate2[i]) + for mat_i, mat in enumerate(burn_list): + for nuc_i, nuc in enumerate(nuc_list): + assert res[0][mat, nuc] == x1[mat_i][nuc_i] + assert res[1][mat, nuc] == x2[mat_i][nuc_i] + np.testing.assert_array_equal(res[0].rates, rate1) + np.testing.assert_array_equal(res[1].rates, rate2) np.testing.assert_array_equal(res[0].k, eigvl1) np.testing.assert_array_equal(res[0].time, t1) @@ -126,6 +122,31 @@ def test_results_save(run_in_tmpdir): np.testing.assert_array_equal(res[1].time, t2) +def test_results_save_without_rates(run_in_tmpdir): + """StepResult.save skips reaction-rate datasets by default""" + + op = MagicMock() + op.prev_res = None + vol_dict = {"0": 1.0} + nuc_list = ["na"] + burn_list = ["0"] + op.get_results_info.return_value = (vol_dict, nuc_list, burn_list, burn_list) + + x = [np.array([1.0])] + rates = ReactionRates(burn_list, nuc_list, ["ra"]) + rates[:] = np.array([[[2.0]]]) + op_result = OperatorResult(ufloat(1.0, 0.1), rates) + + StepResult.save(op, x, op_result, [0.0, 1.0], 0.0, 0) + + with h5py.File('depletion_results.h5', 'r') as handle: + assert 'reaction rates' not in handle + assert 'reactions' not in handle + + res = Results('depletion_results.h5') + assert res[0].rates.size == 0 + + def test_bad_integrator_inputs(): """Test failure modes for Integrator inputs""" diff --git a/tests/unit_tests/test_deplete_microxs.py b/tests/unit_tests/test_deplete_microxs.py index 073b3f162d1..5762a8511b6 100644 --- a/tests/unit_tests/test_deplete_microxs.py +++ b/tests/unit_tests/test_deplete_microxs.py @@ -111,3 +111,16 @@ def test_multigroup_flux_same(): energies=energies, multigroup_flux=flux, chain_file=chain_file) assert microxs_4g.data == pytest.approx(microxs_2g.data) + + +def test_microxs_zero_flux(): + chain_file = Path(__file__).parents[1] / 'chain_simple.xml' + + # Generate micro XS based on zero flux + energies = [0., 6.25e-1, 5.53e3, 8.21e5, 2.e7] + flux = [0.0, 0.0, 0.0, 0.0] + microxs = MicroXS.from_multigroup_flux( + energies=energies, multigroup_flux=flux, chain_file=chain_file) + + # All microscopic cross sections should be zero + assert np.all(microxs.data == 0.0) diff --git a/tests/unit_tests/test_deplete_restart.py b/tests/unit_tests/test_deplete_restart.py index e8bfc062a08..1cbff30a5fb 100644 --- a/tests/unit_tests/test_deplete_restart.py +++ b/tests/unit_tests/test_deplete_restart.py @@ -21,7 +21,7 @@ def test_restart_predictor_cecm(run_in_tmpdir): # Perform simulation using the predictor algorithm dt = [0.75] power = 1.0 - openmc.deplete.PredictorIntegrator(op, dt, power).integrate() + openmc.deplete.PredictorIntegrator(op, dt, power).integrate(write_rates=True) # Load the files prev_res = openmc.deplete.Results(op.output_dir / "depletion_results.h5") @@ -30,10 +30,6 @@ def test_restart_predictor_cecm(run_in_tmpdir): op = dummy_operator.DummyOperator(prev_res) op.output_dir = output_dir - # check ValueError is raised, indicating previous and current stages - with pytest.raises(ValueError, match="incompatible.* 1.*2"): - openmc.deplete.CECMIntegrator(op, dt, power) - def test_restart_cecm_predictor(run_in_tmpdir): """Integral regression test of integrator algorithm using CE/CM for the @@ -47,7 +43,7 @@ def test_restart_cecm_predictor(run_in_tmpdir): dt = [0.75] power = 1.0 cecm = openmc.deplete.CECMIntegrator(op, dt, power) - cecm.integrate() + cecm.integrate(write_rates=True) # Load the files prev_res = openmc.deplete.Results(op.output_dir / "depletion_results.h5") @@ -56,10 +52,6 @@ def test_restart_cecm_predictor(run_in_tmpdir): op = dummy_operator.DummyOperator(prev_res) op.output_dir = output_dir - # check ValueError is raised, indicating previous and current stages - with pytest.raises(ValueError, match="incompatible.* 2.*1"): - openmc.deplete.PredictorIntegrator(op, dt, power) - @pytest.mark.parametrize("scheme", dummy_operator.SCHEMES) def test_restart(run_in_tmpdir, scheme): @@ -70,7 +62,7 @@ def test_restart(run_in_tmpdir, scheme): operator = dummy_operator.DummyOperator() # take first step - bundle.solver(operator, [0.75], 1.0).integrate() + bundle.solver(operator, [0.75], 1.0).integrate(write_rates=True) # restart prev_res = openmc.deplete.Results( diff --git a/tests/unit_tests/test_deplete_resultslist.py b/tests/unit_tests/test_deplete_resultslist.py index 308eccf7bbd..9a4699a4fdd 100644 --- a/tests/unit_tests/test_deplete_resultslist.py +++ b/tests/unit_tests/test_deplete_resultslist.py @@ -21,14 +21,14 @@ def test_get_activity(res): t_ref = np.array([0.0, 1296000.0, 2592000.0, 3888000.0]) a_ref = np.array( - [1.25167956e+06, 3.71938527e+11, 4.43264300e+11, 3.55547176e+11]) + [1.25167956e+06, 3.69842310e+11, 3.70099291e+11, 3.53629755e+11]) np.testing.assert_allclose(t, t_ref) np.testing.assert_allclose(a, a_ref) # Check by_nuclide a_xe135_ref = np.array( - [2.106574218e+05, 1.227519888e+11, 1.177491828e+11, 1.031986176e+11]) + [2.10657422e+05, 1.12825236e+11, 1.09055177e+11, 1.07491257e+11]) t_nuc, a_nuc = res.get_activity("1", by_nuclide=True) a_xe135 = np.array([a_nuc_i["Xe135"] for a_nuc_i in a_nuc]) @@ -43,7 +43,7 @@ def test_get_atoms(res): t_ref = np.array([0.0, 1296000.0, 2592000.0, 3888000.0]) n_ref = np.array( - [6.67473282e+08, 3.88942731e+14, 3.73091215e+14, 3.26987387e+14]) + [6.67473282e+08, 3.57489567e+14, 3.45544042e+14, 3.40588723e+14]) np.testing.assert_allclose(t, t_ref) np.testing.assert_allclose(n, n_ref) @@ -71,7 +71,7 @@ def test_get_decay_heat(res): t_ref = np.array([0.0, 1296000.0, 2592000.0, 3888000.0]) dh_ref = np.array( - [1.27933813e-09, 5.85347232e-03, 7.38773010e-03, 5.79954067e-03]) + [1.27933813e-09, 5.95370258e-03, 6.01335600e-03, 5.69831173e-03]) t, dh = res.get_decay_heat("1") @@ -80,7 +80,7 @@ def test_get_decay_heat(res): # Check by nuclide dh_xe135_ref = np.array( - [1.27933813e-09, 7.45481920e-04, 7.15099509e-04, 6.26732849e-04]) + [1.27933813e-09, 6.85196014e-04, 6.62300168e-04, 6.52802366e-04]) t_nuc, dh_nuc = res.get_decay_heat("1", by_nuclide=True) dh_nuc_xe135 = np.array([dh_nuc_i["Xe135"] for dh_nuc_i in dh_nuc]) @@ -95,7 +95,7 @@ def test_get_mass(res): t_ref = np.array([0.0, 1296000.0, 2592000.0, 3888000.0]) n_ref = np.array( - [6.67473282e+08, 3.88942731e+14, 3.73091215e+14, 3.26987387e+14]) + [6.67473282e+08, 3.57489567e+14, 3.45544042e+14, 3.40588723e+14]) # Get g n_ref *= openmc.data.atomic_mass('Xe135') / openmc.data.AVOGADRO @@ -123,8 +123,8 @@ def test_get_reaction_rate(res): t, r = res.get_reaction_rate("1", "Xe135", "(n,gamma)") t_ref = [0.0, 1296000.0, 2592000.0, 3888000.0] - n_ref = [6.67473282e+08, 3.88942731e+14, 3.73091215e+14, 3.26987387e+14] - xs_ref = [2.53336104e-05, 4.21747011e-05, 3.48616127e-05, 3.61775563e-05] + n_ref = [6.67473282e+08, 3.57489567e+14, 3.45544042e+14, 3.40588723e+14] + xs_ref = [3.10220818e-05, 3.36754072e-05, 3.12740350e-05, 3.86717693e-05] np.testing.assert_allclose(t, t_ref) np.testing.assert_allclose(r, np.array(n_ref) * xs_ref) @@ -136,8 +136,8 @@ def test_get_keff(res): t_min, k = res.get_keff(time_units='min') t_ref = [0.0, 1296000.0, 2592000.0, 3888000.0] - k_ref = [1.1596402556, 1.1914183335, 1.2292570871, 1.1797030302] - u_ref = [0.0270680649, 0.0219163444, 0.024268508 , 0.0221401194] + k_ref = [1.1773089172, 1.2231748584, 1.1611455694, 1.1714783649] + u_ref = [0.0384666252, 0.0311915665, 0.0226370102, 0.0315964732] np.testing.assert_allclose(t, t_ref) np.testing.assert_allclose(t_min * 60, t_ref) diff --git a/tests/unit_tests/test_deplete_transfer_rates.py b/tests/unit_tests/test_deplete_transfer_rates.py index a3228e9fb7d..a6dcb2b276a 100644 --- a/tests/unit_tests/test_deplete_transfer_rates.py +++ b/tests/unit_tests/test_deplete_transfer_rates.py @@ -198,3 +198,35 @@ def test_transfer(run_in_tmpdir, model): # Ensure number of atoms equal transfer decay assert atoms[1] == pytest.approx(atoms[0]*exp(-transfer_rate*3600*24)) assert atoms[2] == pytest.approx(atoms[1]*exp(-transfer_rate*3600*24)) + +@pytest.mark.parametrize("case_name, buffer, ox", [ + ('redox', {'Gd157':1}, {'Gd': 3, 'U': 4}), + ('buffer_invalid', {'Gd158':1}, {'Gd': 3, 'U': 4}), + ('elm_invalid', {'Gd157':1}, {'Gb': 3, 'U': 4}), + ]) +def test_redox(case_name, buffer, ox, model): + op = CoupledOperator(model, CHAIN_PATH) + number_of_timesteps = 2 + transfer = TransferRates(op, model.materials, number_of_timesteps) + + # Test by Openmc material, material name and material id + material, dest_material, dest_material2 = [m for m in model.materials + if m.depletable] + for material_input in [material, material.name, material.id]: + for dest_material_input in [dest_material, dest_material.name, + dest_material.id]: + + if case_name == 'buffer_invalid': + with pytest.raises(ValueError, match='Gd158 is not a valid ' + 'nuclide.'): + transfer.set_redox(material_input, buffer, ox) + + elif case_name == 'elm_invalid': + with pytest.raises(ValueError, match='Gb is not a valid ' + 'element.'): + transfer.set_redox(material_input, buffer, ox) + else: + transfer.set_redox(material_input, buffer, ox) + mat_id = transfer._get_material_id(material_input) + assert transfer.redox[mat_id][0] == buffer + assert transfer.redox[mat_id][1] == ox diff --git a/tests/unit_tests/test_filter_distribcell.py b/tests/unit_tests/test_filter_distribcell.py new file mode 100644 index 00000000000..d5734a2c076 --- /dev/null +++ b/tests/unit_tests/test_filter_distribcell.py @@ -0,0 +1,53 @@ +import openmc +import pandas as pd + + +def test_distribcell_filter_apply_tally_results(run_in_tmpdir): + # Reset IDs to ensure consistent paths + openmc.reset_auto_ids() + + mat = openmc.Material() + mat.add_nuclide("U235", 1.0) + mat.set_density("g/cm3", 1.0) + + # Define 2x2 lattice with a cylinder in each universe + cyl = openmc.ZCylinder(r=1.0) + cell1 = openmc.Cell(fill=mat, region=-cyl) + cell2 = openmc.Cell(fill=None, region=+cyl) + univ = openmc.Universe(cells=[cell1, cell2]) + lattice = openmc.RectLattice() + lattice.lower_left = (-3.0, -3.0) + lattice.pitch = (3.0, 3.0) + lattice.universes = [[univ, univ], [univ, univ]] + box = openmc.model.RectangularPrism(6., 6., boundary_type='reflective') + root_cell = openmc.Cell(region=-box, fill=lattice) + geometry = openmc.Geometry([root_cell]) + + # Create model and add tally with distribcell filter + model = openmc.Model(geometry) + model.settings.batches = 10 + model.settings.particles = 1000 + tally = openmc.Tally() + distribcell_filter = openmc.DistribcellFilter(cell1) + tally.filters = [distribcell_filter] + tally.scores = ['flux'] + model.tallies = [tally] + + # Run OpenMC and apply tally results + model.run(apply_tally_results=True) + + # Check that mean and standard deviation are available on tally + assert tally.mean.shape == (4, 1, 1) + assert tally.std_dev.shape == (4, 1, 1) + + # Make sure paths attribute on filter is correct + assert distribcell_filter.paths == [ + 'u3->c3->l2(0,0)->u1->c1', + 'u3->c3->l2(1,0)->u1->c1', + 'u3->c3->l2(0,1)->u1->c1', + 'u3->c3->l2(1,1)->u1->c1', + ] + + # Check that we can get a DataFrame from the tally + df = tally.get_pandas_dataframe() + assert isinstance(df, pd.DataFrame) diff --git a/tests/unit_tests/test_ifp.py b/tests/unit_tests/test_ifp.py index 8d0fd98010d..e527f162460 100644 --- a/tests/unit_tests/test_ifp.py +++ b/tests/unit_tests/test_ifp.py @@ -47,3 +47,42 @@ def test_exceptions(options, error, run_in_tmpdir, geometry): tallies = openmc.Tallies([tally]) model = openmc.Model(geometry=geometry, settings=settings, tallies=tallies) model.run() + + +@pytest.mark.parametrize( + "num_groups, use_auto_tallies", + [ + (None, True), + (None, False), + (6, True), + (6, False), + ], +) +def test_get_kinetics_parameters(run_in_tmpdir, geometry, num_groups, use_auto_tallies): + # Create basic model + model = openmc.Model(geometry=geometry) + model.settings.particles = 1000 + model.settings.batches = 20 + model.settings.inactive = 5 + model.settings.ifp_n_generation = 5 + + # Add IFP tallies either via the convenience method or manually + if use_auto_tallies: + model.add_kinetics_parameters_tallies(num_groups=num_groups) + else: + for score in ["ifp-time-numerator", "ifp-beta-numerator", "ifp-denominator"]: + tally = openmc.Tally() + tally.scores = [score] + if score == "ifp-beta-numerator" and num_groups is not None: + tally.filters = [openmc.DelayedGroupFilter(list(range(1, num_groups + 1)))] + model.tallies.append(tally) + + # Run and get kinetics parameters + sp_file = model.run() + with openmc.StatePoint(sp_file) as sp: + params = sp.get_kinetics_parameters() + assert isinstance(params, openmc.KineticsParameters) + assert params.generation_time is not None + assert params.beta_effective is not None + if num_groups is not None: + assert len(params.beta_effective) == num_groups diff --git a/tests/unit_tests/test_lib.py b/tests/unit_tests/test_lib.py index 8ab35335fc0..eb4dc3dce66 100644 --- a/tests/unit_tests/test_lib.py +++ b/tests/unit_tests/test_lib.py @@ -159,6 +159,34 @@ def test_properties_temperature(lib_init): assert cell.get_temperature() == pytest.approx(200.0) +def test_cell_density(lib_init): + cell = openmc.lib.cells[1] + print('density', cell.get_density()) + orig_density = cell.get_density() + try: + cell.set_density(1.5, 0) + assert cell.get_density(0) == pytest.approx(1.5) + cell.set_density(2.0) + assert cell.get_density() == pytest.approx(2.0) + finally: + cell.set_density(orig_density) + + +def test_properties_cell_density(lib_init): + # Cell density should be 2.0 from above test + cell = openmc.lib.cells[1] + orig_density = cell.get_density() + + # Export properties and change density + openmc.lib.export_properties('properties.h5') + cell.set_density(3.0) + assert cell.get_density() == pytest.approx(3.0) + + # Import properties and check that density is restored + openmc.lib.import_properties('properties.h5') + assert cell.get_density() == pytest.approx(orig_density) + + def test_new_cell(lib_init): with pytest.raises(exc.AllocationError): openmc.lib.Cell(1) @@ -468,9 +496,6 @@ def test_set_n_batches(lib_run): for i in range(7): openmc.lib.next_batch() - # Setting n_batches less than current_batch should raise error - with pytest.raises(exc.InvalidArgumentError): - settings.set_batches(6) # n_batches should stay the same assert settings.get_batches() == 10 diff --git a/tests/unit_tests/test_material.py b/tests/unit_tests/test_material.py index 2e37242720b..ce58339d7c2 100644 --- a/tests/unit_tests/test_material.py +++ b/tests/unit_tests/test_material.py @@ -481,6 +481,7 @@ def test_borated_water(): # Test the density override m = openmc.model.borated_water(975, 566.5, 15.51, density=0.9) assert m.density == pytest.approx(0.9, 1e-3) + assert m.temperature == pytest.approx(566.5) def test_from_xml(run_in_tmpdir): diff --git a/tests/unit_tests/test_mesh.py b/tests/unit_tests/test_mesh.py index 67ca4028e06..9aca8b59656 100644 --- a/tests/unit_tests/test_mesh.py +++ b/tests/unit_tests/test_mesh.py @@ -2,11 +2,14 @@ from tempfile import TemporaryDirectory from pathlib import Path +import h5py import numpy as np +from scipy.stats import chi2 import pytest import openmc import openmc.lib from openmc.utility_funcs import change_directory +from uncertainties.unumpy import uarray, nominal_values, std_devs @pytest.mark.parametrize("val_left,val_right", [(0, 0), (-1., -1.), (2.0, 2)]) @@ -481,9 +484,77 @@ def test_umesh(run_in_tmpdir, simple_umesh, export_type): np.testing.assert_almost_equal(mean, ref_data) # attempt to apply a dataset with an improper size to a VTK write - with pytest.raises(ValueError, match='Cannot apply dataset "mean"') as e: + with pytest.raises(ValueError, match='Cannot apply dataset "mean"'): simple_umesh.write_data_to_vtk(datasets={'mean': ref_data[:-2]}, filename=filename) + +@pytest.mark.skipif(not openmc.lib._dagmc_enabled(), reason="DAGMC not enabled.") +def test_write_vtkhdf(request, run_in_tmpdir): + """Performs a minimal UnstructuredMesh simulation, reads in the resulting + statepoint file and writes the mesh data to vtk and vtkhdf files. It is + necessary to read in the unstructured mesh from a statepoint file to ensure + it has all the required attributes + """ + model = openmc.Model() + + surf1 = openmc.Sphere(r=1000.0, boundary_type="vacuum") + cell1 = openmc.Cell(region=-surf1) + model.geometry = openmc.Geometry([cell1]) + + umesh = openmc.UnstructuredMesh( + request.path.parent / "test_mesh_dagmc_tets.vtk", + "moab", + mesh_id = 1 + ) + mesh_filter = openmc.MeshFilter(umesh) + + # Create flux mesh tally to score alpha production + mesh_tally = openmc.Tally(name="test_tally") + mesh_tally.filters = [mesh_filter] + mesh_tally.scores = ["flux"] + + model.tallies = [mesh_tally] + + model.settings.run_mode = "fixed source" + model.settings.batches = 2 + model.settings.particles = 10 + + statepoint_file = model.run() + + with openmc.StatePoint(statepoint_file) as statepoint: + my_tally = statepoint.get_tally(name="test_tally") + + umesh_from_sp = statepoint.meshes[umesh.id] + + datasets={ + "mean": my_tally.mean.flatten(), + "std_dev": my_tally.std_dev.flatten() + } + + umesh_from_sp.write_data_to_vtk(datasets=datasets, filename="test_mesh.vtkhdf") + umesh_from_sp.write_data_to_vtk(datasets=datasets, filename="test_mesh.vtk") + + with pytest.raises(ValueError, match="Unsupported file extension"): + # Supported file extensions are vtk or vtkhdf, not hdf5, so this should raise an error + umesh_from_sp.write_data_to_vtk( + datasets=datasets, + filename="test_mesh.hdf5", + ) + with pytest.raises(ValueError, match="Cannot apply dataset"): + # The shape of the data should match the shape of the mesh, so this should raise an error + umesh_from_sp.write_data_to_vtk( + datasets={'incorrectly_shaped_data': np.array(([1,2,3]))}, + filename="test_mesh_incorrect_shape.vtkhdf", + ) + + assert Path("test_mesh.vtk").exists() + assert Path("test_mesh.vtkhdf").exists() + + # just ensure we can open the file without error + with h5py.File("test_mesh.vtkhdf", "r"): + ... + + def test_mesh_get_homogenized_materials(): """Test the get_homogenized_materials method""" # Simple model with 1 cm of Fe56 next to 1 cm of H1 @@ -620,6 +691,33 @@ def test_mesh_material_volumes_serialize(): assert new_volumes.by_element(3) == [(2, 1.0)] +def test_mesh_material_volumes_boundary_conditions(sphere_model): + """Test the material volumes method using a regular mesh + that overlaps with a vacuum boundary condition.""" + + mesh = openmc.SphericalMesh.from_domain(sphere_model.geometry, dimension=(1, 1, 1)) + # extend mesh beyond the outer sphere surface to test rays crossing the boundary condition + mesh.r_grid[-1] += 5.0 + + # add a new cell to the modelthat occupies the outside of the sphere + sphere_surfaces = list(filter(lambda s: isinstance(s, openmc.Sphere), + sphere_model.geometry.get_all_surfaces().values())) + outer_cell = openmc.Cell(region=+sphere_surfaces[0]) + sphere_model.geometry.root_universe.add_cell(outer_cell) + + volumes = mesh.material_volumes(sphere_model, (0, 100, 100)) + sphere_volume = 4/3*np.pi*25**3 + mats = sphere_model.materials + expected_volumes = [(mats[0].id, 0.25*sphere_volume), + (mats[1].id, 0.25*sphere_volume), + (mats[2].id, 0.5*sphere_volume), + (None, 4/3*np.pi*mesh.r_grid[-1]**3 - sphere_volume)] + + for evaluated, expected in zip(volumes.by_element(0), expected_volumes): + assert evaluated[0] == expected[0] + assert evaluated[1] == pytest.approx(expected[1], rel=1e-2) + + def test_raytrace_mesh_infinite_loop(run_in_tmpdir): # Create a model with one large spherical cell sphere = openmc.Sphere(r=100, boundary_type='vacuum') @@ -651,3 +749,82 @@ def test_raytrace_mesh_infinite_loop(run_in_tmpdir): # Run the model; this should not cause an infinite loop model.run() + + +def test_filter_time_mesh(run_in_tmpdir): + """Test combination of TimeFilter and MeshFilter""" + + # Define material + mat = openmc.Material() + mat.add_nuclide('Fe56', 1.0) + mat.set_density('g/cm3', 7.8) + + # Define geometry + surf_Z1 = openmc.XPlane(x0=-1e10, boundary_type="reflective") + surf_Z2 = openmc.XPlane(x0=1e10, boundary_type="reflective") + cell_F = openmc.Cell(fill=mat, region=+surf_Z1 & -surf_Z2) + model = openmc.Model() + model.geometry = openmc.Geometry([cell_F]) + + # Define settings + model.settings.run_mode = "fixed source" + model.settings.particles = 1000 + model.settings.batches = 20 + model.settings.output = {"tallies": False} + model.settings.cutoff = {"time_neutron": 1e-7} + + # Define tallies + + # Create a mesh filter that can be used in a tally + mesh = openmc.RegularMesh() + mesh.dimension = (21, 1, 1) + mesh.lower_left = (-20.5, -1e10, -1e10) + mesh.upper_right = (20.5, 1e10, 1e10) + time_grid = np.linspace(0.0, 1e-7, 21) + + mesh_filter = openmc.MeshFilter(mesh) + time_filter = openmc.TimeFilter(time_grid) + + # Now use the mesh filter in a tally and indicate what scores are desired + tally1 = openmc.Tally(name="collision") + tally1.estimator = "collision" + tally1.filters = [time_filter, mesh_filter] + tally1.scores = ["flux"] + tally2 = openmc.Tally(name="tracklength") + tally2.estimator = "tracklength" + tally2.filters = [time_filter, mesh_filter] + tally2.scores = ["flux"] + model.tallies = openmc.Tallies([tally1, tally2]) + + # Run and post-process + model.run(apply_tally_results=True) + + # Get radial flux distribution + flux_collision = tally1.mean.ravel() + flux_collision_unc = tally1.std_dev.ravel() + flux_tracklength = tally2.mean.ravel() + flux_tracklength_unc = tally2.std_dev.ravel() + + # Construct arrays with uncertainties + collision = uarray(flux_collision, flux_collision_unc) + tracklength = uarray(flux_tracklength, flux_tracklength_unc) + delta = collision - tracklength + + # Compute differences and standard deviations + diff = nominal_values(delta) + std_dev = std_devs(delta) + + # Exclude zero-uncertainty bins + mask = std_dev > 0.0 + dof = int(np.sum(mask)) + + # Global chi-square consistency test between collision and tracklength + # estimators. Target false positive rate ~1e-4 (1 in 10,000) + z = diff[mask] / std_dev[mask] + chi2_stat = np.sum(z * z) + alpha = 1.0e-4 + crit = chi2.ppf(1 - alpha, dof) + assert chi2_stat < crit, ( + f"Collision vs tracklength tallies disagree: chi2={chi2_stat:.2f} " + f">= {crit=:.2f} ({dof=}, {alpha=})" + ) diff --git a/tests/unit_tests/test_model.py b/tests/unit_tests/test_model.py index 6e4dec00fff..f4f94a47cac 100644 --- a/tests/unit_tests/test_model.py +++ b/tests/unit_tests/test_model.py @@ -251,10 +251,11 @@ def test_import_properties(run_in_tmpdir, mpi_intracomm): model = openmc.examples.pwr_pin_cell() model.init_lib(output=False, intracomm=mpi_intracomm) - # Change fuel temperature and density and export properties + # Change cell fuel temperature, density, material density and export properties cell = openmc.lib.cells[1] cell.set_temperature(600.0) cell.fill.set_density(5.0, 'g/cm3') + cell.set_density(10.0) openmc.lib.export_properties(output=False) # Import properties to existing model @@ -264,9 +265,11 @@ def test_import_properties(run_in_tmpdir, mpi_intracomm): # First python cell = model.geometry.get_all_cells()[1] assert cell.temperature == [600.0] + assert cell.density == [pytest.approx(10.0, 1e-5)] assert cell.fill.get_mass_density() == pytest.approx(5.0) # Now C assert openmc.lib.cells[1].get_temperature() == 600. + assert openmc.lib.cells[1].get_density() == pytest.approx(10.0, 1e-5) assert openmc.lib.materials[1].get_density('g/cm3') == pytest.approx(5.0) # Clear the C API @@ -283,6 +286,7 @@ def test_import_properties(run_in_tmpdir, mpi_intracomm): ) cell = model_with_properties.geometry.get_all_cells()[1] assert cell.temperature == [600.0] + assert cell.density == [pytest.approx(10.0, 1e-5)] assert cell.fill.get_mass_density() == pytest.approx(5.0) @@ -650,6 +654,10 @@ def test_model_plot(): test_mask = (image_data == white) | (image_data == red) assert np.all(test_mask), "Colors other than white or red found in overlap plot image" + # Close plots to avoid warning + import matplotlib.pyplot as plt + plt.close('all') + def test_model_id_map_initialization(run_in_tmpdir): model = openmc.examples.pwr_assembly() @@ -893,6 +901,7 @@ def test_id_map_aligned_model(): assert tr_instance == 3, f"Expected cell instance 3 at top-right corner, got {tr_instance}" assert tr_material == 5, f"Expected material ID 5 at top-right corner, got {tr_material}" + def test_setter_from_list(): mat = openmc.Material() model = openmc.Model(materials=[mat]) @@ -905,3 +914,59 @@ def test_setter_from_list(): plot = openmc.Plot() model = openmc.Model(plots=[plot]) assert isinstance(model.plots, openmc.Plots) + + +def test_keff_search(run_in_tmpdir): + """Test the Model.keff_search method""" + + # Create model of a sphere of U235 + mat = openmc.Material() + mat.set_density('g/cm3', 18.9) + mat.add_nuclide('U235', 1.0) + sphere = openmc.Sphere(r=10.0, boundary_type='vacuum') + cell = openmc.Cell(fill=mat, region=-sphere) + geometry = openmc.Geometry([cell]) + settings = openmc.Settings(particles=1000, inactive=10, batches=30) + model = openmc.Model(geometry=geometry, settings=settings) + + # Define function to modify sphere radius + def modify_radius(radius): + sphere.r = radius + + # Perform keff search + k_tol = 4e-3 + sigma_final = 2e-3 + result = model.keff_search( + func=modify_radius, + x0=6.0, + x1=9.0, + k_tol=k_tol, + sigma_final=sigma_final, + output=True, + ) + + final_keff = result.means[-1] + 1.0 # Add back target since means are (keff - target) + final_sigma = result.stdevs[-1] + + # Check for convergence and that tolerances are met + assert result.converged, "keff_search did not converge" + assert abs(final_keff - 1.0) <= k_tol, \ + f"Final keff {final_keff:.5f} not within k_tol {k_tol}" + assert final_sigma <= sigma_final, \ + f"Final uncertainty {final_sigma:.5f} exceeds sigma_final {sigma_final}" + + # Check type of result + assert isinstance(result, openmc.model.SearchResult) + + # Check that we have function evaluation history + assert len(result.parameters) >= 2 + assert len(result.means) == len(result.parameters) + assert len(result.stdevs) == len(result.parameters) + assert len(result.batches) == len(result.parameters) + + # Check that function_calls property works + assert result.function_calls == len(result.parameters) + + # Check that total_batches property works + assert result.total_batches == sum(result.batches) + assert result.total_batches > 0 diff --git a/tests/unit_tests/test_no_reduce.py b/tests/unit_tests/test_no_reduce.py new file mode 100644 index 00000000000..00ddb5a9590 --- /dev/null +++ b/tests/unit_tests/test_no_reduce.py @@ -0,0 +1,40 @@ +"""Test the settings.no_reduce feature to ensure tallies are correctly +reduced across MPI processes.""" + +import openmc +import pytest + +from tests.testing_harness import config + + +@pytest.mark.parametrize('no_reduce', [True, False]) +def test_no_reduce(no_reduce, run_in_tmpdir): + """Test that tally results are correct with and without no_reduce.""" + + # Create simple sphere model with vacuum + model = openmc.Model() + sphere = openmc.Sphere(r=1.0, boundary_type='vacuum') + cell = openmc.Cell(region=-sphere) + model.geometry = openmc.Geometry([cell]) + model.settings.run_mode = 'fixed source' + model.settings.batches = 10 + model.settings.particles = 100 + model.settings.source = openmc.IndependentSource(space=openmc.stats.Point()) + model.settings.no_reduce = no_reduce + + # Tally: surface current on vacuum boundary + surf_filter = openmc.SurfaceFilter(sphere) + tally = openmc.Tally() + tally.filters = [surf_filter] + tally.scores = ['current'] + model.tallies = [tally] + + # Run OpenMC with proper MPI arguments if needed + kwargs = {'apply_tally_results': True, 'openmc_exec': config['exe']} + if config['mpi']: + kwargs['mpi_args'] = [config['mpiexec'], '-n', config['mpi_np']] + model.run(**kwargs) + + # The tally should be ~1.0 (every particle crosses the surface once) + tally_mean = tally.mean.flatten()[0] + assert tally_mean == pytest.approx(1.0) diff --git a/tests/unit_tests/test_pathlike_simple.py b/tests/unit_tests/test_pathlike_simple.py new file mode 100644 index 00000000000..e0116bf01c3 --- /dev/null +++ b/tests/unit_tests/test_pathlike_simple.py @@ -0,0 +1,46 @@ +"""Simple test for PathLike filename support""" + +from pathlib import Path + +import pytest +import openmc +from openmc.checkvalue import check_type, PathLike + + +def test_pathlike_type_checking(): + """Test that PathLike type checking works correctly""" + + # Test with string (should work) + check_type('filename', 'test.txt', PathLike) + + # Test with Path object (should work) + path_obj = Path('test.txt') + check_type('filename', path_obj, PathLike) + + # Test with Path object containing subdirectories (should work) + path_with_subdir = Path('subdir') / 'test.txt' + check_type('filename', path_with_subdir, PathLike) + + # Test with invalid type (should raise TypeError) + with pytest.raises(TypeError): + check_type('filename', 123, PathLike) + + +def test_plot_filename_pathlike(): + """Test that plot filename accepts Path objects""" + + plot = openmc.Plot() + + # Test with string (should still work) + plot.filename = "test_plot" + assert plot.filename == "test_plot" + + # Test with Path object + path_obj = Path("test_plot_path") + plot.filename = path_obj + assert plot.filename == path_obj + + # Test with Path object containing subdirectories + path_with_subdir = Path("subdir") / "test_plot" + plot.filename = path_with_subdir + assert plot.filename == path_with_subdir diff --git a/tests/unit_tests/test_r2s.py b/tests/unit_tests/test_r2s.py new file mode 100644 index 00000000000..a94f85c8c08 --- /dev/null +++ b/tests/unit_tests/test_r2s.py @@ -0,0 +1,152 @@ +from pathlib import Path + +import pytest +import openmc +from openmc.deplete import Chain, R2SManager + + +@pytest.fixture +def simple_model_and_mesh(tmp_path): + # Define two materials: water and Ni + h2o = openmc.Material() + h2o.add_nuclide("H1", 2.0) + h2o.add_nuclide("O16", 1.0) + h2o.set_density("g/cm3", 1.0) + nickel = openmc.Material() + nickel.add_element("Ni", 1.0) + nickel.set_density("g/cm3", 4.0) + + # Geometry: two half-spaces split by x=0 plane + left = openmc.XPlane(0.0) + x_min = openmc.XPlane(-10.0, boundary_type='vacuum') + x_max = openmc.XPlane(10.0, boundary_type='vacuum') + y_min = openmc.YPlane(-10.0, boundary_type='vacuum') + y_max = openmc.YPlane(10.0, boundary_type='vacuum') + z_min = openmc.ZPlane(-10.0, boundary_type='vacuum') + z_max = openmc.ZPlane(10.0, boundary_type='vacuum') + + c1 = openmc.Cell(fill=h2o, region=+x_min & -left & +y_min & -y_max & +z_min & -z_max) + c2 = openmc.Cell(fill=nickel, region=+left & -x_max & +y_min & -y_max & +z_min & -z_max) + c1.volume = 4000.0 + c2.volume = 4000.0 + geometry = openmc.Geometry([c1, c2]) + + # Simple settings with a point source + settings = openmc.Settings() + settings.batches = 10 + settings.particles = 1000 + settings.run_mode = 'fixed source' + settings.source = openmc.IndependentSource() + model = openmc.Model(geometry, settings=settings) + + mesh = openmc.RegularMesh() + mesh.lower_left = (-10.0, -10.0, -10.0) + mesh.upper_right = (10.0, 10.0, 10.0) + mesh.dimension = (1, 1, 1) + return model, (c1, c2), mesh + + +def test_r2s_mesh_expected_output(simple_model_and_mesh, tmp_path): + model, (c1, c2), mesh = simple_model_and_mesh + + # Use mesh-based domains + r2s = R2SManager(model, mesh) + + # Use custom reduced chain file for Ni + chain = Chain.from_xml(Path(__file__).parents[1] / "chain_ni.xml") + + # Run R2S calculation + outdir = r2s.run( + timesteps=[(1.0, 'd')], + source_rates=[1.0], + photon_time_indices=[1], + output_dir=tmp_path, + chain_file=chain, + ) + + # Check directories and files exist + nt = Path(outdir) / 'neutron_transport' + assert (nt / 'fluxes.npy').exists() + assert (nt / 'micros.h5').exists() + assert (nt / 'mesh_material_volumes.npz').exists() + act = Path(outdir) / 'activation' + assert (act / 'depletion_results.h5').exists() + pt = Path(outdir) / 'photon_transport' + assert (pt / 'tally_ids.json').exists() + assert (pt / 'time_1' / 'statepoint.10.h5').exists() + + # Basic results structure checks + assert len(r2s.results['fluxes']) == 2 + assert len(r2s.results['micros']) == 2 + assert len(r2s.results['mesh_material_volumes']) == 2 + assert len(r2s.results['activation_materials']) == 2 + assert len(r2s.results['depletion_results']) == 2 + + # Check activation materials + amats = r2s.results['activation_materials'] + assert all(m.depletable for m in amats) + # Volumes preserved + assert {m.volume for m in amats} == {c1.volume, c2.volume} + + # Check loading results + r2s_loaded = R2SManager(model, mesh) + r2s_loaded.load_results(outdir) + assert len(r2s_loaded.results['fluxes']) == 2 + assert len(r2s_loaded.results['micros']) == 2 + assert len(r2s_loaded.results['mesh_material_volumes']) == 2 + assert len(r2s_loaded.results['activation_materials']) == 2 + assert len(r2s_loaded.results['depletion_results']) == 2 + + +def test_r2s_cell_expected_output(simple_model_and_mesh, tmp_path): + model, (c1, c2), _ = simple_model_and_mesh + + # Use cell-based domains + r2s = R2SManager(model, [c1, c2]) + + # Use custom reduced chain file for Ni + chain = Chain.from_xml(Path(__file__).parents[1] / "chain_ni.xml") + + # Run R2S calculation + bounding_boxes = {c1.id: c1.bounding_box, c2.id: c2.bounding_box} + outdir = r2s.run( + timesteps=[(1.0, 'd')], + source_rates=[1.0], + photon_time_indices=[1], + output_dir=tmp_path, + bounding_boxes=bounding_boxes, + chain_file=chain + ) + + # Check directories and files exist + nt = Path(outdir) / 'neutron_transport' + assert (nt / 'fluxes.npy').exists() + assert (nt / 'micros.h5').exists() + act = Path(outdir) / 'activation' + assert (act / 'depletion_results.h5').exists() + pt = Path(outdir) / 'photon_transport' + assert (pt / 'tally_ids.json').exists() + assert (pt / 'time_1' / 'statepoint.10.h5').exists() + + # Basic results structure checks + assert len(r2s.results['fluxes']) == 2 + assert len(r2s.results['micros']) == 2 + assert len(r2s.results['activation_materials']) == 2 + assert len(r2s.results['depletion_results']) == 2 + + # Check activation materials + amats = r2s.results['activation_materials'] + assert all(m.depletable for m in amats) + # Names include cell IDs + assert any(f"Cell {c1.id}" in m.name for m in amats) + assert any(f"Cell {c2.id}" in m.name for m in amats) + # Volumes preserved + assert {m.volume for m in amats} == {c1.volume, c2.volume} + + # Check loading results + r2s_loaded = R2SManager(model, [c1, c2]) + r2s_loaded.load_results(outdir) + assert len(r2s_loaded.results['fluxes']) == 2 + assert len(r2s_loaded.results['micros']) == 2 + assert len(r2s_loaded.results['activation_materials']) == 2 + assert len(r2s_loaded.results['depletion_results']) == 2 diff --git a/tests/unit_tests/test_region.py b/tests/unit_tests/test_region.py index cbcd1983125..cb9fa171bb6 100644 --- a/tests/unit_tests/test_region.py +++ b/tests/unit_tests/test_region.py @@ -248,6 +248,10 @@ def test_plot(): c_before = openmc.Cell() region.plot() + # Close plot to avoid warning + import matplotlib.pyplot as plt + plt.close() + # Ensure that calling plot doesn't affect cell ID space c_after = openmc.Cell() assert c_after.id - 1 == c_before.id diff --git a/tests/unit_tests/test_settings.py b/tests/unit_tests/test_settings.py index 7f202bcdc73..fe618fd2d65 100644 --- a/tests/unit_tests/test_settings.py +++ b/tests/unit_tests/test_settings.py @@ -59,15 +59,28 @@ def test_export_to_xml(run_in_tmpdir): s.electron_treatment = 'led' s.write_initial_source = True s.weight_window_checkpoints = {'surface': True, 'collision': False} + source_region_mesh = openmc.RegularMesh() + source_region_mesh.dimension = [2, 2, 2] + source_region_mesh.lower_left = [-2, -2, -2] + source_region_mesh.upper_right = [2, 2, 2] + root_universe = openmc.Universe() s.random_ray = { 'distance_inactive': 10.0, 'distance_active': 100.0, 'ray_source': openmc.IndependentSource( space=openmc.stats.Box((-1., -1., -1.), (1., 1., 1.)) - ) + ), + 'source_region_meshes': [(source_region_mesh, [root_universe])], + 'volume_estimator': 'hybrid', + 'source_shape': 'linear', + 'volume_normalized_flux_tallies': True, + 'adjoint': False, + 'sample_method': 'halton' } s.max_particle_events = 100 + s.max_secondaries = 1_000_000 s.source_rejection_fraction = 0.01 + s.free_gas_threshold = 800.0 # Make sure exporting XML works s.export_to_xml() @@ -144,4 +157,18 @@ def test_export_to_xml(run_in_tmpdir): assert s.random_ray['distance_active'] == 100.0 assert s.random_ray['ray_source'].space.lower_left == [-1., -1., -1.] assert s.random_ray['ray_source'].space.upper_right == [1., 1., 1.] + assert 'source_region_meshes' in s.random_ray + assert len(s.random_ray['source_region_meshes']) == 1 + mesh_and_domains = s.random_ray['source_region_meshes'][0] + recovered_mesh = mesh_and_domains[0] + assert recovered_mesh.dimension == (2, 2, 2) + assert recovered_mesh.lower_left == [-2., -2., -2.] + assert recovered_mesh.upper_right == [2., 2., 2.] + assert s.random_ray['volume_estimator'] == 'hybrid' + assert s.random_ray['source_shape'] == 'linear' + assert s.random_ray['volume_normalized_flux_tallies'] + assert not s.random_ray['adjoint'] + assert s.random_ray['sample_method'] == 'halton' + assert s.max_secondaries == 1_000_000 assert s.source_rejection_fraction == 0.01 + assert s.free_gas_threshold == 800.0 diff --git a/tests/unit_tests/test_statepoint.py b/tests/unit_tests/test_statepoint.py new file mode 100644 index 00000000000..7ffaf7ec2cc --- /dev/null +++ b/tests/unit_tests/test_statepoint.py @@ -0,0 +1,65 @@ +import openmc + + +def test_get_tally_filter_type(run_in_tmpdir): + """Test various ways of retrieving tallies from a StatePoint object.""" + + mat = openmc.Material() + mat.add_nuclide("H1", 1.0) + mat.set_density("g/cm3", 10.0) + + sphere = openmc.Sphere(r=10.0, boundary_type="vacuum") + cell = openmc.Cell(fill=mat, region=-sphere) + geometry = openmc.Geometry([cell]) + + settings = openmc.Settings() + settings.particles = 10 + settings.batches = 2 + settings.run_mode = "fixed source" + + reg_mesh = openmc.RegularMesh().from_domain(cell) + tally1 = openmc.Tally(tally_id=1) + mesh_filter = openmc.MeshFilter(reg_mesh) + tally1.filters = [mesh_filter] + tally1.scores = ["flux"] + + tally2 = openmc.Tally(tally_id=2, name="heating tally") + cell_filter = openmc.CellFilter(cell) + tally2.filters = [cell_filter] + tally2.scores = ["heating"] + + tallies = openmc.Tallies([tally1, tally2]) + model = openmc.Model( + geometry=geometry, materials=[mat], settings=settings, tallies=tallies + ) + + sp_filename = model.run() + + sp = openmc.StatePoint(sp_filename) + + tally_found = sp.get_tally(filter_type=openmc.MeshFilter) + assert tally_found.id == 1 + + tally_found = sp.get_tally(filter_type=openmc.CellFilter) + assert tally_found.id == 2 + + tally_found = sp.get_tally(filters=[mesh_filter]) + assert tally_found.id == 1 + + tally_found = sp.get_tally(filters=[cell_filter]) + assert tally_found.id == 2 + + tally_found = sp.get_tally(scores=["heating"]) + assert tally_found.id == 2 + + tally_found = sp.get_tally(name="heating tally") + assert tally_found.id == 2 + + tally_found = sp.get_tally(name=None) + assert tally_found.id == 1 + + tally_found = sp.get_tally(id=1) + assert tally_found.id == 1 + + tally_found = sp.get_tally(id=2) + assert tally_found.id == 2 diff --git a/tests/unit_tests/test_statepoint_batches.py b/tests/unit_tests/test_statepoint_batches.py new file mode 100644 index 00000000000..bf54e18786d --- /dev/null +++ b/tests/unit_tests/test_statepoint_batches.py @@ -0,0 +1,26 @@ +from pathlib import Path + +import openmc + + +def test_statepoint_batches(run_in_tmpdir): + # Create a minimal model + mat = openmc.Material() + mat.add_nuclide('U235', 1.0) + mat.set_density('g/cm3', 4.5) + sphere = openmc.Sphere(r=10.0, boundary_type='vacuum') + cell = openmc.Cell(fill=mat, region=-sphere) + model = openmc.Model() + model.geometry = openmc.Geometry([cell]) + model.settings.batches = 10 + model.settings.inactive = 5 + model.settings.particles = 100 + + # Specify when statepoints should be written + model.settings.statepoint = {'batches': [3, 6, 9]} + + # Run model and ensure that statepoints are created + model.run() + sp_files = ['statepoint.03.h5', 'statepoint.06.h5', 'statepoint.09.h5'] + for f in sp_files: + assert Path(f).is_file() diff --git a/tests/unit_tests/test_stats.py b/tests/unit_tests/test_stats.py index 386181f34d2..998d4b984ce 100644 --- a/tests/unit_tests/test_stats.py +++ b/tests/unit_tests/test_stats.py @@ -16,6 +16,7 @@ def assert_sample_mean(samples, expected_mean): assert np.abs(expected_mean - samples.mean()) < 4*std_dev +@pytest.mark.flaky(reruns=1) def test_discrete(): x = [0.0, 1.0, 10.0] p = [0.3, 0.2, 0.5] @@ -104,6 +105,7 @@ def test_clip_discrete(): d.clip(5) +@pytest.mark.flaky(reruns=1) def test_uniform(): a, b = 10.0, 20.0 d = openmc.stats.Uniform(a, b) @@ -127,6 +129,7 @@ def test_uniform(): assert_sample_mean(samples, exp_mean) +@pytest.mark.flaky(reruns=1) def test_powerlaw(): a, b, n = 10.0, 100.0, 2.0 d = openmc.stats.PowerLaw(a, b, n) @@ -148,6 +151,7 @@ def test_powerlaw(): assert_sample_mean(samples, exp_mean) +@pytest.mark.flaky(reruns=1) def test_maxwell(): theta = 1.2895e6 d = openmc.stats.Maxwell(theta) @@ -171,6 +175,7 @@ def test_maxwell(): assert samples_2.mean() != samples.mean() +@pytest.mark.flaky(reruns=1) def test_watt(): a, b = 0.965e6, 2.29e-6 d = openmc.stats.Watt(a, b) @@ -194,6 +199,7 @@ def test_watt(): assert_sample_mean(samples, exp_mean) +@pytest.mark.flaky(reruns=1) def test_tabular(): # test linear-linear sampling x = np.array([0.0, 5.0, 7.0, 10.0]) @@ -270,6 +276,7 @@ def test_legendre(): d.to_xml_element('distribution') +@pytest.mark.flaky(reruns=1) def test_mixture(): d1 = openmc.stats.Uniform(0, 5) d2 = openmc.stats.Uniform(3, 7) @@ -425,6 +432,7 @@ def test_point(): assert d.xyz == pytest.approx(p) +@pytest.mark.flaky(reruns=1) def test_normal(): mean = 10.0 std_dev = 2.0 @@ -444,6 +452,7 @@ def test_normal(): assert_sample_mean(samples, mean) +@pytest.mark.flaky(reruns=1) def test_muir(): mean = 10.0 mass = 5.0 @@ -463,6 +472,7 @@ def test_muir(): assert_sample_mean(samples, mean) +@pytest.mark.flaky(reruns=1) def test_combine_distributions(): # Combine two discrete (same data as in test_merge_discrete) x1 = [0.0, 1.0, 10.0] @@ -506,3 +516,33 @@ def test_combine_distributions(): # uncertainty of the expected value samples = combined.sample(10_000) assert_sample_mean(samples, 0.25) + +def test_reference_vwu_projection(): + """When a non-orthogonal vector is provided, the setter should project out + any component along reference_uvw so the stored vector is orthogonal. + """ + pa = openmc.stats.PolarAzimuthal() # default reference_uvw == (0, 0, 1) + + # Provide a vector that is not orthogonal to (0,0,1) + pa.reference_vwu = (2.0, 0.5, 0.3) + + reference_v = np.asarray(pa.reference_vwu) + reference_u = np.asarray(pa.reference_uvw) + + # reference_v should be orthogonal to reference_u + assert abs(np.dot(reference_v, reference_u)) < 1e-6 + + +def test_reference_vwu_normalization(): + """When a non-normalized vector is provided, the setter should normalize + the projected vector to unit length. + """ + pa = openmc.stats.PolarAzimuthal() # default reference_uvw == (0, 0, 1) + + # Provide a vector that is neither orthogonal to (0,0,1) nor unit-length + pa.reference_vwu = (2.0, 0.5, 0.3) + + reference_v = np.asarray(pa.reference_vwu) + + # reference_v should be unit length + assert np.isclose(np.linalg.norm(reference_v), 1.0, atol=1e-12) diff --git a/tests/unit_tests/test_tallies.py b/tests/unit_tests/test_tallies.py index c38f067d58c..7b1bf0a2fee 100644 --- a/tests/unit_tests/test_tallies.py +++ b/tests/unit_tests/test_tallies.py @@ -1,6 +1,8 @@ +from math import sqrt import numpy as np import pytest import openmc +import scipy.stats as sps def test_xml_roundtrip(run_in_tmpdir): @@ -163,3 +165,214 @@ def test_tally_application(sphere_model, run_in_tmpdir): assert (sp_tally.std_dev == tally.std_dev).all() assert (sp_tally.mean == tally.mean).all() assert sp_tally.nuclides == tally.nuclides + +def _tally_from_data(x, *, higher_moments=True, normality=True): + t = openmc.Tally() + t.scores = ["flux"] # 1 score + t.nuclides = [openmc.Nuclide("H1")] # 1 nuclide + t._sp_filename = "dummy.h5" # mark "results available" + t._results_read = True # don't try to read from disk + t._num_realizations = int(len(x)) # n + t.higher_moments = bool(higher_moments) + + x = np.asarray(x, dtype=float) + # (num_filter_bins=1, num_nuclides=1, num_scores=1) -> (1,1,1) arrays + t._sum = np.array([[[np.sum(x)]]], dtype=float) + t._sum_sq = np.array([[[np.sum(x**2)]]], dtype=float) + if higher_moments: + t._sum_third = np.array([[[np.sum(x**3)]]], dtype=float) + t._sum_fourth = np.array([[[np.sum(x**4)]]], dtype=float) + return t + +@pytest.mark.parametrize( + "x, skew_true, kurt_true", + [ # Rademacher distribution + (np.array([1.0, -1.0] * 200), 0.0, 1.0), + # Two-point {0,3} with p(0)=3/4, p(3)=1/4 + (np.concatenate([np.zeros(600), np.full(200, 3.0)]), 2.0 / sqrt(3.0), 7.0 / 3.0), + # Bernoulli distribution + (np.concatenate([np.ones(300), np.zeros(700)]), (1 - 2 * 0.3) / sqrt(0.3 * 0.7), (1 - 3 * 0.3 + 3 * 0.3**2) / (0.3 * 0.7)), + ], +) +def test_b1_b2_analytical_against_tally(x, skew_true, kurt_true): + t = _tally_from_data(x, higher_moments=True, normality=False) + + g1 = t.skew(bias=True)[0, 0, 0] + b2 = t.kurtosis(bias=True, fisher=False)[0, 0, 0] + + assert np.isclose(g1, skew_true, rtol=0, atol=1e-12) + assert np.isclose(b2, kurt_true, rtol=0, atol=1e-12) + +@pytest.mark.parametrize( + "draw, skew_true, kurt_true", + [(lambda rng, n: rng.normal(0, 1, n), 0.0, 3.0), # Normal + (lambda rng, n: rng.random(n), 0.0, 1.8), # Uniform(0,1) + (lambda rng, n: rng.exponential(1.0, n), 2.0, 9.0), # Exp(1) + (lambda rng, n: (rng.random(n) < 0.3).astype(float), + (1 - 2 * 0.3) / sqrt(0.3 * 0.7), + (1 - 3 * 0.3 + 3 * 0.3**2) / (0.3 * 0.7),),],) + +def test_b1_b2_scipy_and_theory(draw, skew_true, kurt_true): + rng = np.random.default_rng(12345) + N = 200_000 + x = draw(rng, N) + + # Tally outputs + t = _tally_from_data(x, higher_moments=True, normality=False) + g1_t = t.skew(bias=True)[0, 0, 0] + b2_t = t.kurtosis(bias=True, fisher=False)[0, 0, 0] + + # SciPy (population, bias=True to match population-moment style) + skew_sp = sps.skew(x, bias=True) + kurt_sp = sps.kurtosis(x, fisher=False, bias=True) + + # Compare to SciPy numerically + assert np.isclose(g1_t, skew_sp, rtol=0, atol=5e-3) + assert np.isclose(b2_t, kurt_sp, rtol=0, atol=5e-3) + + # Compare to analytical targets with size-dependent tolerances + tol_skew = 0.02 if abs(skew_true) < 0.5 else 0.05 + tol_kurt = 0.03 if kurt_true < 4 else 0.1 + assert abs(g1_t - skew_true) < tol_skew + assert abs(b2_t - kurt_true) < tol_kurt + + +def test_kurtosis_bias_fisher_combinations(): + """Test that all combinations of bias and fisher match scipy.stats.kurtosis""" + rng = np.random.default_rng(42) + x = rng.normal(0, 1, 10000) + + t = _tally_from_data(x, higher_moments=True, normality=False) # Test all four combinations + # 1. bias=True, fisher=False (Pearson's kurtosis, b2) + b2_tally = t.kurtosis(bias=True, fisher=False)[0, 0, 0] + b2_scipy = sps.kurtosis(x, fisher=False, bias=True) + assert np.isclose(b2_tally, b2_scipy, rtol=0, atol=1e-10) + assert np.isclose(b2_tally, 3.0, rtol=0.05, atol=0.1) # Should be ~3 for normal + + # 2. bias=True, fisher=True (excess kurtosis, g2) + g2_tally = t.kurtosis(bias=True, fisher=True)[0, 0, 0] + g2_scipy = sps.kurtosis(x, fisher=True, bias=True) + assert np.isclose(g2_tally, g2_scipy, rtol=0, atol=1e-10) + assert np.isclose(g2_tally, 0.0, rtol=0, atol=0.1) # Should be ~0 for normal + assert np.isclose(g2_tally, b2_tally - 3.0, rtol=0, atol=1e-10) # g2 = b2 - 3 + + # 3. bias=False, fisher=True (adjusted excess kurtosis, G2) + G2_tally = t.kurtosis(bias=False, fisher=True)[0, 0, 0] + G2_tally_default = t.kurtosis()[0, 0, 0] # Should be same as default + G2_scipy = sps.kurtosis(x, fisher=True, bias=False) + assert np.isclose(G2_tally, G2_tally_default, rtol=0, atol=1e-10) + assert np.isclose(G2_tally, G2_scipy, rtol=0, atol=1e-10) + assert np.isclose(G2_tally, 0.0, rtol=0, atol=0.1) # Should be ~0 for normal + + # 4. bias=False, fisher=False (adjusted Pearson's kurtosis) + adj_b2_tally = t.kurtosis(bias=False, fisher=False)[0, 0, 0] + adj_b2_scipy = sps.kurtosis(x, fisher=False, bias=False) + assert np.isclose(adj_b2_tally, adj_b2_scipy, rtol=0, atol=1e-10) + assert np.isclose(adj_b2_tally, 3.0, rtol=0.05, atol=0.1) # Should be ~3 for normal + assert np.isclose(adj_b2_tally, G2_tally + 3.0, rtol=0, atol=1e-10) # adj_b2 = G2 + 3 + + +def test_ztests_scipy_comparison(): + rng = np.random.default_rng(987) + x_norm = rng.normal(size=50_000) + x_exp = rng.exponential(size=50_000) + + # -------- Normal dataset (should not reject) -------- + t0 = _tally_from_data(x_norm, higher_moments=True, normality=True) + Zb1_0, p_skew_0 = t0.skewtest(alternative="two-sided") + Zb2_0, p_kurt_0 = t0.kurtosistest(alternative="two-sided") + K2_0, p_omni_0 = t0.normaltest(alternative="two-sided") + + Zb1_0 = Zb1_0.ravel()[0] + p_skew_0 = p_skew_0.ravel()[0] + Zb2_0 = Zb2_0.ravel()[0] + p_kurt_0 = p_kurt_0.ravel()[0] + K2_0 = K2_0.ravel()[0] + p_omni_0 = p_omni_0.ravel()[0] + + z_skew_sp0, p_skew_sp0 = sps.skewtest(x_norm) + z_kurt_sp0, p_kurt_sp0 = sps.kurtosistest(x_norm) + k2_sp0, p_omni_sp0 = sps.normaltest(x_norm) + + assert np.isclose(Zb1_0, z_skew_sp0, atol=0.15) + assert np.isclose(Zb2_0, z_kurt_sp0, atol=0.15) + assert np.isclose(K2_0, k2_sp0, atol=0.30) + assert np.isclose(p_skew_0, p_skew_sp0, atol=5e-3) + assert np.isclose(p_kurt_0, p_kurt_sp0, atol=5e-3) + assert np.isclose(p_omni_0, p_omni_sp0, atol=5e-3) + + # -------- Exponential dataset (should strongly reject) -------- + t1 = _tally_from_data(x_exp, higher_moments=True, normality=True) + + Zb1_1, p_skew_1 = t1.skewtest(alternative="two-sided") + Zb2_1, p_kurt_1 = t1.kurtosistest(alternative="two-sided") + K2_1, p_omni_1 = t1.normaltest(alternative="two-sided") + + Zb1_1 = Zb1_1.ravel()[0] + p_skew_1 = p_skew_1.ravel()[0] + Zb2_1 = Zb2_1.ravel()[0] + p_kurt_1 = p_kurt_1.ravel()[0] + K2_1 = K2_1.ravel()[0] + p_omni_1 = p_omni_1.ravel()[0] + + z_skew_sp1, p_skew_sp1 = sps.skewtest(x_exp) + z_kurt_sp1, p_kurt_sp1 = sps.kurtosistest(x_exp) + k2_sp1, p_omni_sp1 = sps.normaltest(x_exp) + + # Both pipelines should reject very strongly + assert p_skew_1 < 1e-6 and p_skew_sp1 < 1e-6 + assert p_kurt_1 < 1e-6 and p_kurt_sp1 < 1e-6 + assert p_omni_1 < 1e-6 and p_omni_sp1 < 1e-6 + + # Right-skewed and heavy-tailed → large positive Z-statistics + assert Zb1_1 > 30 and z_skew_sp1 > 30 + assert Zb2_1 > 30 and z_kurt_sp1 > 30 + assert K2_1 > 2000 and k2_sp1 > 2000 + +def test_vov_stochastic(sphere_model, run_in_tmpdir): + tally = openmc.Tally(name="test tally") + ef = openmc.EnergyFilter([0.0, 0.1, 1.0, 10.0e6]) + mesh = openmc.RegularMesh.from_domain(sphere_model.geometry, (2, 2, 2)) + mf = openmc.MeshFilter(mesh) + tally.filters = [ef, mf] + tally.scores = ["flux", "absorption", "fission", "scatter"] + tally.higher_moments = True + sphere_model.tallies = [tally] + + sp_file = sphere_model.run(apply_tally_results=True) + + assert tally._mean is None + assert tally._std_dev is None + assert tally._sum is None + assert tally._sum_sq is None + assert tally._sum_third is None + assert tally._sum_fourth is None + assert tally._num_realizations == 0 + assert tally._sp_filename == sp_file + + with openmc.StatePoint(sp_file) as sp: + assert tally in sp.tallies.values() + sp_tally = sp.tallies[tally.id] + + assert np.all(sp_tally.std_dev == tally.std_dev) + assert np.all(sp_tally.mean == tally.mean) + assert np.all(sp_tally.vov == tally.vov) + assert sp_tally.nuclides == tally.nuclides + + n = sp_tally.num_realizations + mean = sp_tally.mean + sum_ = sp_tally._sum + sum_sq = sp_tally._sum_sq + sum_third = sp_tally._sum_third + sum_fourth = sp_tally._sum_fourth + + expected_vov = np.zeros_like(mean) + nonzero = np.abs(mean) > 0 + + num = (sum_fourth - (4.0*sum_third*sum_)/n + (6.0*sum_sq*sum_**2)/(n**2) + - (3.0*sum_**4)/(n**3)) + den = (sum_sq - (1.0/n)*sum_**2)**2 + + expected_vov[nonzero] = num[nonzero]/den[nonzero] - 1.0/n + + assert np.allclose(expected_vov, sp_tally.vov, rtol=1e-7, atol=0.0) diff --git a/tests/unit_tests/test_universe.py b/tests/unit_tests/test_universe.py index 46d4ec3f734..efe8552a648 100644 --- a/tests/unit_tests/test_universe.py +++ b/tests/unit_tests/test_universe.py @@ -99,6 +99,10 @@ def test_plot(run_in_tmpdir, sphere_model): pixels=100, ) + # Close plots to avoid warning + import matplotlib.pyplot as plt + plt.close('all') + def test_get_nuclides(uo2): c = openmc.Cell(fill=uo2) diff --git a/tests/unit_tests/weightwindows/dagmc/__init__.py b/tests/unit_tests/weightwindows/dagmc/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/unit_tests/weightwindows/dagmc/nested_shell_geometry.h5m b/tests/unit_tests/weightwindows/dagmc/nested_shell_geometry.h5m new file mode 100644 index 0000000000000000000000000000000000000000..af1d5563d9255b518d42b551b7527cdf45eeaaf3 GIT binary patch literal 58680 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 ZKJ@mkzRs4Wo;}NVH#PV5?Swso{}1hu%5MMw literal 0 HcmV?d00001 diff --git a/tests/unit_tests/weightwindows/dagmc/test.py b/tests/unit_tests/weightwindows/dagmc/test.py new file mode 100644 index 00000000000..ed01a93ed3d --- /dev/null +++ b/tests/unit_tests/weightwindows/dagmc/test.py @@ -0,0 +1,98 @@ +import pytest + +import openmc +import openmc.lib + +pytestmark = pytest.mark.skipif( + not openmc.lib._dagmc_enabled(), + reason="DAGMC CAD geometry is not enabled.", +) + + +def test_dagmc_weight_windows_near_boundary(run_in_tmpdir, request): + """Ensure splitting near a boundary doesn't lose particles due to + a stale DAGMC history on the particle object.""" + + # DAGMC model overview: + # * Three nested cubes; innermost cube contains a fusion neutron source. + # * Two outer cubes filled with tungsten. Weight windows defined on a mesh + # cause particles to split moving outward. + # Outer cubes are similar in size (outer slightly larger) so particles + # frequently cross the problem boundary immediately after splitting. No lost + # particles are allowed to the correct DAGMC history after splitting is used. + model = openmc.Model() + + dagmc_file = request.path.parent / 'nested_shell_geometry.h5m' + dagmc_univ = openmc.DAGMCUniverse(dagmc_file) + model.geometry = openmc.Geometry(dagmc_univ) + + tungsten = openmc.Material(name='shell') + tungsten.add_element('W', 1.0) + tungsten.set_density('g/cm3', 7.8) + materials = openmc.Materials([tungsten]) + model.materials = materials + + settings = openmc.Settings() + settings.output = {'tallies': False, 'summary': False} + + source = openmc.IndependentSource() + source.space = openmc.stats.Point((0.0, 0.0, 0.0)) + source.angle = openmc.stats.Isotropic() + source.energy = openmc.stats.Discrete([14.1e6], [1.0]) + settings.source = source + + settings.batches = 2 + settings.particles = 500 + settings.run_mode = 'fixed source' + settings.survival_biasing = False + settings.max_lost_particles = 1 + settings.max_history_splits = 10_000_000 + + settings.weight_window_checkpoints = { + 'surface': True, + 'collision': True, + } + + mesh = openmc.RegularMesh() + mesh.lower_left = (-60.0, -60.0, -60.0) + mesh.upper_right = (60.0, 60.0, 60.0) + mesh.dimension = (24, 1, 1) + + weight_windows_lower = [ + 0.030750733294361156, + 0.056110505674355333, + 0.08187875047968339, + 0.1101743496347699, + 0.13982370013053508, + 0.17443799246829372, + 0.21576286623367483, + 0.26416659508033646, + 0.318574932646899, + 0.3804031702117963, + 0.42899359749256355, + 0.4954283294279403, + 0.49999999999999994, + 0.43432341070872266, + 0.38302303850488206, + 0.32148375935490886, + 0.2637416945702018, + 0.21498369367288853, + 0.17163611765361744, + 0.13832102142074995, + 0.10717772257151495, + 0.07986176041282561, + 0.05499644859408233, + 0.03058023506703803, + ] + + weight_windows = openmc.WeightWindows( + mesh, + lower_ww_bounds=weight_windows_lower, + upper_bound_ratio=5.0, + ) + weight_windows.max_lower_bound_ratio = 1.0 + settings.weight_windows = weight_windows + settings.weight_windows_on = True + model.settings = settings + + model.run() \ No newline at end of file diff --git a/tests/unit_tests/weightwindows/test_wwinp_reader.py b/tests/unit_tests/weightwindows/test_wwinp_reader.py index 28548a4486f..637463bb2e6 100644 --- a/tests/unit_tests/weightwindows/test_wwinp_reader.py +++ b/tests/unit_tests/weightwindows/test_wwinp_reader.py @@ -140,4 +140,4 @@ def test_wwinp_reader_failures(wwinp_data, request): filename, expected_failure = wwinp_data with pytest.raises(expected_failure): - _ = openmc.wwinp_to_wws(request.node.path.parent / filename) + _ = openmc.WeightWindowsList.from_wwinp(request.node.path.parent / filename) diff --git a/tools/ci/gha-script.sh b/tools/ci/gha-script.sh index c0f754c32c8..b40238ffb56 100755 --- a/tools/ci/gha-script.sh +++ b/tools/ci/gha-script.sh @@ -15,4 +15,7 @@ if [[ $EVENT == 'y' ]]; then fi # Run unit tests and then regression tests -pytest --cov=openmc -v $args tests/unit_tests tests/regression_tests +pytest -v $args \ + tests/test_matplotlib_import.py \ + tests/unit_tests \ + tests/regression_tests From 100503606471b5cd4b63c8411431d82b3ddbb253 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 15 Dec 2025 11:43:55 +0000 Subject: [PATCH 32/48] Use new functions for source region keys and idx --- include/openmc/random_ray/decomposition_map.h | 2 - src/random_ray/decomposition_map.cpp | 17 +-- src/random_ray/flat_source_domain.cpp | 20 --- src/random_ray/random_ray.cpp | 118 +++--------------- src/random_ray/random_ray_simulation.cpp | 68 +++++----- 5 files changed, 53 insertions(+), 172 deletions(-) diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 689ee2c8738..706a851ab60 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -32,8 +32,6 @@ class DecompositionMap { Position calculate_centroids(const Position position_sum, const int num_points, int rank); // Methods to create and update subdomain list and exchange source region data - void update(ParallelMap& - discovered_source_regions); void exchange_sr_info(ParallelMap& discovered_source_regions); bool any_discovered_source_regions(ParallelMap& diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 9d724a5e28b..6789d8a19b4 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -344,22 +344,11 @@ Position DecompositionMap::calculate_centroids(const Position position_sum, cons return centroid; } -// Update subdomain list for each decomposition map. //TODO: This function seems obsolete and should be included into main code -void DecompositionMap::update(ParallelMap& - discovered_source_regions){ - - // Check if any new regions discovered and if so, exchange discovered cell data between ranks - if (any_discovered_source_regions(discovered_source_regions)){ - simulation::time_source_region_exchange.start(); - exchange_sr_info(discovered_source_regions); - simulation::time_source_region_exchange.stop(); - } - -} - bool DecompositionMap::any_discovered_source_regions(ParallelMap& discovered_source_regions){ + simulation::time_decomposition_handling.start(); + int flag = 0; if(discovered_source_regions.begin() != discovered_source_regions.end()) { flag = 1; @@ -368,6 +357,8 @@ bool DecompositionMap::any_discovered_source_regions(ParallelMap 0; + + simulation::time_decomposition_handling.start(); } void DecompositionMap::exchange_sr_info(ParallelMap& diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index a9ed358e69c..f1a3200992c 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -1095,26 +1095,6 @@ void FlatSourceDomain::output_to_vtk_decomp() const sr = it_sr->second; } - // int i_cell = p.lowest_coord().cell(); - // int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); - // SourceRegionKey sr_key {sr, 0}; - // if (RandomRay::mesh_subdivision_enabled_) { - // int mesh_idx = base_source_regions_.mesh(sr); - // int mesh_bin; - // if (mesh_idx == C_NONE) { - // mesh_bin = 0; - // } else { - // mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); - // } - // sr_key = {sr, mesh_bin}; - // auto it = source_region_map_.find(sr_key); - // if (it != source_region_map_.end()) { - // sr = it->second; - // } else { - // sr = -1; - // } - // } - voxel_indices[z * Ny * Nx + y * Nx + x] = sr; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 29b970d8a14..04f65f7027c 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -266,23 +266,12 @@ uint64_t RandomRay::transport_history_based_single_ray() { using namespace openmc; while (alive()) { - // if (id()==204) { - // printf("Rank: %d, 1 Ray in transport at position %f %f %f \n", mpi::rank, r().x,r().y,r().z); - // } event_advance_ray(); - // if (id()==204) { - // printf("Rank: %d, 2 Ray in transport at position %f %f %f \n", mpi::rank, r().x,r().y,r().z); - // } + if (!alive()) - // if (id()==204) { - // printf("Rank: %d, leaving \n", mpi::rank); - // } break; event_cross_surface(); - // if (id()==204) { - // printf("Rank: %d, 3 Ray in transport at position %f %f %f \n", mpi::rank, r().x,r().y,r().z); - // } - // If ray has too many events, display warning and kill it + if (n_event() >= settings::max_particle_events) { warning("Ray " + std::to_string(id()) + " underwent maximum number of events, terminating ray."); @@ -308,9 +297,7 @@ void RandomRay::event_advance_ray() // If domain decomposition is being used, update counter for // ray trace operations in source region for load estimation //TODO: This is repeated in attenuate_flux, maybe pass in sr index as argument? - int i_cell = lowest_coord().cell(); - // The base source region is the spatial region index - int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); + int64_t sr = domain_->lookup_base_source_region_idx(*this); for (int i = 0; i < n_coord(); i++) { Cell& c {*model::cells[coord(i).cell()]}; mpi::decomp_map.num_base_source_region_RT_batch_[sr] += c.n_surfaces(); @@ -852,7 +839,6 @@ void RandomRay::attenuate_flux_linear_source_void( } } -// void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, vector& angular_flux) void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux) { @@ -868,23 +854,15 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo wgt() = 1.0; - // is_local_ = true; - // set identifier for particle id() = data.ray_id; - // printf("restart: %d, %d", mpi::rank, id()); - // generate source site using sample method SourceSite site; // Set location and direction as in previous subdomain site.r = data.position; - // if (id() == 2){ - // printf("RANK %d: Restart ray, position: %f, %f, %f\n", mpi::rank, site.r.x, site.r.y, site.r.z); - // } - // angle site.u = data.direction; @@ -893,7 +871,6 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // reinitialize last surface that was crossed surface() = data.surface; - // printf("RANK %d: Restart ray %ld, last surface crossed: %d \n", mpi::rank, id(), surface()); // Locate ray if (lowest_coord().cell() == C_NONE) { @@ -907,28 +884,6 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo cell_born() = lowest_coord().cell(); } - SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); - SourceRegionHandle srh = - domain_->get_subdivided_source_region_handle(sr_key, r(), u()); - - // Initialize ray's starting angular flux to starting location's isotropic - // source - int i_cell = lowest_coord().cell(); - int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - - // if (id() == 6543){ - // printf("RANK %d: Restart ray %ld, last surface crossed: %d, %d, cell: %d, source region %ld \n", mpi::rank, id(), exchange_data_.surface, surface(), i_cell, sr); - // } - - if (sr == C_NONE || sr < 0){ - std::string err_msg = "ERROR: Cell " + std::to_string(sr) + - " not found when restarting ray " + std::to_string(id()) + - "at position: (" + std::to_string(site.r.x) + ", " + - std::to_string(site.r.y) + ", " + - std::to_string(site.r.z) + ")"; - fatal_error(err_msg); - } - // Set ray's angular flux to value before subdomain change if (distance_travelled_ > 0.0 || is_active_){ for (int g = 0; g < negroups_; g++) { @@ -938,22 +893,9 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // Initialize ray's starting angular flux to starting location's isotropic // source else { - // SourceRegionHandle srh; - // if (mesh_subdivision_enabled_) { - // int mesh_idx = domain_->base_source_regions_.mesh(sr); - // int mesh_bin; - // if (mesh_idx == C_NONE) { - // mesh_bin = 0; - // } else { - // Mesh* mesh = model::meshes[mesh_idx].get(); - // mesh_bin = mesh->get_bin(r()); - // } - - // srh = - // domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); - // } else { - // srh = domain_->source_regions_.get_source_region_handle(sr); - // } + SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); + SourceRegionHandle srh = + domain_->get_subdivided_source_region_handle(sr_key, r(), u()); if (!srh.is_numerical_fp_artifact_) { for (int g = 0; g < negroups_; g++) { @@ -962,8 +904,6 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo } } - // printf("RANK %d: Restart ray %ld, position: %f, %f, %f, angular flux: %f, distance travlled: %f, rank %d\n", mpi::rank, id(), r().x, r().y, r().z, angular_flux_[0], distance_travelled_, mpi::rank); - } void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) @@ -999,7 +939,6 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) this->from_source(&site); // Locate ray - // printf("Initiliase: ray %d, rank %d\n", id(), mpi::rank); if (lowest_coord().cell() == C_NONE) { if (!exhaustive_find_cell(*this)) { this->mark_as_lost( @@ -1015,41 +954,20 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) SourceRegionHandle srh = domain_->get_subdivided_source_region_handle(sr_key, r(), u()); - // Initialize ray's starting angular flux to starting location's isotropic - // source - // int i_cell = lowest_coord().cell(); - // int64_t sr = domain_->source_region_offsets_[i_cell] + cell_instance(); - - // SourceRegionHandle srh; - // if (mesh_subdivision_enabled_) { - // int mesh_idx = domain_->base_source_regions_.mesh(sr); - // int mesh_bin; - // if (mesh_idx == C_NONE) { - // mesh_bin = 0; - // } else { - // Mesh* mesh = model::meshes[mesh_idx].get(); - // mesh_bin = mesh->get_bin(r()); - // } - - if (mpi::n_procs > 1){ - // Check if ray sampling site belongs to subdomain - owner_rank_ = mpi::decomp_map.find_owner(sr_key, r(), - domain_->discovered_source_regions_); - if (owner_rank_ != mpi::rank) { - for (int g = 0; g < negroups_; g++) { - angular_flux_[g] = 0.0; - } - pack_ray_for_buffer(0.0, r()); - is_local_ = false; - return; + if (mpi::n_procs > 1){ + // Check if ray sampling site belongs to subdomain + owner_rank_ = mpi::decomp_map.find_owner(sr_key, r(), + domain_->discovered_source_regions_); + + if (owner_rank_ != mpi::rank) { + for (int g = 0; g < negroups_; g++) { + angular_flux_[g] = 0.0; } + pack_ray_for_buffer(0.0, r()); + is_local_ = false; + return; } - - // srh = - // domain_->get_subdivided_source_region_handle(sr, mesh_bin, r(), u()); - // } else { - // srh = domain_->source_regions_.get_source_region_handle(sr); - // } + } if (!srh.is_numerical_fp_artifact_) { for (int g = 0; g < negroups_; g++) { diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index e9d420fe79b..7a090afa01f 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -415,12 +415,12 @@ void RandomRaySimulation::simulate() // Reset total starting particle weight used for normalizing tallies simulation::total_weight = 1.0; - // Update source term (scattering + fission) - domain_->update_all_neutron_sources(); + // Update source term (scattering + fission) + domain_->update_all_neutron_sources(); - // Reset scalar fluxes, iteration volume tallies, and region hit flags - // to zero - domain_->batch_reset(); + // Reset scalar fluxes, iteration volume tallies, and region hit flags + // to zero + domain_->batch_reset(); // At the beginning of the simulation, if mesh subvivision is in use, we // need to swap the main source region container into the base container, @@ -448,18 +448,20 @@ void RandomRaySimulation::simulate() transport_sweep_decomp(RB); - // Update decomposition map with newly discovered source regions - simulation::time_decomposition_handling.start(); - mpi::decomp_map.update(domain_->discovered_source_regions_); - simulation::time_decomposition_handling.stop(); + // Check if any new regions discovered and if so, exchange discovered cell data between ranks + if (mpi::decomp_map.any_discovered_source_regions(domain_->discovered_source_regions_)){ + simulation::time_source_region_exchange.start(); + mpi::decomp_map.exchange_sr_info(domain_->discovered_source_regions_); + simulation::time_source_region_exchange.stop(); + } } else { transport_sweep(); } - // Add any newly discovered source regions to the main source region - // container. - domain_->finalize_discovered_source_regions(); + // Add any newly discovered source regions to the main source region + // container. + domain_->finalize_discovered_source_regions(); // Normalize scalar flux and update volumes domain_->normalize_scalar_flux_and_volumes( @@ -478,20 +480,20 @@ void RandomRaySimulation::simulate() // Apply transport stabilization factors domain_->apply_transport_stabilization(); - if (settings::run_mode == RunMode::EIGENVALUE) { - // Compute random ray k-eff - domain_->compute_k_eff(); + if (settings::run_mode == RunMode::EIGENVALUE) { + // Compute random ray k-eff + domain_->compute_k_eff(); - // Store random ray k-eff into OpenMC's native k-eff variable - global_tally_tracklength = domain_->k_eff_; - } + // Store random ray k-eff into OpenMC's native k-eff variable + global_tally_tracklength = domain_->k_eff_; + } // Execute all tallying tasks, if this is an active batch if (simulation::current_batch > settings::n_inactive) { - // Add this iteration's scalar flux estimate to final accumulated - // estimate - domain_->accumulate_iteration_flux(); + // Add this iteration's scalar flux estimate to final accumulated + // estimate + domain_->accumulate_iteration_flux(); // Use above mapping to contribute FSR flux data to appropriate // tallies @@ -541,7 +543,7 @@ void RandomRaySimulation::output_simulation_results() MPI_Reduce(&total_n_external_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); } - // Determine load imbalance + // Determine load imbalance based on measured transport times, every rank needs to know about this for plotting purposes double time_transport_total = simulation::time_transport.elapsed() - simulation::time_ray_buffering.elapsed(); MPI_Allgather(&time_transport_total, 1, MPI_DOUBLE, mpi::decomp_map.measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, mpi::intracomm); double measured_load_sum = std::accumulate(mpi::decomp_map.measured_rank_load_fractions_.begin(), mpi::decomp_map.measured_rank_load_fractions_.end(), 0.0); @@ -573,12 +575,12 @@ void RandomRaySimulation::output_simulation_results() } if (model::plots.size() > 0) { - if (mpi::n_procs > 1){ - domain_->output_to_vtk_decomp(); - } else { - domain_->output_to_vtk(); - } + if (mpi::n_procs > 1){ + domain_->output_to_vtk_decomp(); + } else { + domain_->output_to_vtk(); } + } } @@ -641,7 +643,8 @@ void RandomRaySimulation::print_results_random_ray( double time_transport_total = time_transport.elapsed() - time_ray_buffering.elapsed(); double time_per_integration = time_transport_total / total_integrations; double time_domain_decomposition = time_decomposition_handling.elapsed() - + time_generate_voronoi_centers.elapsed() + time_load_balance.elapsed() - time_transport_total; + + time_generate_voronoi_centers.elapsed() + time_load_balance.elapsed() + + time_source_region_exchange.elapsed() - time_transport_total ; double misc_time = time_total.elapsed() - time_update_src.elapsed() - time_transport_total - time_tallies.elapsed() - time_bank_sendrecv.elapsed() - time_domain_decomposition; @@ -792,8 +795,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { uint64_t id = simulation::work_index[mpi::rank] + i; RandomRay ray(id, domain_.get()); -// printf("%d, %d\n", mpi::rank, i); - // Add ray to ray bank if it starts in my subdomain if (!ray.has_left_subdomain()){ #pragma omp critical (raybank) @@ -817,8 +818,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { int num_communication_rounds = 0; - // printf("test2\n"); - // Move rays across ranks until they are terminated while (RB.is_any_ray_alive()) { @@ -828,11 +827,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { #pragma omp parallel for schedule(dynamic) \ reduction(+ : total_geometric_intersections_) for (int i = 0; i < RB.ray_bank_size(); i++) { - // printf("1 Start ray: %d in rank %d \n", i, mpi::rank); RandomRay& ray = RB.my_ray_list_[i]; - // printf("2 Start ray: %d in rank %d \n", i, mpi::rank); total_geometric_intersections_ += ray.transport_history_based_single_ray(); - // printf("3 Start ray: %d in rank %d \n", i, mpi::rank); // If ray has left my subdomain, buffer ray state if(ray.has_left_subdomain()){ @@ -846,8 +842,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } simulation::time_transport.stop(); - // printf("test3\n"); - // Update ray bank by communicating rays in buffer to new owner ranks and removing terminated ranks simulation::time_ray_comms.start(); RB.update(domain_.get()); From 1a4cd94eef2fa4bbb7c2bf6289c63d6d85dba7c8 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Fri, 23 Jan 2026 17:24:35 +0000 Subject: [PATCH 33/48] Merge random ray MPI handling for DAGMC geometries --- .gitignore | 1 + examples/proxima/download_dagmc_mesh.sh | 3 + examples/proxima/stellarator.py | 185 +++++++++++++++++++ include/openmc/constants.h | 5 + include/openmc/random_ray/random_ray.h | 48 ++++- include/openmc/random_ray/ray_bank.h | 14 +- src/geometry.cpp | 8 + src/random_ray/random_ray.cpp | 162 +++++++++++++--- src/random_ray/random_ray_simulation.cpp | 7 + src/random_ray/ray_bank.cpp | 226 ++++++++++++++++------- 10 files changed, 567 insertions(+), 92 deletions(-) create mode 100644 examples/proxima/download_dagmc_mesh.sh create mode 100644 examples/proxima/stellarator.py diff --git a/.gitignore b/.gitignore index 077d4d4706e..db7aa23f261 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,7 @@ results_test.dat # HDF5 files *.h5 +*.h5m # Build files src/CMakeCache.txt diff --git a/examples/proxima/download_dagmc_mesh.sh b/examples/proxima/download_dagmc_mesh.sh new file mode 100644 index 00000000000..ec3b8746c13 --- /dev/null +++ b/examples/proxima/download_dagmc_mesh.sh @@ -0,0 +1,3 @@ +#!/bin/bash +wget https://anl.box.com/shared/static/422g0kp72gtbap0l55ffvq9cloxslu87.h5m +mv 422g0kp72gtbap0l55ffvq9cloxslu87.h5m dagmc_surface_mesh.h5m \ No newline at end of file diff --git a/examples/proxima/stellarator.py b/examples/proxima/stellarator.py new file mode 100644 index 00000000000..e7380a5b166 --- /dev/null +++ b/examples/proxima/stellarator.py @@ -0,0 +1,185 @@ +import numpy as np +import openmc # install with: conda install -c conda-forge openmc +import math + +materials = openmc.Materials() + +# simplified material definitions have been used to keen this example minimal +material_layer_1 = openmc.Material(name='layer_1') +material_layer_1.add_nuclide("Fe56", 1, "ao") +material_layer_1.set_density("g/cm3", 7.) +materials.append(material_layer_1) + +material_layer_2 = openmc.Material(name='layer_2') +material_layer_2.add_nuclide("Li6", 0.9, "ao") +material_layer_2.add_nuclide("Li7", 0.1, "ao") +material_layer_2.set_density("g/cm3", 2.) +materials.append(material_layer_2) + +material_layer_3 = openmc.Material(name='layer_3') +material_layer_3.add_nuclide("Fe56", 1, "ao") +material_layer_3.set_density("g/cm3", 7.) +materials.append(material_layer_3) + +material_magnet = openmc.Material(name='magnet') +material_magnet.add_nuclide("Fe56", 1, "ao") +material_magnet.set_density("g/cm3", 7.) +materials.append(material_magnet) + + +bound_dag_univ = openmc.DAGMCUniverse(filename="dagmc_surface_mesh.h5m").bounded_universe() +geometry = openmc.Geometry(root=bound_dag_univ) + +rmesh = openmc.RegularMesh.from_domain(bound_dag_univ) +rmesh.id = 2 +rmesh.dimension = [200, 200, 200] +rmesh_filter = openmc.MeshFilter(rmesh) +rmesh_tally_h3 = openmc.Tally(name="H3_rmesh_tally") +rmesh_tally_h3.filters = [rmesh_filter] +rmesh_tally_h3.scores = ["H3-production"] + +material_filter_layer_2 = openmc.MaterialFilter(material_layer_2) +material_tally_h3 = openmc.Tally(name="H3_material_tally") +material_tally_h3.filters = [material_filter_layer_2] +material_tally_h3.scores = ["H3-production"] + +material_filter_magnet = openmc.MaterialFilter(material_magnet) +material_tally_magnet_heat = openmc.Tally(name="magnet_heating_material_tally") +material_tally_magnet_heat.filters = [material_filter_magnet] +material_tally_magnet_heat.scores = ["heating"] + +# tallies = openmc.Tallies([material_tally_h3, material_tally_magnet_heat, mesh_tally_h3]) +tallies = openmc.Tallies([material_tally_h3, material_tally_magnet_heat, rmesh_tally_h3]) +# tallies = openmc.Tallies([mesh_tally, material_tally]) + + +# initializes a new source object +my_source = openmc.IndependentSource() + +# the distribution of radius is just a single value at the major radius +radius = openmc.stats.Discrete([1397.626385546529], [1]) + +# the distribution of source z values is just a single value +z_values = openmc.stats.Discrete([0], [1]) + +# the distribution of source azimuthal angles values is a uniform distribution between 0 and 2 Pi +angle = openmc.stats.Uniform(a=0., b=2* 3.14159265359) + +# this makes the ring source using the three distributions and a radius +#my_source.space = openmc.stats.CylindricalIndependent(r=radius, phi=angle, z=z_values, origin=(0.0, 0.0, 0.0)) + +# sets the direction to isotropic +my_source.angle = openmc.stats.Isotropic() +# sets the energy distribution to 100% 14MeV neutrons, this is a simplification +# normally this would be a distribution of energies that can be made using packages like +# fusion_neutron_utils https://github.com/fusion-energy/fusion_neutron_utils +energy = openmc.stats.Discrete([14.06e6], [1]) + +# Let's make a ring of sources +sources = [] +n_sources = 1000 +#radius = 1397.626385546529 +#radius = 1500.0 +radius = 1480.0 +z = 0.0 + +for i in range(n_sources): + theta = 2.0 * math.pi * i / n_sources # angle in radians + x = radius * math.cos(theta) + y = radius * math.sin(theta) + + src = openmc.IndependentSource() + src.space = openmc.stats.Point([x, y, z]) + src.energy = energy + sources.append(src) + +# specifies the simulation computational intensity +settings = openmc.Settings() +settings.batches = 5 # this is set to 2 for testing purposes, this should be increased for an accurate simulation +settings.particles = 100 # this is set to 10 for testing purposes, this should be increased for an accurate simulation +settings.run_mode = "fixed source" +settings.source = sources +settings.photon_transport = True + + +# builds the openmc model +model = openmc.Model( + materials=materials, geometry=geometry, settings=settings, tallies=tallies +) + +#model.export_to_model_xml() + +mesh = openmc.RegularMesh() +mesh.lower_left = geometry.bounding_box.lower_left +mesh.upper_right = geometry.bounding_box.upper_right +print("Lower Left: ({}, {}, {})".format(mesh.lower_left[0], mesh.lower_left[1], mesh.lower_left[2])) +print("Upper Right: ({}, {}, {})".format(mesh.upper_right[0], mesh.upper_right[1], mesh.upper_right[2])) +resolution = 20.0 +# Use the ceiling rather than the floor +n_x = math.ceil((mesh.upper_right[0] - mesh.lower_left[0]) / resolution) +n_y = math.ceil((mesh.upper_right[1] - mesh.lower_left[1]) / resolution) +n_z = math.ceil((mesh.upper_right[2] - mesh.lower_left[2]) / resolution) +mesh.dimension = [n_x, n_y, n_z] +print("Dimensions: ({}, {}, {})".format(n_x, n_y, n_z)) + +tally = openmc.Tally(name='ww_mesh_flux') +tally.filters = [openmc.MeshFilter(mesh)] +tally.scores = ['flux'] +#model.tallies.append(tally) +model.tallies = [tally] + +for mat in model.materials: + mat.temperature = 300.0 + +model.convert_to_multigroup( + method='stochastic_slab', + groups='CASMO-4', + nparticles=100000, + overwrite_mgxs_library=False, + correction=None + #source_energy=14.6e6 +) + + +model.settings.batches = 200 +model.settings.inactive = 100 +model.settings.particles = 30000 +model.settings.random_ray['distance_inactive'] = 500.0 +model.settings.random_ray['distance_active'] = 5000.0 +model.settings.random_ray['volume_estimator'] = 'naive' +model.settings.random_ray['source_shape'] = 'flat' +#model.settings.random_ray['source_shape'] = 'linear' +model.settings.random_ray['volume_normalized_flux_tallies'] = False +settings.photon_transport = False + +wwg = openmc.WeightWindowGenerator( + mesh, + method='fw_cadis', + max_realizations=model.settings.batches +) + +# Disable weight window generation for now +#model.settings.weight_window_generators = [wwg] + + +bbox = geometry.bounding_box +print(bbox) +box_src = openmc.stats.Box(bbox.lower_left, bbox.upper_right) +rr_src = openmc.IndependentSource( + space = box_src, + constraints = {'domains': [geometry.root_universe]} + ) +model.settings.random_ray['ray_source'] = rr_src +model.settings.random_ray['source_region_meshes'] = [(mesh, [model.geometry.root_universe])] + +model.geometry.remove_redundant_surfaces() + +# Random Ray Plot +plot = openmc.Plot() +plot.origin = [0, 0, 0] +plot.width = [(geometry.bounding_box.upper_right[i] - geometry.bounding_box.lower_left[i]) for i in range(3)] +plot.pixels = [300, 300, 300] +plot.type = 'voxel' +model.plots = [plot] + +model.export_to_model_xml() \ No newline at end of file diff --git a/include/openmc/constants.h b/include/openmc/constants.h index 1de8b0d1cd8..2a5dd5189fb 100644 --- a/include/openmc/constants.h +++ b/include/openmc/constants.h @@ -74,6 +74,11 @@ constexpr double ZERO_FLUX_CUTOFF {1e-22}; // value will be converted to pure void. constexpr double MINIMUM_MACRO_XS {1e-6}; +// Maximum number of DAGMC entity handles to send when exchanging rays +// between MPI ranks. This caps the RayHistory length to avoid sending +// variable-length vectors. +constexpr int MAX_N_HANDLES {5}; + // ============================================================================ // MATH AND PHYSICAL CONSTANTS diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index 2661d2443d0..f599ceeff3a 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -7,6 +7,10 @@ #include "openmc/random_ray/moment_matrix.h" #include "openmc/source.h" +#ifdef OPENMC_DAGMC_ENABLED +#include "DagMC.hpp" +#endif + namespace openmc { // Container for MPI exchange //TODO: can we avoid this duplication with RayExchangeData? @@ -18,6 +22,30 @@ struct RayBufferContainer { int surface; bool is_active; uint64_t ray_id; + int n_event; // Number of events (surface crossings) the ray has undergone + + // GeometryState scalar fields + int n_coord; + int cell_instance; + int n_coord_last; + int material; + int material_last; + double sqrtkT; + double sqrtkT_last; + + // GeometryState vector fields (sized to model::n_coord_levels at runtime) + // LocalCoord is POD, so we can send it as contiguous bytes + vector coord; + + // cell_last_ array + vector cell_last; + +#ifdef OPENMC_DAGMC_ENABLED + // DAGMC fields - fixed-size array to avoid variable-length vector + Direction last_dir; + moab::EntityHandle handles[MAX_N_HANDLES]; + int n_handles; // Actual number of valid handles (may be less than MAX_N_HANDLES) +#endif }; // Container for MPI exchange @@ -28,6 +56,23 @@ struct RayExchangeData { int surface; bool is_active; uint64_t ray_id; + int n_event; // Number of events (surface crossings) the ray has undergone + + // GeometryState scalar fields + int n_coord; + int cell_instance; + int n_coord_last; + int material; + int material_last; + double sqrtkT; + double sqrtkT_last; + +#ifdef OPENMC_DAGMC_ENABLED + // DAGMC fields - fixed-size array to avoid variable-length vector + Direction last_dir; + moab::EntityHandle handles[MAX_N_HANDLES]; + int n_handles; // Actual number of valid handles (may be less than MAX_N_HANDLES) +#endif }; // Forward declare @@ -62,7 +107,8 @@ class RandomRay : public Particle { SourceRegionHandle& srh, double distance, bool is_active, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); - void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux); + void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux, + LocalCoord* coord, int* cell_last_data); uint64_t transport_history_based_single_ray(); SourceSite sample_prng(); SourceSite sample_halton(); diff --git a/include/openmc/random_ray/ray_bank.h b/include/openmc/random_ray/ray_bank.h index 7c0ff84dcd1..e0ce8545931 100644 --- a/include/openmc/random_ray/ray_bank.h +++ b/include/openmc/random_ray/ray_bank.h @@ -43,8 +43,16 @@ class RayBank { int total_receiving_rays_; int negroups_; - // Map that contains the rank to which rays are buffered to be sent - std::unordered_map> ray_send_buffer_; + // Per-rank send buffers - data is packed directly into these in send-ready format + // This eliminates intermediate copying and buffering + struct RankSendBuffers { + vector ray_data; + vector angular_flux; + vector coord; + vector cell_last; + int count = 0; // Number of rays buffered for this rank + }; + std::unordered_map ray_send_buffer_; // Vector that contains the number of rays to be received from each rank vector num_messages_receiving_; @@ -53,6 +61,8 @@ class RayBank { // vectors that received ray data vector received_ray_data_; vector received_angular_flux_data_; + vector received_coord_; + vector received_cell_last_; }; // class DecompositionMap diff --git a/src/geometry.cpp b/src/geometry.cpp index 5ff15097b19..c6828d3f35e 100644 --- a/src/geometry.cpp +++ b/src/geometry.cpp @@ -360,6 +360,11 @@ void cross_lattice(GeometryState& p, const BoundaryInfo& boundary, bool verbose) BoundaryInfo distance_to_boundary(GeometryState& p) { + // if (p.id() == 5) + // { + // printf("Finding boundary for particle %lu at position (%f, %f, %f)\n", + // p.id(), p.r().x, p.r().y, p.r().z); + // } BoundaryInfo info; double d_lat = INFINITY; double d_surf = INFINITY; @@ -403,6 +408,9 @@ BoundaryInfo distance_to_boundary(GeometryState& p) level_lat_trans = lattice_distance.second; if (d_lat < 0) { + // if(p.id() == 5){ + // printf("Lattice distance: %f\n", d_lat); + // } p.mark_as_lost(fmt::format("Particle {} had a negative distance " "to a lattice boundary.", p.id())); diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 04f65f7027c..98d5bdbe59c 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -289,10 +289,25 @@ void RandomRay::event_advance_ray() if (settings::check_overlaps) check_cell_overlap(*this); + // if (id() ==5){ + // printf("RANK %d: Advancing Ray %lu at position (%f, %f, %f)\n", + // mpi::rank, id(), + // r().x, r().y, r().z); + // } + // Find the distance to the nearest boundary boundary() = distance_to_boundary(*this); double distance = boundary().distance(); + // if (id() == 5) { + // printf("RANK %d: Ray %lu at position (%f, %f, %f) " + // "traveling distance %f to surface %d\n", + // mpi::rank, id(), + // r().x, r().y, r().z, + // distance, + // boundary().surface()); + // } + if (mpi::n_procs > 1) { // If domain decomposition is being used, update counter for // ray trace operations in source region for load estimation @@ -434,8 +449,20 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) if(has_left_subdomain()) { Position position_buffer = r() + (offset + mesh_partial_length) * u(); double distance_buffer = distance_travelled_ + mesh_partial_length; + +#ifdef OPENMC_DAGMC_ENABLED + history().rollback_last_intersection(); +#endif pack_ray_for_buffer(distance_buffer, position_buffer); wgt() = 0.0; + // if (id() == 5) { + // printf("RANK %d: Ray %lu leaving subdomain to rank %d at position (%f, %f, %f) to new owner %d\n", + // mpi::rank, id(), owner_rank_, + // position_buffer.x, + // position_buffer.y, + // position_buffer.z, + // owner_rank_); + // } } } @@ -839,16 +866,17 @@ void RandomRay::attenuate_flux_linear_source_void( } } -void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux) +void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux, + LocalCoord* coord, int* cell_last_data) { domain_ = domain; distance_travelled_ = data.distance_travelled; owner_rank_ = mpi::rank; - // Reset particle event counter. I read out intersections after each ray transport, - // so the reset to zero after transmission between ranks should be OK here. - n_event() = 0; + // Restore particle event counter from the transmitted ray + // This preserves the event count across MPI rank boundaries + n_event() = data.n_event + 1; is_active_ = data.is_active; @@ -857,41 +885,88 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // set identifier for particle id() = data.ray_id; - // generate source site using sample method - SourceSite site; + // SourceSite site; // Set location and direction as in previous subdomain - site.r = data.position; + // site.r = data.position; // angle - site.u = data.direction; + // site.u = data.direction; + + // site.E = 0.0; + // this->from_source(&site); + + // Restore GeometryState scalar fields + n_coord() = data.n_coord; + cell_instance() = data.cell_instance; + n_coord_last() = data.n_coord_last; + material() = data.material; + material_last() = data.material_last; + sqrtkT() = data.sqrtkT; + sqrtkT_last() = data.sqrtkT_last; + surface() = data.surface; + + // Restore LocalCoord vector data (coord_) + // The vectors were already sized to model::n_coord_levels in the GeometryState constructor + // LocalCoord is POD so we can just copy the entire structure + const int n_coord_max = model::n_coord_levels; + for (int i = 0; i < n_coord_max; i++) { + this->coord(i) = coord[i]; + cell_last(i) = cell_last_data[i]; + } + + // Override the position and direction at ALL coordinate levels with the buffered values + // These may have been adjusted when the ray left the previous subdomain + // We need to update all levels to maintain consistency in the coordinate hierarchy + Position delta_r = data.position - r(); + for (int i = 0; i < n_coord(); i++) { + this->coord(i).r() += delta_r; + // this->coord(i).u() = data.direction; // Overwriting local directions causes problems when checking distance to boundary + } - site.E = 0.0; - this->from_source(&site); + // r() = data.position; + u() = data.direction; - // reinitialize last surface that was crossed - surface() = data.surface; + // if (id() == 5) { + // printf("RANK %d: Restarting ray %lu at position (%f, %f, %f) with distance travelled %f\n", + // mpi::rank, id(), + // r().x, r().y, r().z, + // distance_travelled_); + // } + +#ifdef OPENMC_DAGMC_ENABLED + // Restore DAGMC fields + // Restore last_dir and rebuild the history by adding entities in reverse order + last_dir() = data.last_dir; + for (int i = data.n_handles - 1; i >= 0; i--) { + history().add_entity(data.handles[i]); + } +#endif + + // Set particle type and energy (for random ray, these are not actually used) + type() = ParticleType::neutron; + E() = 0.0; - // Locate ray + // No need to call exhaustive_find_cell() since we have the full geometry state! + // Just verify we have valid cell information if (lowest_coord().cell() == C_NONE) { - if (!exhaustive_find_cell(*this)) { + // if (!exhaustive_find_cell(*this)) { this->mark_as_lost( - "Could not find the cell containing particle " + std::to_string(id())); - } - - // Set birth cell attribute - if (cell_born() == C_NONE) - cell_born() = lowest_coord().cell(); + "Received particle " + std::to_string(id()) + " with invalid cell information"); } + // Set birth cell attribute if not set + if (cell_born() == C_NONE) + cell_born() = lowest_coord().cell(); + // } + // Set ray's angular flux to value before subdomain change if (distance_travelled_ > 0.0 || is_active_){ for (int g = 0; g < negroups_; g++) { angular_flux_[g] = angular_flux[g]; } } - // Initialize ray's starting angular flux to starting location's isotropic - // source + // Initialize ray's starting angular flux to starting location's isotropic source else { SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); SourceRegionHandle srh = @@ -1039,6 +1114,49 @@ void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_bu exchange_data_.surface = surface(); exchange_data_.is_active = is_active_; exchange_data_.ray_id = id(); + exchange_data_.n_event = n_event(); + + // Pack GeometryState scalar fields + exchange_data_.n_coord = n_coord(); + exchange_data_.cell_instance = cell_instance(); + exchange_data_.n_coord_last = n_coord_last(); + exchange_data_.material = material(); + exchange_data_.material_last = material_last(); + exchange_data_.sqrtkT = sqrtkT(); + exchange_data_.sqrtkT_last = sqrtkT_last(); + + // Pack GeometryState vector fields + // LocalCoord is POD, so we can just copy the entire vector + // We always pack model::n_coord_levels elements to ensure consistent sizes + const int n_coord_max = model::n_coord_levels; + + exchange_data_.coord.resize(n_coord_max); + exchange_data_.cell_last.resize(n_coord_max); + + for (int i = 0; i < n_coord_max; i++) { + exchange_data_.coord[i] = coord(i); + exchange_data_.cell_last[i] = cell_last(i); + } + +#ifdef OPENMC_DAGMC_ENABLED + // Pack DAGMC fields + // Extract up to MAX_N_HANDLES from the ray history by rolling back + exchange_data_.last_dir = last_dir(); + exchange_data_.n_handles = 0; + + for (int i = 0; i < MAX_N_HANDLES; i++) { + moab::EntityHandle handle; + if (history().get_last_intersection(handle) == moab::MB_SUCCESS) { + exchange_data_.handles[i] = handle; + exchange_data_.n_handles++; + history().rollback_last_intersection(); + } else { + // No more handles in history + break; + } + } +#endif + } int RandomRay::get_energy_groups() { diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 7a090afa01f..73462dc9f25 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -789,6 +789,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { simulation::time_decomposition_handling.start(); + // printf("Batch %d: Transport sweep with domain decomposition...\n", simulation::current_batch); + // Create rays and add them to ray bank #pragma omp parallel for schedule(static) for (int i = 0; i < simulation::work_per_rank; i++) { @@ -811,6 +813,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } } + // printf(" Rank %d: Initial rays in ray bank: %d\n", mpi::rank, RB.ray_bank_size()); + // If no ray is alive at this stage, it means that all of them have been buffered because they were sampled in foregin subdomain. This requires a ray bank update here. if (!RB.is_any_ray_alive()) { RB.update(domain_.get()); @@ -828,6 +832,7 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { reduction(+ : total_geometric_intersections_) for (int i = 0; i < RB.ray_bank_size(); i++) { RandomRay& ray = RB.my_ray_list_[i]; + // printf(" Rank %d: Transporting ray %lu\n", mpi::rank, ray.id()); total_geometric_intersections_ += ray.transport_history_based_single_ray(); // If ray has left my subdomain, buffer ray state @@ -850,6 +855,8 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { num_communication_rounds ++; } + // printf(" Rank %d: Total communication rounds: %d\n", mpi::rank, num_communication_rounds); + // Calculate load per rank based on number of hits in each source region that a rank owns double batch_ray_buffering_time = simulation::time_ray_buffering.elapsed() - start_time_ray_buffering; double batch_transport_time = simulation::time_transport.elapsed() - start_time_transport - batch_ray_buffering_time; diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 83f1ddedc51..730637e9a05 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -1,11 +1,14 @@ #include "openmc/random_ray/ray_bank.h" +#include + #include "openmc/random_ray/random_ray.h" #include "openmc/random_ray/source_region.h" #include "openmc/message_passing.h" #include "openmc/random_ray/decomposition_map.h" #include "openmc/mgxs_interface.h" #include "openmc/timer.h" +#include "openmc/geometry.h" namespace openmc { @@ -29,8 +32,62 @@ void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ , ray.exchange_data_.ray_id, ray.exchange_data_.position.x, ray.exchange_data_.position.y, ray.exchange_data_.position.z, rank)); } - // Add ray data to buffer - ray_send_buffer_[rank].push_back(ray.exchange_data_); + // Get or create the send buffer for this rank + auto& buffers = ray_send_buffer_[rank]; + + // Get the maximum coordinate levels + const int n_coord_max = model::n_coord_levels; + + // Reserve space if this is the first ray for this rank + // This is just a heuristic to reduce reallocations + if (buffers.count == 0) { + buffers.ray_data.reserve(32); + buffers.angular_flux.reserve(32 * negroups_); + buffers.coord.reserve(32 * n_coord_max); + buffers.cell_last.reserve(32 * n_coord_max); + } + + // Pack RayExchangeData directly into send buffer + RayBufferContainer& rbc = ray.exchange_data_; + RayExchangeData rd; + + rd.position = rbc.position; + rd.direction = rbc.direction; + rd.distance_travelled = rbc.distance_travelled; + rd.surface = rbc.surface; + rd.is_active = rbc.is_active; + rd.ray_id = rbc.ray_id; + rd.n_event = rbc.n_event; + rd.n_coord = rbc.n_coord; + rd.cell_instance = rbc.cell_instance; + rd.n_coord_last = rbc.n_coord_last; + rd.material = rbc.material; + rd.material_last = rbc.material_last; + rd.sqrtkT = rbc.sqrtkT; + rd.sqrtkT_last = rbc.sqrtkT_last; + +#ifdef OPENMC_DAGMC_ENABLED + rd.last_dir = rbc.last_dir; + rd.n_handles = rbc.n_handles; + std::memcpy(rd.handles, rbc.handles, MAX_N_HANDLES * sizeof(moab::EntityHandle)); +#endif + + buffers.ray_data.push_back(rd); + + // Pack angular flux array directly + buffers.angular_flux.insert(buffers.angular_flux.end(), + rbc.angular_flux.begin(), + rbc.angular_flux.end()); + + // Pack coord and cell_last arrays directly + buffers.coord.insert(buffers.coord.end(), + rbc.coord.begin(), + rbc.coord.end()); + buffers.cell_last.insert(buffers.cell_last.end(), + rbc.cell_last.begin(), + rbc.cell_last.end()); + + buffers.count++; } // Update ray bank @@ -62,8 +119,8 @@ void RayBank::communicate_message_metadata() { fill(num_messages_sending_.begin(), num_messages_sending_.end(), 0); // Fill the sending counts - for (auto& [rank, rays] : ray_send_buffer_) { - num_messages_sending_[rank] = rays.size(); + for (auto& [rank, buffers] : ray_send_buffer_) { + num_messages_sending_[rank] = buffers.count; } // Exchange message counts with all ranks @@ -81,79 +138,91 @@ void RayBank::communicate_message_metadata() { void RayBank::communicate_rays(){ - // Each ray requires 2 sends (data + angular flux) - int num_requests = ray_send_buffer_.size() * 2; - vector requests(num_requests); - int req_idx = 0; - - // Define one-dimensional arrays to be sent and received and allocate size - // Sending - vector ray_data; - vector angular_flux_data; - ray_data.resize(total_sending_rays_); - angular_flux_data.resize(total_sending_rays_ * negroups_); + // Get the maximum coordinate levels + const int n_coord_max = model::n_coord_levels; - // Receiving + // Allocate receiving buffers received_ray_data_.resize(total_receiving_rays_); received_angular_flux_data_.resize(total_receiving_rays_ * negroups_); + received_coord_.resize(total_receiving_rays_ * n_coord_max); + received_cell_last_.resize(total_receiving_rays_ * n_coord_max); + + // Calculate total number of MPI requests needed + // 4 messages per sending rank + 4 messages per receiving rank + int num_send_ranks = ray_send_buffer_.size(); + int num_recv_ranks = 0; + for (int i = 0; i < mpi::n_procs; i++) { + if (num_messages_receiving_[i] > 0) num_recv_ranks++; + } + + int total_requests = num_send_ranks * 4 + num_recv_ranks * 4; + vector requests(total_requests); + int req_idx = 0; - // Indices to keep track of where to pack/unpack data in 1D arrays - int vector_send_idx = 0; - int vector_receive_idx = 0; - - // Send ray data to neighbouring ranks - for (auto [receiving_rank, rays] : ray_send_buffer_) { - - int num_rays_sending = num_messages_sending_[receiving_rank]; - - for (int i = 0; i < num_rays_sending; i++) { - //TODO: get rid of this! Entire rayExchangeData should be buffered - //TODO: OMP? - // Pack slimmed down data container for MPI send - RayExchangeData exchange_data; - exchange_data.position = rays[i].position; - exchange_data.direction = rays[i].direction; - exchange_data.distance_travelled = rays[i].distance_travelled; - exchange_data.is_active = rays[i].is_active; - exchange_data.ray_id = rays[i].ray_id; - exchange_data.surface = rays[i].surface; - ray_data[vector_send_idx + i] = exchange_data; - // Angular flux array - for (int g = 0; g < negroups_; g++){ - angular_flux_data[(vector_send_idx + i) * negroups_ + g] = rays[i].angular_flux[g]; - } - // Check neighbor list and add if not already known (insert does this check automatically). - // Only check active rays to filter out rays that are sampled in wrong subdomain. - // TODO: Maybe this is not efficient here. If load balancing constrained to first - // 5 batches, maybe this should be moved elsewhere - if (rays[i].distance_travelled > 0.0 || rays[i].is_active) { - mpi::decomp_map.my_neighbors.insert(receiving_rank); - } - } - - MPI_Isend(&ray_data[vector_send_idx], num_rays_sending * sizeof(RayExchangeData), MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx]); - MPI_Isend(&angular_flux_data[vector_send_idx * negroups_], num_rays_sending * negroups_, MPI_FLOAT, receiving_rank, 2, mpi::intracomm, &requests[req_idx+1]); - - vector_send_idx += num_rays_sending; - req_idx += 2; - } - - //TODO: Post Irecv before Isend? - //TODO: OMP? - // Receive ray data from neighbouring ranks + // Post all non-blocking receives first (better for overlap) + int recv_offset = 0; for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { int num_rays_receiving = num_messages_receiving_[sending_rank]; if (num_rays_receiving == 0) continue; - MPI_Recv(&received_ray_data_[vector_receive_idx], num_rays_receiving * sizeof(RayExchangeData), MPI_BYTE, sending_rank, 1, mpi::intracomm, MPI_STATUS_IGNORE); - MPI_Recv(&received_angular_flux_data_[vector_receive_idx * negroups_], num_rays_receiving * negroups_, MPI_FLOAT, sending_rank, 2, mpi::intracomm, MPI_STATUS_IGNORE); + + MPI_Irecv(&received_ray_data_[recv_offset], + num_rays_receiving * sizeof(RayExchangeData), + MPI_BYTE, sending_rank, 1, mpi::intracomm, &requests[req_idx++]); + + MPI_Irecv(&received_angular_flux_data_[recv_offset * negroups_], + num_rays_receiving * negroups_, + MPI_FLOAT, sending_rank, 2, mpi::intracomm, &requests[req_idx++]); + + MPI_Irecv(&received_coord_[recv_offset * n_coord_max], + num_rays_receiving * n_coord_max * sizeof(LocalCoord), + MPI_BYTE, sending_rank, 3, mpi::intracomm, &requests[req_idx++]); + + MPI_Irecv(&received_cell_last_[recv_offset * n_coord_max], + num_rays_receiving * n_coord_max, + MPI_INT, sending_rank, 4, mpi::intracomm, &requests[req_idx++]); + + recv_offset += num_rays_receiving; + } - vector_receive_idx += num_rays_receiving; + // Post all non-blocking sends - data is already packed in send-ready format! + for (auto& [receiving_rank, buffers] : ray_send_buffer_) { + int num_rays = buffers.count; + + // Check neighbor list and add if not already known + // Filter out rays that are sampled elsewhere + bool has_transported_rays = false; + for (int i = 0; i < num_rays; i++) { + if (buffers.ray_data[i].distance_travelled > 0.0 || buffers.ray_data[i].is_active) { + has_transported_rays = true; + break; + } + } + if (has_transported_rays) { + mpi::decomp_map.my_neighbors.insert(receiving_rank); + } + + // Send all 4 data arrays - already packed, no intermediate copying! + MPI_Isend(buffers.ray_data.data(), + num_rays * sizeof(RayExchangeData), + MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx++]); + + MPI_Isend(buffers.angular_flux.data(), + num_rays * negroups_, + MPI_FLOAT, receiving_rank, 2, mpi::intracomm, &requests[req_idx++]); + + MPI_Isend(buffers.coord.data(), + num_rays * n_coord_max * sizeof(LocalCoord), + MPI_BYTE, receiving_rank, 3, mpi::intracomm, &requests[req_idx++]); + + MPI_Isend(buffers.cell_last.data(), + num_rays * n_coord_max, + MPI_INT, receiving_rank, 4, mpi::intracomm, &requests[req_idx++]); } // Wait for all communication to complete - MPI_Waitall(num_requests, requests.data(), MPI_STATUSES_IGNORE); + MPI_Waitall(req_idx, requests.data(), MPI_STATUSES_IGNORE); - // Empty buffered_ray_data + // Clear send buffers - this frees memory immediately after communication ray_send_buffer_.clear(); } @@ -161,15 +230,38 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ my_ray_list_.resize(received_ray_data_.size()); - // Add rays to ray list by restarting them from received data + const int n_coord_max = model::n_coord_levels; + + // printf(" Rank %d: Received %lu rays.\n", mpi::rank, received_ray_data_.size()); + + // Add re-initialized random ray objects to my_ray_list #pragma omp parallel for for (int i = 0; i < received_ray_data_.size(); i++) { - my_ray_list_[i].restart_ray(domain, received_ray_data_[i], &received_angular_flux_data_[i * negroups_]); + + // Re-initialize rays with received data, including full geometry state + my_ray_list_[i].restart_ray(domain, received_ray_data_[i], + &received_angular_flux_data_[i * negroups_], + &received_coord_[i * n_coord_max], + &received_cell_last_[i * n_coord_max]); + + // if (my_ray_list_[i].id() == 5) + // { + // printf("Ray %lu restarted on rank %d at position (%f, %f, %f)\n", + // my_ray_list_[i].id(), mpi::rank, + // my_ray_list_[i].r().x, + // my_ray_list_[i].r().y, + // my_ray_list_[i].r().z); + // } } + // printf(" Rank %d: Ray bank updated with %lu rays.\n", mpi::rank, my_ray_list_.size()); + // Clear received data vectors received_ray_data_.resize(0); received_angular_flux_data_.resize(0); + received_coord_.resize(0); + received_cell_last_.resize(0); + } bool RayBank::is_any_ray_alive(){ From a2e5e442b7f00a21fb176323b6c46af285ab9a75 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 3 Feb 2026 09:59:23 +0000 Subject: [PATCH 34/48] Removed print statements --- src/geometry.cpp | 8 ------- src/random_ray/random_ray.cpp | 30 ------------------------ src/random_ray/random_ray_simulation.cpp | 7 ------ 3 files changed, 45 deletions(-) diff --git a/src/geometry.cpp b/src/geometry.cpp index c6828d3f35e..5ff15097b19 100644 --- a/src/geometry.cpp +++ b/src/geometry.cpp @@ -360,11 +360,6 @@ void cross_lattice(GeometryState& p, const BoundaryInfo& boundary, bool verbose) BoundaryInfo distance_to_boundary(GeometryState& p) { - // if (p.id() == 5) - // { - // printf("Finding boundary for particle %lu at position (%f, %f, %f)\n", - // p.id(), p.r().x, p.r().y, p.r().z); - // } BoundaryInfo info; double d_lat = INFINITY; double d_surf = INFINITY; @@ -408,9 +403,6 @@ BoundaryInfo distance_to_boundary(GeometryState& p) level_lat_trans = lattice_distance.second; if (d_lat < 0) { - // if(p.id() == 5){ - // printf("Lattice distance: %f\n", d_lat); - // } p.mark_as_lost(fmt::format("Particle {} had a negative distance " "to a lattice boundary.", p.id())); diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 98d5bdbe59c..9c2b884416f 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -289,25 +289,10 @@ void RandomRay::event_advance_ray() if (settings::check_overlaps) check_cell_overlap(*this); - // if (id() ==5){ - // printf("RANK %d: Advancing Ray %lu at position (%f, %f, %f)\n", - // mpi::rank, id(), - // r().x, r().y, r().z); - // } - // Find the distance to the nearest boundary boundary() = distance_to_boundary(*this); double distance = boundary().distance(); - // if (id() == 5) { - // printf("RANK %d: Ray %lu at position (%f, %f, %f) " - // "traveling distance %f to surface %d\n", - // mpi::rank, id(), - // r().x, r().y, r().z, - // distance, - // boundary().surface()); - // } - if (mpi::n_procs > 1) { // If domain decomposition is being used, update counter for // ray trace operations in source region for load estimation @@ -455,14 +440,6 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) #endif pack_ray_for_buffer(distance_buffer, position_buffer); wgt() = 0.0; - // if (id() == 5) { - // printf("RANK %d: Ray %lu leaving subdomain to rank %d at position (%f, %f, %f) to new owner %d\n", - // mpi::rank, id(), owner_rank_, - // position_buffer.x, - // position_buffer.y, - // position_buffer.z, - // owner_rank_); - // } } } @@ -926,13 +903,6 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // r() = data.position; u() = data.direction; - - // if (id() == 5) { - // printf("RANK %d: Restarting ray %lu at position (%f, %f, %f) with distance travelled %f\n", - // mpi::rank, id(), - // r().x, r().y, r().z, - // distance_travelled_); - // } #ifdef OPENMC_DAGMC_ENABLED // Restore DAGMC fields diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 73462dc9f25..7a090afa01f 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -789,8 +789,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { simulation::time_decomposition_handling.start(); - // printf("Batch %d: Transport sweep with domain decomposition...\n", simulation::current_batch); - // Create rays and add them to ray bank #pragma omp parallel for schedule(static) for (int i = 0; i < simulation::work_per_rank; i++) { @@ -813,8 +811,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } } - // printf(" Rank %d: Initial rays in ray bank: %d\n", mpi::rank, RB.ray_bank_size()); - // If no ray is alive at this stage, it means that all of them have been buffered because they were sampled in foregin subdomain. This requires a ray bank update here. if (!RB.is_any_ray_alive()) { RB.update(domain_.get()); @@ -832,7 +828,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { reduction(+ : total_geometric_intersections_) for (int i = 0; i < RB.ray_bank_size(); i++) { RandomRay& ray = RB.my_ray_list_[i]; - // printf(" Rank %d: Transporting ray %lu\n", mpi::rank, ray.id()); total_geometric_intersections_ += ray.transport_history_based_single_ray(); // If ray has left my subdomain, buffer ray state @@ -855,8 +850,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { num_communication_rounds ++; } - // printf(" Rank %d: Total communication rounds: %d\n", mpi::rank, num_communication_rounds); - // Calculate load per rank based on number of hits in each source region that a rank owns double batch_ray_buffering_time = simulation::time_ray_buffering.elapsed() - start_time_ray_buffering; double batch_transport_time = simulation::time_transport.elapsed() - start_time_transport - batch_ray_buffering_time; From 3905c12c76fd5936d6c4eac001e7ef60e35a0873 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 10 Feb 2026 12:44:27 +0000 Subject: [PATCH 35/48] Remove unnecessary variables, clean code --- include/openmc/constants.h | 4 + include/openmc/random_ray/decomposition_map.h | 23 +-- include/openmc/random_ray/random_ray.h | 3 +- .../openmc/random_ray/random_ray_simulation.h | 1 - include/openmc/random_ray/ray_bank.h | 5 +- include/openmc/timer.h | 3 - src/random_ray/decomposition_map.cpp | 147 ++++++------------ src/random_ray/flat_source_domain.cpp | 18 +-- src/random_ray/random_ray.cpp | 28 +--- src/random_ray/random_ray_simulation.cpp | 45 +++--- src/random_ray/ray_bank.cpp | 34 ++-- src/timer.cpp | 3 - 12 files changed, 100 insertions(+), 214 deletions(-) diff --git a/include/openmc/constants.h b/include/openmc/constants.h index 2a5dd5189fb..2692b11c0a6 100644 --- a/include/openmc/constants.h +++ b/include/openmc/constants.h @@ -79,6 +79,10 @@ constexpr double MINIMUM_MACRO_XS {1e-6}; // variable-length vectors. constexpr int MAX_N_HANDLES {5}; +// Maximum number of load optimization iterations to perform to balance +// the load between MPI ranks during random ray transport. +constexpr int ITER_LOAD_BALANCE {5}; + // ============================================================================ // MATH AND PHYSICAL CONSTANTS diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 706a851ab60..8909f4c3398 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -25,7 +25,7 @@ class DecompositionMap { // Methods to find rank centres that divide spatial domain up into equal // Voronoi volumes void initialize(); - void generate_rank_centers(); //TODO: put in constructor? + void generate_rank_centers(); void calculate_grid_points(int grid_points_total); void initialize_voronoi_centers(); void calculate_voronoi(vector& position_sum_per_rank, vector& num_points_per_rank); @@ -64,13 +64,11 @@ class DecompositionMap { subdomain_map_; // Neighbors of each rank's Voronoi cell - std::unordered_set my_neighbors; + std::unordered_set my_neighbors_; // Data to estimate rank loads - vector num_base_source_region_RT_tot_; // total number of base source region ray trace operations per base source region - vector num_mesh_bin_RT_tot_; // total number of mesh bin ray trace operations per base source region - vector num_base_source_region_RT_batch_; // number of base source region ray trace operations per base source region for current batch - vector num_mesh_bin_RT_batch_; // number of mesh bin ray trace operations per base source region for current batch + vector num_base_source_region_RT_; // number of base source region ray trace operations per base source region + vector num_mesh_bin_RT_; // number of mesh bin ray trace operations per base source region vector ray_tracing_cost_; vector volume_base_sr_; vector measured_rank_load_fractions_; @@ -78,9 +76,6 @@ class DecompositionMap { // Load optimization vector rank_weights_; double target_load_; - double max_load_imbalance_measured_ = 0.0; - int cnt_unconverged_optimizations_total_ = 0; - int cnt_optimizations_total_ = 0; private: //---------------------------------------------------------------------------- @@ -88,17 +83,14 @@ class DecompositionMap { SpatialBox* spatial_box_ = nullptr; // Voronoi cell calculation - vector grid_points_; //TODO: Should this be only defined in generate_rank_centers? + vector grid_points_; int grid_points_per_rank_{125}; // default 5x5x5 grid points per rank - vector rank_centers_; // Centers of each rank's Voronoi cell + vector rank_centers_; // centers of each rank's Voronoi cell // Load calculation vector estimated_rank_load_fractions_; vector estimated_rank_load_totals_; double estimated_load_sum_; - vector> load_history_; // stores values of load per rank for last few batches - int load_history_size_ = 10; - int history_idx = 0; // coefficients for load calculation double C1_ = 1.0; @@ -108,10 +100,9 @@ class DecompositionMap { // Load optimization double imbalance_tolerance_ = 0.01; // 1% imbalance tolerance double optimization_history_factor_ = 1.0; - int cnt_unconverged_optimizations_ = 0; // Miscellaneous - uint64_t n_base_sr_ = 0; + uint64_t n_base_sr_; int negroups_; double max_domain_length_; bool is_linear_; diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index f599ceeff3a..650af2e0a36 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -13,7 +13,7 @@ namespace openmc { -// Container for MPI exchange //TODO: can we avoid this duplication with RayExchangeData? +// Container for MPI exchange struct RayBufferContainer { Position position; Direction direction; @@ -115,7 +115,6 @@ class RandomRay : public Particle { bool has_left_subdomain(); void pack_ray_for_buffer(double distance_buffer, Position position_buffer); - int get_energy_groups(); //---------------------------------------------------------------------------- // Static data members diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 8a1aa759375..d78b8e67fdf 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -22,7 +22,6 @@ class RandomRaySimulation { //---------------------------------------------------------------------------- // Methods void compute_segment_correction_factors(); - // void check_geometry_dimensions(); void apply_fixed_sources_and_mesh_domains(); void prepare_fixed_sources_adjoint(); void simulate(); diff --git a/include/openmc/random_ray/ray_bank.h b/include/openmc/random_ray/ray_bank.h index e0ce8545931..2efa9b52239 100644 --- a/include/openmc/random_ray/ray_bank.h +++ b/include/openmc/random_ray/ray_bank.h @@ -39,12 +39,10 @@ class RayBank { private: //---------------------------------------------------------------------------- // Private data members - int total_sending_rays_; int total_receiving_rays_; int negroups_; - // Per-rank send buffers - data is packed directly into these in send-ready format - // This eliminates intermediate copying and buffering + // Per-rank send buffers for ray data, including geometry state and angular flux struct RankSendBuffers { vector ray_data; vector angular_flux; @@ -53,6 +51,7 @@ class RayBank { int count = 0; // Number of rays buffered for this rank }; std::unordered_map ray_send_buffer_; + int reserved_buffer_size_ = 32; // Initial reserved size for send buffers, can be tuned based on expected ray counts // Vector that contains the number of rays to be received from each rank vector num_messages_receiving_; diff --git a/include/openmc/timer.h b/include/openmc/timer.h index e75b8ed42a8..d7d0ede8e18 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -36,12 +36,9 @@ extern Timer time_ray_comms; extern Timer time_decomposition_handling; extern Timer time_load_balance; extern Timer time_ray_buffering; -// extern Timer time_ray_buffering2; extern Timer time_generate_voronoi_centers; extern Timer time_source_region_exchange; extern Timer time_add_ray_to_bank; -extern Timer time_unpack_data; -extern Timer time_calculate_rank_load; } // namespace simulation diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 6789d8a19b4..52a6ae5421e 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -8,9 +8,8 @@ #include "openmc/mgxs_interface.h" #include "openmc/timer.h" #include "openmc/cell.h" - - #include "openmc/simulation.h" +#include "openmc/constants.h" namespace openmc { @@ -40,28 +39,18 @@ void DecompositionMap::initialize(){ is_linear_ = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; - // Count the number of source regions, compute the cell offset - // indices, and store the material type The reason for the offsets is that - // some cell types may not have material fills, and therefore do not - // produce FSRs. Thus, we cannot index into the global arrays directly - // int base_source_regions = 0; + // Count the number of source regions in the model + n_base_sr_ = 0; for (const auto& c : model::cells) { if (c->type_ == Fill::MATERIAL) { n_base_sr_ += c->n_instances(); } } - num_base_source_region_RT_tot_.resize(n_base_sr_, 0); - num_mesh_bin_RT_tot_.resize(n_base_sr_, 0); - num_base_source_region_RT_batch_.resize(n_base_sr_, 0); - num_mesh_bin_RT_batch_.resize(n_base_sr_, 0); + num_base_source_region_RT_.resize(n_base_sr_, 0); + num_mesh_bin_RT_.resize(n_base_sr_, 0); ray_tracing_cost_.resize(n_base_sr_); volume_base_sr_.resize(n_base_sr_, 0.0); - - load_history_.resize(mpi::n_procs); - for (auto& row : load_history_) { - row.resize(load_history_size_, 0.0); - } } void DecompositionMap::generate_rank_centers(){ @@ -76,11 +65,11 @@ void DecompositionMap::generate_rank_centers(){ initialize_voronoi_centers(); double err = 1.0; - double precision = 1e-3; // 0.001 cm + double precision = 1e-3; // corresponding to 0.001 cm position change int it = 0; int max_iterations = 100; - // Lloyd's algorithm + // Lloyd's algorithm to move Voronoi centers to centroids of their cells // https://en.wikipedia.org/wiki/Lloyd%27s_algorithm while (err > precision && it < max_iterations) { @@ -105,7 +94,7 @@ void DecompositionMap::generate_rank_centers(){ // Move rank center to centroid rank_centers_[rank] = centroid; - // record maximum movement + // Record maximum movement if (movement > err) { err = movement; } @@ -120,14 +109,11 @@ void DecompositionMap::generate_rank_centers(){ } else { printf("Lloyd's algorithm converged in %d iterations.\n", it); } - // printf("The following Voronoi centres are being used:\n"); - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // printf(" Rank %d: Point (%f, %f, %f)\n", rank, rank_centers_[rank].x, rank_centers_[rank].y, rank_centers_[rank].z); - // } } } +// Calculate grid points needed for calculating Voronoi cells void DecompositionMap::calculate_grid_points(int grid_points_total){ // Calculate length along each dimension @@ -202,7 +188,7 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ } } - // Initialize point at center of domain + // Initialize point at center of domain (in case of only 1 grid point in a dimension) double x = spatial_box_->lower_left().x + domain_length[0] * 0.5; double y = spatial_box_->lower_left().y + domain_length[1] * 0.5; double z = spatial_box_->lower_left().z + domain_length[2] * 0.5; @@ -226,8 +212,8 @@ void DecompositionMap::calculate_grid_points(int grid_points_total){ } } - // Check if mesh grid points are inside spatial domain, if not erase them - //TODO: Maybe all grid points should just be sampled randomly inside the domain to avoid erasing points and decreasing total number of points? + // Check if mesh grid points are inside spatial domain, which can be different from a box. + // If not, erase them. for (int i = grid_points_.size() - 1; i >= 0; i--){ Position xi = grid_points_[i]; @@ -267,7 +253,7 @@ void DecompositionMap::initialize_voronoi_centers(){ Position xi {x, y, z}; - // make a small shift in position to avoid geometry floating point issues //TODO: necessary? Adopted from halton sampling + // Make a small shift in position to avoid geometry floating point issues at boundaries Position shift {FP_COINCIDENT, FP_COINCIDENT, FP_COINCIDENT}; xi = (spatial_box_->lower_left() + shift) + xi * ((spatial_box_->upper_right() - shift) - (spatial_box_->lower_left() + shift)); @@ -299,7 +285,7 @@ void DecompositionMap::calculate_voronoi(vector& position_sum_per_rank for (int rank = 0; rank < mpi::n_procs; rank++) { double dist = (point - rank_centers_[rank]).norm(); // Power Voronoi diagram uses squared distances - dist = dist*dist - rank_weights_[rank]; + dist = dist * dist - rank_weights_[rank]; if (dist < min_distance) { min_distance = dist; @@ -469,7 +455,6 @@ void DecompositionMap::exchange_sr_info(ParallelMap& discovered_source_regions){ - // Check if SRK is in subdomain map + // Check if source region key is in subdomain map auto it = subdomain_map_.find(sr_key); if (it != subdomain_map_.end()){ return it->second; @@ -594,16 +579,16 @@ int DecompositionMap::find_closest_rank(Position r, bool test_all_ranks) { test_ranks.resize(mpi::n_procs); std::iota(test_ranks.begin(), test_ranks.end(), 0); // fill with 0, 1, ..., n_procs-1 } else { - // convert unordered set to vector - test_ranks=vector(mpi::decomp_map.my_neighbors.begin(), mpi::decomp_map.my_neighbors.end()); - test_ranks.push_back(mpi::rank); // Always include own rank + // convert unordered set of neighboring ranks to vector and add self rank + test_ranks = vector(mpi::decomp_map.my_neighbors_.begin(), mpi::decomp_map.my_neighbors_.end()); + test_ranks.push_back(mpi::rank); } // Find closest rank center for (int rank : test_ranks) { double dist = (r - rank_centers_[rank]).norm(); - // Distance function corresponding to weighted power Voronoi diagram. - dist = dist*dist - rank_weights_[rank]; + // Distance function corresponding to weighted power Voronoi diagram + dist = dist * dist - rank_weights_[rank]; if (dist < min_distance) { min_distance = dist; closest_rank = rank; @@ -623,9 +608,6 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain, double batc // Reset local volumes of base source regions, which might change when source regions change rank ownership std::fill(volume_base_sr_.begin(), volume_base_sr_.end(), 0.0); - num_base_source_region_RT_tot_ = num_base_source_region_RT_batch_; - num_mesh_bin_RT_tot_ = num_mesh_bin_RT_batch_; - // Add volumes of newly discovered source regions vector mesh_bins_per_base_sr_local(n_base_sr_, 0); for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { @@ -644,29 +626,34 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain, double batc #pragma omp parallel for for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { if (volume_base_sr_[bsr] > 0.0) { - ray_tracing_cost_[bsr] = (C2_ * static_cast(num_base_source_region_RT_tot_[bsr]) + C3_ * static_cast(num_mesh_bin_RT_tot_[bsr]))/volume_base_sr_[bsr]; + ray_tracing_cost_[bsr] = (C2_ * static_cast(num_base_source_region_RT_[bsr]) + C3_ * static_cast(num_mesh_bin_RT_[bsr]))/volume_base_sr_[bsr]; } else { ray_tracing_cost_[bsr] = 0.0; } } - // Accumulate load in known source regions + // Accumulate load of known source regions double local_estimated_load = 0.0; #pragma omp parallel for reduction(+: local_estimated_load) for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { SourceRegionKey sr_key = domain->source_regions_.key(sr); uint64_t base_sr = sr_key.base_source_region_id; + + // Calculate volume of unique source region to weight volume-dependent ray tracing cost double volume_sr = domain->source_regions_.volume_t(sr) + domain->source_regions_.volume(sr); + + // Calculate load of source region double load_sr = C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; + + // Accumulate to local estimated load local_estimated_load += load_sr; } - // Add load of newly discovered source regions - double load_sr; + // Accumulate load of newly discovered source regions for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { uint64_t base_sr = sr_key.base_source_region_id; double volume_sr = sr.scalars_.volume_; - load_sr = C1_ * (sr.scalars_.n_hits_/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; + double load_sr = C1_ * (sr.scalars_.n_hits_/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; local_estimated_load += load_sr; } @@ -678,43 +665,20 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain, double batc MPI_Allgather(&batch_transport_time, 1, MPI_DOUBLE, measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, mpi::intracomm); double measured_load_sum = std::accumulate(measured_rank_load_fractions_.begin(), measured_rank_load_fractions_.end(), 0.0); - // Calculate fractions //TODO: maybe I do not need fractions? + // Calculate fractions for (int rank = 0; rank < mpi::n_procs; rank++) { estimated_rank_load_fractions_[rank] = estimated_rank_load_totals_[rank] / estimated_load_sum_; measured_rank_load_fractions_[rank] = measured_rank_load_fractions_[rank] / measured_load_sum; } - // Reset batch-wise counters - fill(num_base_source_region_RT_batch_.begin(), num_base_source_region_RT_batch_.end(), 0); - fill(num_mesh_bin_RT_batch_.begin(), num_mesh_bin_RT_batch_.end(), 0); - - // Average measured rank load over previous batches - vector averaged_measured_load_fractions(mpi::n_procs, 0.0); - int n_batches_to_average = load_history_size_; - //TODO: A lot here can be simplified when load balancing is only done in first 5 batches - if (simulation::current_batch < load_history_size_){ - n_batches_to_average = simulation::current_batch; - } - // Save to history - for (int rank = 0; rank < mpi::n_procs; rank++) { - load_history_[rank][history_idx] = measured_rank_load_fractions_[rank]; - averaged_measured_load_fractions[rank] = std::accumulate(load_history_[rank].begin(), load_history_[rank].end(), 0.0) / static_cast(n_batches_to_average); - } - - // Circular index update - history_idx = (history_idx + 1) % load_history_size_; - - // Calculate measured imbalance - double max_load_measured = *std::max_element(averaged_measured_load_fractions.begin(), averaged_measured_load_fractions.end()); - // TODO: Can be removed if load balancing fixed for first 5 batches only - max_load_imbalance_measured_ = (max_load_measured - target_load_) / target_load_; + // Reset ray trace counters + fill(num_base_source_region_RT_.begin(), num_base_source_region_RT_.end(), 0); + fill(num_mesh_bin_RT_.begin(), num_mesh_bin_RT_.end(), 0); } void DecompositionMap::balance_load(FlatSourceDomain* domain){ - //TODO: The optimisation strategy is messy - cnt_optimizations_total_ ++; - + // Optimization parameters int max_iterations = 200; int it_outer = 0; double adaptation_factor = 1; @@ -752,7 +716,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // Change weights to equalize load based on combined load estimates while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ - // if (mpi::master) printf("MPI load balancing iteration %d, max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); //TODO: Remove + it_outer ++; for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -792,11 +756,7 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ + std::to_string(max_iterations) + " iterations."); } - cnt_unconverged_optimizations_ ++; - cnt_unconverged_optimizations_total_ ++; - // Check if oscillating or simply slow convergence - bool is_oscillating = false; int direction_changes = 0; for (int i = 1; i < imbalance_history.size(); i++) { @@ -812,17 +772,18 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ } } + // Check for oscillations double oscillation_ratio = (double)direction_changes / (imbalance_history.size() - 2); if (oscillation_ratio > 0.4) { - // decrease weight for next batch if oscillating, TODO: Should this be safeguarded with separate min/max values? + // decrease weight for next batch if oscillating optimization_history_factor_ = std::max(optimization_history_factor_ * 0.5, min_adaptation_factor); } else { - // increase weight for faster convergence if too slow. - optimization_history_factor_ = std::min(optimization_history_factor_ * 1.2, max_adaptation_factor); // stable - accelerate slightly + // increase weight for faster convergence if too slow + optimization_history_factor_ = std::min(optimization_history_factor_ * 1.2, max_adaptation_factor); } - // Revert to previous weights if load balancing did not improve and return + // Check which iteration had the best imbalance and revert to those weights auto min_it = std::min_element(imbalance_history.begin(), imbalance_history.end()); int best_index = std::distance(imbalance_history.begin(), min_it); double best_imbalance = *min_it; @@ -833,30 +794,19 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ best_imbalance*100.0, best_index); } - //TODO: remove if load balancing only applied to first 5 batches by default - if (cnt_unconverged_optimizations_ == 5){ - // relax tolerance if not converging - cnt_unconverged_optimizations_ = 0; - imbalance_tolerance_ = best_imbalance; - if (mpi::master){ - printf("Relaxing MPI load balancing tolerance to %.2f%% \n", imbalance_tolerance_*100.0); - } - } - if (best_index == 0){ - // if no improvement at all, just keep current decomposition and return + // if no improvement at all, just keep current decomposition and return without redistributing return; } } else { - cnt_unconverged_optimizations_ = 0; optimization_history_factor_ = 1.0; // reset history factor if converged if (mpi::master){ printf("MPI load balancing converged after %d iterations. Max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); } } + // Redistribute source regions according to new weights determined in optimization redistribute_source_regions(domain); - MPI_Barrier(mpi::intracomm); } void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& combined_rank_load, vector& load_ratio){ @@ -898,10 +848,12 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_rank void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { + // Map of source regions to be sent to other ranks std::unordered_map> sr_send_list; + // Number of source regions to be received from other ranks vector num_sr_receiving(mpi::n_procs, 0); - // local source region container that contains updated list + // Local source region container that contains updated list SourceRegionContainer source_regions_new(negroups_, is_linear_); // Each rank identifies source regions that need to be transferred to new owner and updates subdomain map accordingly @@ -978,7 +930,7 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { } } - // clear source_region_map_ + // Clear source_region_map_ domain->source_region_map_.clear(); // Send source region data to new owner @@ -995,6 +947,7 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { } } + // Record starting source region ID for tally reinitialization later int64_t start_sr_id = source_regions_new.n_source_regions(); // Receive source regions @@ -1010,12 +963,12 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { int num_sr = num_sr_receiving[sender]; for (int i = 0; i < num_sr; ++i) { SourceRegion sr_recv(negroups_, is_linear_); - receive_sr_data(sender, sr_recv); //TODO: Use source_regions_ = source_regions_new; // Update source region map diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index f1a3200992c..08bbffb7360 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -2137,7 +2137,7 @@ bool FlatSourceDomain::is_geometry_3D() SourceRegionKey sr_key_prev {-1, -1}; bool check_key = false; - for (int j = 0; j < num_z_points; j++){ //TODO: Should uppermost and lowermost position always be checked? + for (int j = 0; j < num_z_points; j++){ sample.z = sb->lower_left().z + z_length * prn(&seed); Particle p; @@ -2152,22 +2152,6 @@ bool FlatSourceDomain::is_geometry_3D() continue; } - // int i_cell = p.lowest_coord().cell(); - // int64_t sr = source_region_offsets_[i_cell] + p.cell_instance(); - // SourceRegionKey sr_key {sr, 0}; - - // if (RandomRay::mesh_subdivision_enabled_) { - // int mesh_idx = base_source_regions_.mesh(sr); - - // int mesh_bin; - // if (mesh_idx == C_NONE) { - // mesh_bin = 0; - // } else { - // mesh_bin = model::meshes[mesh_idx]->get_bin(p.r()); - // } - // sr_key = {sr, mesh_bin}; - // } - SourceRegionKey sr_key = lookup_source_region_key(p); // Check if sr_key has changed in z-direction diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 9c2b884416f..e804e7286a2 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -9,7 +9,6 @@ #include "openmc/search.h" #include "openmc/settings.h" #include "openmc/simulation.h" -#include "openmc/timer.h" //TODO: temporary? #include "openmc/cell.h" #include "openmc/distribution_spatial.h" @@ -296,11 +295,10 @@ void RandomRay::event_advance_ray() if (mpi::n_procs > 1) { // If domain decomposition is being used, update counter for // ray trace operations in source region for load estimation - //TODO: This is repeated in attenuate_flux, maybe pass in sr index as argument? int64_t sr = domain_->lookup_base_source_region_idx(*this); for (int i = 0; i < n_coord(); i++) { Cell& c {*model::cells[coord(i).cell()]}; - mpi::decomp_map.num_base_source_region_RT_batch_[sr] += c.n_surfaces(); + mpi::decomp_map.num_base_source_region_RT_[sr] += c.n_surfaces(); } } @@ -362,7 +360,7 @@ void RandomRay::event_advance_ray() void RandomRay::attenuate_flux(double distance, bool is_active, double offset) { - // Lookup base source region index + // Lookup base source region index int64_t sr = domain_->lookup_base_source_region_idx(*this); // Initialize values needed to buffer ray for domain decomposition @@ -400,7 +398,7 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) // Loop over all mesh bins and attenuate flux for (int b = 0; b < mesh_bins_.size(); b++) { if (mpi::n_procs > 1) { - mpi::decomp_map.num_mesh_bin_RT_batch_[sr] += 1; + mpi::decomp_map.num_mesh_bin_RT_[sr] += 1; } double physical_length = reduced_distance * mesh_fractional_lengths_[b]; attenuate_flux_inner( @@ -862,17 +860,6 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // set identifier for particle id() = data.ray_id; - // SourceSite site; - - // Set location and direction as in previous subdomain - // site.r = data.position; - - // angle - // site.u = data.direction; - - // site.E = 0.0; - // this->from_source(&site); - // Restore GeometryState scalar fields n_coord() = data.n_coord; cell_instance() = data.cell_instance; @@ -898,10 +885,8 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo Position delta_r = data.position - r(); for (int i = 0; i < n_coord(); i++) { this->coord(i).r() += delta_r; - // this->coord(i).u() = data.direction; // Overwriting local directions causes problems when checking distance to boundary } - // r() = data.position; u() = data.direction; #ifdef OPENMC_DAGMC_ENABLED @@ -920,7 +905,6 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // No need to call exhaustive_find_cell() since we have the full geometry state! // Just verify we have valid cell information if (lowest_coord().cell() == C_NONE) { - // if (!exhaustive_find_cell(*this)) { this->mark_as_lost( "Received particle " + std::to_string(id()) + " with invalid cell information"); } @@ -928,7 +912,6 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // Set birth cell attribute if not set if (cell_born() == C_NONE) cell_born() = lowest_coord().cell(); - // } // Set ray's angular flux to value before subdomain change if (distance_travelled_ > 0.0 || is_active_){ @@ -1129,9 +1112,4 @@ void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_bu } -int RandomRay::get_energy_groups() { - return negroups_; -} - - } // namespace openmc diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 7a090afa01f..cc7b31c4c43 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -17,6 +17,7 @@ #include "openmc/weight_windows.h" #include "openmc/random_ray/decomposition_map.h" #include "openmc/random_ray/ray_bank.h" +#include "openmc/constants.h" // #include // #include @@ -400,11 +401,10 @@ void RandomRaySimulation::prepare_fixed_sources_adjoint() void RandomRaySimulation::simulate() { - // Initialize subdomains for MPI ranks - mpi::decomp_map.initialize(); - - // Create ray bank //TODO: Should this just be local object? - RayBank RB; + if (mpi::n_procs > 1) { + // Initialize subdomains for MPI ranks + mpi::decomp_map.initialize(); + } // Random ray power iteration loop while (simulation::current_batch < settings::n_batches) { @@ -445,13 +445,17 @@ void RandomRaySimulation::simulate() // Transport sweep over all random rays for the iteration if (mpi::n_procs > 1){ + + // Create ray bank to store rays + RayBank RB; transport_sweep_decomp(RB); - // Check if any new regions discovered and if so, exchange discovered cell data between ranks + // Check if any new source regions discovered and if so, exchange discovered cell data between ranks if (mpi::decomp_map.any_discovered_source_regions(domain_->discovered_source_regions_)){ simulation::time_source_region_exchange.start(); mpi::decomp_map.exchange_sr_info(domain_->discovered_source_regions_); + MPI_Barrier(mpi::intracomm); simulation::time_source_region_exchange.stop(); } @@ -460,17 +464,18 @@ void RandomRaySimulation::simulate() } // Add any newly discovered source regions to the main source region - // container. + // container domain_->finalize_discovered_source_regions(); // Normalize scalar flux and update volumes domain_->normalize_scalar_flux_and_volumes( settings::n_particles * RandomRay::distance_active_); - if (mpi::n_procs > 1 && simulation::current_batch <= 5) { + if (mpi::n_procs > 1 && simulation::current_batch <= ITER_LOAD_BALANCE) { // Balance load between MPI ranks by exchanging source regions simulation::time_load_balance.start(); mpi::decomp_map.balance_load(domain_.get()); + MPI_Barrier(mpi::intracomm); simulation::time_load_balance.stop(); } @@ -554,17 +559,6 @@ void RandomRaySimulation::output_simulation_results() double max_load_measured = *std::max_element(mpi::decomp_map.measured_rank_load_fractions_.begin(), mpi::decomp_map.measured_rank_load_fractions_.end()); max_load_imbalance = (max_load_measured - mpi::decomp_map.target_load_) / mpi::decomp_map.target_load_; } - // if (mpi::master) { - // MPI_Gather(&time_transport_total, 1, MPI_DOUBLE, measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, 0, mpi::intracomm); - // double measured_load_sum = std::accumulate(measured_rank_load_fractions_.begin(), measured_rank_load_fractions_.end(), 0.0); - // for (int rank = 0; rank < mpi::n_procs; rank++) { - // measured_rank_load_fractions_[rank] = measured_rank_load_fractions_[rank] / measured_load_sum; - // } - // double max_load_measured = *std::max_element(measured_rank_load_fractions_.begin(), measured_rank_load_fractions_.end()); - // max_load_imbalance = (max_load_measured - mpi::decomp_map.target_load_) / mpi::decomp_map.target_load_; - // } else { - // MPI_Gather(&time_transport_total, 1, MPI_DOUBLE, nullptr, 1, MPI_DOUBLE, 0, mpi::intracomm); - // } } // Print random ray results @@ -678,8 +672,6 @@ void RandomRaySimulation::print_results_random_ray( if (mpi::n_procs > 1){ fmt::print(" MPI Ranks = {}\n", mpi::n_procs); fmt::print(" Avg Ray Subdomain Crossings = {}\n", avg_num_communication_rounds); - fmt::print(" Number of load optimization calls = {}\n", mpi::decomp_map.cnt_optimizations_total_); //TODO: can be removed if fixed to 5 - fmt::print(" unconverged optimizations = {}\n", mpi::decomp_map.cnt_unconverged_optimizations_total_); fmt::print(" Maximum Load Imbalance = {:.2f}%\n", max_load_imbalance*100.0); } @@ -738,13 +730,12 @@ void RandomRaySimulation::print_results_random_ray( show_time("Tally conversion only", time_tallies.elapsed(), 1); if (mpi::n_procs > 1){ double time_decomp_misc = time_domain_decomposition - time_source_region_exchange.elapsed() - time_generate_voronoi_centers.elapsed() - - time_ray_comms.elapsed() - time_unpack_data.elapsed() - time_load_balance.elapsed(); + - time_ray_comms.elapsed() - time_load_balance.elapsed(); show_time("Decomposition handling", time_domain_decomposition, 1); show_time("Ray communication", time_ray_comms.elapsed(), 2); show_time("Exchanging contested SRs", time_source_region_exchange.elapsed(), 2); show_time("Load balancing", time_load_balance.elapsed(), 2); show_time("Generating Voronoi centers", time_generate_voronoi_centers.elapsed(), 2); - show_time("Reinitialising received rays", time_unpack_data.elapsed(), 2); show_time("Other decomposition routines", time_decomp_misc, 2); } show_time("Other iteration routines", misc_time, 1); @@ -840,11 +831,13 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } } } + MPI_Barrier(mpi::intracomm); simulation::time_transport.stop(); // Update ray bank by communicating rays in buffer to new owner ranks and removing terminated ranks simulation::time_ray_comms.start(); RB.update(domain_.get()); + MPI_Barrier(mpi::intracomm); simulation::time_ray_comms.stop(); num_communication_rounds ++; @@ -854,8 +847,10 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { double batch_ray_buffering_time = simulation::time_ray_buffering.elapsed() - start_time_ray_buffering; double batch_transport_time = simulation::time_transport.elapsed() - start_time_transport - batch_ray_buffering_time; - //TODO: only calculate load for first 5 batches - mpi::decomp_map.calculate_rank_load(domain_.get(), batch_transport_time); + // Calculate rank load fractions for load balancing + if (simulation::current_batch <= ITER_LOAD_BALANCE) { + mpi::decomp_map.calculate_rank_load(domain_.get(), batch_transport_time); + } avg_num_communication_rounds_ += num_communication_rounds; diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 730637e9a05..3ed7cd839cf 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -41,6 +41,12 @@ void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ // Reserve space if this is the first ray for this rank // This is just a heuristic to reduce reallocations if (buffers.count == 0) { + buffers.ray_data.reserve(reserved_buffer_size_); + buffers.angular_flux.reserve(reserved_buffer_size_ * negroups_); + buffers.coord.reserve(reserved_buffer_size_ * n_coord_max); + buffers.cell_last.reserve(reserved_buffer_size_ * n_coord_max); + + buffers.ray_data.reserve(32); buffers.angular_flux.reserve(32 * negroups_); buffers.coord.reserve(32 * n_coord_max); @@ -111,7 +117,7 @@ int RayBank::ray_bank_size(){ return ray_bank_size; } -// Tells each rank how many rays to receive from whom +// Tells each rank how many rays to receive from who and how many rays to send to who void RayBank::communicate_message_metadata() { // Ensure all values are zero in vector for receiving counts @@ -128,9 +134,6 @@ void RayBank::communicate_message_metadata() { num_messages_receiving_.data(), 1, MPI_INT, mpi::intracomm); - total_sending_rays_ = accumulate(num_messages_sending_.begin(), - num_messages_sending_.end(), 0); - total_receiving_rays_ = accumulate(num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); @@ -159,7 +162,8 @@ void RayBank::communicate_rays(){ vector requests(total_requests); int req_idx = 0; - // Post all non-blocking receives first (better for overlap) + // Post all non-blocking receives first to allow for potential overlap + // of communication and packing of send buffers int recv_offset = 0; for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { int num_rays_receiving = num_messages_receiving_[sending_rank]; @@ -184,7 +188,7 @@ void RayBank::communicate_rays(){ recv_offset += num_rays_receiving; } - // Post all non-blocking sends - data is already packed in send-ready format! + // Post all non-blocking sends! for (auto& [receiving_rank, buffers] : ray_send_buffer_) { int num_rays = buffers.count; @@ -198,7 +202,7 @@ void RayBank::communicate_rays(){ } } if (has_transported_rays) { - mpi::decomp_map.my_neighbors.insert(receiving_rank); + mpi::decomp_map.my_neighbors_.insert(receiving_rank); } // Send all 4 data arrays - already packed, no intermediate copying! @@ -222,7 +226,7 @@ void RayBank::communicate_rays(){ // Wait for all communication to complete MPI_Waitall(req_idx, requests.data(), MPI_STATUSES_IGNORE); - // Clear send buffers - this frees memory immediately after communication + // Clear send buffers ray_send_buffer_.clear(); } @@ -232,8 +236,6 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ const int n_coord_max = model::n_coord_levels; - // printf(" Rank %d: Received %lu rays.\n", mpi::rank, received_ray_data_.size()); - // Add re-initialized random ray objects to my_ray_list #pragma omp parallel for for (int i = 0; i < received_ray_data_.size(); i++) { @@ -243,25 +245,13 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ &received_angular_flux_data_[i * negroups_], &received_coord_[i * n_coord_max], &received_cell_last_[i * n_coord_max]); - - // if (my_ray_list_[i].id() == 5) - // { - // printf("Ray %lu restarted on rank %d at position (%f, %f, %f)\n", - // my_ray_list_[i].id(), mpi::rank, - // my_ray_list_[i].r().x, - // my_ray_list_[i].r().y, - // my_ray_list_[i].r().z); - // } } - // printf(" Rank %d: Ray bank updated with %lu rays.\n", mpi::rank, my_ray_list_.size()); - // Clear received data vectors received_ray_data_.resize(0); received_angular_flux_data_.resize(0); received_coord_.resize(0); received_cell_last_.resize(0); - } bool RayBank::is_any_ray_alive(){ diff --git a/src/timer.cpp b/src/timer.cpp index 9540f9e321a..ddda9882a89 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -29,13 +29,10 @@ Timer time_event_death; Timer time_update_src; Timer time_ray_comms; Timer time_ray_buffering; -// Timer time_ray_buffering2; Timer time_decomposition_handling; Timer time_load_balance; Timer time_generate_voronoi_centers; Timer time_source_region_exchange; -Timer time_unpack_data; -Timer time_calculate_rank_load; } // namespace simulation From 7a28ef0289074294dc6a94ff4fa02c7d2d5b7d88 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 16 Feb 2026 01:41:01 +0000 Subject: [PATCH 36/48] Remove erroneous MPI_Barrier in transport timer --- src/random_ray/random_ray_simulation.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index cc7b31c4c43..adcd9d477c2 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -831,7 +831,6 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } } } - MPI_Barrier(mpi::intracomm); simulation::time_transport.stop(); // Update ray bank by communicating rays in buffer to new owner ranks and removing terminated ranks From 3f57437b859cd924996a9389772f84fd4a69ac79 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Wed, 1 Jul 2026 14:35:09 +0100 Subject: [PATCH 37/48] Corrected srh assignment in ray initialisation --- include/openmc/timer.h | 3 ++- src/random_ray/random_ray.cpp | 5 +++-- src/random_ray/random_ray_simulation.cpp | 17 +++++++++++++++-- src/timer.cpp | 1 + 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/include/openmc/timer.h b/include/openmc/timer.h index d7d0ede8e18..03ac4942412 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -38,7 +38,8 @@ extern Timer time_load_balance; extern Timer time_ray_buffering; extern Timer time_generate_voronoi_centers; extern Timer time_source_region_exchange; -extern Timer time_add_ray_to_bank; +extern Timer time_mpi_imbalance; + } // namespace simulation diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index e804e7286a2..118fbac03a4 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -979,8 +979,6 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) } SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); - SourceRegionHandle srh = - domain_->get_subdivided_source_region_handle(sr_key, r(), u()); if (mpi::n_procs > 1){ // Check if ray sampling site belongs to subdomain @@ -997,6 +995,9 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) } } + SourceRegionHandle srh = + domain_->get_subdivided_source_region_handle(sr_key, r(), u()); + if (!srh.is_numerical_fp_artifact_) { for (int g = 0; g < negroups_; g++) { angular_flux_[g] = srh.source(g); diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index adcd9d477c2..d1a509a74b9 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -634,7 +634,11 @@ void RandomRaySimulation::print_results_random_ray( if (settings::verbosity >= 6) { double total_integrations = total_geometric_intersections * negroups; - double time_transport_total = time_transport.elapsed() - time_ray_buffering.elapsed(); + + // Transport time varies between ranks, so we need to compute the total transport time as the sum of the max transport time across all ranks, i.e. + // the transport time of the master rank plus the time the master rank spends waiting for slowest other rank to finish. + double time_transport_total = time_transport.elapsed() - time_ray_buffering.elapsed() + time_mpi_imbalance.elapsed(); + double time_per_integration = time_transport_total / total_integrations; double time_domain_decomposition = time_decomposition_handling.elapsed() + time_generate_voronoi_centers.elapsed() + time_load_balance.elapsed() @@ -725,7 +729,11 @@ void RandomRaySimulation::print_results_random_ray( show_time("Total time for initialization", time_initialize.elapsed()); show_time("Reading cross sections", time_read_xs.elapsed(), 1); show_time("Total simulation time", time_total.elapsed()); - show_time("Transport sweep only", time_transport_total, 1); + if (mpi::n_procs > 1){ + show_time("Transport sweep only (incl. rank wait time)", time_transport_total, 1); + } else { + show_time("Transport sweep only", time_transport_total, 1); + } show_time("Source update only", time_update_src.elapsed(), 1); show_time("Tally conversion only", time_tallies.elapsed(), 1); if (mpi::n_procs > 1){ @@ -833,6 +841,11 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { } simulation::time_transport.stop(); + // Capture wait time resulting from other transport sweeps + simulation::time_mpi_imbalance.start(); + MPI_Barrier(mpi::intracomm); + simulation::time_mpi_imbalance.stop(); + // Update ray bank by communicating rays in buffer to new owner ranks and removing terminated ranks simulation::time_ray_comms.start(); RB.update(domain_.get()); diff --git a/src/timer.cpp b/src/timer.cpp index ddda9882a89..c959da29af2 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -33,6 +33,7 @@ Timer time_decomposition_handling; Timer time_load_balance; Timer time_generate_voronoi_centers; Timer time_source_region_exchange; +Timer time_mpi_imbalance; } // namespace simulation From 5ec9d75324179b265d6015edbd58739a2bb5d941 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Mon, 6 Jul 2026 21:20:36 +0100 Subject: [PATCH 38/48] Skip near-zero mesh bin lengths to avoid MPI error --- src/random_ray/random_ray.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 118fbac03a4..9fe61bf7d89 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -397,10 +397,21 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) // Loop over all mesh bins and attenuate flux for (int b = 0; b < mesh_bins_.size(); b++) { + double physical_length = reduced_distance * mesh_fractional_lengths_[b]; + if (mpi::n_procs > 1) { mpi::decomp_map.num_mesh_bin_RT_[sr] += 1; } - double physical_length = reduced_distance * mesh_fractional_lengths_[b]; + + // Very flat angles can result in very small physical lengths, + // despite the TINY_BIT adjustment for Position start. If this happens at an + // MPI boundary, this can cause rays to bounce back and forth indefinitely. + // Very small lengths are therefore skipped. + if (physical_length <= TINY_BIT) { + start += physical_length * u(); + continue; + } + attenuate_flux_inner( physical_length, is_active, sr, mesh_bins_[b], start); From 66bf2167757266738d6b01e26b7907dcd43ef890 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 7 Jul 2026 09:50:46 +0100 Subject: [PATCH 39/48] Make total intersections consistent for MPI --- src/random_ray/random_ray.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 9fe61bf7d89..ff334aa0775 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -264,6 +264,8 @@ RandomRay::RandomRay(uint64_t ray_id, FlatSourceDomain* domain) : RandomRay() uint64_t RandomRay::transport_history_based_single_ray() { using namespace openmc; + int n_start = n_event(); + while (alive()) { event_advance_ray(); @@ -278,7 +280,8 @@ uint64_t RandomRay::transport_history_based_single_ray() } } - return n_event(); + int delta_n = n_event() - n_start; + return delta_n; } // Transports ray across a single source region @@ -862,7 +865,7 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo // Restore particle event counter from the transmitted ray // This preserves the event count across MPI rank boundaries - n_event() = data.n_event + 1; + n_event() = data.n_event; is_active_ = data.is_active; From a328f31e857fd95b87fbe7b1d544bb5ff9fc0641 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 7 Jul 2026 17:51:12 +0100 Subject: [PATCH 40/48] Remove accidentally added vendor repositories --- vendor/xtensor | 1 - vendor/xtl | 1 - 2 files changed, 2 deletions(-) delete mode 160000 vendor/xtensor delete mode 160000 vendor/xtl diff --git a/vendor/xtensor b/vendor/xtensor deleted file mode 160000 index 3634f2ded19..00000000000 --- a/vendor/xtensor +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3634f2ded19e0cf38208c8b86cea9e1d7c8e397d diff --git a/vendor/xtl b/vendor/xtl deleted file mode 160000 index a7c1c5444df..00000000000 --- a/vendor/xtl +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a7c1c5444dfc57f76620391af4c94785ff82c8d6 From bd669f8cbe1c74edb52efb2afc45d93bc1f2f858 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 21 Jul 2026 16:59:28 +0100 Subject: [PATCH 41/48] Update documentation, comment clean up --- docs/source/methods/random_ray.rst | 175 +++++++++++++++++++++++- docs/source/usersguide/install.rst | 3 + docs/source/usersguide/parallel.rst | 3 + include/openmc/random_ray/ray_bank.h | 7 +- include/openmc/source.h | 1 - src/main.cpp | 5 - src/random_ray/flat_source_domain.cpp | 4 - src/random_ray/linear_source_domain.cpp | 1 - src/random_ray/random_ray.cpp | 4 - src/random_ray/source_region.cpp | 12 -- 10 files changed, 176 insertions(+), 39 deletions(-) diff --git a/docs/source/methods/random_ray.rst b/docs/source/methods/random_ray.rst index 8bc2a0a1bf5..d8c886ea182 100644 --- a/docs/source/methods/random_ray.rst +++ b/docs/source/methods/random_ray.rst @@ -1100,14 +1100,176 @@ The adjoint external source will be computed for each source region in the simulation mesh, independent of any tallies. The adjoint external source is always flat, even when a linear scattering and fission source shape is used. -When in adjoint mode, all reported results (e.g., tallies, eigenvalues, etc.) -are derived from the adjoint flux, even when the physical meaning is not -necessarily obvious. These values are still reported, though we emphasize that -the primary use case for adjoint mode is for producing adjoint flux tallies to -support subsequent perturbation studies and weight window generation. Note -however that the adjoint :math:`k_{eff}` is statistically the same as the +When in adjoint mode, all reported results (e.g., tallies, eigenvalues, etc.) +are derived from the adjoint flux, even when the physical meaning is not +necessarily obvious. These values are still reported, though we emphasize that +the primary use case for adjoint mode is for producing adjoint flux tallies to +support subsequent perturbation studies and weight window generation. Note +however that the adjoint :math:`k_{eff}` is statistically the same as the forward :math:`k_{eff}`, despite the flux distributions taking different shapes. +-------------------- +Domain Decomposition +-------------------- + +To enable parallelisation and scalability beyond the resources of a single +computational node, a domain decomposition capability is available for the +random ray solver. + +~~~~~~~~~~~~~~~~~~~~ +Voronoi Tessellation +~~~~~~~~~~~~~~~~~~~~ + +The domain decomposition scheme distributes the source regions across multiple +MPI processes (ranks) according to a `capacity-constrained Voronoi tessellation +`_. Each MPI rank is responsible for the transport sweeps and +result tallying in one Voronoi region of the problem. Source regions are +assigned to MPI ranks (and thus Voronoi regions) using a formula that evaluates +the distance between the first intersection point :math:`\mathbf{x}` of a ray +with that source region and the Voronoi region centroid +:math:`\mathbf{c}_{\mathrm{rank}}`, combined with an additive weight +:math:`\omega_{\mathrm{rank}}`: + +.. math:: + :label: mpi_ownership + + \mathrm{rank}(\mathbf{x}) = \arg\min_{\text{rank}} + \left(\|\mathbf{c}_{\mathrm{rank}} - \mathbf{x}\|^2 - + \omega_{\mathrm{rank}} \right)\;\mathrm{.} + +The initial weight is zero and subsequently changed for load balancing. This +approach yields compact MPI rank subdomains. + +.. figure:: ../_images/c5g7_geometry.png + :width: 48% + :align: center + :figclass: align-center + + C5G7 geometry. + +.. figure:: ../_images/c5g7_voronoi.png + :width: 48% + :align: center + :figclass: align-center + + Voronoi decomposition of C5G7 source regions. + +In the OpenMC random ray implementation, the algorithm is not aware of the +source regions in the geometry a priori. Instead, source regions are discovered +dynamically as rays travel through the geometry and, once discovered, they get +added to a list of known source regions. Whenever a ray enters a previously +unknown source region, the responsible MPI rank is determined using the formula +given above. Ideally, the source region centroid would be used to assign +ownership unambiguously. However, centroid positions are not precalculated, and +ownership is instead decided based on the ray entry point. If a source region +happens to sit on a boundary between two Voronoi regions, it may be hit by rays +from both MPI ranks at different locations, and both MPI ranks may therefore +claim the same source region during the transport sweep. To resolve these +conflicts, after each transport sweep, ownership of contested source regions is +decided based on the estimated load of the ranks involved. + +Once each newly discovered source region has a unique owner rank, the ownership +information is shared across all MPI ranks and saved in a decomposition map. +This decomposition map is used to look up the responsible MPI rank every time a +ray enters a source region that has already been recorded, thereby avoiding the +need to evaluate Equation :eq:`mpi_ownership` again, which can be time-intensive +if many MPI ranks are present. + +~~~~~~~~~~~~~~~~~ +Ray Communication +~~~~~~~~~~~~~~~~~ + +When rays exit an MPI rank subdomain, they must be transmitted to their new +owner rank so that the transport can continue until the rays reach their +termination distance. Every time an MPI rank detects that a ray is leaving its +subdomain, the transport of that ray stops, and the ray attributes (angular flux +values, position, direction, distance traveled, etc.) are stored in a buffer. +Once each MPI rank has processed all rays in its subdomain, i.e. the rays have +either terminated or been moved into the buffer, all MPI ranks send their +buffered ray data in a bulk synchronous communication pattern to the new MPI +owner ranks. After communicating the ray data, each MPI rank reinitializes the +received rays with the transmitted data, and the rays continue traveling. This +communication pattern continues until all rays of a given batch have terminated. + +~~~~~~~~~~~~~~ +Load Balancing +~~~~~~~~~~~~~~ + +To ensure high parallel efficiency, it is crucial to assign each MPI rank +approximately the same amount of computational workload, such that the +individual MPI processes do not spend excessive time waiting at synchronization +steps (like the synchronous communication phase described above), while others +are still performing their calculations. In many computational fields, the +amount of work that is performed is fixed per source region. In such cases, the +overall load is simply a function of how many source regions are contained +within a given subdomain, with each source region requiring the same set of +operations to be performed. + +However, in random ray, the load for a given source region is much +more complex to determine. When a ray crosses a cell, the angular flux increment +:math:`\Delta \psi_{r,g}` for each energy group is calculated according to +Equation :eq:`delta_psi`. Additionally, to determine the length of the ray +through the cell (and which cell comes next), ray tracing operations are +performed. The frequency of these calculations and the cost of the ray trace +operations depend on the size, aspect ratio and definition of a given cell, +which can vary strongly across the simulation problem. To estimate the workload +associated with a given source region, an empirical formula has been set up that +accounts for 1) the number of ray crossings :math:`n_{\mathrm{hits}, i}` +in a source region :math:`i`, and 2) the number of surface ray trace operations +:math:`n_{\mathrm{RT}, i}` associated with the definition of that source +region: + +.. math:: + \mathrm{load}_{\mathrm{estimate}, i} = F_{r} \cdot \left(C_1 \cdot + n_{\mathrm{hits}, i} \cdot N_{G} + C_2 \cdot n_{\mathrm{RT}, i} \right)\; + \mathrm{.} + +The quantities :math:`n_{\mathrm{hits}, i}` and :math:`n_{\mathrm{RT}, i}` are +recorded throughout the simulation. Both contributions are weighted with factors +:math:`C_1` and :math:`C_2`, which represent the relative computational cost +of these operations. The values of these factors are set to :math:`C_1=1.0` and +:math:`C_2=0.1`, according to empirical tests. These estimates per source +region are then scaled by the additional prefactor :math:`F_{\mathrm{rank}}` +for the respective MPI rank, which is calculated from the ratio between measured +and estimated MPI rank load in the current batch. The measured load is +determined based on the transport sweep times, which are recorded by default for +diagnostics. + +Based on these load estimates, a load balancing routine tries to equalize the +work per MPI rank. To do so, the weights +:math:`\omega_{\mathrm{rank}}` in Equation :eq:`mpi_ownership` are +adjusted according to the deviation of the estimated rank load + +.. math:: + \mathrm{load}_{\mathrm{estimate}, \mathrm{rank}} = \frac{\sum\limits_{i \, + \in \, \mathrm{rank}} \mathrm{load}_{\mathrm{estimate},i}}{\sum\limits_{i=1} + ^{M} \mathrm{load}_{\mathrm{estimate}, i}} + +from the target load + +.. math:: + \mathrm{load}_{\mathrm{target}} = \frac{1}{N_{\mathrm{rank}}}\;\mathrm{,} + +where :math:`N_{\mathrm{rank}}` is the total number of MPI ranks. + +Changes to the weights :math:`\mathbf{\omega_{\mathrm{rank}}}` increase or +decrease the reach of a specific MPI rank, and thus the number of source regions +that belong to it. After each weight change, the rank load estimates are updated +according to the anticipated changes in the ownership of source regions, and the +new load estimates are then used again to calculate new weights. These load +optimization iterations continue until the estimated load imbalance is smaller +than 1% or until a maximum of 200 iterations is reached. + +After the load balancing, numerous source regions will belong to new MPI ranks. +The corresponding cell data is transferred to the new owner ranks and erased +from the previous owner ranks. Since both the iterative load optimization and +source region exchange can be computationally expensive, load balancing is +restricted to the first 5 simulation batches. Because random ray simulations +should use an appropriately large ray population, it is expected that sufficient +load estimate data has been recorded for the vast majority of cells after 5 +batches, and the load per MPI rank will not change significantly beyond +stochastic fluctuations associated with the changing quadrature. + --------------------------- Fundamental Sources of Bias --------------------------- @@ -1162,6 +1324,7 @@ in random ray particle transport are: .. _Cosgrove-2023: https://doi.org/10.1080/00295639.2023.2270618 .. _Ferrer-2016: https://doi.org/10.13182/NSE15-6 .. _Gunow-2018: https://dspace.mit.edu/handle/1721.1/119030 +.. _Balzer-2009: https://doi.org/10.1109/ISVD.2009.28 .. only:: html diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 2a0d301d4bc..b60fc5d9780 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -327,6 +327,9 @@ Prerequisites cmake -DOPENMC_USE_DAGMC=on -DCMAKE_PREFIX_PATH=/path/to/dagmc/installation .. + Distributed memory calculations with the random ray solver require MOAB + version 5.2.0 or later. + * MCPL_ library for reading and writing .mcpl files This option allows OpenMC to read and write MCPL (Monte Carlo Particle diff --git a/docs/source/usersguide/parallel.rst b/docs/source/usersguide/parallel.rst index ecbdd20b626..a43e99e8261 100644 --- a/docs/source/usersguide/parallel.rst +++ b/docs/source/usersguide/parallel.rst @@ -69,6 +69,9 @@ argument to :func:`openmc.run`:: openmc.run(mpi_args=['mpiexec', '-n', '32']) +Distributed memory calculations with the random ray solver for DAGMC geometries +require MOAB version 5.2.0 or later. + ---------------------- Maximizing Performance ---------------------- diff --git a/include/openmc/random_ray/ray_bank.h b/include/openmc/random_ray/ray_bank.h index 2efa9b52239..d4a2965028b 100644 --- a/include/openmc/random_ray/ray_bank.h +++ b/include/openmc/random_ray/ray_bank.h @@ -11,11 +11,6 @@ namespace openmc { -// // Forward declaration -// class FlatSourceDomain; -// class RandomRay; -// struct RayBufferContainer; - class RayBank { public: //---------------------------------------------------------------------------- @@ -63,7 +58,7 @@ class RayBank { vector received_coord_; vector received_cell_last_; -}; // class DecompositionMap +}; // class RayBank } // namespace openmc diff --git a/include/openmc/source.h b/include/openmc/source.h index 68c1de735dd..63e2e244f93 100644 --- a/include/openmc/source.h +++ b/include/openmc/source.h @@ -106,7 +106,6 @@ class Source { // Methods for constraints void read_constraints(pugi::xml_node node); - // bool satisfies_spatial_constraints(Position r) const; bool satisfies_energy_constraints(double E) const; bool satisfies_time_constraints(double time) const; diff --git a/src/main.cpp b/src/main.cpp index 542b3cb03e7..88251ac7232 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,20 +44,16 @@ int main(int argc, char* argv[]) break; case RunMode::PLOTTING: err = openmc_plot_geometry(); - printf("Plotting finished\n"); break; case RunMode::PARTICLE: if (mpi::master) run_particle_restart(); err = 0; - printf("Particle finished\n"); break; case RunMode::VOLUME: err = openmc_calculate_volumes(); - printf("Volumes finished\n"); break; default: - printf("Default finished\n"); break; } if (err) @@ -72,5 +68,4 @@ int main(int argc, char* argv[]) #ifdef OPENMC_MPI MPI_Finalize(); #endif - } diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index e24f885f580..6aa08404f34 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -141,10 +141,6 @@ void FlatSourceDomain::update_single_neutron_source(SourceRegionHandle& srh) } srh.source(g_out) = (scatter_source + fission_source * inverse_k_eff) / sigma_t; - - // if (source_regions_.key(sr) == SourceRegionKey(96506,0)){ - // printf("Rank: %d, Batch: %d; Scalar_flux_old: %f, Source: %f for material %d \n", mpi::rank, simulation::current_batch, source_regions_.scalar_flux_old(sr, g_out), source_regions_.source(sr, g_out), material); - // } } } diff --git a/src/random_ray/linear_source_domain.cpp b/src/random_ray/linear_source_domain.cpp index ba89f695774..60664e12ca5 100644 --- a/src/random_ray/linear_source_domain.cpp +++ b/src/random_ray/linear_source_domain.cpp @@ -25,7 +25,6 @@ void LinearSourceDomain::batch_reset() FlatSourceDomain::batch_reset(); #pragma omp parallel for for (int64_t sr = 0; sr < n_source_regions(); sr++) { - // source_regions_.centroid_iteration(sr) = {0.0, 0.0, 0.0}; source_regions_.mom_matrix(sr) = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; } #pragma omp parallel for diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index a378b70f458..113331ca98d 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -15,8 +15,6 @@ #include "openmc/distribution_spatial.h" #include "openmc/random_dist.h" #include "openmc/source.h" - -// #include "openmc/random_ray/ray_bank.h" #include "openmc/random_ray/decomposition_map.h" namespace openmc { @@ -562,7 +560,6 @@ void RandomRay::attenuate_flux_flat_source( // Tally valid position inside the source region (e.g., midpoint of // the ray) if not done already if (!srh.position_recorded()) { - // Position midpoint = r + u() * (distance / 2.0); srh.position() = midpoint; srh.position_recorded() = 1; } @@ -605,7 +602,6 @@ void RandomRay::attenuate_flux_flat_source_void( // Tally valid position inside the source region (e.g., midpoint of // the ray) if not done already if (!srh.position_recorded()) { - // Position midpoint = r + u() * (distance / 2.0); srh.position() = midpoint; srh.position_recorded() = 1; } diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index febfc0ab2d4..68d4c1a6fed 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -167,16 +167,12 @@ void SourceRegionContainer::push_back(const SourceRegion& sr) mesh_.push_back(sr.scalars_.mesh_); parent_sr_.push_back(sr.scalars_.parent_sr_); key_.push_back(sr.scalars_.key_); - centroid_.push_back(sr.scalars_.centroid_); centroid_iteration_.push_back(sr.scalars_.centroid_iteration_); centroid_t_.push_back(sr.scalars_.centroid_t_); // Only store these fields if is_linear_ is true if (is_linear_) { - // centroid_.push_back(sr.scalars_.centroid_); - // centroid_iteration_.push_back(sr.scalars_.centroid_iteration_); - // centroid_t_.push_back(sr.scalars_.centroid_t_); mom_matrix_.push_back(sr.scalars_.mom_matrix_); mom_matrix_t_.push_back(sr.scalars_.mom_matrix_t_); } @@ -225,16 +221,12 @@ void SourceRegionContainer::assign( position_.clear(); mesh_.clear(); parent_sr_.clear(); - centroid_.clear(); centroid_iteration_.clear(); centroid_t_.clear(); key_.clear(); if (is_linear_) { - // centroid_.clear(); - // centroid_iteration_.clear(); - // centroid_t_.clear(); mom_matrix_.clear(); mom_matrix_t_.clear(); } @@ -301,7 +293,6 @@ SourceRegionHandle SourceRegionContainer::get_source_region_handle(int64_t sr) } handle.scalar_flux_final_ = &scalar_flux_final(sr, 0); handle.tally_task_ = &tally_task(sr, 0); - handle.centroid_ = ¢roid(sr); handle.centroid_iteration_ = ¢roid_iteration(sr); handle.centroid_t_ = ¢roid_t(sr); @@ -309,9 +300,6 @@ SourceRegionHandle SourceRegionContainer::get_source_region_handle(int64_t sr) if (handle.is_linear_) { - // handle.centroid_ = ¢roid(sr); - // handle.centroid_iteration_ = ¢roid_iteration(sr); - // handle.centroid_t_ = ¢roid_t(sr); handle.mom_matrix_ = &mom_matrix(sr); handle.mom_matrix_t_ = &mom_matrix_t(sr); handle.source_gradients_ = &source_gradients(sr, 0); From d48d0852d3a4f4884d680e70959931a8d83a1713 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 21 Jul 2026 18:50:51 +0100 Subject: [PATCH 42/48] Remove scratch files --- examples/2D_c5g7_python_mesh/._reference.txt | Bin 224 -> 0 bytes examples/2D_c5g7_python_mesh/build-xml-2d.py | 708 - examples/2D_c5g7_python_mesh/output.txt | 4498 -- .../2D_c5g7_python_mesh/pin_power_error.py | 60 - examples/2D_c5g7_python_mesh/reference.txt | 34 - examples/c5g7_no_mesh/pin_power_error.py | 63 - examples/c5g7_no_mesh/reference.txt | 34 - examples/c5g7_no_mesh/test | 51561 ---------------- examples/c5g7_no_mesh/trrm.csv | 34 - examples/proxima/download_dagmc_mesh.sh | 3 - examples/proxima/stellarator.py | 185 - examples/simple_tokamak/simple_tok.py | 108 - temp.cpp | 495 - 13 files changed, 57783 deletions(-) delete mode 100644 examples/2D_c5g7_python_mesh/._reference.txt delete mode 100755 examples/2D_c5g7_python_mesh/build-xml-2d.py delete mode 100644 examples/2D_c5g7_python_mesh/output.txt delete mode 100644 examples/2D_c5g7_python_mesh/pin_power_error.py delete mode 100644 examples/2D_c5g7_python_mesh/reference.txt delete mode 100644 examples/c5g7_no_mesh/pin_power_error.py delete mode 100644 examples/c5g7_no_mesh/reference.txt delete mode 100644 examples/c5g7_no_mesh/test delete mode 100644 examples/c5g7_no_mesh/trrm.csv delete mode 100644 examples/proxima/download_dagmc_mesh.sh delete mode 100644 examples/proxima/stellarator.py delete mode 100644 examples/simple_tokamak/simple_tok.py delete mode 100644 temp.cpp diff --git a/examples/2D_c5g7_python_mesh/._reference.txt b/examples/2D_c5g7_python_mesh/._reference.txt deleted file mode 100644 index b831a88196d39026198a83bcc95f318b585b634a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@j4&|@gD#&5x_AdBnYbP0g&DT#5zzu zjABHH>m}#s>LnHwmJwu diff --git a/examples/2D_c5g7_python_mesh/build-xml-2d.py b/examples/2D_c5g7_python_mesh/build-xml-2d.py deleted file mode 100755 index f462dd09ef4..00000000000 --- a/examples/2D_c5g7_python_mesh/build-xml-2d.py +++ /dev/null @@ -1,708 +0,0 @@ -import openmc -import openmc.mgxs -import numpy as np - -z_min = -32.13 -z_max = 32.13 - -############################################################################### -# General Settings -############################################################################### - -# Instantiate a Settings, set all runtime parameters, and export to XML -settings_file = openmc.Settings() -settings_file.energy_mode = "multi-group" -settings_file.batches = 1000 -settings_file.inactive = 600 -settings_file.particles = 1750 -settings_file.run_mode = 'eigenvalue' -settings_file.output = {'tallies': False, 'summary': False} - -# Create an initial uniform spatial source distribution for sampling rays. -# Note that this must be uniform in space and angle. -lower_left = (-64.26/2, -64.26/2, -1e-5) -upper_right = (64.26/2, 64.26/2, 1e-5) -uniform_dist = openmc.stats.Box(lower_left, upper_right) -settings_file.random_ray['ray_source'] = openmc.IndependentSource(space=uniform_dist) -settings_file.random_ray['distance_inactive'] = 60.0 -settings_file.random_ray['distance_active'] = 250.0 -settings_file.random_ray['source_shape'] = 'flat' -settings_file.random_ray['sample_method'] = 'prng' - -# A mesh with pincell level resolution will be overlaid by default. -# Increasing this parameter above 1 will subdivide the mesh further. -mesh_resolution_multiplier = 7 - - -############################################################################### -# Plots -############################################################################### - -plot_1 = openmc.VoxelPlot(plot_id=1) -plot_1.filename = 'plot_1' -plot_1.origin = [0.0, 0.0, 0.0] -plot_1.width = [64.26, 64.26, 1.0] -plot_1.pixels = [1000, 1000, 1] -# plot_1.pixels = [3000, 3000, 1] -# plot_1.type = 'voxel' - -# Instantiate a Plots collection and export to XML -plot_file = openmc.Plots([plot_1]) - -############################################################################### -# Pinmaker Utility -############################################################################### - -def pinmaker(inner_fill, outer_fill, fuel_radius): - - pincell_base = openmc.Universe() - - cylinder = openmc.ZCylinder(r=fuel_radius) - inside_cell = openmc.Cell(fill=inner_fill, region=-cylinder) - outside_cell = openmc.Cell(fill=outer_fill, region=+cylinder) - pincell_base.add_cells([inside_cell, outside_cell]) - - return pincell_base - -############################################################################### -# MGXS -############################################################################### - -# Instantiate the energy group data -groups = openmc.mgxs.EnergyGroups(np.logspace(-5, 7, 8)) - -# Instantiate the 7-group C5G7 cross section data -uo2_xsdata = openmc.XSdata('uo2', groups) -uo2_xsdata.order = 0 -uo2_xsdata.set_total( - np.array([1.779490E-01, 3.298050E-01, 4.803880E-01, 5.543670E-01, - 3.118010E-01, 3.951680E-01, 5.644060E-01])) -uo2_xsdata.set_absorption( - np.array([8.02480E-03, 3.71740E-03, 2.67690E-02, 9.62360E-02, 3.00200E-02, - 1.11260E-01, 2.82780E-01])) -scatter_matrix = \ - [[[1.275370E-01, 4.237800E-02, 9.437400E-06, 5.516300E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 3.244560E-01, 1.631400E-03, 3.142700E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 4.509400E-01, 2.679200E-03, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 4.525650E-01, 5.566400E-03, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 1.252500E-04, 2.714010E-01, 1.025500E-02, 1.002100E-08], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 1.296800E-03, 2.658020E-01, 1.680900E-02], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 8.545800E-03, 2.730800E-01]]] -scatter_matrix = np.array(scatter_matrix) -scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) -uo2_xsdata.set_scatter_matrix(scatter_matrix) -uo2_xsdata.set_fission( - np.array([7.212060E-03, 8.193010E-04, 6.453200E-03, 1.856480E-02, 1.780840E-02, 8.303480E-02, 2.160040E-01])) -uo2_xsdata.set_nu_fission( - np.array([2.005998E-02, 2.027303E-03, 1.570599E-02, 4.518301E-02, 4.334208E-02, 2.020901E-01, 5.257105E-01])) -uo2_xsdata.set_chi( - np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) - -mox43_xsdata = openmc.XSdata('mox43', groups) -mox43_xsdata.order = 0 -mox43_xsdata.set_total( - np.array([1.787310E-01, 3.308490E-01, 4.837720E-01, 5.669220E-01, 4.262270E-01, 6.789970E-01, 6.828520E-01])) -mox43_xsdata.set_absorption( - np.array([8.43390E-03, 3.75770E-03, 2.79700E-02, 1.04210E-01, 1.39940E-01, 4.09180E-01, 4.09350E-01])) -scatter_matrix = \ - [[[1.288760E-01, 4.141300E-02, 8.229000E-06, 5.040500E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 3.254520E-01, 1.639500E-03, 1.598200E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 4.531880E-01, 2.614200E-03, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 4.571730E-01, 5.539400E-03, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 1.604600E-04, 2.768140E-01, 9.312700E-03, 9.165600E-09], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 2.005100E-03, 2.529620E-01, 1.485000E-02], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 8.494800E-03, 2.650070E-01]]] -scatter_matrix = np.array(scatter_matrix) -scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) -mox43_xsdata.set_scatter_matrix(scatter_matrix) -mox43_xsdata.set_fission( - np.array([7.62704E-03, 8.76898E-04, 5.69835E-03, 2.28872E-02, 1.07635E-02, 2.32757E-01, 2.48968E-01])) -mox43_xsdata.set_nu_fission( - np.array([2.175300E-02, 2.535103E-03, 1.626799E-02, 6.547410E-02, 3.072409E-02, 6.666510E-01, 7.139904E-01])) -mox43_xsdata.set_chi( - np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) - -mox7_xsdata = openmc.XSdata('mox7', groups) -mox7_xsdata.order = 0 -mox7_xsdata.set_total( - np.array([1.813230E-01, 3.343680E-01, 4.937850E-01, 5.912160E-01, 4.741980E-01, 8.336010E-01, 8.536030E-01])) -mox7_xsdata.set_absorption( - np.array([9.06570E-03, 4.29670E-03, 3.28810E-02, 1.22030E-01, 1.82980E-01, 5.68460E-01, 5.85210E-01])) -scatter_matrix = \ - [[[1.304570E-01, 4.179200E-02, 8.510500E-06, 5.132900E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 3.284280E-01, 1.643600E-03, 2.201700E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 4.583710E-01, 2.533100E-03, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 4.637090E-01, 5.476600E-03, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 1.761900E-04, 2.823130E-01, 8.728900E-03, 9.001600E-09], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 2.276000E-03, 2.497510E-01, 1.311400E-02], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 8.864500E-03, 2.595290E-01]]] -scatter_matrix = np.array(scatter_matrix) -scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) -mox7_xsdata.set_scatter_matrix(scatter_matrix) -mox7_xsdata.set_fission( - np.array([8.25446E-03, 1.32565E-03, 8.42156E-03, 3.28730E-02, 1.59636E-02, 3.23794E-01, 3.62803E-01])) -mox7_xsdata.set_nu_fission( - np.array([2.381395E-02, 3.858689E-03, 2.413400E-02, 9.436622E-02, 4.576988E-02, 9.281814E-01, 1.043200E+00])) -mox7_xsdata.set_chi( - np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) - -mox87_xsdata = openmc.XSdata('mox87', groups) -mox87_xsdata.order = 0 -mox87_xsdata.set_total( - np.array([1.830450E-01, 3.367050E-01, 5.005070E-01, 6.061740E-01, 5.027540E-01, 9.210280E-01, 9.552310E-01])) -mox87_xsdata.set_absorption( - np.array([9.48620E-03, 4.65560E-03, 3.62400E-02, 1.32720E-01, 2.08400E-01, 6.58700E-01, 6.90170E-01])) -scatter_matrix = \ - [[[1.315040E-01, 4.204600E-02, 8.697200E-06, 5.193800E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 3.304030E-01, 1.646300E-03, 2.600600E-09, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 4.617920E-01, 2.474900E-03, 0.000000E-00, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 4.680210E-01, 5.433000E-03, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 1.859700E-04, 2.857710E-01, 8.397300E-03, 8.928000E-09], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 2.391600E-03, 2.476140E-01, 1.232200E-02], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 8.968100E-03, 2.560930E-01]]] -scatter_matrix = np.array(scatter_matrix) -scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) -mox87_xsdata.set_scatter_matrix(scatter_matrix) -mox87_xsdata.set_fission( - np.array([8.67209E-03, 1.62426E-03, 1.02716E-02, 3.90447E-02, 1.92576E-02, 3.74888E-01, 4.30599E-01])) -mox87_xsdata.set_nu_fission( - np.array([2.518600E-02, 4.739509E-03, 2.947805E-02, 1.122500E-01, 5.530301E-02, 1.074999E+00, 1.239298E+00])) -mox87_xsdata.set_chi( - np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) - -fiss_chamber_xsdata = openmc.XSdata('fiss_chamber', groups) -fiss_chamber_xsdata.order = 0 -fiss_chamber_xsdata.set_total( - np.array([1.260320E-01, 2.931600E-01, 2.842500E-01, 2.810200E-01, 3.344600E-01, 5.656400E-01, 1.172140E+00])) -fiss_chamber_xsdata.set_absorption( - np.array([5.11320E-04, 7.58130E-05, 3.16430E-04, 1.16750E-03, 3.39770E-03, 9.18860E-03, 2.32440E-02])) -scatter_matrix = \ - [[[6.616590E-02, 5.907000E-02, 2.833400E-04, 1.462200E-06, 2.064200E-08, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 2.403770E-01, 5.243500E-02, 2.499000E-04, 1.923900E-05, 2.987500E-06, 4.214000E-07], - [0.000000E-00, 0.000000E-00, 1.834250E-01, 9.228800E-02, 6.936500E-03, 1.079000E-03, 2.054300E-04], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 7.907690E-02, 1.699900E-01, 2.586000E-02, 4.925600E-03], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 3.734000E-05, 9.975700E-02, 2.067900E-01, 2.447800E-02], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 9.174200E-04, 3.167740E-01, 2.387600E-01], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 4.979300E-02, 1.09910E+00]]] -scatter_matrix = np.array(scatter_matrix) -scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) -fiss_chamber_xsdata.set_scatter_matrix(scatter_matrix) -fiss_chamber_xsdata.set_fission( - np.array([4.79002E-09, 5.82564E-09, 4.63719E-07, 5.24406E-06, 1.45390E-07, 7.14972E-07, 2.08041E-06])) -fiss_chamber_xsdata.set_nu_fission( - np.array([1.323401E-08, 1.434500E-08, 1.128599E-06, 1.276299E-05, 3.538502E-07, 1.740099E-06, 5.063302E-06])) -fiss_chamber_xsdata.set_chi( - np.array([5.87910E-01, 4.11760E-01, 3.39060E-04, 1.17610E-07, 0.000000E-00, 0.000000E-00, 0.000000E-00])) - -guide_tube_xsdata = openmc.XSdata('guide_tube', groups) -guide_tube_xsdata.order = 0 -guide_tube_xsdata.set_total( - np.array([1.260320E-01, 2.931600E-01, 2.842400E-01, 2.809600E-01, 3.344400E-01, 5.656400E-01, 1.172150E+00])) -guide_tube_xsdata.set_absorption( - np.array([5.11320E-04, 7.58010E-05, 3.15720E-04, 1.15820E-03, 3.39750E-03, 9.18780E-03, 2.32420E-02])) -scatter_matrix = \ - [[[6.616590E-02, 5.907000E-02, 2.833400E-04, 1.462200E-06, 2.064200E-08, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 2.403770E-01, 5.243500E-02, 2.499000E-04, 1.923900E-05, 2.987500E-06, 4.214000E-07], - [0.000000E-00, 0.000000E-00, 1.832970E-01, 9.239700E-02, 6.944600E-03, 1.080300E-03, 2.056700E-04], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 7.885110E-02, 1.701400E-01, 2.588100E-02, 4.929700E-03], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 3.733300E-05, 9.973720E-02, 2.067900E-01, 2.447800E-02], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 9.172600E-04, 3.167650E-01, 2.387700E-01], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 4.979200E-02, 1.099120E+00]]] -scatter_matrix = np.array(scatter_matrix) -scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) -guide_tube_xsdata.set_scatter_matrix(scatter_matrix) - -water_xsdata = openmc.XSdata('water', groups) -water_xsdata.order = 0 -water_xsdata.set_total( - np.array([1.592060E-01, 4.129700E-01, 5.903100E-01, 5.843500E-01, 7.180000E-01, 1.254450E+00, 2.650380E+00])) -water_xsdata.set_absorption( - np.array([6.01050E-04, 1.57930E-05, 3.37160E-04, 1.94060E-03, 5.74160E-03, 1.50010E-02, 3.72390E-02])) -scatter_matrix = \ - [[[4.447770E-02, 1.134000E-01, 7.234700E-04, 3.749900E-06, 5.318400E-08, 0.000000E-00, 0.000000E-00], - [0.000000E-00, 2.823340E-01, 1.299400E-01, 6.234000E-04, 4.800200E-05, 7.448600E-06, 1.045500E-06], - [0.000000E-00, 0.000000E-00, 3.452560E-01, 2.245700E-01, 1.699900E-02, 2.644300E-03, 5.034400E-04], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 9.102840E-02, 4.155100E-01, 6.373200E-02, 1.213900E-02], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 7.143700E-05, 1.391380E-01, 5.118200E-01, 6.122900E-02], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 2.215700E-03, 6.999130E-01, 5.373200E-01], - [0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 0.000000E-00, 1.324400E-01, 2.480700E+00]]] -scatter_matrix = np.array(scatter_matrix) -scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) -water_xsdata.set_scatter_matrix(scatter_matrix) - -control_rod_xsdata = openmc.XSdata('control_rod', groups) -control_rod_xsdata.order = 0 -control_rod_xsdata.set_total( - np.array([2.16768E-01, 4.80098E-01, 8.86369E-01, 9.70009E-01, 9.10482E-01, 1.13775E+00, 1.84048E+00])) -control_rod_xsdata.set_absorption( - np.array([1.70490E-03, 8.36224E-03, 8.37901E-02, 3.97797E-01, 6.98763E-01, 9.29508E-01, 1.17836E+00])) -scatter_matrix = \ - [[[1.70563E-01, 4.44012E-02, 9.83670E-05, 1.27786E-07, 0.00000E-00, 0.00000E-00, 0.00000E-00], - [0.00000E-00, 4.71050E-01, 6.85480E-04, 3.91395E-10, 0.00000E-00, 0.00000E-00, 0.00000E-00], - [0.00000E-00, 0.00000E-00, 8.01859E-01, 7.20132E-04, 0.00000E-00, 0.00000E-00, 0.00000E-00], - [0.00000E-00, 0.00000E-00, 0.00000E-00, 5.70752E-01, 1.46015E-03, 0.00000E-00, 0.00000E-00], - [0.00000E-00, 0.00000E-00, 0.00000E-00, 6.55562E-05, 2.07838E-01, 3.81486E-03, 3.69760E-09], - [0.00000E-00, 0.00000E-00, 0.00000E-00, 0.00000E-00, 1.02427E-03, 2.02465E-01, 4.75290E-03], - [0.00000E-00, 0.00000E-00, 0.00000E-00, 0.00000E-00, 0.00000E-00, 3.53043E-03, 6.58597E-01]]] -scatter_matrix = np.array(scatter_matrix) -scatter_matrix = np.rollaxis(scatter_matrix, 0, 3) -control_rod_xsdata.set_scatter_matrix(scatter_matrix) - -mg_cross_sections_file = openmc.MGXSLibrary(groups) -mg_cross_sections_file.add_xsdatas([uo2_xsdata, mox43_xsdata, mox7_xsdata, mox87_xsdata, - fiss_chamber_xsdata, guide_tube_xsdata, water_xsdata, - control_rod_xsdata]) -mg_cross_sections_file.export_to_hdf5() - -############################################################################### -# Materials -############################################################################### - -# Instantiate some Macroscopic Data -uo2_data = openmc.Macroscopic('uo2') -mox43_data = openmc.Macroscopic('mox43') -mox7_data = openmc.Macroscopic('mox7') -mox87_data = openmc.Macroscopic('mox87') -fiss_chamber_data = openmc.Macroscopic('fiss_chamber') -guide_tube_data = openmc.Macroscopic('guide_tube') -water_data = openmc.Macroscopic('water') -control_rod_data = openmc.Macroscopic('control_rod') - -# Instantiate Materials dictionary -materials = {} - -# Instantiate some Materials and register the appropriate Nuclides -materials['UO2'] = openmc.Material(name='UO2') -materials['UO2'].set_density('macro', 1.0) -materials['UO2'].add_macroscopic(uo2_data) - -materials['MOX 4.3%'] = openmc.Material(name='MOX 4.3%') -materials['MOX 4.3%'].set_density('macro', 1.0) -materials['MOX 4.3%'].add_macroscopic(mox43_data) - -materials['MOX 7.0%'] = openmc.Material(name='MOX 7.0%') -materials['MOX 7.0%'].set_density('macro', 1.0) -materials['MOX 7.0%'].add_macroscopic(mox7_data) - -materials['MOX 8.7%'] = openmc.Material(name='MOX 8.7%') -materials['MOX 8.7%'].set_density('macro', 1.0) -materials['MOX 8.7%'].add_macroscopic(mox87_data) - -materials['Fission Chamber'] = openmc.Material(name='Fission Chamber') -materials['Fission Chamber'].set_density('macro', 1.0) -materials['Fission Chamber'].add_macroscopic(fiss_chamber_data) - -materials['Guide Tube'] = openmc.Material(name='Guide Tube') -materials['Guide Tube'].set_density('macro', 1.0) -materials['Guide Tube'].add_macroscopic(guide_tube_data) - -materials['Water'] = openmc.Material(name='Water') -materials['Water'].set_density('macro', 1.0) -materials['Water'].add_macroscopic(water_data) - -materials['Control Rod'] = openmc.Material(name='Control Rod') -materials['Control Rod'].set_density('macro', 1.0) -materials['Control Rod'].add_macroscopic(control_rod_data) - -# Instantiate a Materials collection, register all Materials, and export to XML -materials_file = openmc.Materials(materials.values()) -materials_file.cross_sections = './mgxs.h5' - -############################################################################### -# Surfaces -############################################################################### - -# Create a dictionary to store the surfaces -surfaces = {} - -# Instantiate Pin Cell ZCylinder surface -surfaces['Pin Cell ZCylinder'] = openmc.ZCylinder(x0=0, y0=0, r=0.54, name='Pin Cell ZCylinder') -surfaces['Core x-min'] = openmc.XPlane(x0=-32.13, name='Core x-min') -surfaces['Core x-max'] = openmc.XPlane(x0= 32.13, name='Core x-max') -surfaces['Core y-min'] = openmc.YPlane(y0=-32.13, name='Core y-min') -surfaces['Core y-max'] = openmc.YPlane(y0= 32.13, name='Core y-max') -surfaces['Small Core z-min'] = openmc.ZPlane(z0=z_min, name='Small Core z-min') -surfaces['Small Core z-max'] = openmc.ZPlane(z0=z_max, name='Small Core z-max') -surfaces['Big Core z-min'] = openmc.ZPlane(z0=-107.1, name='Big Core z-min') -surfaces['Big Core z-max'] = openmc.ZPlane(z0= 107.1, name='Big Core z-max') -surfaces['Pin x-min'] = openmc.XPlane(x0=-0.63, name='Pin x-min') -surfaces['Pin x-max'] = openmc.XPlane(x0=+0.63, name='Pin x-max') -surfaces['Pin y-min'] = openmc.YPlane(y0=-0.63, name='Pin y-min') -surfaces['Pin y-max'] = openmc.YPlane(y0=+0.63, name='Pin y-max') - -surfaces['Core x-max'].boundary_type = 'vacuum' -surfaces['Core y-min'].boundary_type = 'vacuum' -surfaces['Core y-max'].boundary_type = 'reflective' -surfaces['Small Core z-min'].boundary_type = 'reflective' -surfaces['Small Core z-max'].boundary_type = 'reflective' -surfaces['Big Core z-min'].boundary_type = 'reflective' -surfaces['Big Core z-max'].boundary_type = 'vacuum' -surfaces['Pin x-min'].boundary_type = 'reflective' -surfaces['Pin x-max'].boundary_type = 'reflective' -surfaces['Pin y-min'].boundary_type = 'reflective' -surfaces['Pin y-max'].boundary_type = 'reflective' -surfaces['Core x-min'].boundary_type = 'reflective' - -############################################################################### -# Cells -############################################################################### - -# Instantiate Cells -cells = {} -cells['UO2'] = openmc.Cell(name='UO2') -cells['MOX 4.3%'] = openmc.Cell(name='MOX 4.3%') -cells['MOX 7.0%'] = openmc.Cell(name='MOX 7.0%') -cells['MOX 8.7%'] = openmc.Cell(name='MOX 8.7%') -cells['Fission Chamber'] = openmc.Cell(name='Fission Chamber') -cells['Guide Tube'] = openmc.Cell(name='Guide Tube') -cells['Reflector'] = openmc.Cell(name='Reflector') -cells['Control Rod'] = openmc.Cell(name='Control Rod') -cells['UO2 Moderator'] = openmc.Cell(name='UO2 Moderator') -cells['MOX 4.3% Moderator'] = openmc.Cell(name='MOX 4.3% Moderator') -cells['MOX 7.0% Moderator'] = openmc.Cell(name='MOX 7.0% Moderator') -cells['MOX 8.7% Moderator'] = openmc.Cell(name='MOX 8.7% Moderator') -cells['Fission Chamber Moderator'] = openmc.Cell(name='Fission Chamber Moderator') -cells['Guide Tube Moderator'] = openmc.Cell(name='Guide Tube Moderator') -cells['Control Rod Moderator'] = openmc.Cell(name='Control Rod Moderator') -cells['UO2 Unrodded Assembly'] = openmc.Cell(name='UO2 Unrodded Assembly') -cells['UO2 Rodded Assembly'] = openmc.Cell(name='UO2 Rodded Assembly') -cells['MOX Unrodded Assembly'] = openmc.Cell(name='MOX Unrodded Assembly') -cells['MOX Rodded Assembly'] = openmc.Cell(name='MOX Rodded Assembly') -cells['Reflector Unrodded Assembly'] = openmc.Cell(name='Water Unrodded Assembly') -cells['Reflector Rodded Assembly'] = openmc.Cell(name='Water Rodded Assembly') -cells['Core'] = openmc.Cell(name='Core') -cells['UO2 Pin'] = openmc.Cell(name='UO2 Pin') - -cells['Reflector'] = openmc.Cell(name='Reflector') - -# Use surface half-spaces to define regions -cells['UO2'].region = -surfaces['Pin Cell ZCylinder'] -cells['MOX 4.3%'].region = -surfaces['Pin Cell ZCylinder'] -cells['MOX 7.0%'].region = -surfaces['Pin Cell ZCylinder'] -cells['MOX 8.7%'].region = -surfaces['Pin Cell ZCylinder'] -cells['Fission Chamber'].region = -surfaces['Pin Cell ZCylinder'] -cells['Guide Tube'].region = -surfaces['Pin Cell ZCylinder'] -cells['Control Rod'].region = -surfaces['Pin Cell ZCylinder'] -cells['UO2 Moderator'].region = +surfaces['Pin Cell ZCylinder'] -cells['MOX 4.3% Moderator'].region = +surfaces['Pin Cell ZCylinder'] -cells['MOX 7.0% Moderator'].region = +surfaces['Pin Cell ZCylinder'] -cells['MOX 8.7% Moderator'].region = +surfaces['Pin Cell ZCylinder'] -cells['Fission Chamber Moderator'].region = +surfaces['Pin Cell ZCylinder'] -cells['Guide Tube Moderator'].region = +surfaces['Pin Cell ZCylinder'] -cells['Control Rod Moderator'].region = +surfaces['Pin Cell ZCylinder'] -cells['UO2 Pin'].region = +surfaces['Pin Cell ZCylinder'] & \ - +surfaces['Pin x-min'] & \ - -surfaces['Pin x-max'] & \ - +surfaces['Pin y-min'] & \ - -surfaces['Pin y-max'] - -# Register Materials with Cells -cells['UO2'].fill = materials['UO2'] -cells['MOX 4.3%'].fill = materials['MOX 4.3%'] -cells['MOX 7.0%'].fill = materials['MOX 7.0%'] -cells['MOX 8.7%'].fill = materials['MOX 8.7%'] -cells['Fission Chamber'].fill = materials['Fission Chamber'] -cells['Guide Tube'].fill = materials['Guide Tube'] -cells['Control Rod'].fill = materials['Control Rod'] -cells['UO2 Moderator'].fill = materials['Water'] -cells['MOX 4.3% Moderator'].fill = materials['Water'] -cells['MOX 7.0% Moderator'].fill = materials['Water'] -cells['MOX 8.7% Moderator'].fill = materials['Water'] -cells['Fission Chamber Moderator'].fill = materials['Water'] -cells['Guide Tube Moderator'].fill = materials['Water'] -cells['Control Rod Moderator'].fill = materials['Water'] -cells['Reflector'].fill = materials['Water'] -cells['UO2 Pin'].fill = materials['Water'] - -############################################################################### -# Universes -############################################################################### - -# Instantiate Universes -universes = {} -universes['Root'] = openmc.Universe(universe_id=0, name='Root') -universes['UO2'] = openmc.Universe(universe_id=1, name='UO2') -universes['MOX 4.3%'] = openmc.Universe(universe_id=2, name='MOX 4.3%') -universes['MOX 7.0%'] = openmc.Universe(universe_id=3, name='MOX 7.0%') -universes['MOX 8.7%'] = openmc.Universe(universe_id=4, name='MOX 8.7%') -universes['Fission Chamber'] = openmc.Universe(universe_id=5, name='Fission Chamber') -universes['Guide Tube'] = openmc.Universe(universe_id=6, name='Guide Tube') -universes['Control Rod'] = openmc.Universe(universe_id=7, name='Control Rod') -universes['Reflector'] = openmc.Universe(universe_id=8, name='Reflector') -universes['UO2 Unrodded Assembly'] = openmc.Universe(universe_id=9, name='UO2 Unrodded Assembly') -universes['UO2 Rodded Assembly'] = openmc.Universe(universe_id=10, name='UO2 Rodded Assembly') -universes['MOX Unrodded Assembly'] = openmc.Universe(universe_id=11, name='MOX Unrodded Assembly') -universes['MOX Rodded Assembly'] = openmc.Universe(universe_id=12, name='MOX Rodded Assembly') -universes['Reflector Unrodded Assembly'] = openmc.Universe(universe_id=13, name='Reflector Unrodded Assembly') -universes['Reflector Rodded Assembly'] = openmc.Universe(universe_id=14, name='Reflector Rodded Assembly') - -universes['Reflector'] = openmc.Universe(name='Reflector') - - -# Register Cells with Universes -universes['Root'] .add_cell(cells['Core']) -universes['UO2'] .add_cells([cells['UO2'], cells['UO2 Moderator']]) -universes['MOX 4.3%'] .add_cells([cells['MOX 4.3%'], cells['MOX 4.3% Moderator']]) -universes['MOX 7.0%'] .add_cells([cells['MOX 7.0%'], cells['MOX 7.0% Moderator']]) -universes['MOX 8.7%'] .add_cells([cells['MOX 8.7%'], cells['MOX 8.7% Moderator']]) -universes['Fission Chamber'] .add_cells([cells['Fission Chamber'], cells['Fission Chamber Moderator']]) -universes['Guide Tube'] .add_cells([cells['Guide Tube'], cells['Guide Tube Moderator']]) -universes['Control Rod'] .add_cells([cells['Control Rod'], cells['Control Rod Moderator']]) -universes['Reflector'] .add_cell(cells['Reflector']) -universes['UO2 Unrodded Assembly'] .add_cell(cells['UO2 Unrodded Assembly']) -universes['UO2 Rodded Assembly'] .add_cell(cells['UO2 Rodded Assembly']) -universes['MOX Unrodded Assembly'] .add_cell(cells['MOX Unrodded Assembly']) -universes['MOX Rodded Assembly'] .add_cell(cells['MOX Rodded Assembly']) -universes['Reflector Unrodded Assembly'].add_cell(cells['Reflector Unrodded Assembly']) -universes['Reflector Rodded Assembly'] .add_cell(cells['Reflector Rodded Assembly']) - -universes['Reflector'] .add_cell(cells['Reflector']) - -############################################################################### -# Subdivided Pincells -############################################################################### - - -pins_to_make = ['UO2', 'MOX 4.3%', 'MOX 7.0%', 'MOX 8.7%', 'Fission Chamber', 'Guide Tube', 'Control Rod'] -for pin in pins_to_make: - universes[pin] = pinmaker(materials[pin], materials['Water'], 0.54) - -############################################################################### -# Create a dictionary of the assembly lattices -############################################################################### - -# Instantiate the Lattices -lattices = {} -lattices['UO2 Unrodded Assembly'] = \ - openmc.RectLattice(lattice_id=101, name='UO2 Unrodded Assembly') -lattices['UO2 Unrodded Assembly'].dimension = [17, 17] -lattices['UO2 Unrodded Assembly'].lower_left = [-10.71, -10.71] -lattices['UO2 Unrodded Assembly'].pitch = [1.26, 1.26] -u = universes['UO2'] -g = universes['Guide Tube'] -f = universes['Fission Chamber'] -lattices['UO2 Unrodded Assembly'].universes = \ - [[u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, g, u, u, g, u, u, g, u, u, u, u, u], - [u, u, u, g, u, u, u, u, u, u, u, u, u, g, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, g, u, u, g, u, u, g, u, u, g, u, u, g, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, g, u, u, g, u, u, f, u, u, g, u, u, g, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, g, u, u, g, u, u, g, u, u, g, u, u, g, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, g, u, u, u, u, u, u, u, u, u, g, u, u, u], - [u, u, u, u, u, g, u, u, g, u, u, g, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u]] - -lattices['UO2 Rodded Assembly'] = \ - openmc.RectLattice(lattice_id=102, name='UO2 Rodded Assembly') -lattices['UO2 Rodded Assembly'].dimension = [17, 17] -lattices['UO2 Rodded Assembly'].lower_left = [-10.71, -10.71] -lattices['UO2 Rodded Assembly'].pitch = [1.26, 1.26] -u = universes['UO2'] -r = universes['Control Rod'] -f = universes['Fission Chamber'] -lattices['UO2 Rodded Assembly'].universes = \ - [[u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, r, u, u, r, u, u, r, u, u, u, u, u], - [u, u, u, r, u, u, u, u, u, u, u, u, u, r, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, r, u, u, r, u, u, r, u, u, r, u, u, r, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, r, u, u, r, u, u, f, u, u, r, u, u, r, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, r, u, u, r, u, u, r, u, u, r, u, u, r, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, r, u, u, u, u, u, u, u, u, u, r, u, u, u], - [u, u, u, u, u, r, u, u, r, u, u, r, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u]] - -lattices['MOX Unrodded Assembly'] = \ - openmc.RectLattice(lattice_id=103, name='MOX Unrodded Assembly') -lattices['MOX Unrodded Assembly'].dimension = [17, 17] -lattices['MOX Unrodded Assembly'].lower_left = [-10.71, -10.71] -lattices['MOX Unrodded Assembly'].pitch = [1.26, 1.26] -m = universes['MOX 4.3%'] -n = universes['MOX 7.0%'] -o = universes['MOX 8.7%'] -g = universes['Guide Tube'] -f = universes['Fission Chamber'] -lattices['MOX Unrodded Assembly'].universes = \ - [[m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m], - [m, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, m], - [m, n, n, n, n, g, n, n, g, n, n, g, n, n, n, n, m], - [m, n, n, g, n, o, o, o, o, o, o, o, n, g, n, n, m], - [m, n, n, n, o, o, o, o, o, o, o, o, o, n, n, n, m], - [m, n, g, o, o, g, o, o, g, o, o, g, o, o, g, n, m], - [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], - [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], - [m, n, g, o, o, g, o, o, f, o, o, g, o, o, g, n, m], - [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], - [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], - [m, n, g, o, o, g, o, o, g, o, o, g, o, o, g, n, m], - [m, n, n, n, o, o, o, o, o, o, o, o, o, n, n, n, m], - [m, n, n, g, n, o, o, o, o, o, o, o, n, g, n, n, m], - [m, n, n, n, n, g, n, n, g, n, n, g, n, n, n, n, m], - [m, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, m], - [m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m]] - -lattices['MOX Rodded Assembly'] = \ - openmc.RectLattice(lattice_id=104, name='MOX Rodded Assembly') -lattices['MOX Rodded Assembly'].dimension = [17, 17] -lattices['MOX Rodded Assembly'].lower_left = [-10.71, -10.71] -lattices['MOX Rodded Assembly'].pitch = [1.26, 1.26] -m = universes['MOX 4.3%'] -n = universes['MOX 7.0%'] -o = universes['MOX 8.7%'] -r = universes['Control Rod'] -f = universes['Fission Chamber'] -lattices['MOX Rodded Assembly'].universes = \ - [[m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m], - [m, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, m], - [m, n, n, n, n, r, n, n, r, n, n, r, n, n, n, n, m], - [m, n, n, r, n, o, o, o, o, o, o, o, n, r, n, n, m], - [m, n, n, n, o, o, o, o, o, o, o, o, o, n, n, n, m], - [m, n, r, o, o, r, o, o, r, o, o, r, o, o, r, n, m], - [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], - [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], - [m, n, r, o, o, r, o, o, f, o, o, r, o, o, r, n, m], - [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], - [m, n, n, o, o, o, o, o, o, o, o, o, o, o, n, n, m], - [m, n, r, o, o, r, o, o, r, o, o, r, o, o, r, n, m], - [m, n, n, n, o, o, o, o, o, o, o, o, o, n, n, n, m], - [m, n, n, r, n, o, o, o, o, o, o, o, n, r, n, n, m], - [m, n, n, n, n, r, n, n, r, n, n, r, n, n, n, n, m], - [m, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, m], - [m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m]] - -lattices['Reflector Unrodded Assembly'] = \ - openmc.RectLattice(lattice_id=105, name='Reflector Unrodded Assembly') -lattices['Reflector Unrodded Assembly'].dimension = [1, 1] -lattices['Reflector Unrodded Assembly'].lower_left = [-10.71, -10.71] -lattices['Reflector Unrodded Assembly'].pitch = [21.42, 21.42] -w = universes['Reflector'] -lattices['Reflector Unrodded Assembly'].universes = [[w]] - - - -lattices['Reflector Rodded Assembly'] = \ - openmc.RectLattice(lattice_id=106, name='Reflector Rodded Assembly') -lattices['Reflector Rodded Assembly'].dimension = [17, 17] -lattices['Reflector Rodded Assembly'].lower_left = [-10.71, -10.71] -lattices['Reflector Rodded Assembly'].pitch = [1.26, 1.26] -u = universes['Reflector'] -r = universes['Control Rod'] -lattices['Reflector Rodded Assembly'].universes = \ - [[u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, r, u, u, r, u, u, r, u, u, u, u, u], - [u, u, u, r, u, u, u, u, u, u, u, u, u, r, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, r, u, u, r, u, u, r, u, u, r, u, u, r, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, r, u, u, r, u, u, u, u, u, r, u, u, r, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, r, u, u, r, u, u, r, u, u, r, u, u, r, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, r, u, u, u, u, u, u, u, u, u, r, u, u, u], - [u, u, u, u, u, r, u, u, r, u, u, r, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u], - [u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u, u]] - -# Add lattice to cells -cells['UO2 Unrodded Assembly'].fill = lattices['UO2 Unrodded Assembly'] -cells['UO2 Rodded Assembly'].fill = lattices['UO2 Rodded Assembly'] -cells['MOX Unrodded Assembly'].fill = lattices['MOX Unrodded Assembly'] -cells['MOX Rodded Assembly'].fill = lattices['MOX Rodded Assembly'] -cells['Reflector Unrodded Assembly'].fill = lattices['Reflector Unrodded Assembly'] -cells['Reflector Rodded Assembly'].fill = lattices['Reflector Rodded Assembly'] - -############################################################################### -# Base Universe -############################################################################### - -# Instantiate Core boundaries -#cells['Core'].region = +surfaces['Core x-min'] & +surfaces['Core y-min'] & \ -# -surfaces['Core x-max'] & -surfaces['Core y-max'] - -cells['Core'].region = +surfaces['Core x-min'] & +surfaces['Core y-min'] & \ - -surfaces['Core x-max'] & -surfaces['Core y-max'] & +surfaces['Small Core z-min'] & -surfaces['Small Core z-max'] - -lattices['Core'] = openmc.RectLattice(lattice_id=201, name='3x3 core lattice') -lattices['Core'].dimension = [3, 3] -lattices['Core'].lower_left = [-32.13, -32.13] -lattices['Core'].pitch = [21.42, 21.42] -w = universes['Reflector Unrodded Assembly'] -u = universes['UO2 Unrodded Assembly'] -m = universes['MOX Unrodded Assembly'] -r = universes['Reflector'] -lattices['Core'].universes = [[u, m, r], [m, u, r], [r, r, r]] -cells['Core'].fill = lattices['Core'] - -# Instantiate a Geometry, register the root Universe, and export to XML -geometry = openmc.Geometry() -geometry.root_universe = universes['Root'] -geometry.remove_redundant_surfaces() - - - -############################################################################### -# Tallies -############################################################################### - -tallies = {} - -# Instantiate a tally mesh -mesh = openmc.RegularMesh(mesh_id=1) -mesh.dimension = [51, 51] -mesh.lower_left = [-32.13, -32.13] -mesh.upper_right = [32.13, 32.13] - -# Instantiate some tally Filters -mesh_filter = openmc.MeshFilter(mesh) - -# Instantiate the Tally -tallies['Mesh Rates'] = openmc.Tally(name='power') -tallies['Mesh Rates'].filters = [mesh_filter] -tallies['Mesh Rates'].scores = ['fission',] - -# Instantiate a Tallies, register Tally/Mesh, and export to XML -tallies_file = openmc.Tallies(tallies.values()) - -############################################################################### -# Random Ray Mesh Overlay for SR Subdivision -############################################################################### - -subdivision_mesh = openmc.RegularMesh() -subdivision_mesh.dimension = [d * mesh_resolution_multiplier for d in mesh.dimension] -subdivision_mesh.lower_left = mesh.lower_left -subdivision_mesh.upper_right = mesh.upper_right - -domain = geometry.root_universe -settings_file.random_ray['source_region_meshes'] = [(subdivision_mesh, [domain])] - -############################################################################### -# Model -############################################################################### - -model = openmc.model.Model() -model.geometry = geometry -model.materials = materials_file -model.settings = settings_file -model.xs_data = mg_cross_sections_file -model.tallies = tallies_file -model.plots = plot_file - -model.export_to_model_xml() diff --git a/examples/2D_c5g7_python_mesh/output.txt b/examples/2D_c5g7_python_mesh/output.txt deleted file mode 100644 index 80304db0a67..00000000000 --- a/examples/2D_c5g7_python_mesh/output.txt +++ /dev/null @@ -1,4498 +0,0 @@ - %%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%% - ############### %%%%%%%%%%%%%%%%%%%%%%%% - ################## %%%%%%%%%%%%%%%%%%%%%%% - ################### %%%%%%%%%%%%%%%%%%%%%%% - #################### %%%%%%%%%%%%%%%%%%%%%% - ##################### %%%%%%%%%%%%%%%%%%%%% - ###################### %%%%%%%%%%%%%%%%%%%% - ####################### %%%%%%%%%%%%%%%%%% - ####################### %%%%%%%%%%%%%%%%% - ###################### %%%%%%%%%%%%%%%%% - #################### %%%%%%%%%%%%%%%%% - ################# %%%%%%%%%%%%%%%%% - ############### %%%%%%%%%%%%%%%% - ############ %%%%%%%%%%%%%%% - ######## %%%%%%%%%%%%%% - %%%%%%%%%%% - - | The OpenMC Monte Carlo Code - Copyright | 2011-2026 MIT, UChicago Argonne LLC, and contributors - License | https://docs.openmc.org/en/latest/license.html - Version | 0.15.3-dev145 - Commit Hash | 66bf2167757266738d6b01e26b7907dcd43ef890 - Date/Time | 2026-07-07 15:58:23 - MPI Processes | 60 - OpenMP Threads | 1 - - Reading model XML file 'model.xml' ... - Reading cross sections HDF5 file... - Loading cross section data... - Loading uo2 data... - Loading mox43 data... - Loading mox7 data... - Loading mox87 data... - Loading fiss_chamber data... - Loading guide_tube data... - Loading water data... - Loading control_rod data... - Preparing distributed cell instances... - - ==========> K EIGENVALUE SIMULATION (RANDOM RAY SOLVER) <========== - - Bat./Gen. k Entropy Average k - ========= ======== ======== ==================== -Calculating 7500 grid points for Voronoi tessellation... -Lloyd's algorithm converged in 37 iterations. -SR ID: 337, mesh bin: 96071 is being transferred from rank 2 to rank 3. -SR ID: 337, mesh bin: 96072 is being transferred from rank 2 to rank 3. -SR ID: 337, mesh bin: 96070 is being transferred from rank 2 to rank 3. -SR ID: 879, mesh bin: 97482 is being transferred from rank 2 to rank 3. -SR ID: 879, mesh bin: 97483 is being transferred from rank 2 to rank 3. -SR ID: 877, mesh bin: 99246 is being transferred from rank 2 to rank 3. -SR ID: 879, mesh bin: 97484 is being transferred from rank 2 to rank 3. -SR ID: 877, mesh bin: 99247 is being transferred from rank 2 to rank 3. -SR ID: 864, mesh bin: 96424 is being transferred from rank 2 to rank 3. -SR ID: 878, mesh bin: 98188 is being transferred from rank 2 to rank 3. -SR ID: 2274, mesh bin: 97837 is being transferred from rank 2 to rank 3. -SR ID: 863, mesh bin: 97129 is being transferred from rank 2 to rank 3. -SR ID: 863, mesh bin: 97130 is being transferred from rank 2 to rank 3. -SR ID: 863, mesh bin: 97131 is being transferred from rank 2 to rank 3. -SR ID: 863, mesh bin: 97128 is being transferred from rank 2 to rank 3. -SR ID: 349, mesh bin: 99248 is being transferred from rank 2 to rank 3. -SR ID: 349, mesh bin: 99247 is being transferred from rank 2 to rank 3. -SR ID: 2178, mesh bin: 98190 is being transferred from rank 2 to rank 3. -SR ID: 2178, mesh bin: 98189 is being transferred from rank 2 to rank 3. -SR ID: 864, mesh bin: 97132 is being transferred from rank 2 to rank 3. -SR ID: 350, mesh bin: 98188 is being transferred from rank 2 to rank 3. -SR ID: 350, mesh bin: 98187 is being transferred from rank 2 to rank 3. -SR ID: 350, mesh bin: 98186 is being transferred from rank 2 to rank 3. -SR ID: 349, mesh bin: 98894 is being transferred from rank 2 to rank 3. -SR ID: 349, mesh bin: 98895 is being transferred from rank 2 to rank 3. -SR ID: 349, mesh bin: 98893 is being transferred from rank 2 to rank 3. -SR ID: 864, mesh bin: 96776 is being transferred from rank 2 to rank 3. -SR ID: 2274, mesh bin: 97481 is being transferred from rank 2 to rank 3. -SR ID: 865, mesh bin: 96425 is being transferred from rank 2 to rank 3. -SR ID: 336, mesh bin: 96776 is being transferred from rank 2 to rank 3. -SR ID: 336, mesh bin: 96778 is being transferred from rank 2 to rank 3. -SR ID: 336, mesh bin: 96777 is being transferred from rank 2 to rank 3. -SR ID: 350, mesh bin: 98542 is being transferred from rank 2 to rank 3. -SR ID: 350, mesh bin: 98541 is being transferred from rank 2 to rank 3. -SR ID: 350, mesh bin: 98540 is being transferred from rank 2 to rank 3. -SR ID: 350, mesh bin: 98539 is being transferred from rank 2 to rank 3. -SR ID: 877, mesh bin: 98895 is being transferred from rank 2 to rank 3. -SR ID: 336, mesh bin: 96422 is being transferred from rank 2 to rank 3. -SR ID: 336, mesh bin: 96423 is being transferred from rank 2 to rank 3. -SR ID: 2178, mesh bin: 97836 is being transferred from rank 2 to rank 3. -SR ID: 2178, mesh bin: 97835 is being transferred from rank 2 to rank 3. -SR ID: 2178, mesh bin: 97834 is being transferred from rank 2 to rank 3. -SR ID: 337, mesh bin: 96425 is being transferred from rank 2 to rank 3. -SR ID: 2178, mesh bin: 97837 is being transferred from rank 2 to rank 3. -SR ID: 1403, mesh bin: 81054 is being transferred from rank 3 to rank 4. -SR ID: 1403, mesh bin: 81055 is being transferred from rank 3 to rank 4. -SR ID: 1403, mesh bin: 81057 is being transferred from rank 3 to rank 4. -SR ID: 1403, mesh bin: 81058 is being transferred from rank 3 to rank 4. -SR ID: 1403, mesh bin: 81059 is being transferred from rank 3 to rank 4. -SR ID: 1404, mesh bin: 81066 is being transferred from rank 3 to rank 4. -SR ID: 1404, mesh bin: 81063 is being transferred from rank 3 to rank 4. -SR ID: 1404, mesh bin: 81062 is being transferred from rank 3 to rank 4. -SR ID: 1404, mesh bin: 81065 is being transferred from rank 3 to rank 4. -SR ID: 1404, mesh bin: 81064 is being transferred from rank 3 to rank 4. -SR ID: 1404, mesh bin: 81061 is being transferred from rank 3 to rank 4. -SR ID: 1404, mesh bin: 81060 is being transferred from rank 3 to rank 4. -SR ID: 1405, mesh bin: 81067 is being transferred from rank 3 to rank 4. -SR ID: 1602, mesh bin: 80689 is being transferred from rank 3 to rank 4. -SR ID: 1605, mesh bin: 81430 is being transferred from rank 3 to rank 4. -SR ID: 1405, mesh bin: 81430 is being transferred from rank 3 to rank 4. -SR ID: 1405, mesh bin: 81428 is being transferred from rank 3 to rank 4. -SR ID: 1405, mesh bin: 81429 is being transferred from rank 3 to rank 4. -SR ID: 1405, mesh bin: 81427 is being transferred from rank 3 to rank 4. -SR ID: 1402, mesh bin: 80690 is being transferred from rank 3 to rank 4. -SR ID: 1402, mesh bin: 80689 is being transferred from rank 3 to rank 4. -SR ID: 1402, mesh bin: 80694 is being transferred from rank 3 to rank 4. -SR ID: 1402, mesh bin: 80693 is being transferred from rank 3 to rank 4. -SR ID: 1402, mesh bin: 80692 is being transferred from rank 3 to rank 4. -SR ID: 1402, mesh bin: 80691 is being transferred from rank 3 to rank 4. -SR ID: 1402, mesh bin: 80695 is being transferred from rank 3 to rank 4. -SR ID: 1234, mesh bin: 80688 is being transferred from rank 3 to rank 4. -SR ID: 1234, mesh bin: 80682 is being transferred from rank 3 to rank 4. -SR ID: 1106, mesh bin: 80688 is being transferred from rank 3 to rank 4. -SR ID: 1106, mesh bin: 80687 is being transferred from rank 3 to rank 4. -SR ID: 1106, mesh bin: 80686 is being transferred from rank 3 to rank 4. -SR ID: 1106, mesh bin: 80685 is being transferred from rank 3 to rank 4. -SR ID: 1106, mesh bin: 80684 is being transferred from rank 3 to rank 4. -SR ID: 1106, mesh bin: 80683 is being transferred from rank 3 to rank 4. -SR ID: 1605, mesh bin: 81067 is being transferred from rank 3 to rank 4. -SR ID: 1604, mesh bin: 81066 is being transferred from rank 3 to rank 4. -SR ID: 1604, mesh bin: 81060 is being transferred from rank 3 to rank 4. -SR ID: 1603, mesh bin: 81059 is being transferred from rank 3 to rank 4. -SR ID: 2051, mesh bin: 100172 is being transferred from rank 9 to rank 0. -SR ID: 2040, mesh bin: 99814 is being transferred from rank 9 to rank 0. -SR ID: 2040, mesh bin: 99815 is being transferred from rank 9 to rank 0. -SR ID: 2039, mesh bin: 98741 is being transferred from rank 9 to rank 0. -SR ID: 1851, mesh bin: 100530 is being transferred from rank 9 to rank 0. -SR ID: 1832, mesh bin: 96953 is being transferred from rank 9 to rank 0. -SR ID: 2040, mesh bin: 99457 is being transferred from rank 9 to rank 0. -SR ID: 1839, mesh bin: 98383 is being transferred from rank 9 to rank 0. -SR ID: 1839, mesh bin: 98384 is being transferred from rank 9 to rank 0. -SR ID: 2040, mesh bin: 99099 is being transferred from rank 9 to rank 0. -SR ID: 1839, mesh bin: 98026 is being transferred from rank 9 to rank 0. -SR ID: 2032, mesh bin: 97311 is being transferred from rank 9 to rank 0. -SR ID: 1851, mesh bin: 100887 is being transferred from rank 9 to rank 0. -SR ID: 1851, mesh bin: 100888 is being transferred from rank 9 to rank 0. -SR ID: 1832, mesh bin: 97310 is being transferred from rank 9 to rank 0. -SR ID: 1832, mesh bin: 97311 is being transferred from rank 9 to rank 0. -SR ID: 1832, mesh bin: 96238 is being transferred from rank 9 to rank 0. -SR ID: 2040, mesh bin: 98742 is being transferred from rank 9 to rank 0. -SR ID: 1851, mesh bin: 100172 is being transferred from rank 9 to rank 0. -SR ID: 1832, mesh bin: 96595 is being transferred from rank 9 to rank 0. -SR ID: 2039, mesh bin: 97668 is being transferred from rank 9 to rank 0. -SR ID: 2304, mesh bin: 105114 is being transferred from rank 9 to rank 11. -SR ID: 1854, mesh bin: 104042 is being transferred from rank 9 to rank 11. -SR ID: 2208, mesh bin: 105471 is being transferred from rank 9 to rank 11. -SR ID: 1873, mesh bin: 108329 is being transferred from rank 9 to rank 11. -SR ID: 1873, mesh bin: 109400 is being transferred from rank 9 to rank 11. -SR ID: 1854, mesh bin: 104399 is being transferred from rank 9 to rank 11. -SR ID: 1854, mesh bin: 103327 is being transferred from rank 9 to rank 11. -SR ID: 2208, mesh bin: 105828 is being transferred from rank 9 to rank 11. -SR ID: 2054, mesh bin: 104756 is being transferred from rank 9 to rank 11. -SR ID: 1873, mesh bin: 109043 is being transferred from rank 9 to rank 11. -SR ID: 2084, mesh bin: 110115 is being transferred from rank 9 to rank 11. -SR ID: 1854, mesh bin: 103685 is being transferred from rank 9 to rank 11. -SR ID: 2073, mesh bin: 107614 is being transferred from rank 9 to rank 11. -SR ID: 1873, mesh bin: 108686 is being transferred from rank 9 to rank 11. -SR ID: 2073, mesh bin: 109758 is being transferred from rank 9 to rank 11. -SR ID: 2208, mesh bin: 106900 is being transferred from rank 9 to rank 11. -SR ID: 2208, mesh bin: 105114 is being transferred from rank 9 to rank 11. -SR ID: 2304, mesh bin: 107257 is being transferred from rank 9 to rank 11. -SR ID: 2208, mesh bin: 107257 is being transferred from rank 9 to rank 11. -SR ID: 1873, mesh bin: 107614 is being transferred from rank 9 to rank 11. -SR ID: 1092, mesh bin: 64265 is being transferred from rank 13 to rank 4. -SR ID: 1092, mesh bin: 64264 is being transferred from rank 13 to rank 4. -SR ID: 1092, mesh bin: 64261 is being transferred from rank 13 to rank 4. -SR ID: 1092, mesh bin: 64263 is being transferred from rank 13 to rank 4. -SR ID: 1092, mesh bin: 64262 is being transferred from rank 13 to rank 4. -SR ID: 2135, mesh bin: 64275 is being transferred from rank 13 to rank 4. -SR ID: 2135, mesh bin: 64276 is being transferred from rank 13 to rank 4. -SR ID: 2135, mesh bin: 64277 is being transferred from rank 13 to rank 4. -SR ID: 2135, mesh bin: 64278 is being transferred from rank 13 to rank 4. -SR ID: 1366, mesh bin: 64272 is being transferred from rank 13 to rank 4. -SR ID: 1366, mesh bin: 64271 is being transferred from rank 13 to rank 4. -SR ID: 1366, mesh bin: 64270 is being transferred from rank 13 to rank 4. -SR ID: 1366, mesh bin: 64269 is being transferred from rank 13 to rank 4. -SR ID: 1366, mesh bin: 64268 is being transferred from rank 13 to rank 4. -SR ID: 2231, mesh bin: 64274 is being transferred from rank 13 to rank 4. -SR ID: 2231, mesh bin: 64275 is being transferred from rank 13 to rank 4. -SR ID: 2231, mesh bin: 64279 is being transferred from rank 13 to rank 4. -SR ID: 2231, mesh bin: 64280 is being transferred from rank 13 to rank 4. -SR ID: 1566, mesh bin: 64273 is being transferred from rank 13 to rank 4. -SR ID: 1566, mesh bin: 64272 is being transferred from rank 13 to rank 4. -SR ID: 1566, mesh bin: 64268 is being transferred from rank 13 to rank 4. -SR ID: 1566, mesh bin: 64267 is being transferred from rank 13 to rank 4. -SR ID: 1764, mesh bin: 64649 is being transferred from rank 13 to rank 4. -SR ID: 1764, mesh bin: 64648 is being transferred from rank 13 to rank 4. -SR ID: 1764, mesh bin: 64647 is being transferred from rank 13 to rank 4. -SR ID: 1220, mesh bin: 64266 is being transferred from rank 13 to rank 4. -SR ID: 1220, mesh bin: 64260 is being transferred from rank 13 to rank 4. -SR ID: 1964, mesh bin: 64645 is being transferred from rank 13 to rank 4. -SR ID: 1964, mesh bin: 64651 is being transferred from rank 13 to rank 4. -SR ID: 1964, mesh bin: 64650 is being transferred from rank 13 to rank 4. -SR ID: 1964, mesh bin: 64649 is being transferred from rank 13 to rank 4. -SR ID: 2232, mesh bin: 64652 is being transferred from rank 13 to rank 4. -SR ID: 2232, mesh bin: 64653 is being transferred from rank 13 to rank 4. -SR ID: 1963, mesh bin: 64282 is being transferred from rank 13 to rank 4. -SR ID: 1963, mesh bin: 64281 is being transferred from rank 13 to rank 4. -SR ID: 4, mesh bin: 100564 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 96645 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 96646 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 94508 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 99496 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 99495 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 95577 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 95576 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 97358 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 93439 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 101277 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 98427 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 96289 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 112360 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112362 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 99139 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 94152 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 94151 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 95221 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 95220 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 93083 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 100208 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 100920 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 95933 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 97002 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 112017 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112013 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112012 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112015 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112014 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112009 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112008 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112011 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112010 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112005 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 112006 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 94864 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 99852 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 97714 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 98783 is being transferred from rank 0 to rank 14. -SR ID: 4, mesh bin: 111669 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 111668 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 111665 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 111664 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 111667 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 111666 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 111662 is being transferred from rank 12 to rank 14. -SR ID: 4, mesh bin: 93795 is being transferred from rank 0 to rank 14. -SR ID: 1780, mesh bin: 66489 is being transferred from rank 15 to rank 1. -SR ID: 1594, mesh bin: 77515 is being transferred from rank 15 to rank 4. -SR ID: 1995, mesh bin: 70728 is being transferred from rank 15 to rank 4. -SR ID: 2000, mesh bin: 70420 is being transferred from rank 15 to rank 1. -SR ID: 1811, mesh bin: 75372 is being transferred from rank 15 to rank 4. -SR ID: 1803, mesh bin: 73229 is being transferred from rank 15 to rank 4. -SR ID: 1773, mesh bin: 66799 is being transferred from rank 15 to rank 4. -SR ID: 1394, mesh bin: 77515 is being transferred from rank 15 to rank 4. -SR ID: 1965, mesh bin: 63231 is being transferred from rank 15 to rank 13. -SR ID: 1956, mesh bin: 60382 is being transferred from rank 15 to rank 13. -SR ID: 2000, mesh bin: 70421 is being transferred from rank 15 to rank 1. -SR ID: 1992, mesh bin: 69706 is being transferred from rank 15 to rank 1. -SR ID: 1960, mesh bin: 62201 is being transferred from rank 15 to rank 1. -SR ID: 1991, mesh bin: 67561 is being transferred from rank 15 to rank 1. -SR ID: 1791, mesh bin: 68634 is being transferred from rank 15 to rank 1. -SR ID: 1965, mesh bin: 62875 is being transferred from rank 15 to rank 13. -SR ID: 1980, mesh bin: 65060 is being transferred from rank 15 to rank 1. -SR ID: 1973, mesh bin: 66799 is being transferred from rank 15 to rank 4. -SR ID: 1811, mesh bin: 75729 is being transferred from rank 15 to rank 4. -SR ID: 1969, mesh bin: 64702 is being transferred from rank 15 to rank 1. -SR ID: 2000, mesh bin: 70063 is being transferred from rank 15 to rank 1. -SR ID: 1800, mesh bin: 71135 is being transferred from rank 15 to rank 1. -SR ID: 2233, mesh bin: 62915 is being transferred from rank 15 to rank 1. -SR ID: 1581, mesh bin: 72565 is being transferred from rank 15 to rank 1. -SR ID: 1800, mesh bin: 72207 is being transferred from rank 15 to rank 1. -SR ID: 1791, mesh bin: 67919 is being transferred from rank 15 to rank 1. -SR ID: 2000, mesh bin: 72208 is being transferred from rank 15 to rank 1. -SR ID: 1773, mesh bin: 65013 is being transferred from rank 15 to rank 4. -SR ID: 2136, mesh bin: 64299 is being transferred from rank 15 to rank 13. -SR ID: 1980, mesh bin: 67204 is being transferred from rank 15 to rank 1. -SR ID: 1800, mesh bin: 71493 is being transferred from rank 15 to rank 1. -SR ID: 1791, mesh bin: 68276 is being transferred from rank 15 to rank 1. -SR ID: 1760, mesh bin: 61486 is being transferred from rank 15 to rank 1. -SR ID: 1800, mesh bin: 71850 is being transferred from rank 15 to rank 1. -SR ID: 1780, mesh bin: 65775 is being transferred from rank 15 to rank 1. -SR ID: 1780, mesh bin: 65774 is being transferred from rank 15 to rank 1. -SR ID: 1760, mesh bin: 61843 is being transferred from rank 15 to rank 1. -SR ID: 1800, mesh bin: 70778 is being transferred from rank 15 to rank 1. -SR ID: 1769, mesh bin: 64345 is being transferred from rank 15 to rank 1. -SR ID: 1780, mesh bin: 66847 is being transferred from rank 15 to rank 1. -SR ID: 1991, mesh bin: 69348 is being transferred from rank 15 to rank 1. -SR ID: 1780, mesh bin: 67204 is being transferred from rank 15 to rank 1. -SR ID: 1960, mesh bin: 61843 is being transferred from rank 15 to rank 1. -SR ID: 1969, mesh bin: 64345 is being transferred from rank 15 to rank 1. -SR ID: 1991, mesh bin: 68991 is being transferred from rank 15 to rank 1. -SR ID: 2233, mesh bin: 62558 is being transferred from rank 15 to rank 1. -SR ID: 1969, mesh bin: 63273 is being transferred from rank 15 to rank 1. -SR ID: 1780, mesh bin: 65060 is being transferred from rank 15 to rank 1. -SR ID: 1780, mesh bin: 66132 is being transferred from rank 15 to rank 1. -SR ID: 1780, mesh bin: 65417 is being transferred from rank 15 to rank 1. -SR ID: 1773, mesh bin: 65370 is being transferred from rank 15 to rank 4. -SR ID: 1795, mesh bin: 70728 is being transferred from rank 15 to rank 4. -SR ID: 1995, mesh bin: 70371 is being transferred from rank 15 to rank 4. -SR ID: 1969, mesh bin: 62916 is being transferred from rank 15 to rank 1. -SR ID: 1755, mesh bin: 60738 is being transferred from rank 15 to rank 13. -SR ID: 1811, mesh bin: 75015 is being transferred from rank 15 to rank 4. -SR ID: 1773, mesh bin: 66442 is being transferred from rank 15 to rank 4. -SR ID: 1984, mesh bin: 68942 is being transferred from rank 15 to rank 4. -SR ID: 1795, mesh bin: 71800 is being transferred from rank 15 to rank 4. -SR ID: 1795, mesh bin: 71085 is being transferred from rank 15 to rank 4. -SR ID: 1995, mesh bin: 70014 is being transferred from rank 15 to rank 4. -SR ID: 1984, mesh bin: 67513 is being transferred from rank 15 to rank 4. -SR ID: 1803, mesh bin: 74300 is being transferred from rank 15 to rank 4. -SR ID: 1769, mesh bin: 63630 is being transferred from rank 15 to rank 1. -SR ID: 1755, mesh bin: 61806 is being transferred from rank 15 to rank 13. -SR ID: 1755, mesh bin: 61807 is being transferred from rank 15 to rank 13. -SR ID: 1755, mesh bin: 61094 is being transferred from rank 15 to rank 13. -SR ID: 1755, mesh bin: 62163 is being transferred from rank 15 to rank 13. -SR ID: 2232, mesh bin: 63587 is being transferred from rank 15 to rank 13. -SR ID: 2136, mesh bin: 64656 is being transferred from rank 15 to rank 13. -SR ID: 1955, mesh bin: 62162 is being transferred from rank 15 to rank 13. -SR ID: 1955, mesh bin: 62163 is being transferred from rank 15 to rank 13. -SR ID: 1965, mesh bin: 62519 is being transferred from rank 15 to rank 13. -SR ID: 1784, mesh bin: 68585 is being transferred from rank 15 to rank 4. -SR ID: 1803, mesh bin: 74657 is being transferred from rank 15 to rank 4. -SR ID: 1995, mesh bin: 72157 is being transferred from rank 15 to rank 4. -SR ID: 2003, mesh bin: 74657 is being transferred from rank 15 to rank 4. -SR ID: 1803, mesh bin: 73586 is being transferred from rank 15 to rank 4. -SR ID: 2011, mesh bin: 77158 is being transferred from rank 15 to rank 4. -SR ID: 1973, mesh bin: 67156 is being transferred from rank 15 to rank 4. -SR ID: 2003, mesh bin: 72514 is being transferred from rank 15 to rank 4. -SR ID: 1795, mesh bin: 71442 is being transferred from rank 15 to rank 4. -SR ID: 1811, mesh bin: 77158 is being transferred from rank 15 to rank 4. -SR ID: 1795, mesh bin: 71443 is being transferred from rank 15 to rank 4. -SR ID: 2232, mesh bin: 64656 is being transferred from rank 15 to rank 4. -SR ID: 1803, mesh bin: 73943 is being transferred from rank 15 to rank 4. -SR ID: 1995, mesh bin: 71800 is being transferred from rank 15 to rank 4. -SR ID: 1973, mesh bin: 65013 is being transferred from rank 15 to rank 4. -SR ID: 2011, mesh bin: 75015 is being transferred from rank 15 to rank 4. -SR ID: 1984, mesh bin: 69299 is being transferred from rank 15 to rank 4. -SR ID: 1811, mesh bin: 76086 is being transferred from rank 15 to rank 4. -SR ID: 1803, mesh bin: 72871 is being transferred from rank 15 to rank 4. -SR ID: 1784, mesh bin: 68228 is being transferred from rank 15 to rank 4. -SR ID: 1811, mesh bin: 76443 is being transferred from rank 15 to rank 4. -SR ID: 1955, mesh bin: 60738 is being transferred from rank 15 to rank 13. -SR ID: 1755, mesh bin: 61450 is being transferred from rank 15 to rank 13. -SR ID: 2136, mesh bin: 63944 is being transferred from rank 15 to rank 13. -SR ID: 2136, mesh bin: 63943 is being transferred from rank 15 to rank 13. -SR ID: 1991, mesh bin: 67919 is being transferred from rank 15 to rank 1. -SR ID: 1773, mesh bin: 65727 is being transferred from rank 15 to rank 4. -SR ID: 2, mesh bin: 15657 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 14232 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 14231 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 13876 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 13875 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 15301 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 16370 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 13519 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 14588 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 16014 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 14945 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 14944 is being transferred from rank 5 to rank 16. -SR ID: 2, mesh bin: 16727 is being transferred from rank 5 to rank 16. -SR ID: 1, mesh bin: 7304 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 2306 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 3377 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 12302 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 11231 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 8375 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 6233 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 1235 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 9089 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 4091 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 5162 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 164 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 10160 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 10874 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 3020 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 878 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 8018 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 5876 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 6947 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 11945 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 3734 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 4805 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 2663 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 9803 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 7661 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 8732 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 521 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 5519 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 6590 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 4448 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 10517 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 11588 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 9446 is being transferred from rank 6 to rank 17. -SR ID: 1, mesh bin: 1592 is being transferred from rank 6 to rank 17. -SR ID: 3, mesh bin: 42784 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 48134 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 40644 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 41714 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 44567 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 45637 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 43497 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 44568 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 39574 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 42428 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 42427 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 46351 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 45281 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 41357 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 47778 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 43141 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 44211 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 40287 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 47064 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 42071 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 48491 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 41001 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 44924 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 45994 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 47421 is being transferred from rank 18 to rank 10. -SR ID: 2, mesh bin: 39931 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 43854 is being transferred from rank 18 to rank 10. -SR ID: 3, mesh bin: 46708 is being transferred from rank 18 to rank 10. -SR ID: 2107, mesh bin: 115857 is being transferred from rank 9 to rank 19. -SR ID: 2214, mesh bin: 113013 is being transferred from rank 9 to rank 19. -SR ID: 2214, mesh bin: 113012 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 125196 is being transferred from rank 19 to rank 12. -SR ID: 4, mesh bin: 123053 is being transferred from rank 19 to rank 12. -SR ID: 2214, mesh bin: 114079 is being transferred from rank 9 to rank 19. -SR ID: 2106, mesh bin: 115856 is being transferred from rank 9 to rank 19. -SR ID: 2310, mesh bin: 114079 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 120197 is being transferred from rank 19 to rank 12. -SR ID: 1898, mesh bin: 114790 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 125910 is being transferred from rank 19 to rank 12. -SR ID: 4, mesh bin: 120911 is being transferred from rank 19 to rank 12. -SR ID: 2214, mesh bin: 113368 is being transferred from rank 9 to rank 19. -SR ID: 2214, mesh bin: 113367 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 121982 is being transferred from rank 19 to rank 12. -SR ID: 4, mesh bin: 119840 is being transferred from rank 19 to rank 12. -SR ID: 4, mesh bin: 126981 is being transferred from rank 19 to rank 12. -SR ID: 4, mesh bin: 124839 is being transferred from rank 19 to rank 12. -SR ID: 2091, mesh bin: 112302 is being transferred from rank 9 to rank 19. -SR ID: 2107, mesh bin: 115500 is being transferred from rank 9 to rank 19. -SR ID: 2107, mesh bin: 115501 is being transferred from rank 9 to rank 19. -SR ID: 2091, mesh bin: 112301 is being transferred from rank 9 to rank 19. -SR ID: 1891, mesh bin: 111945 is being transferred from rank 9 to rank 19. -SR ID: 1891, mesh bin: 111946 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 122696 is being transferred from rank 19 to rank 12. -SR ID: 4, mesh bin: 121625 is being transferred from rank 19 to rank 12. -SR ID: 4, mesh bin: 126624 is being transferred from rank 19 to rank 12. -SR ID: 2214, mesh bin: 113723 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 125553 is being transferred from rank 19 to rank 12. -SR ID: 2107, mesh bin: 115145 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 120554 is being transferred from rank 19 to rank 12. -SR ID: 2091, mesh bin: 111945 is being transferred from rank 9 to rank 19. -SR ID: 1906, mesh bin: 115856 is being transferred from rank 9 to rank 19. -SR ID: 2310, mesh bin: 112657 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 123410 is being transferred from rank 19 to rank 12. -SR ID: 4, mesh bin: 127338 is being transferred from rank 19 to rank 12. -SR ID: 2098, mesh bin: 114435 is being transferred from rank 9 to rank 19. -SR ID: 2098, mesh bin: 114434 is being transferred from rank 9 to rank 19. -SR ID: 4, mesh bin: 122339 is being transferred from rank 19 to rank 12. -SR ID: 2310, mesh bin: 113013 is being transferred from rank 9 to rank 19. -SR ID: 1, mesh bin: 1284 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 12397 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 11279 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 6281 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 7352 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 5210 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 5258 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 3116 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 13111 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 12350 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 10208 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 10255 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 8113 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 9184 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 13064 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 4187 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 14182 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 974 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 213 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 8066 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 5972 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 7043 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 11993 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 4139 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 4901 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 12040 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 9898 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 10969 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 2045 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 6995 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 4853 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 12754 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 2759 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 9851 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 10922 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 927 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 7757 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 8827 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 6686 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 5924 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 13825 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 3830 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 11683 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 8780 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 6638 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 13778 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 4544 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 3782 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 1641 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 11636 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 12707 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 1688 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 617 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 10612 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 14539 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 7709 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 13468 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 5615 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 9494 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 570 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 13421 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 5567 is being transferred from rank 20 to rank 6. -SR ID: 1, mesh bin: 3425 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 3473 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 11326 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 10565 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 1331 is being transferred from rank 5 to rank 20. -SR ID: 1, mesh bin: 8423 is being transferred from rank 20 to rank 6. -SR ID: 2, mesh bin: 2402 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 8470 is being transferred from rank 5 to rank 20. -SR ID: 2, mesh bin: 6329 is being transferred from rank 5 to rank 20. -SR ID: 1394, mesh bin: 78939 is being transferred from rank 22 to rank 4. -SR ID: 2269, mesh bin: 92145 is being transferred from rank 22 to rank 3. -SR ID: 849, mesh bin: 92502 is being transferred from rank 22 to rank 3. -SR ID: 274, mesh bin: 86431 is being transferred from rank 22 to rank 3. -SR ID: 1394, mesh bin: 78583 is being transferred from rank 22 to rank 4. -SR ID: 2269, mesh bin: 90002 is being transferred from rank 22 to rank 3. -SR ID: 2173, mesh bin: 90359 is being transferred from rank 22 to rank 3. -SR ID: 274, mesh bin: 85359 is being transferred from rank 22 to rank 3. -SR ID: 882, mesh bin: 97868 is being transferred from rank 2 to rank 22. -SR ID: 882, mesh bin: 97867 is being transferred from rank 2 to rank 22. -SR ID: 1406, mesh bin: 81075 is being transferred from rank 22 to rank 4. -SR ID: 802, mesh bin: 85002 is being transferred from rank 22 to rank 3. -SR ID: 865, mesh bin: 95359 is being transferred from rank 22 to rank 3. -SR ID: 338, mesh bin: 97150 is being transferred from rank 2 to rank 22. -SR ID: 354, mesh bin: 98227 is being transferred from rank 2 to rank 22. -SR ID: 354, mesh bin: 98226 is being transferred from rank 2 to rank 22. -SR ID: 291, mesh bin: 89288 is being transferred from rank 22 to rank 3. -SR ID: 849, mesh bin: 94288 is being transferred from rank 22 to rank 3. -SR ID: 2173, mesh bin: 91431 is being transferred from rank 22 to rank 3. -SR ID: 1113, mesh bin: 83931 is being transferred from rank 22 to rank 3. -SR ID: 1406, mesh bin: 80007 is being transferred from rank 22 to rank 4. -SR ID: 1396, mesh bin: 78603 is being transferred from rank 22 to rank 15. -SR ID: 1396, mesh bin: 78609 is being transferred from rank 22 to rank 15. -SR ID: 1396, mesh bin: 78608 is being transferred from rank 22 to rank 15. -SR ID: 1396, mesh bin: 78605 is being transferred from rank 22 to rank 15. -SR ID: 291, mesh bin: 89645 is being transferred from rank 22 to rank 3. -SR ID: 321, mesh bin: 94288 is being transferred from rank 22 to rank 3. -SR ID: 1396, mesh bin: 78607 is being transferred from rank 22 to rank 15. -SR ID: 1396, mesh bin: 78606 is being transferred from rank 22 to rank 15. -SR ID: 1606, mesh bin: 81431 is being transferred from rank 22 to rank 4. -SR ID: 2147, mesh bin: 78239 is being transferred from rank 22 to rank 15. -SR ID: 865, mesh bin: 95002 is being transferred from rank 22 to rank 3. -SR ID: 338, mesh bin: 96792 is being transferred from rank 2 to rank 22. -SR ID: 338, mesh bin: 96791 is being transferred from rank 2 to rank 22. -SR ID: 354, mesh bin: 97868 is being transferred from rank 2 to rank 22. -SR ID: 2147, mesh bin: 78244 is being transferred from rank 22 to rank 15. -SR ID: 2147, mesh bin: 78240 is being transferred from rank 22 to rank 15. -SR ID: 2147, mesh bin: 78241 is being transferred from rank 22 to rank 15. -SR ID: 291, mesh bin: 88574 is being transferred from rank 22 to rank 3. -SR ID: 2147, mesh bin: 78242 is being transferred from rank 22 to rank 15. -SR ID: 2147, mesh bin: 78243 is being transferred from rank 22 to rank 15. -SR ID: 2243, mesh bin: 78245 is being transferred from rank 22 to rank 15. -SR ID: 2243, mesh bin: 78239 is being transferred from rank 22 to rank 15. -SR ID: 865, mesh bin: 96074 is being transferred from rank 2 to rank 22. -SR ID: 802, mesh bin: 87145 is being transferred from rank 22 to rank 3. -SR ID: 2242, mesh bin: 79295 is being transferred from rank 22 to rank 4. -SR ID: 1406, mesh bin: 80363 is being transferred from rank 22 to rank 4. -SR ID: 2173, mesh bin: 90716 is being transferred from rank 22 to rank 3. -SR ID: 291, mesh bin: 87502 is being transferred from rank 22 to rank 3. -SR ID: 321, mesh bin: 92502 is being transferred from rank 22 to rank 3. -SR ID: 819, mesh bin: 87502 is being transferred from rank 22 to rank 3. -SR ID: 849, mesh bin: 94645 is being transferred from rank 22 to rank 3. -SR ID: 1241, mesh bin: 84288 is being transferred from rank 22 to rank 3. -SR ID: 1594, mesh bin: 78939 is being transferred from rank 22 to rank 4. -SR ID: 1406, mesh bin: 81431 is being transferred from rank 22 to rank 4. -SR ID: 1113, mesh bin: 84288 is being transferred from rank 22 to rank 3. -SR ID: 1113, mesh bin: 83217 is being transferred from rank 22 to rank 3. -SR ID: 1595, mesh bin: 77875 is being transferred from rank 22 to rank 15. -SR ID: 1595, mesh bin: 77876 is being transferred from rank 22 to rank 15. -SR ID: 2173, mesh bin: 91788 is being transferred from rank 22 to rank 3. -SR ID: 1606, mesh bin: 82145 is being transferred from rank 22 to rank 3. -SR ID: 1397, mesh bin: 78971 is being transferred from rank 22 to rank 15. -SR ID: 1594, mesh bin: 77874 is being transferred from rank 22 to rank 15. -SR ID: 1594, mesh bin: 77873 is being transferred from rank 22 to rank 15. -SR ID: 321, mesh bin: 93931 is being transferred from rank 22 to rank 3. -SR ID: 1241, mesh bin: 84645 is being transferred from rank 22 to rank 3. -SR ID: 321, mesh bin: 92859 is being transferred from rank 22 to rank 3. -SR ID: 881, mesh bin: 97509 is being transferred from rank 2 to rank 22. -SR ID: 1397, mesh bin: 78972 is being transferred from rank 22 to rank 15. -SR ID: 1397, mesh bin: 78973 is being transferred from rank 22 to rank 15. -SR ID: 337, mesh bin: 95716 is being transferred from rank 22 to rank 3. -SR ID: 1606, mesh bin: 80007 is being transferred from rank 22 to rank 4. -SR ID: 802, mesh bin: 85359 is being transferred from rank 22 to rank 3. -SR ID: 1596, mesh bin: 78609 is being transferred from rank 22 to rank 15. -SR ID: 274, mesh bin: 86788 is being transferred from rank 22 to rank 3. -SR ID: 1394, mesh bin: 78228 is being transferred from rank 22 to rank 4. -SR ID: 1394, mesh bin: 78227 is being transferred from rank 22 to rank 4. -SR ID: 2173, mesh bin: 90002 is being transferred from rank 22 to rank 3. -SR ID: 1241, mesh bin: 82502 is being transferred from rank 22 to rank 3. -SR ID: 2173, mesh bin: 92145 is being transferred from rank 22 to rank 3. -SR ID: 819, mesh bin: 89645 is being transferred from rank 22 to rank 3. -SR ID: 274, mesh bin: 87145 is being transferred from rank 22 to rank 3. -SR ID: 1394, mesh bin: 77871 is being transferred from rank 22 to rank 4. -SR ID: 2242, mesh bin: 79651 is being transferred from rank 22 to rank 4. -SR ID: 2173, mesh bin: 91074 is being transferred from rank 22 to rank 3. -SR ID: 337, mesh bin: 95359 is being transferred from rank 22 to rank 3. -SR ID: 866, mesh bin: 97150 is being transferred from rank 2 to rank 22. -SR ID: 338, mesh bin: 96432 is being transferred from rank 2 to rank 22. -SR ID: 1606, mesh bin: 81788 is being transferred from rank 22 to rank 3. -SR ID: 1395, mesh bin: 77880 is being transferred from rank 22 to rank 15. -SR ID: 1395, mesh bin: 77881 is being transferred from rank 22 to rank 15. -SR ID: 1395, mesh bin: 77876 is being transferred from rank 22 to rank 15. -SR ID: 866, mesh bin: 96075 is being transferred from rank 2 to rank 22. -SR ID: 338, mesh bin: 96433 is being transferred from rank 2 to rank 22. -SR ID: 1395, mesh bin: 77877 is being transferred from rank 22 to rank 15. -SR ID: 1395, mesh bin: 77878 is being transferred from rank 22 to rank 15. -SR ID: 1395, mesh bin: 77879 is being transferred from rank 22 to rank 15. -SR ID: 0, mesh bin: 31865 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 30792 is being transferred from rank 8 to rank 23. -SR ID: 1, mesh bin: 15832 is being transferred from rank 23 to rank 17. -SR ID: 1, mesh bin: 14756 is being transferred from rank 23 to rank 17. -SR ID: 0, mesh bin: 29719 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 32581 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 33654 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 33653 is being transferred from rank 8 to rank 23. -SR ID: 1, mesh bin: 15474 is being transferred from rank 23 to rank 17. -SR ID: 1, mesh bin: 16551 is being transferred from rank 23 to rank 17. -SR ID: 1, mesh bin: 16550 is being transferred from rank 23 to rank 17. -SR ID: 0, mesh bin: 31508 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 31507 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 29361 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 30434 is being transferred from rank 8 to rank 23. -SR ID: 1, mesh bin: 15115 is being transferred from rank 23 to rank 17. -SR ID: 1, mesh bin: 15114 is being transferred from rank 23 to rank 17. -SR ID: 0, mesh bin: 33296 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 31150 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 31149 is being transferred from rank 8 to rank 23. -SR ID: 1, mesh bin: 16191 is being transferred from rank 23 to rank 17. -SR ID: 1, mesh bin: 16192 is being transferred from rank 23 to rank 17. -SR ID: 0, mesh bin: 32222 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 32223 is being transferred from rank 8 to rank 23. -SR ID: 1, mesh bin: 16909 is being transferred from rank 23 to rank 17. -SR ID: 0, mesh bin: 29004 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 30076 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 30077 is being transferred from rank 8 to rank 23. -SR ID: 0, mesh bin: 32938 is being transferred from rank 8 to rank 23. -SR ID: 3, mesh bin: 79208 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 80634 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 72077 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 72078 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 77069 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 78139 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 75999 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 73147 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 71008 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 78852 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 78851 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 80278 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 73860 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 74930 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 79921 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 72790 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 72791 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 77782 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 75643 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 76712 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 71721 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 80991 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 74573 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 72434 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 79565 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 77426 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 78495 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 73504 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 73503 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 75286 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 76356 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 74217 is being transferred from rank 7 to rank 24. -SR ID: 3, mesh bin: 71364 is being transferred from rank 7 to rank 24. -SR ID: 1827, mesh bin: 95846 is being transferred from rank 9 to rank 25. -SR ID: 2054, mesh bin: 102971 is being transferred from rank 9 to rank 25. -SR ID: 2054, mesh bin: 102970 is being transferred from rank 25 to rank 11. -SR ID: 2043, mesh bin: 100477 is being transferred from rank 9 to rank 25. -SR ID: 2019, mesh bin: 94777 is being transferred from rank 9 to rank 25. -SR ID: 1835, mesh bin: 99408 is being transferred from rank 9 to rank 25. -SR ID: 1459, mesh bin: 101165 is being transferred from rank 25 to rank 11. -SR ID: 1459, mesh bin: 101166 is being transferred from rank 25 to rank 11. -SR ID: 1459, mesh bin: 101167 is being transferred from rank 25 to rank 11. -SR ID: 1827, mesh bin: 95133 is being transferred from rank 9 to rank 25. -SR ID: 1835, mesh bin: 98339 is being transferred from rank 9 to rank 25. -SR ID: 1835, mesh bin: 98340 is being transferred from rank 9 to rank 25. -SR ID: 2053, mesh bin: 102968 is being transferred from rank 25 to rank 11. -SR ID: 2041, mesh bin: 101528 is being transferred from rank 25 to rank 11. -SR ID: 2053, mesh bin: 102969 is being transferred from rank 25 to rank 11. -SR ID: 1658, mesh bin: 100444 is being transferred from rank 25 to rank 11. -SR ID: 1827, mesh bin: 96202 is being transferred from rank 9 to rank 25. -SR ID: 2027, mesh bin: 95134 is being transferred from rank 9 to rank 25. -SR ID: 1843, mesh bin: 101902 is being transferred from rank 9 to rank 25. -SR ID: 2026, mesh bin: 97271 is being transferred from rank 9 to rank 25. -SR ID: 1280, mesh bin: 100085 is being transferred from rank 25 to rank 11. -SR ID: 1835, mesh bin: 98695 is being transferred from rank 9 to rank 25. -SR ID: 1835, mesh bin: 98696 is being transferred from rank 9 to rank 25. -SR ID: 2054, mesh bin: 102615 is being transferred from rank 9 to rank 25. -SR ID: 1458, mesh bin: 100806 is being transferred from rank 25 to rank 11. -SR ID: 1458, mesh bin: 100805 is being transferred from rank 25 to rank 11. -SR ID: 2054, mesh bin: 102614 is being transferred from rank 9 to rank 25. -SR ID: 2043, mesh bin: 102258 is being transferred from rank 9 to rank 25. -SR ID: 2035, mesh bin: 99764 is being transferred from rank 9 to rank 25. -SR ID: 2035, mesh bin: 99765 is being transferred from rank 9 to rank 25. -SR ID: 1659, mesh bin: 101527 is being transferred from rank 25 to rank 11. -SR ID: 1827, mesh bin: 95490 is being transferred from rank 9 to rank 25. -SR ID: 1843, mesh bin: 102259 is being transferred from rank 9 to rank 25. -SR ID: 2035, mesh bin: 97627 is being transferred from rank 9 to rank 25. -SR ID: 888, mesh bin: 99364 is being transferred from rank 25 to rank 11. -SR ID: 1843, mesh bin: 101189 is being transferred from rank 9 to rank 25. -SR ID: 1843, mesh bin: 101190 is being transferred from rank 9 to rank 25. -SR ID: 2044, mesh bin: 100121 is being transferred from rank 9 to rank 25. -SR ID: 1853, mesh bin: 102609 is being transferred from rank 25 to rank 11. -SR ID: 1835, mesh bin: 99052 is being transferred from rank 9 to rank 25. -SR ID: 1835, mesh bin: 97983 is being transferred from rank 9 to rank 25. -SR ID: 2041, mesh bin: 102247 is being transferred from rank 25 to rank 11. -SR ID: 2041, mesh bin: 102248 is being transferred from rank 25 to rank 11. -SR ID: 1459, mesh bin: 101526 is being transferred from rank 25 to rank 11. -SR ID: 1459, mesh bin: 101527 is being transferred from rank 25 to rank 11. -SR ID: 2053, mesh bin: 102608 is being transferred from rank 25 to rank 11. -SR ID: 2053, mesh bin: 102607 is being transferred from rank 25 to rank 11. -SR ID: 2042, mesh bin: 102249 is being transferred from rank 25 to rank 11. -SR ID: 1658, mesh bin: 100806 is being transferred from rank 25 to rank 11. -SR ID: 1843, mesh bin: 101546 is being transferred from rank 9 to rank 25. -SR ID: 2026, mesh bin: 96914 is being transferred from rank 9 to rank 25. -SR ID: 1853, mesh bin: 102967 is being transferred from rank 25 to rank 11. -SR ID: 360, mesh bin: 99363 is being transferred from rank 25 to rank 11. -SR ID: 1659, mesh bin: 100807 is being transferred from rank 25 to rank 11. -SR ID: 2035, mesh bin: 99408 is being transferred from rank 9 to rank 25. -SR ID: 360, mesh bin: 99004 is being transferred from rank 25 to rank 11. -SR ID: 360, mesh bin: 99003 is being transferred from rank 25 to rank 11. -SR ID: 360, mesh bin: 99005 is being transferred from rank 25 to rank 11. -SR ID: 1278, mesh bin: 99726 is being transferred from rank 25 to rank 11. -SR ID: 1278, mesh bin: 99725 is being transferred from rank 25 to rank 11. -SR ID: 1278, mesh bin: 99724 is being transferred from rank 25 to rank 11. -SR ID: 1278, mesh bin: 99723 is being transferred from rank 25 to rank 11. -SR ID: 1278, mesh bin: 99365 is being transferred from rank 25 to rank 11. -SR ID: 1843, mesh bin: 100833 is being transferred from rank 9 to rank 25. -SR ID: 1827, mesh bin: 96558 is being transferred from rank 9 to rank 25. -SR ID: 2027, mesh bin: 96558 is being transferred from rank 9 to rank 25. -SR ID: 1841, mesh bin: 101887 is being transferred from rank 25 to rank 11. -SR ID: 1841, mesh bin: 101888 is being transferred from rank 25 to rank 11. -SR ID: 1841, mesh bin: 101886 is being transferred from rank 25 to rank 11. -SR ID: 1458, mesh bin: 100444 is being transferred from rank 25 to rank 11. -SR ID: 1458, mesh bin: 100447 is being transferred from rank 25 to rank 11. -SR ID: 1458, mesh bin: 100446 is being transferred from rank 25 to rank 11. -SR ID: 1458, mesh bin: 100445 is being transferred from rank 25 to rank 11. -SR ID: 3, mesh bin: 80624 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80620 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80621 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80622 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80623 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80617 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80618 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80619 is being transferred from rank 7 to rank 26. -SR ID: 4, mesh bin: 86653 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 94521 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 94522 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 88499 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 91654 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 89511 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 85639 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 85638 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 95600 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 95599 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 95598 is being transferred from rank 26 to rank 14. -SR ID: 3, mesh bin: 84566 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 92369 is being transferred from rank 0 to rank 26. -SR ID: 3, mesh bin: 82421 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 86353 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 86354 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 87368 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 88439 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 86296 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 93444 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 93443 is being transferred from rank 26 to rank 14. -SR ID: 3, mesh bin: 83493 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 91297 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 87426 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 96317 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 96316 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 97396 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 96318 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 97395 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 85281 is being transferred from rank 24 to rank 26. -SR ID: 3, mesh bin: 79888 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 79889 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 79890 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 79891 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 79884 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 79886 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 79887 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 79883 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80256 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80257 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80258 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80252 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80253 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80254 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80255 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80250 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80251 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 84208 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 89154 is being transferred from rank 0 to rank 26. -SR ID: 3, mesh bin: 81348 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 95241 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 95240 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 94162 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 95239 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 93084 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 88141 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 87069 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 87068 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 98113 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 98115 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 98114 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 90226 is being transferred from rank 0 to rank 26. -SR ID: 3, mesh bin: 82063 is being transferred from rank 24 to rank 26. -SR ID: 3, mesh bin: 83136 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 90940 is being transferred from rank 0 to rank 26. -SR ID: 3, mesh bin: 80988 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80989 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80990 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80985 is being transferred from rank 7 to rank 26. -SR ID: 3, mesh bin: 80987 is being transferred from rank 7 to rank 26. -SR ID: 4, mesh bin: 97037 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 97036 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 95958 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 97035 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 88082 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 85939 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 94881 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 94880 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 88856 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 92012 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 85996 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 92726 is being transferred from rank 0 to rank 26. -SR ID: 3, mesh bin: 83851 is being transferred from rank 24 to rank 26. -SR ID: 3, mesh bin: 84923 is being transferred from rank 24 to rank 26. -SR ID: 3, mesh bin: 82778 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 86711 is being transferred from rank 24 to rank 26. -SR ID: 4, mesh bin: 96677 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 96676 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 96678 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 89868 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 87725 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 88797 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 88796 is being transferred from rank 0 to rank 26. -SR ID: 4, mesh bin: 93804 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 93803 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 93802 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 97755 is being transferred from rank 26 to rank 14. -SR ID: 4, mesh bin: 87784 is being transferred from rank 24 to rank 26. -SR ID: 0, mesh bin: 12531 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 5390 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 13245 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 3248 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 10389 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 8246 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 4319 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 1105 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 6104 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 7175 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 5033 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 12174 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 2177 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 10032 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 11103 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 34 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 2891 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 12888 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 7889 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 6818 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 3962 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 13959 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 11817 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 1820 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 4676 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 9675 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 10746 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 748 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 14673 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 13602 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 5747 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 11460 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 3605 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 1463 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 2534 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 6461 is being transferred from rank 27 to rank 21. -SR ID: 0, mesh bin: 7532 is being transferred from rank 27 to rank 21. -SR ID: 2, mesh bin: 11377 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 6377 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 9234 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 7091 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 13172 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13171 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 2091 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 12091 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 13170 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13176 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13175 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13174 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13173 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13164 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13163 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13162 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 3162 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 13168 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13167 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13166 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 13165 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 8162 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 4948 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 8877 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 1019 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 12843 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12842 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12841 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12848 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12847 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12845 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12836 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12835 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12834 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12833 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12840 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12839 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12838 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12837 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12828 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12827 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12826 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12825 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12832 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12831 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12830 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12829 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 3877 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 9948 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 6734 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 12824 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12823 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12821 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 11734 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 1734 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 2805 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 12805 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 7805 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 5662 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 662 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 3519 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 4591 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 12492 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 12494 is being transferred from rank 28 to rank 16. -SR ID: 2, mesh bin: 9591 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 12448 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 2448 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 305 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 7448 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 5305 is being transferred from rank 5 to rank 28. -SR ID: 2, mesh bin: 10305 is being transferred from rank 5 to rank 28. -SR ID: 0, mesh bin: 41815 is being transferred from rank 29 to rank 8. -SR ID: 1067, mesh bin: 44316 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 36814 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 37886 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 35742 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 35743 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 40743 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 32885 is being transferred from rank 29 to rank 8. -SR ID: 1067, mesh bin: 43244 is being transferred from rank 29 to rank 8. -SR ID: 1522, mesh bin: 45030 is being transferred from rank 29 to rank 8. -SR ID: 1335, mesh bin: 48223 is being transferred from rank 13 to rank 29. -SR ID: 1335, mesh bin: 48224 is being transferred from rank 13 to rank 29. -SR ID: 1335, mesh bin: 48225 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 33599 is being transferred from rank 29 to rank 8. -SR ID: 1334, mesh bin: 48219 is being transferred from rank 13 to rank 29. -SR ID: 1334, mesh bin: 48218 is being transferred from rank 13 to rank 29. -SR ID: 1334, mesh bin: 48217 is being transferred from rank 13 to rank 29. -SR ID: 1195, mesh bin: 42530 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 38600 is being transferred from rank 29 to rank 8. -SR ID: 1334, mesh bin: 48221 is being transferred from rank 13 to rank 29. -SR ID: 1334, mesh bin: 48220 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 39672 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 37529 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 34671 is being transferred from rank 29 to rank 8. -SR ID: 1333, mesh bin: 48214 is being transferred from rank 13 to rank 29. -SR ID: 1333, mesh bin: 48212 is being transferred from rank 13 to rank 29. -SR ID: 1333, mesh bin: 48213 is being transferred from rank 13 to rank 29. -SR ID: 1333, mesh bin: 48210 is being transferred from rank 13 to rank 29. -SR ID: 1333, mesh bin: 48211 is being transferred from rank 13 to rank 29. -SR ID: 1333, mesh bin: 48209 is being transferred from rank 13 to rank 29. -SR ID: 1195, mesh bin: 44673 is being transferred from rank 29 to rank 8. -SR ID: 1332, mesh bin: 48208 is being transferred from rank 13 to rank 29. -SR ID: 1332, mesh bin: 48205 is being transferred from rank 13 to rank 29. -SR ID: 1332, mesh bin: 48204 is being transferred from rank 13 to rank 29. -SR ID: 1332, mesh bin: 48207 is being transferred from rank 13 to rank 29. -SR ID: 1332, mesh bin: 48206 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 35385 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 32528 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 40386 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 41458 is being transferred from rank 29 to rank 8. -SR ID: 1067, mesh bin: 42887 is being transferred from rank 29 to rank 8. -SR ID: 1535, mesh bin: 48229 is being transferred from rank 13 to rank 29. -SR ID: 1535, mesh bin: 48223 is being transferred from rank 13 to rank 29. -SR ID: 2125, mesh bin: 48232 is being transferred from rank 13 to rank 29. -SR ID: 1208, mesh bin: 48195 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 36457 is being transferred from rank 29 to rank 8. -SR ID: 1208, mesh bin: 48201 is being transferred from rank 13 to rank 29. -SR ID: 1534, mesh bin: 48216 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 42172 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 34314 is being transferred from rank 29 to rank 8. -SR ID: 1534, mesh bin: 48222 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 33242 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 39315 is being transferred from rank 29 to rank 8. -SR ID: 1532, mesh bin: 48208 is being transferred from rank 13 to rank 29. -SR ID: 1532, mesh bin: 48202 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 38243 is being transferred from rank 29 to rank 8. -SR ID: 1067, mesh bin: 43601 is being transferred from rank 29 to rank 8. -SR ID: 1533, mesh bin: 48209 is being transferred from rank 13 to rank 29. -SR ID: 1080, mesh bin: 48196 is being transferred from rank 13 to rank 29. -SR ID: 1080, mesh bin: 48195 is being transferred from rank 13 to rank 29. -SR ID: 1080, mesh bin: 48198 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 35028 is being transferred from rank 29 to rank 8. -SR ID: 1080, mesh bin: 48197 is being transferred from rank 13 to rank 29. -SR ID: 1080, mesh bin: 48200 is being transferred from rank 13 to rank 29. -SR ID: 1080, mesh bin: 48199 is being transferred from rank 13 to rank 29. -SR ID: 1080, mesh bin: 48201 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 36100 is being transferred from rank 29 to rank 8. -SR ID: 1536, mesh bin: 47880 is being transferred from rank 13 to rank 29. -SR ID: 1332, mesh bin: 48203 is being transferred from rank 13 to rank 29. -SR ID: 1332, mesh bin: 48202 is being transferred from rank 13 to rank 29. -SR ID: 0, mesh bin: 38957 is being transferred from rank 29 to rank 8. -SR ID: 0, mesh bin: 40029 is being transferred from rank 29 to rank 8. -SR ID: 1195, mesh bin: 44316 is being transferred from rank 29 to rank 8. -SR ID: 2, mesh bin: 16687 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 33815 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 33814 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 17762 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 17761 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 32749 is being transferred from rank 18 to rank 30. -SR ID: 1, mesh bin: 16659 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 16657 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 16658 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 16656 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 33460 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 15612 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 16660 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 33459 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 33458 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 15613 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 15602 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15601 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15600 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15599 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 18478 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 34524 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 34525 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 16329 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 17403 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 16328 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 35236 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 35235 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 16307 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 35234 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 16306 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 16305 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 16304 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 32394 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 32393 is being transferred from rank 18 to rank 30. -SR ID: 1, mesh bin: 17363 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 17364 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 17361 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 17362 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 33105 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 15250 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15249 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 33104 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 15255 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 15254 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 15248 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15247 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15246 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 18120 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 34170 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 34169 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 32039 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 32038 is being transferred from rank 18 to rank 30. -SR ID: 1, mesh bin: 17011 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 17009 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 17010 is being transferred from rank 20 to rank 30. -SR ID: 1, mesh bin: 17008 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 17045 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 15954 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15953 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15952 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15951 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 15950 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 14896 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 14895 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 14894 is being transferred from rank 20 to rank 30. -SR ID: 2, mesh bin: 34880 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 34879 is being transferred from rank 18 to rank 30. -SR ID: 2, mesh bin: 15971 is being transferred from rank 5 to rank 30. -SR ID: 2, mesh bin: 18836 is being transferred from rank 5 to rank 30. -SR ID: 1, mesh bin: 31911 is being transferred from rank 31 to rank 23. -SR ID: 1, mesh bin: 32624 is being transferred from rank 31 to rank 23. -SR ID: 1, mesh bin: 31555 is being transferred from rank 31 to rank 23. -SR ID: 1, mesh bin: 32268 is being transferred from rank 31 to rank 23. -SR ID: 1, mesh bin: 33337 is being transferred from rank 31 to rank 23. -SR ID: 1, mesh bin: 33336 is being transferred from rank 31 to rank 23. -SR ID: 1, mesh bin: 32980 is being transferred from rank 31 to rank 23. -SR ID: 0, mesh bin: 31813 is being transferred from rank 8 to rank 32. -SR ID: 0, mesh bin: 31805 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31794 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31793 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31796 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31795 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31797 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31799 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31786 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31785 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31788 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31787 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31790 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31792 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31791 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31778 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31777 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31780 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31779 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31782 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31781 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31784 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31783 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31774 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31773 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31776 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 31775 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 30745 is being transferred from rank 8 to rank 32. -SR ID: 0, mesh bin: 15722 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15721 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15724 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15723 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15726 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15748 is being transferred from rank 32 to rank 27. -SR ID: 0, mesh bin: 15749 is being transferred from rank 32 to rank 27. -SR ID: 0, mesh bin: 15725 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15727 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15720 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16425 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16422 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16424 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16423 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 30389 is being transferred from rank 8 to rank 32. -SR ID: 0, mesh bin: 31457 is being transferred from rank 8 to rank 32. -SR ID: 0, mesh bin: 15390 is being transferred from rank 32 to rank 27. -SR ID: 0, mesh bin: 15389 is being transferred from rank 32 to rank 27. -SR ID: 0, mesh bin: 15378 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15377 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15372 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15371 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15374 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15373 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15376 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15375 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 29320 is being transferred from rank 8 to rank 32. -SR ID: 0, mesh bin: 32170 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 32169 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 32164 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 32166 is being transferred from rank 29 to rank 32. -SR ID: 0, mesh bin: 15026 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16074 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15025 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16073 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15028 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16076 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16075 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15027 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15030 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15029 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16077 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15031 is being transferred from rank 32 to rank 27. -SR ID: 0, mesh bin: 16070 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15024 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16072 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 15023 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 16071 is being transferred from rank 32 to rank 21. -SR ID: 0, mesh bin: 30033 is being transferred from rank 8 to rank 32. -SR ID: 0, mesh bin: 16106 is being transferred from rank 32 to rank 27. -SR ID: 0, mesh bin: 16107 is being transferred from rank 32 to rank 27. -SR ID: 0, mesh bin: 31101 is being transferred from rank 8 to rank 32. -SR ID: 0, mesh bin: 28964 is being transferred from rank 8 to rank 32. -SR ID: 3, mesh bin: 64212 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 67073 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 68146 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 68147 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 57075 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 71040 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 53192 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 71041 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71042 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71036 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 53189 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 71037 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 53190 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 71039 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 53191 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 71032 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71033 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71034 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71028 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71029 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71030 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71031 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71024 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71025 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71026 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71027 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71020 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71021 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71022 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71023 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71016 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71017 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71018 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71019 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71012 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71013 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71014 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71015 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71008 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71009 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71010 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 71011 is being transferred from rank 24 to rank 33. -SR ID: 3, mesh bin: 53896 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 53897 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 53898 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 53899 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 53895 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56016 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56013 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56014 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56015 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 66000 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 66001 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 63854 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 63855 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 68861 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 68862 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 69934 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 69935 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 54956 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 54957 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 54955 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 64927 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 56720 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56721 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56722 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56723 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 55664 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 55660 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 55661 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 55662 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 55663 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 70650 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 67789 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 65643 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 54604 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 54605 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 63496 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 63497 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 54602 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 54603 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 53544 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 53545 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 64570 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 53542 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 53543 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 69577 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 67431 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 68504 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 70292 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 55308 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 55309 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 55310 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 54252 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 54249 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 54250 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 54251 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56368 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 56369 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 65285 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 56367 is being transferred from rank 10 to rank 33. -SR ID: 3, mesh bin: 66358 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 69220 is being transferred from rank 7 to rank 33. -SR ID: 3, mesh bin: 69219 is being transferred from rank 7 to rank 33. -SR ID: 0, mesh bin: 10429 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 11500 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 475 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 8330 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 1505 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 15818 is being transferred from rank 23 to rank 34. -SR ID: 1, mesh bin: 9401 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 15817 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 15819 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 14755 is being transferred from rank 23 to rank 34. -SR ID: 1, mesh bin: 7259 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 16878 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 16880 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 16879 is being transferred from rank 23 to rank 34. -SR ID: 1, mesh bin: 14399 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 12257 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 14756 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 9358 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 7216 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 2260 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 3331 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 1189 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 4360 is being transferred from rank 27 to rank 34. -SR ID: 1, mesh bin: 10115 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 17588 is being transferred from rank 23 to rank 34. -SR ID: 1, mesh bin: 11186 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 14042 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 8287 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 5074 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 10072 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 11143 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 9001 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 77 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 1148 is being transferred from rank 27 to rank 34. -SR ID: 1, mesh bin: 9044 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 4045 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 5116 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 2974 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 6145 is being transferred from rank 27 to rank 34. -SR ID: 1, mesh bin: 11900 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 118 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 12971 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 6859 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 16526 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 16525 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 16527 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 15465 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 15464 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 15463 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 832 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 11857 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 1862 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 10786 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 17234 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 17233 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 17232 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 7930 is being transferred from rank 27 to rank 34. -SR ID: 1, mesh bin: 10829 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 8687 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 5788 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 1903 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 13685 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 16170 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 16172 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 16171 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 16173 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 791 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 8644 is being transferred from rank 27 to rank 34. -SR ID: 1, mesh bin: 9758 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 2617 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 6545 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 4717 is being transferred from rank 27 to rank 34. -SR ID: 1, mesh bin: 11543 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 9715 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 15110 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 15109 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 15112 is being transferred from rank 23 to rank 34. -SR ID: 0, mesh bin: 15111 is being transferred from rank 23 to rank 34. -SR ID: 1, mesh bin: 7616 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 12614 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 10472 is being transferred from rank 34 to rank 17. -SR ID: 0, mesh bin: 2576 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 434 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 7573 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 5431 is being transferred from rank 27 to rank 34. -SR ID: 0, mesh bin: 1546 is being transferred from rank 34 to rank 17. -SR ID: 1, mesh bin: 13328 is being transferred from rank 34 to rank 17. -SR ID: 4, mesh bin: 88525 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88524 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88527 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88526 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88521 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88520 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88523 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88522 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88517 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88516 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88519 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88518 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88513 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88512 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88515 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88514 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88511 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 90638 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 95629 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 93491 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 93490 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 94560 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 89569 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 92421 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 90282 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 96343 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 95273 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 91352 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 93134 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 89213 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 89212 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 94204 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 94203 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 88176 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88173 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88175 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 92065 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 94917 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 94916 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 90995 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 88861 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88860 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88863 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88862 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88856 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 88857 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88859 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 88858 is being transferred from rank 35 to rank 24. -SR ID: 4, mesh bin: 95986 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 96699 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 93847 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 91708 is being transferred from rank 35 to rank 26. -SR ID: 4, mesh bin: 92778 is being transferred from rank 35 to rank 26. -SR ID: 1726, mesh bin: 54310 is being transferred from rank 36 to rank 13. -SR ID: 1073, mesh bin: 43997 is being transferred from rank 36 to rank 8. -SR ID: 1961, mesh bin: 60418 is being transferred from rank 36 to rank 1. -SR ID: 1940, mesh bin: 55431 is being transferred from rank 36 to rank 1. -SR ID: 1523, mesh bin: 45037 is being transferred from rank 36 to rank 8. -SR ID: 1726, mesh bin: 53238 is being transferred from rank 36 to rank 13. -SR ID: 1957, mesh bin: 60390 is being transferred from rank 36 to rank 15. -SR ID: 1957, mesh bin: 60389 is being transferred from rank 36 to rank 15. -SR ID: 1950, mesh bin: 59705 is being transferred from rank 36 to rank 1. -SR ID: 1961, mesh bin: 60061 is being transferred from rank 36 to rank 1. -SR ID: 1935, mesh bin: 56811 is being transferred from rank 36 to rank 13. -SR ID: 1944, mesh bin: 58239 is being transferred from rank 36 to rank 13. -SR ID: 1524, mesh bin: 45038 is being transferred from rank 36 to rank 8. -SR ID: 1956, mesh bin: 60388 is being transferred from rank 36 to rank 15. -SR ID: 1956, mesh bin: 60387 is being transferred from rank 36 to rank 15. -SR ID: 1536, mesh bin: 49666 is being transferred from rank 36 to rank 13. -SR ID: 1960, mesh bin: 61130 is being transferred from rank 36 to rank 1. -SR ID: 1940, mesh bin: 55074 is being transferred from rank 36 to rank 1. -SR ID: 1536, mesh bin: 47524 is being transferred from rank 36 to rank 29. -SR ID: 1756, mesh bin: 60386 is being transferred from rank 36 to rank 15. -SR ID: 1554, mesh bin: 54362 is being transferred from rank 36 to rank 1. -SR ID: 1201, mesh bin: 43995 is being transferred from rank 36 to rank 8. -SR ID: 1726, mesh bin: 53596 is being transferred from rank 36 to rank 13. -SR ID: 1726, mesh bin: 52524 is being transferred from rank 36 to rank 13. -SR ID: 1522, mesh bin: 45030 is being transferred from rank 36 to rank 8. -SR ID: 1757, mesh bin: 60392 is being transferred from rank 36 to rank 15. -SR ID: 1757, mesh bin: 60390 is being transferred from rank 36 to rank 15. -SR ID: 1072, mesh bin: 44346 is being transferred from rank 36 to rank 8. -SR ID: 1072, mesh bin: 44348 is being transferred from rank 36 to rank 8. -SR ID: 1757, mesh bin: 60391 is being transferred from rank 36 to rank 15. -SR ID: 1072, mesh bin: 44347 is being transferred from rank 36 to rank 8. -SR ID: 1735, mesh bin: 56096 is being transferred from rank 36 to rank 13. -SR ID: 1944, mesh bin: 57882 is being transferred from rank 36 to rank 13. -SR ID: 1071, mesh bin: 44341 is being transferred from rank 36 to rank 8. -SR ID: 1071, mesh bin: 44342 is being transferred from rank 36 to rank 8. -SR ID: 1071, mesh bin: 44343 is being transferred from rank 36 to rank 8. -SR ID: 1926, mesh bin: 52524 is being transferred from rank 36 to rank 13. -SR ID: 1071, mesh bin: 44340 is being transferred from rank 36 to rank 8. -SR ID: 1718, mesh bin: 51095 is being transferred from rank 36 to rank 13. -SR ID: 1718, mesh bin: 52167 is being transferred from rank 36 to rank 13. -SR ID: 1940, mesh bin: 57211 is being transferred from rank 36 to rank 1. -SR ID: 1757, mesh bin: 60752 is being transferred from rank 36 to rank 15. -SR ID: 1750, mesh bin: 58992 is being transferred from rank 36 to rank 1. -SR ID: 1945, mesh bin: 58954 is being transferred from rank 36 to rank 13. -SR ID: 1758, mesh bin: 60757 is being transferred from rank 36 to rank 15. -SR ID: 1758, mesh bin: 60756 is being transferred from rank 36 to rank 15. -SR ID: 1758, mesh bin: 60755 is being transferred from rank 36 to rank 15. -SR ID: 1758, mesh bin: 60754 is being transferred from rank 36 to rank 15. -SR ID: 1536, mesh bin: 49309 is being transferred from rank 36 to rank 13. -SR ID: 1200, mesh bin: 44346 is being transferred from rank 36 to rank 8. -SR ID: 1200, mesh bin: 44345 is being transferred from rank 36 to rank 8. -SR ID: 1758, mesh bin: 60753 is being transferred from rank 36 to rank 15. -SR ID: 1951, mesh bin: 57568 is being transferred from rank 36 to rank 1. -SR ID: 1199, mesh bin: 44343 is being transferred from rank 36 to rank 8. -SR ID: 1199, mesh bin: 44344 is being transferred from rank 36 to rank 8. -SR ID: 1199, mesh bin: 44338 is being transferred from rank 36 to rank 8. -SR ID: 1726, mesh bin: 54667 is being transferred from rank 36 to rank 13. -SR ID: 1935, mesh bin: 57168 is being transferred from rank 36 to rank 13. -SR ID: 1199, mesh bin: 44339 is being transferred from rank 36 to rank 8. -SR ID: 1354, mesh bin: 52580 is being transferred from rank 36 to rank 1. -SR ID: 1940, mesh bin: 56855 is being transferred from rank 36 to rank 1. -SR ID: 1322, mesh bin: 46812 is being transferred from rank 36 to rank 29. -SR ID: 1322, mesh bin: 46811 is being transferred from rank 36 to rank 29. -SR ID: 1354, mesh bin: 53649 is being transferred from rank 36 to rank 1. -SR ID: 1959, mesh bin: 61117 is being transferred from rank 36 to rank 15. -SR ID: 1959, mesh bin: 61123 is being transferred from rank 36 to rank 15. -SR ID: 1718, mesh bin: 50381 is being transferred from rank 36 to rank 13. -SR ID: 1945, mesh bin: 58597 is being transferred from rank 36 to rank 13. -SR ID: 1197, mesh bin: 44686 is being transferred from rank 36 to rank 8. -SR ID: 1197, mesh bin: 44687 is being transferred from rank 36 to rank 8. -SR ID: 1760, mesh bin: 61482 is being transferred from rank 36 to rank 15. -SR ID: 1760, mesh bin: 61481 is being transferred from rank 36 to rank 15. -SR ID: 1760, mesh bin: 61484 is being transferred from rank 36 to rank 15. -SR ID: 1760, mesh bin: 61483 is being transferred from rank 36 to rank 15. -SR ID: 1760, mesh bin: 61486 is being transferred from rank 36 to rank 1. -SR ID: 1760, mesh bin: 61487 is being transferred from rank 36 to rank 1. -SR ID: 1740, mesh bin: 55787 is being transferred from rank 36 to rank 1. -SR ID: 1760, mesh bin: 61485 is being transferred from rank 36 to rank 15. -SR ID: 1944, mesh bin: 57525 is being transferred from rank 36 to rank 13. -SR ID: 1756, mesh bin: 60027 is being transferred from rank 36 to rank 15. -SR ID: 1740, mesh bin: 55786 is being transferred from rank 36 to rank 1. -SR ID: 1197, mesh bin: 44684 is being transferred from rank 36 to rank 8. -SR ID: 1197, mesh bin: 44685 is being transferred from rank 36 to rank 8. -SR ID: 1197, mesh bin: 44682 is being transferred from rank 36 to rank 8. -SR ID: 1197, mesh bin: 44683 is being transferred from rank 36 to rank 8. -SR ID: 1197, mesh bin: 44681 is being transferred from rank 36 to rank 8. -SR ID: 1336, mesh bin: 49309 is being transferred from rank 36 to rank 13. -SR ID: 1536, mesh bin: 48237 is being transferred from rank 36 to rank 13. -SR ID: 1740, mesh bin: 56855 is being transferred from rank 36 to rank 1. -SR ID: 1726, mesh bin: 53953 is being transferred from rank 36 to rank 13. -SR ID: 1554, mesh bin: 54005 is being transferred from rank 36 to rank 1. -SR ID: 1322, mesh bin: 47168 is being transferred from rank 36 to rank 29. -SR ID: 1726, mesh bin: 52881 is being transferred from rank 36 to rank 13. -SR ID: 1336, mesh bin: 48237 is being transferred from rank 36 to rank 13. -SR ID: 1354, mesh bin: 53293 is being transferred from rank 36 to rank 1. -SR ID: 1750, mesh bin: 58281 is being transferred from rank 36 to rank 1. -SR ID: 1750, mesh bin: 58280 is being transferred from rank 36 to rank 1. -SR ID: 1958, mesh bin: 60753 is being transferred from rank 36 to rank 15. -SR ID: 1956, mesh bin: 60027 is being transferred from rank 36 to rank 15. -SR ID: 1956, mesh bin: 60025 is being transferred from rank 36 to rank 13. -SR ID: 1322, mesh bin: 46099 is being transferred from rank 36 to rank 29. -SR ID: 1956, mesh bin: 60026 is being transferred from rank 36 to rank 15. -SR ID: 1198, mesh bin: 44690 is being transferred from rank 36 to rank 8. -SR ID: 1198, mesh bin: 44689 is being transferred from rank 36 to rank 8. -SR ID: 1198, mesh bin: 44688 is being transferred from rank 36 to rank 8. -SR ID: 1961, mesh bin: 60774 is being transferred from rank 36 to rank 1. -SR ID: 1522, mesh bin: 45387 is being transferred from rank 36 to rank 29. -SR ID: 1750, mesh bin: 59349 is being transferred from rank 36 to rank 1. -SR ID: 1945, mesh bin: 59668 is being transferred from rank 36 to rank 13. -SR ID: 1718, mesh bin: 51452 is being transferred from rank 36 to rank 13. -SR ID: 1750, mesh bin: 58636 is being transferred from rank 36 to rank 1. -SR ID: 1918, mesh bin: 50023 is being transferred from rank 36 to rank 13. -SR ID: 1759, mesh bin: 61117 is being transferred from rank 36 to rank 15. -SR ID: 1759, mesh bin: 61118 is being transferred from rank 36 to rank 15. -SR ID: 1759, mesh bin: 61119 is being transferred from rank 36 to rank 15. -SR ID: 1759, mesh bin: 61120 is being transferred from rank 36 to rank 15. -SR ID: 1950, mesh bin: 57924 is being transferred from rank 36 to rank 1. -SR ID: 1354, mesh bin: 52937 is being transferred from rank 36 to rank 1. -SR ID: 1735, mesh bin: 55382 is being transferred from rank 36 to rank 13. -SR ID: 1336, mesh bin: 48595 is being transferred from rank 36 to rank 13. -SR ID: 1935, mesh bin: 55024 is being transferred from rank 36 to rank 13. -SR ID: 1354, mesh bin: 54006 is being transferred from rank 36 to rank 1. -SR ID: 1354, mesh bin: 54005 is being transferred from rank 36 to rank 1. -SR ID: 1750, mesh bin: 59705 is being transferred from rank 36 to rank 1. -SR ID: 1322, mesh bin: 46455 is being transferred from rank 36 to rank 29. -SR ID: 1759, mesh bin: 61122 is being transferred from rank 36 to rank 15. -SR ID: 1759, mesh bin: 61123 is being transferred from rank 36 to rank 15. -SR ID: 1945, mesh bin: 59311 is being transferred from rank 36 to rank 13. -SR ID: 1735, mesh bin: 56453 is being transferred from rank 36 to rank 13. -SR ID: 1740, mesh bin: 56143 is being transferred from rank 36 to rank 1. -SR ID: 1735, mesh bin: 55739 is being transferred from rank 36 to rank 13. -SR ID: 1718, mesh bin: 50738 is being transferred from rank 36 to rank 13. -SR ID: 1718, mesh bin: 51810 is being transferred from rank 36 to rank 13. -SR ID: 1740, mesh bin: 55431 is being transferred from rank 36 to rank 1. -SR ID: 1740, mesh bin: 55430 is being transferred from rank 36 to rank 1. -SR ID: 1322, mesh bin: 45386 is being transferred from rank 36 to rank 29. -SR ID: 1536, mesh bin: 47881 is being transferred from rank 36 to rank 29. -SR ID: 1522, mesh bin: 47168 is being transferred from rank 36 to rank 29. -SR ID: 1536, mesh bin: 47880 is being transferred from rank 36 to rank 29. -SR ID: 1336, mesh bin: 48952 is being transferred from rank 36 to rank 13. -SR ID: 1553, mesh bin: 54718 is being transferred from rank 36 to rank 1. -SR ID: 1735, mesh bin: 56810 is being transferred from rank 36 to rank 13. -SR ID: 1740, mesh bin: 56499 is being transferred from rank 36 to rank 1. -SR ID: 1926, mesh bin: 54667 is being transferred from rank 36 to rank 13. -SR ID: 1957, mesh bin: 60752 is being transferred from rank 36 to rank 15. -SR ID: 1758, mesh bin: 61116 is being transferred from rank 36 to rank 15. -SR ID: 1554, mesh bin: 52581 is being transferred from rank 36 to rank 1. -SR ID: 1918, mesh bin: 52167 is being transferred from rank 36 to rank 13. -SR ID: 1200, mesh bin: 43994 is being transferred from rank 36 to rank 8. -SR ID: 1070, mesh bin: 44692 is being transferred from rank 36 to rank 8. -SR ID: 1070, mesh bin: 44691 is being transferred from rank 36 to rank 8. -SR ID: 1070, mesh bin: 44690 is being transferred from rank 36 to rank 8. -SR ID: 1073, mesh bin: 43995 is being transferred from rank 36 to rank 8. -SR ID: 1073, mesh bin: 43996 is being transferred from rank 36 to rank 8. -SR ID: 1523, mesh bin: 45032 is being transferred from rank 36 to rank 8. -SR ID: 1322, mesh bin: 45743 is being transferred from rank 36 to rank 29. -SR ID: 1523, mesh bin: 45033 is being transferred from rank 36 to rank 8. -SR ID: 1523, mesh bin: 45034 is being transferred from rank 36 to rank 8. -SR ID: 1523, mesh bin: 45035 is being transferred from rank 36 to rank 8. -SR ID: 1523, mesh bin: 45031 is being transferred from rank 36 to rank 8. -SR ID: 0, mesh bin: 16821 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 25793 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 17944 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 14362 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 14364 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 14363 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 15796 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 15797 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 26822 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 27893 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 16872 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 16871 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 20798 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 17893 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 22893 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 26863 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 14338 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 15754 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 15753 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 15756 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 15755 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 14339 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 12213 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 12214 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 13288 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 13276 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 13275 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 13278 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 25750 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 13277 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 23607 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 19728 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 17587 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 20750 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 27576 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 28610 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28609 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28612 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28611 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28614 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28613 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28615 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28608 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 18607 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 28607 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 24722 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 22582 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 23652 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 24679 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 18658 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 28647 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 21464 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 14004 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 14005 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 15438 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 13986 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 13985 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 27536 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 25393 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 13984 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 16464 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 15402 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 15401 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 17536 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 15400 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 21512 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 19371 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 26506 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 22536 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 20393 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 24366 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 16513 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 25436 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 16512 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 26465 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 12930 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 12929 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 12922 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 12924 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 12923 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 23250 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 20441 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 17230 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 17229 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 27220 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 18250 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 19321 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 22225 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 27179 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 21155 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 24322 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 22179 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 18301 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 28290 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 16154 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 16155 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 13646 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 13647 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 28250 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 13630 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 13629 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 13631 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 15046 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 25036 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 19014 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 15048 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 15047 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 14722 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 14721 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 20036 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 21107 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 24009 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 12569 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 12572 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 12571 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 14692 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 14693 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 15080 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 15079 is being transferred from rank 37 to rank 34. -SR ID: 0, mesh bin: 25079 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 22939 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 29002 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 29001 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 29003 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 16108 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 16107 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 16109 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 28994 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28993 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28996 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28995 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28998 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28997 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 29000 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28999 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28986 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28985 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28987 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28990 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28989 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28992 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28991 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28977 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28980 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28982 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 28981 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 27933 is being transferred from rank 23 to rank 37. -SR ID: 0, mesh bin: 28984 is being transferred from rank 8 to rank 37. -SR ID: 0, mesh bin: 18964 is being transferred from rank 32 to rank 37. -SR ID: 0, mesh bin: 12568 is being transferred from rank 37 to rank 27. -SR ID: 0, mesh bin: 12567 is being transferred from rank 37 to rank 27. -SR ID: 1441, mesh bin: 90532 is being transferred from rank 38 to rank 0. -SR ID: 1267, mesh bin: 85183 is being transferred from rank 38 to rank 0. -SR ID: 1266, mesh bin: 86253 is being transferred from rank 38 to rank 0. -SR ID: 1441, mesh bin: 91245 is being transferred from rank 38 to rank 0. -SR ID: 1832, mesh bin: 95524 is being transferred from rank 38 to rank 0. -SR ID: 2028, mesh bin: 95141 is being transferred from rank 9 to rank 38. -SR ID: 2028, mesh bin: 95140 is being transferred from rank 9 to rank 38. -SR ID: 2028, mesh bin: 95137 is being transferred from rank 9 to rank 38. -SR ID: 2028, mesh bin: 95143 is being transferred from rank 9 to rank 38. -SR ID: 2028, mesh bin: 95142 is being transferred from rank 9 to rank 38. -SR ID: 2019, mesh bin: 94777 is being transferred from rank 25 to rank 38. -SR ID: 2019, mesh bin: 94778 is being transferred from rank 9 to rank 38. -SR ID: 1422, mesh bin: 87629 is being transferred from rank 25 to rank 38. -SR ID: 1647, mesh bin: 93028 is being transferred from rank 38 to rank 0. -SR ID: 266, mesh bin: 84470 is being transferred from rank 38 to rank 0. -SR ID: 1447, mesh bin: 93028 is being transferred from rank 38 to rank 0. -SR ID: 2029, mesh bin: 95145 is being transferred from rank 9 to rank 38. -SR ID: 1267, mesh bin: 85540 is being transferred from rank 38 to rank 0. -SR ID: 2019, mesh bin: 92632 is being transferred from rank 25 to rank 38. -SR ID: 1636, mesh bin: 90845 is being transferred from rank 25 to rank 38. -SR ID: 2031, mesh bin: 95872 is being transferred from rank 9 to rank 38. -SR ID: 1259, mesh bin: 85127 is being transferred from rank 25 to rank 38. -SR ID: 1832, mesh bin: 95881 is being transferred from rank 38 to rank 0. -SR ID: 1819, mesh bin: 94062 is being transferred from rank 25 to rank 38. -SR ID: 1622, mesh bin: 89773 is being transferred from rank 25 to rank 38. -SR ID: 1131, mesh bin: 85842 is being transferred from rank 25 to rank 38. -SR ID: 1131, mesh bin: 86914 is being transferred from rank 25 to rank 38. -SR ID: 1831, mesh bin: 95872 is being transferred from rank 9 to rank 38. -SR ID: 794, mesh bin: 84470 is being transferred from rank 38 to rank 0. -SR ID: 1831, mesh bin: 95873 is being transferred from rank 9 to rank 38. -SR ID: 1831, mesh bin: 95874 is being transferred from rank 9 to rank 38. -SR ID: 1831, mesh bin: 95875 is being transferred from rank 9 to rank 38. -SR ID: 1831, mesh bin: 95876 is being transferred from rank 9 to rank 38. -SR ID: 266, mesh bin: 83757 is being transferred from rank 38 to rank 0. -SR ID: 1429, mesh bin: 88036 is being transferred from rank 38 to rank 0. -SR ID: 1422, mesh bin: 89416 is being transferred from rank 25 to rank 38. -SR ID: 1447, mesh bin: 94811 is being transferred from rank 38 to rank 0. -SR ID: 1819, mesh bin: 92990 is being transferred from rank 25 to rank 38. -SR ID: 1641, mesh bin: 91602 is being transferred from rank 38 to rank 0. -SR ID: 1441, mesh bin: 90889 is being transferred from rank 38 to rank 0. -SR ID: 1637, mesh bin: 91918 is being transferred from rank 25 to rank 38. -SR ID: 1830, mesh bin: 95871 is being transferred from rank 9 to rank 38. -SR ID: 1830, mesh bin: 95870 is being transferred from rank 9 to rank 38. -SR ID: 1830, mesh bin: 95869 is being transferred from rank 9 to rank 38. -SR ID: 1832, mesh bin: 95168 is being transferred from rank 38 to rank 0. -SR ID: 1832, mesh bin: 95167 is being transferred from rank 38 to rank 0. -SR ID: 1819, mesh bin: 94419 is being transferred from rank 25 to rank 38. -SR ID: 2030, mesh bin: 95871 is being transferred from rank 9 to rank 38. -SR ID: 1819, mesh bin: 93347 is being transferred from rank 25 to rank 38. -SR ID: 1138, mesh bin: 86610 is being transferred from rank 38 to rank 0. -SR ID: 1422, mesh bin: 89058 is being transferred from rank 25 to rank 38. -SR ID: 1831, mesh bin: 96235 is being transferred from rank 9 to rank 38. -SR ID: 1266, mesh bin: 86966 is being transferred from rank 38 to rank 0. -SR ID: 1429, mesh bin: 89819 is being transferred from rank 38 to rank 0. -SR ID: 1447, mesh bin: 93385 is being transferred from rank 38 to rank 0. -SR ID: 1636, mesh bin: 90130 is being transferred from rank 25 to rank 38. -SR ID: 266, mesh bin: 84114 is being transferred from rank 38 to rank 0. -SR ID: 266, mesh bin: 84113 is being transferred from rank 38 to rank 0. -SR ID: 1131, mesh bin: 86199 is being transferred from rank 25 to rank 38. -SR ID: 266, mesh bin: 83044 is being transferred from rank 38 to rank 0. -SR ID: 1131, mesh bin: 87271 is being transferred from rank 25 to rank 38. -SR ID: 1429, mesh bin: 87679 is being transferred from rank 38 to rank 0. -SR ID: 1640, mesh bin: 91958 is being transferred from rank 38 to rank 0. -SR ID: 1429, mesh bin: 88749 is being transferred from rank 38 to rank 0. -SR ID: 1629, mesh bin: 87680 is being transferred from rank 38 to rank 0. -SR ID: 1629, mesh bin: 87679 is being transferred from rank 38 to rank 0. -SR ID: 1429, mesh bin: 88393 is being transferred from rank 38 to rank 0. -SR ID: 1819, mesh bin: 93705 is being transferred from rank 25 to rank 38. -SR ID: 1830, mesh bin: 95511 is being transferred from rank 9 to rank 38. -SR ID: 1830, mesh bin: 95510 is being transferred from rank 9 to rank 38. -SR ID: 1830, mesh bin: 95509 is being transferred from rank 9 to rank 38. -SR ID: 1447, mesh bin: 94454 is being transferred from rank 38 to rank 0. -SR ID: 1637, mesh bin: 91203 is being transferred from rank 25 to rank 38. -SR ID: 1138, mesh bin: 86967 is being transferred from rank 38 to rank 0. -SR ID: 2029, mesh bin: 95506 is being transferred from rank 9 to rank 38. -SR ID: 1138, mesh bin: 86966 is being transferred from rank 38 to rank 0. -SR ID: 2029, mesh bin: 95507 is being transferred from rank 9 to rank 38. -SR ID: 1829, mesh bin: 95506 is being transferred from rank 9 to rank 38. -SR ID: 1637, mesh bin: 92275 is being transferred from rank 25 to rank 38. -SR ID: 1829, mesh bin: 95504 is being transferred from rank 9 to rank 38. -SR ID: 1829, mesh bin: 95505 is being transferred from rank 9 to rank 38. -SR ID: 1629, mesh bin: 89819 is being transferred from rank 38 to rank 0. -SR ID: 266, mesh bin: 83401 is being transferred from rank 38 to rank 0. -SR ID: 1447, mesh bin: 94098 is being transferred from rank 38 to rank 0. -SR ID: 2030, mesh bin: 95508 is being transferred from rank 9 to rank 38. -SR ID: 1829, mesh bin: 95503 is being transferred from rank 9 to rank 38. -SR ID: 1647, mesh bin: 92671 is being transferred from rank 38 to rank 0. -SR ID: 1647, mesh bin: 92672 is being transferred from rank 38 to rank 0. -SR ID: 1422, mesh bin: 87986 is being transferred from rank 25 to rank 38. -SR ID: 794, mesh bin: 84827 is being transferred from rank 38 to rank 0. -SR ID: 1636, mesh bin: 90488 is being transferred from rank 25 to rank 38. -SR ID: 1259, mesh bin: 85484 is being transferred from rank 25 to rank 38. -SR ID: 1259, mesh bin: 85485 is being transferred from rank 25 to rank 38. -SR ID: 2031, mesh bin: 96235 is being transferred from rank 9 to rank 38. -SR ID: 1832, mesh bin: 96236 is being transferred from rank 9 to rank 38. -SR ID: 1832, mesh bin: 96237 is being transferred from rank 9 to rank 38. -SR ID: 1622, mesh bin: 89416 is being transferred from rank 25 to rank 38. -SR ID: 1429, mesh bin: 89106 is being transferred from rank 38 to rank 0. -SR ID: 1641, mesh bin: 90175 is being transferred from rank 38 to rank 0. -SR ID: 786, mesh bin: 84770 is being transferred from rank 25 to rank 38. -SR ID: 1131, mesh bin: 86557 is being transferred from rank 25 to rank 38. -SR ID: 1641, mesh bin: 90176 is being transferred from rank 38 to rank 0. -SR ID: 1647, mesh bin: 94811 is being transferred from rank 38 to rank 0. -SR ID: 2032, mesh bin: 96236 is being transferred from rank 9 to rank 38. -SR ID: 1266, mesh bin: 87323 is being transferred from rank 38 to rank 0. -SR ID: 1640, mesh bin: 92315 is being transferred from rank 38 to rank 0. -SR ID: 1422, mesh bin: 88701 is being transferred from rank 25 to rank 38. -SR ID: 1612, mesh bin: 82188 is being transferred from rank 39 to rank 22. -SR ID: 840, mesh bin: 90406 is being transferred from rank 39 to rank 22. -SR ID: 1597, mesh bin: 79330 is being transferred from rank 39 to rank 22. -SR ID: 316, mesh bin: 91863 is being transferred from rank 25 to rank 39. -SR ID: 1119, mesh bin: 84332 is being transferred from rank 39 to rank 22. -SR ID: 316, mesh bin: 90795 is being transferred from rank 25 to rank 39. -SR ID: 316, mesh bin: 90794 is being transferred from rank 25 to rank 39. -SR ID: 1412, mesh bin: 81474 is being transferred from rank 39 to rank 22. -SR ID: 1816, mesh bin: 77193 is being transferred from rank 39 to rank 15. -SR ID: 2244, mesh bin: 78617 is being transferred from rank 39 to rank 15. -SR ID: 2244, mesh bin: 77549 is being transferred from rank 39 to rank 15. -SR ID: 1381, mesh bin: 72564 is being transferred from rank 39 to rank 15. -SR ID: 280, mesh bin: 85047 is being transferred from rank 39 to rank 22. -SR ID: 2148, mesh bin: 77905 is being transferred from rank 39 to rank 15. -SR ID: 253, mesh bin: 83313 is being transferred from rank 25 to rank 39. -SR ID: 2148, mesh bin: 77904 is being transferred from rank 39 to rank 15. -SR ID: 1382, mesh bin: 72572 is being transferred from rank 39 to rank 1. -SR ID: 1382, mesh bin: 72571 is being transferred from rank 39 to rank 1. -SR ID: 825, mesh bin: 87548 is being transferred from rank 39 to rank 22. -SR ID: 316, mesh bin: 92220 is being transferred from rank 25 to rank 39. -SR ID: 1253, mesh bin: 86519 is being transferred from rank 25 to rank 39. -SR ID: 316, mesh bin: 91150 is being transferred from rank 25 to rank 39. -SR ID: 1582, mesh bin: 72570 is being transferred from rank 39 to rank 1. -SR ID: 1582, mesh bin: 72569 is being transferred from rank 39 to rank 1. -SR ID: 1126, mesh bin: 85094 is being transferred from rank 25 to rank 39. -SR ID: 859, mesh bin: 92575 is being transferred from rank 25 to rank 39. -SR ID: 859, mesh bin: 92576 is being transferred from rank 25 to rank 39. -SR ID: 253, mesh bin: 83669 is being transferred from rank 25 to rank 39. -SR ID: 1581, mesh bin: 73633 is being transferred from rank 39 to rank 15. -SR ID: 253, mesh bin: 84738 is being transferred from rank 25 to rank 39. -SR ID: 1612, mesh bin: 80402 is being transferred from rank 39 to rank 22. -SR ID: 781, mesh bin: 83313 is being transferred from rank 25 to rank 39. -SR ID: 1816, mesh bin: 76480 is being transferred from rank 39 to rank 15. -SR ID: 1816, mesh bin: 76481 is being transferred from rank 39 to rank 15. -SR ID: 1142, mesh bin: 89370 is being transferred from rank 25 to rank 39. -SR ID: 1581, mesh bin: 72565 is being transferred from rank 39 to rank 1. -SR ID: 1581, mesh bin: 72564 is being transferred from rank 39 to rank 15. -SR ID: 1381, mesh bin: 73276 is being transferred from rank 39 to rank 15. -SR ID: 312, mesh bin: 90406 is being transferred from rank 39 to rank 22. -SR ID: 1381, mesh bin: 73277 is being transferred from rank 39 to rank 15. -SR ID: 1581, mesh bin: 72568 is being transferred from rank 39 to rank 1. -SR ID: 1581, mesh bin: 72566 is being transferred from rank 39 to rank 1. -SR ID: 1581, mesh bin: 72567 is being transferred from rank 39 to rank 1. -SR ID: 825, mesh bin: 87905 is being transferred from rank 39 to rank 22. -SR ID: 1387, mesh bin: 75056 is being transferred from rank 39 to rank 15. -SR ID: 2009, mesh bin: 73632 is being transferred from rank 39 to rank 15. -SR ID: 1587, mesh bin: 76125 is being transferred from rank 39 to rank 15. -SR ID: 858, mesh bin: 93288 is being transferred from rank 25 to rank 39. -SR ID: 1809, mesh bin: 74701 is being transferred from rank 39 to rank 15. -SR ID: 1597, mesh bin: 78973 is being transferred from rank 39 to rank 22. -SR ID: 1229, mesh bin: 73297 is being transferred from rank 39 to rank 1. -SR ID: 1587, mesh bin: 75057 is being transferred from rank 39 to rank 15. -SR ID: 1583, mesh bin: 73296 is being transferred from rank 39 to rank 1. -SR ID: 808, mesh bin: 86833 is being transferred from rank 39 to rank 22. -SR ID: 826, mesh bin: 89691 is being transferred from rank 39 to rank 22. -SR ID: 2009, mesh bin: 74700 is being transferred from rank 39 to rank 15. -SR ID: 316, mesh bin: 90438 is being transferred from rank 25 to rank 39. -SR ID: 844, mesh bin: 92219 is being transferred from rank 25 to rank 39. -SR ID: 2148, mesh bin: 78261 is being transferred from rank 39 to rank 15. -SR ID: 2148, mesh bin: 78260 is being transferred from rank 39 to rank 15. -SR ID: 2016, mesh bin: 76124 is being transferred from rank 39 to rank 15. -SR ID: 1387, mesh bin: 75768 is being transferred from rank 39 to rank 15. -SR ID: 1809, mesh bin: 73988 is being transferred from rank 39 to rank 15. -SR ID: 1126, mesh bin: 85451 is being transferred from rank 25 to rank 39. -SR ID: 1126, mesh bin: 85450 is being transferred from rank 25 to rank 39. -SR ID: 330, mesh bin: 94357 is being transferred from rank 25 to rank 39. -SR ID: 1270, mesh bin: 87588 is being transferred from rank 25 to rank 39. -SR ID: 1809, mesh bin: 73989 is being transferred from rank 39 to rank 15. -SR ID: 1383, mesh bin: 72934 is being transferred from rank 39 to rank 1. -SR ID: 1383, mesh bin: 72935 is being transferred from rank 39 to rank 1. -SR ID: 859, mesh bin: 92932 is being transferred from rank 25 to rank 39. -SR ID: 330, mesh bin: 93288 is being transferred from rank 25 to rank 39. -SR ID: 808, mesh bin: 87190 is being transferred from rank 39 to rank 22. -SR ID: 1612, mesh bin: 80759 is being transferred from rank 39 to rank 22. -SR ID: 1142, mesh bin: 88657 is being transferred from rank 25 to rank 39. -SR ID: 2016, mesh bin: 77192 is being transferred from rank 39 to rank 15. -SR ID: 312, mesh bin: 91478 is being transferred from rank 39 to rank 22. -SR ID: 1809, mesh bin: 74344 is being transferred from rank 39 to rank 15. -SR ID: 830, mesh bin: 89725 is being transferred from rank 25 to rank 39. -SR ID: 1809, mesh bin: 74345 is being transferred from rank 39 to rank 15. -SR ID: 1412, mesh bin: 81116 is being transferred from rank 39 to rank 22. -SR ID: 826, mesh bin: 88977 is being transferred from rank 39 to rank 22. -SR ID: 1612, mesh bin: 81831 is being transferred from rank 39 to rank 22. -SR ID: 1119, mesh bin: 82903 is being transferred from rank 39 to rank 22. -SR ID: 1587, mesh bin: 75768 is being transferred from rank 39 to rank 15. -SR ID: 840, mesh bin: 90049 is being transferred from rank 39 to rank 22. -SR ID: 1597, mesh bin: 79687 is being transferred from rank 39 to rank 22. -SR ID: 330, mesh bin: 94000 is being transferred from rank 25 to rank 39. -SR ID: 1387, mesh bin: 75412 is being transferred from rank 39 to rank 15. -SR ID: 1387, mesh bin: 75413 is being transferred from rank 39 to rank 15. -SR ID: 280, mesh bin: 85404 is being transferred from rank 39 to rank 22. -SR ID: 1597, mesh bin: 78616 is being transferred from rank 39 to rank 15. -SR ID: 1253, mesh bin: 86876 is being transferred from rank 25 to rank 39. -SR ID: 1253, mesh bin: 86875 is being transferred from rank 25 to rank 39. -SR ID: 280, mesh bin: 86476 is being transferred from rank 39 to rank 22. -SR ID: 1583, mesh bin: 72933 is being transferred from rank 39 to rank 1. -SR ID: 1583, mesh bin: 72934 is being transferred from rank 39 to rank 1. -SR ID: 2148, mesh bin: 77548 is being transferred from rank 39 to rank 15. -SR ID: 1611, mesh bin: 80044 is being transferred from rank 39 to rank 22. -SR ID: 1412, mesh bin: 81831 is being transferred from rank 39 to rank 22. -SR ID: 781, mesh bin: 84738 is being transferred from rank 25 to rank 39. -SR ID: 844, mesh bin: 90438 is being transferred from rank 25 to rank 39. -SR ID: 1816, mesh bin: 76836 is being transferred from rank 39 to rank 15. -SR ID: 826, mesh bin: 89334 is being transferred from rank 39 to rank 22. -SR ID: 1816, mesh bin: 76837 is being transferred from rank 39 to rank 15. -SR ID: 253, mesh bin: 84026 is being transferred from rank 25 to rank 39. -SR ID: 316, mesh bin: 91507 is being transferred from rank 25 to rank 39. -SR ID: 1126, mesh bin: 85807 is being transferred from rank 25 to rank 39. -SR ID: 1126, mesh bin: 85806 is being transferred from rank 25 to rank 39. -SR ID: 1582, mesh bin: 72932 is being transferred from rank 39 to rank 1. -SR ID: 1582, mesh bin: 72931 is being transferred from rank 39 to rank 1. -SR ID: 1142, mesh bin: 89013 is being transferred from rank 25 to rank 39. -SR ID: 280, mesh bin: 86833 is being transferred from rank 39 to rank 22. -SR ID: 330, mesh bin: 93644 is being transferred from rank 25 to rank 39. -SR ID: 1142, mesh bin: 87944 is being transferred from rank 25 to rank 39. -SR ID: 1253, mesh bin: 87232 is being transferred from rank 25 to rank 39. -SR ID: 1254, mesh bin: 86163 is being transferred from rank 25 to rank 39. -SR ID: 1254, mesh bin: 85094 is being transferred from rank 25 to rank 39. -SR ID: 1381, mesh bin: 72920 is being transferred from rank 39 to rank 15. -SR ID: 1381, mesh bin: 72921 is being transferred from rank 39 to rank 15. -SR ID: 1101, mesh bin: 73300 is being transferred from rank 39 to rank 1. -SR ID: 1101, mesh bin: 73301 is being transferred from rank 39 to rank 1. -SR ID: 1101, mesh bin: 73298 is being transferred from rank 39 to rank 1. -SR ID: 1101, mesh bin: 73299 is being transferred from rank 39 to rank 1. -SR ID: 1101, mesh bin: 73297 is being transferred from rank 39 to rank 1. -SR ID: 280, mesh bin: 85761 is being transferred from rank 39 to rank 22. -SR ID: 1101, mesh bin: 73303 is being transferred from rank 39 to rank 1. -SR ID: 844, mesh bin: 90082 is being transferred from rank 25 to rank 39. -SR ID: 312, mesh bin: 91121 is being transferred from rank 39 to rank 22. -SR ID: 1119, mesh bin: 83260 is being transferred from rank 39 to rank 22. -SR ID: 253, mesh bin: 84382 is being transferred from rank 25 to rank 39. -SR ID: 4, mesh bin: 119186 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 122042 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 123113 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 127041 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 125970 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 123827 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 120971 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 119900 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 109241 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 109237 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 109239 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 109238 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 124899 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 121685 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 125613 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 122756 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 120614 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 126684 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 108873 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 108872 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 108874 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 108871 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 118472 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 127398 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 108870 is being transferred from rank 40 to rank 35. -SR ID: 4, mesh bin: 119543 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 122399 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 120257 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 121328 is being transferred from rank 40 to rank 12. -SR ID: 4, mesh bin: 126327 is being transferred from rank 40 to rank 12. -SR ID: 3, mesh bin: 61356 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 51352 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 61355 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 50252 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50253 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50254 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50255 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 64200 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64201 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64202 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64203 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 53140 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 53141 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 62069 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 54213 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 54214 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 59215 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 49206 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 57074 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 49196 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49197 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49193 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49194 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49195 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 63139 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 49922 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 50960 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50957 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50958 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50959 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 54928 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 49900 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49901 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49902 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 56001 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 49899 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 64908 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64909 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64910 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64906 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 53856 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 64907 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 67028 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 67029 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 63848 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 63847 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65968 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65969 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65970 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65967 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 60999 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 58858 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 50995 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 51710 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 61712 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 48849 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 48844 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 56716 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 56717 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 48841 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 48842 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 48843 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 66676 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 57788 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 66677 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 66674 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 66675 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 55644 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 52783 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 62783 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 60642 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 49548 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49549 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49550 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 49547 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 53498 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 58501 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 50637 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 48488 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 48490 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 48491 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 49564 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 50608 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50604 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50605 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50606 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 50607 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 63494 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 63495 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65616 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65614 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65615 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64553 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64554 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 64555 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 62426 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 54571 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 59572 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 66321 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 66322 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 52425 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 60285 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 51312 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 51311 is being transferred from rank 18 to rank 41. -SR ID: 3, mesh bin: 55286 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 57431 is being transferred from rank 41 to rank 33. -SR ID: 3, mesh bin: 56359 is being transferred from rank 10 to rank 41. -SR ID: 3, mesh bin: 65260 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65261 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65262 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 65263 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 67384 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 67382 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 67383 is being transferred from rank 41 to rank 7. -SR ID: 3, mesh bin: 54167 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 49160 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 49161 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 50236 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 50235 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 60236 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 58094 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 65234 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 63092 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 55238 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 64163 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 55952 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 48086 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 62021 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 50952 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 59879 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 52025 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 54881 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 64877 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 65948 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 49877 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 49878 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 47728 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 57737 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 47727 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 62735 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 53810 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 63806 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 61664 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 58808 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 48802 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 48803 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 49519 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 64520 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 54524 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 55595 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 59522 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 50594 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 65591 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 63449 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 47369 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 56309 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 48444 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 48445 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 48443 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 51310 is being transferred from rank 42 to rank 18. -SR ID: 3, mesh bin: 51311 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 61307 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 52382 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 62378 is being transferred from rank 42 to rank 41. -SR ID: 3, mesh bin: 57380 is being transferred from rank 42 to rank 41. -SR ID: 996, mesh bin: 115422 is being transferred from rank 43 to rank 11. -SR ID: 1168, mesh bin: 121504 is being transferred from rank 43 to rank 11. -SR ID: 1168, mesh bin: 121505 is being transferred from rank 43 to rank 11. -SR ID: 979, mesh bin: 112917 is being transferred from rank 43 to rank 11. -SR ID: 966, mesh bin: 111844 is being transferred from rank 43 to rank 11. -SR ID: 451, mesh bin: 113990 is being transferred from rank 43 to rank 11. -SR ID: 451, mesh bin: 113991 is being transferred from rank 43 to rank 11. -SR ID: 469, mesh bin: 116137 is being transferred from rank 43 to rank 11. -SR ID: 484, mesh bin: 118284 is being transferred from rank 43 to rank 11. -SR ID: 451, mesh bin: 112917 is being transferred from rank 43 to rank 11. -SR ID: 451, mesh bin: 113632 is being transferred from rank 43 to rank 11. -SR ID: 469, mesh bin: 117211 is being transferred from rank 43 to rank 11. -SR ID: 979, mesh bin: 114706 is being transferred from rank 43 to rank 11. -SR ID: 1168, mesh bin: 120789 is being transferred from rank 43 to rank 11. -SR ID: 997, mesh bin: 117211 is being transferred from rank 43 to rank 11. -SR ID: 484, mesh bin: 117927 is being transferred from rank 43 to rank 11. -SR ID: 484, mesh bin: 117926 is being transferred from rank 43 to rank 11. -SR ID: 2287, mesh bin: 112559 is being transferred from rank 43 to rank 11. -SR ID: 1012, mesh bin: 118999 is being transferred from rank 43 to rank 11. -SR ID: 469, mesh bin: 116853 is being transferred from rank 43 to rank 11. -SR ID: 1296, mesh bin: 120073 is being transferred from rank 43 to rank 11. -SR ID: 996, mesh bin: 115064 is being transferred from rank 43 to rank 11. -SR ID: 451, mesh bin: 114706 is being transferred from rank 43 to rank 11. -SR ID: 438, mesh bin: 111486 is being transferred from rank 43 to rank 11. -SR ID: 1294, mesh bin: 119000 is being transferred from rank 43 to rank 11. -SR ID: 451, mesh bin: 114348 is being transferred from rank 43 to rank 11. -SR ID: 451, mesh bin: 114349 is being transferred from rank 43 to rank 11. -SR ID: 966, mesh bin: 112202 is being transferred from rank 43 to rank 11. -SR ID: 966, mesh bin: 112201 is being transferred from rank 43 to rank 11. -SR ID: 451, mesh bin: 113275 is being transferred from rank 43 to rank 11. -SR ID: 438, mesh bin: 111128 is being transferred from rank 43 to rank 11. -SR ID: 1168, mesh bin: 121146 is being transferred from rank 43 to rank 11. -SR ID: 1168, mesh bin: 121147 is being transferred from rank 43 to rank 11. -SR ID: 996, mesh bin: 115779 is being transferred from rank 43 to rank 11. -SR ID: 484, mesh bin: 117569 is being transferred from rank 43 to rank 11. -SR ID: 1168, mesh bin: 120073 is being transferred from rank 43 to rank 11. -SR ID: 997, mesh bin: 115780 is being transferred from rank 43 to rank 11. -SR ID: 469, mesh bin: 116495 is being transferred from rank 43 to rank 11. -SR ID: 1294, mesh bin: 119358 is being transferred from rank 43 to rank 11. -SR ID: 484, mesh bin: 118642 is being transferred from rank 43 to rank 11. -SR ID: 2189, mesh bin: 112514 is being transferred from rank 43 to rank 2. -SR ID: 1012, mesh bin: 117568 is being transferred from rank 43 to rank 11. -SR ID: 1294, mesh bin: 119716 is being transferred from rank 43 to rank 11. -SR ID: 1294, mesh bin: 119715 is being transferred from rank 43 to rank 11. -SR ID: 438, mesh bin: 111844 is being transferred from rank 43 to rank 11. -SR ID: 438, mesh bin: 111843 is being transferred from rank 43 to rank 11. -SR ID: 1012, mesh bin: 118642 is being transferred from rank 43 to rank 11. -SR ID: 1168, mesh bin: 120431 is being transferred from rank 43 to rank 11. -SR ID: 438, mesh bin: 110770 is being transferred from rank 43 to rank 11. -SR ID: 2, mesh bin: 23832 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 21691 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 31683 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 25663 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 17799 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 35633 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 17780 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 26687 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 22804 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 17779 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17778 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 35632 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 35631 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 17783 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 27758 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 17782 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17781 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 21731 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 32760 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 32759 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 26736 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 36708 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 36710 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 36709 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 33478 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 33477 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 25616 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 23475 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 18514 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 19586 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 27451 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 37427 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 20620 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 17441 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 18484 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 18483 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 18482 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 18485 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 28471 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 19550 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 29542 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 24591 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 34555 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 22446 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 23519 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 24546 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 21334 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 17428 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17427 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 35273 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 17431 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17430 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 27401 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 17429 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 35272 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 25260 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 32401 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 20301 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 32400 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 26379 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 26378 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 30256 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 19229 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 22405 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 31326 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 24234 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 24233 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 25306 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 36350 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 26330 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 18132 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17084 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 18131 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 18130 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 18129 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 18134 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 18133 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17076 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17080 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17079 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17078 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 17077 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 28114 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 19193 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 29185 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 22089 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 23161 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 34196 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 24189 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 37068 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 37067 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 32042 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 32041 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 38145 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 33120 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 33119 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 22048 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 33118 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 18156 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 18157 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 26021 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 21016 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 24903 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 29899 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 19907 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 18871 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 35992 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 35991 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 20977 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 35990 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 23876 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 24948 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 33836 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 33837 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 25973 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 30969 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 37787 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 37786 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 19944 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 19943 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 28828 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 16724 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 16726 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 16725 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 16727 is being transferred from rank 44 to rank 16. -SR ID: 2, mesh bin: 34915 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 34914 is being transferred from rank 18 to rank 44. -SR ID: 2, mesh bin: 18836 is being transferred from rank 44 to rank 30. -SR ID: 2, mesh bin: 18838 is being transferred from rank 5 to rank 44. -SR ID: 2, mesh bin: 18837 is being transferred from rank 5 to rank 44. -SR ID: 230, mesh bin: 78392 is being transferred from rank 38 to rank 45. -SR ID: 230, mesh bin: 78391 is being transferred from rank 38 to rank 45. -SR ID: 230, mesh bin: 78390 is being transferred from rank 38 to rank 45. -SR ID: 230, mesh bin: 78389 is being transferred from rank 38 to rank 45. -SR ID: 157, mesh bin: 66981 is being transferred from rank 45 to rank 42. -SR ID: 140, mesh bin: 63762 is being transferred from rank 45 to rank 42. -SR ID: 140, mesh bin: 63761 is being transferred from rank 45 to rank 42. -SR ID: 758, mesh bin: 78029 is being transferred from rank 38 to rank 45. -SR ID: 157, mesh bin: 65908 is being transferred from rank 45 to rank 42. -SR ID: 655, mesh bin: 62331 is being transferred from rank 45 to rank 42. -SR ID: 2268, mesh bin: 78023 is being transferred from rank 38 to rank 45. -SR ID: 2268, mesh bin: 78022 is being transferred from rank 38 to rank 45. -SR ID: 2268, mesh bin: 78028 is being transferred from rank 38 to rank 45. -SR ID: 127, mesh bin: 61615 is being transferred from rank 45 to rank 42. -SR ID: 2258, mesh bin: 64477 is being transferred from rank 45 to rank 42. -SR ID: 703, mesh bin: 67697 is being transferred from rank 45 to rank 42. -SR ID: 758, mesh bin: 78392 is being transferred from rank 38 to rank 45. -SR ID: 668, mesh bin: 62688 is being transferred from rank 45 to rank 42. -SR ID: 229, mesh bin: 77660 is being transferred from rank 38 to rank 45. -SR ID: 685, mesh bin: 66981 is being transferred from rank 45 to rank 42. -SR ID: 157, mesh bin: 65193 is being transferred from rank 45 to rank 42. -SR ID: 741, mesh bin: 77289 is being transferred from rank 38 to rank 45. -SR ID: 757, mesh bin: 77658 is being transferred from rank 38 to rank 45. -SR ID: 2267, mesh bin: 77649 is being transferred from rank 38 to rank 45. -SR ID: 230, mesh bin: 78031 is being transferred from rank 38 to rank 45. -SR ID: 230, mesh bin: 78030 is being transferred from rank 38 to rank 45. -SR ID: 757, mesh bin: 77660 is being transferred from rank 38 to rank 45. -SR ID: 127, mesh bin: 61973 is being transferred from rank 45 to rank 42. -SR ID: 157, mesh bin: 66266 is being transferred from rank 45 to rank 42. -SR ID: 759, mesh bin: 78393 is being transferred from rank 38 to rank 45. -SR ID: 756, mesh bin: 77657 is being transferred from rank 38 to rank 45. -SR ID: 756, mesh bin: 77656 is being transferred from rank 38 to rank 45. -SR ID: 756, mesh bin: 77653 is being transferred from rank 38 to rank 45. -SR ID: 756, mesh bin: 77652 is being transferred from rank 38 to rank 45. -SR ID: 756, mesh bin: 77655 is being transferred from rank 38 to rank 45. -SR ID: 756, mesh bin: 77654 is being transferred from rank 38 to rank 45. -SR ID: 685, mesh bin: 65193 is being transferred from rank 45 to rank 42. -SR ID: 668, mesh bin: 64119 is being transferred from rank 45 to rank 42. -SR ID: 157, mesh bin: 65550 is being transferred from rank 45 to rank 42. -SR ID: 157, mesh bin: 65551 is being transferred from rank 45 to rank 42. -SR ID: 140, mesh bin: 63404 is being transferred from rank 45 to rank 42. -SR ID: 685, mesh bin: 67339 is being transferred from rank 45 to rank 42. -SR ID: 2258, mesh bin: 64835 is being transferred from rank 45 to rank 42. -SR ID: 2258, mesh bin: 64120 is being transferred from rank 45 to rank 42. -SR ID: 157, mesh bin: 66624 is being transferred from rank 45 to rank 42. -SR ID: 655, mesh bin: 60900 is being transferred from rank 45 to rank 42. -SR ID: 2172, mesh bin: 78027 is being transferred from rank 38 to rank 45. -SR ID: 2172, mesh bin: 78026 is being transferred from rank 38 to rank 45. -SR ID: 2172, mesh bin: 78023 is being transferred from rank 38 to rank 45. -SR ID: 2172, mesh bin: 78025 is being transferred from rank 38 to rank 45. -SR ID: 2172, mesh bin: 78024 is being transferred from rank 38 to rank 45. -SR ID: 231, mesh bin: 78393 is being transferred from rank 38 to rank 45. -SR ID: 231, mesh bin: 78394 is being transferred from rank 38 to rank 45. -SR ID: 231, mesh bin: 78395 is being transferred from rank 38 to rank 45. -SR ID: 231, mesh bin: 78396 is being transferred from rank 38 to rank 45. -SR ID: 127, mesh bin: 61257 is being transferred from rank 45 to rank 42. -SR ID: 127, mesh bin: 61258 is being transferred from rank 45 to rank 42. -SR ID: 127, mesh bin: 62330 is being transferred from rank 45 to rank 42. -SR ID: 140, mesh bin: 62689 is being transferred from rank 45 to rank 42. -SR ID: 757, mesh bin: 78020 is being transferred from rank 38 to rank 45. -SR ID: 4, mesh bin: 115209 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 115208 is being transferred from rank 46 to rank 12. -SR ID: 2069, mesh bin: 107309 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 113071 is being transferred from rank 46 to rank 12. -SR ID: 2070, mesh bin: 105169 is being transferred from rank 9 to rank 46. -SR ID: 1880, mesh bin: 109806 is being transferred from rank 9 to rank 46. -SR ID: 1891, mesh bin: 111590 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 118059 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 118058 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 119128 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 109499 is being transferred from rank 46 to rank 14. -SR ID: 1900, mesh bin: 113023 is being transferred from rank 19 to rank 46. -SR ID: 1900, mesh bin: 113025 is being transferred from rank 19 to rank 46. -SR ID: 1900, mesh bin: 113024 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 101634 is being transferred from rank 46 to rank 14. -SR ID: 1891, mesh bin: 110163 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 106639 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 114140 is being transferred from rank 46 to rank 12. -SR ID: 1293, mesh bin: 116970 is being transferred from rank 19 to rank 46. -SR ID: 1293, mesh bin: 116971 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 104494 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 105567 is being transferred from rank 46 to rank 14. -SR ID: 2100, mesh bin: 113023 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 110572 is being transferred from rank 46 to rank 14. -SR ID: 1660, mesh bin: 101248 is being transferred from rank 0 to rank 46. -SR ID: 2215, mesh bin: 114100 is being transferred from rank 19 to rank 46. -SR ID: 2215, mesh bin: 114101 is being transferred from rank 19 to rank 46. -SR ID: 1660, mesh bin: 101254 is being transferred from rank 0 to rank 46. -SR ID: 1891, mesh bin: 111233 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 115921 is being transferred from rank 46 to rank 12. -SR ID: 1483, mesh bin: 115536 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 116990 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 114852 is being transferred from rank 46 to rank 12. -SR ID: 1661, mesh bin: 101261 is being transferred from rank 0 to rank 46. -SR ID: 1153, mesh bin: 101267 is being transferred from rank 0 to rank 46. -SR ID: 1153, mesh bin: 101268 is being transferred from rank 0 to rank 46. -SR ID: 1153, mesh bin: 101265 is being transferred from rank 0 to rank 46. -SR ID: 1153, mesh bin: 101266 is being transferred from rank 0 to rank 46. -SR ID: 1661, mesh bin: 101255 is being transferred from rank 0 to rank 46. -SR ID: 1153, mesh bin: 101263 is being transferred from rank 0 to rank 46. -SR ID: 1153, mesh bin: 101264 is being transferred from rank 0 to rank 46. -SR ID: 1153, mesh bin: 101262 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 102349 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 103422 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 111287 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 111286 is being transferred from rank 46 to rank 14. -SR ID: 1900, mesh bin: 113741 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 101277 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 101276 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 101273 is being transferred from rank 0 to rank 46. -SR ID: 1900, mesh bin: 113742 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 101272 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 101275 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 101274 is being transferred from rank 0 to rank 46. -SR ID: 1891, mesh bin: 110876 is being transferred from rank 9 to rank 46. -SR ID: 1891, mesh bin: 110877 is being transferred from rank 9 to rank 46. -SR ID: 1295, mesh bin: 117688 is being transferred from rank 19 to rank 46. -SR ID: 1295, mesh bin: 117689 is being transferred from rank 19 to rank 46. -SR ID: 2091, mesh bin: 112306 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 108427 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 106282 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 107354 is being transferred from rank 46 to rank 14. -SR ID: 2215, mesh bin: 114458 is being transferred from rank 19 to rank 46. -SR ID: 2215, mesh bin: 114459 is being transferred from rank 19 to rank 46. -SR ID: 1295, mesh bin: 118046 is being transferred from rank 19 to rank 46. -SR ID: 2091, mesh bin: 110163 is being transferred from rank 9 to rank 46. -SR ID: 1295, mesh bin: 118047 is being transferred from rank 19 to rank 46. -SR ID: 1900, mesh bin: 113383 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 112359 is being transferred from rank 46 to rank 12. -SR ID: 1900, mesh bin: 113382 is being transferred from rank 19 to rank 46. -SR ID: 1683, mesh bin: 116612 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 117703 is being transferred from rank 46 to rank 12. -SR ID: 1891, mesh bin: 111948 is being transferred from rank 19 to rank 46. -SR ID: 1891, mesh bin: 111947 is being transferred from rank 19 to rank 46. -SR ID: 1683, mesh bin: 115535 is being transferred from rank 19 to rank 46. -SR ID: 2100, mesh bin: 113742 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 101269 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 101271 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 101270 is being transferred from rank 0 to rank 46. -SR ID: 1483, mesh bin: 116611 is being transferred from rank 19 to rank 46. -SR ID: 1483, mesh bin: 116612 is being transferred from rank 19 to rank 46. -SR ID: 2311, mesh bin: 114100 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 113784 is being transferred from rank 46 to rank 12. -SR ID: 2100, mesh bin: 112665 is being transferred from rank 19 to rank 46. -SR ID: 1880, mesh bin: 108736 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 104137 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 105209 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 103064 is being transferred from rank 46 to rank 14. -SR ID: 1862, mesh bin: 104099 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 118771 is being transferred from rank 46 to rank 12. -SR ID: 2099, mesh bin: 112664 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 118764 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 110214 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 116633 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 116634 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 108069 is being transferred from rank 46 to rank 14. -SR ID: 1862, mesh bin: 103028 is being transferred from rank 9 to rank 46. -SR ID: 1880, mesh bin: 108379 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 110929 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 119484 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 119483 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 119482 is being transferred from rank 19 to rank 46. -SR ID: 2070, mesh bin: 106596 is being transferred from rank 9 to rank 46. -SR ID: 1862, mesh bin: 104455 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 114496 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 115565 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 105924 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 106997 is being transferred from rank 46 to rank 14. -SR ID: 2070, mesh bin: 105526 is being transferred from rank 9 to rank 46. -SR ID: 1862, mesh bin: 103385 is being transferred from rank 9 to rank 46. -SR ID: 2070, mesh bin: 105525 is being transferred from rank 9 to rank 46. -SR ID: 1281, mesh bin: 101268 is being transferred from rank 0 to rank 46. -SR ID: 1880, mesh bin: 109450 is being transferred from rank 9 to rank 46. -SR ID: 1880, mesh bin: 109449 is being transferred from rank 9 to rank 46. -SR ID: 1281, mesh bin: 101262 is being transferred from rank 0 to rank 46. -SR ID: 2080, mesh bin: 108023 is being transferred from rank 9 to rank 46. -SR ID: 1851, mesh bin: 101958 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 112002 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 101992 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 109857 is being transferred from rank 46 to rank 14. -SR ID: 2215, mesh bin: 114817 is being transferred from rank 19 to rank 46. -SR ID: 2215, mesh bin: 114818 is being transferred from rank 19 to rank 46. -SR ID: 2311, mesh bin: 114818 is being transferred from rank 19 to rank 46. -SR ID: 1460, mesh bin: 101253 is being transferred from rank 0 to rank 46. -SR ID: 1460, mesh bin: 101252 is being transferred from rank 0 to rank 46. -SR ID: 1460, mesh bin: 101254 is being transferred from rank 0 to rank 46. -SR ID: 1460, mesh bin: 101249 is being transferred from rank 0 to rank 46. -SR ID: 1460, mesh bin: 101248 is being transferred from rank 0 to rank 46. -SR ID: 1460, mesh bin: 101251 is being transferred from rank 0 to rank 46. -SR ID: 1460, mesh bin: 101250 is being transferred from rank 0 to rank 46. -SR ID: 2062, mesh bin: 104812 is being transferred from rank 9 to rank 46. -SR ID: 1483, mesh bin: 115894 is being transferred from rank 19 to rank 46. -SR ID: 1483, mesh bin: 115895 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 113428 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 113427 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 104852 is being transferred from rank 46 to rank 14. -SR ID: 1862, mesh bin: 103742 is being transferred from rank 9 to rank 46. -SR ID: 2051, mesh bin: 101247 is being transferred from rank 0 to rank 46. -SR ID: 1483, mesh bin: 116252 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 102707 is being transferred from rank 46 to rank 14. -SR ID: 1293, mesh bin: 117330 is being transferred from rank 19 to rank 46. -SR ID: 1483, mesh bin: 116253 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 118405 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 118415 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 116277 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 118407 is being transferred from rank 19 to rank 46. -SR ID: 1880, mesh bin: 109093 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 118406 is being transferred from rank 19 to rank 46. -SR ID: 1862, mesh bin: 102672 is being transferred from rank 9 to rank 46. -SR ID: 1851, mesh bin: 102315 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 117346 is being transferred from rank 46 to rank 12. -SR ID: 4, mesh bin: 107712 is being transferred from rank 46 to rank 14. -SR ID: 1165, mesh bin: 117329 is being transferred from rank 19 to rank 46. -SR ID: 1851, mesh bin: 101246 is being transferred from rank 0 to rank 46. -SR ID: 1682, mesh bin: 115176 is being transferred from rank 19 to rank 46. -SR ID: 1851, mesh bin: 101247 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 108784 is being transferred from rank 46 to rank 14. -SR ID: 1851, mesh bin: 101245 is being transferred from rank 9 to rank 46. -SR ID: 1682, mesh bin: 115177 is being transferred from rank 19 to rank 46. -SR ID: 4, mesh bin: 112715 is being transferred from rank 46 to rank 12. -SR ID: 1461, mesh bin: 101260 is being transferred from rank 0 to rank 46. -SR ID: 1461, mesh bin: 101261 is being transferred from rank 0 to rank 46. -SR ID: 2080, mesh bin: 109806 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 111644 is being transferred from rank 46 to rank 14. -SR ID: 4, mesh bin: 103779 is being transferred from rank 46 to rank 14. -SR ID: 2051, mesh bin: 102315 is being transferred from rank 9 to rank 46. -SR ID: 1891, mesh bin: 110520 is being transferred from rank 9 to rank 46. -SR ID: 1461, mesh bin: 101258 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 119124 is being transferred from rank 19 to rank 46. -SR ID: 1461, mesh bin: 101259 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 119127 is being transferred from rank 46 to rank 12. -SR ID: 1461, mesh bin: 101256 is being transferred from rank 0 to rank 46. -SR ID: 1461, mesh bin: 101257 is being transferred from rank 0 to rank 46. -SR ID: 1461, mesh bin: 101255 is being transferred from rank 0 to rank 46. -SR ID: 4, mesh bin: 119123 is being transferred from rank 19 to rank 46. -SR ID: 2080, mesh bin: 107666 is being transferred from rank 9 to rank 46. -SR ID: 4, mesh bin: 85581 is being transferred from rank 47 to rank 0. -SR ID: 4, mesh bin: 85580 is being transferred from rank 47 to rank 0. -SR ID: 4, mesh bin: 85577 is being transferred from rank 47 to rank 0. -SR ID: 4, mesh bin: 85579 is being transferred from rank 47 to rank 0. -SR ID: 4, mesh bin: 85582 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 81664 is being transferred from rank 47 to rank 26. -SR ID: 4, mesh bin: 85578 is being transferred from rank 47 to rank 0. -SR ID: 203, mesh bin: 74116 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 82732 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 68096 is being transferred from rank 47 to rank 7. -SR ID: 3, mesh bin: 78097 is being transferred from rank 47 to rank 7. -SR ID: 731, mesh bin: 72690 is being transferred from rank 45 to rank 47. -SR ID: 203, mesh bin: 73047 is being transferred from rank 45 to rank 47. -SR ID: 703, mesh bin: 68054 is being transferred from rank 45 to rank 47. -SR ID: 794, mesh bin: 83046 is being transferred from rank 47 to rank 0. -SR ID: 794, mesh bin: 83047 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 73096 is being transferred from rank 47 to rank 7. -SR ID: 3, mesh bin: 74168 is being transferred from rank 47 to rank 7. -SR ID: 3, mesh bin: 84492 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 84493 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 84494 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 84495 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 72025 is being transferred from rank 47 to rank 7. -SR ID: 2265, mesh bin: 75543 is being transferred from rank 45 to rank 47. -SR ID: 268, mesh bin: 83771 is being transferred from rank 47 to rank 0. -SR ID: 268, mesh bin: 83770 is being transferred from rank 47 to rank 0. -SR ID: 268, mesh bin: 83769 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 80595 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 79169 is being transferred from rank 47 to rank 7. -SR ID: 3, mesh bin: 69167 is being transferred from rank 47 to rank 7. -SR ID: 776, mesh bin: 80184 is being transferred from rank 38 to rank 47. -SR ID: 267, mesh bin: 83410 is being transferred from rank 47 to rank 0. -SR ID: 703, mesh bin: 67697 is being transferred from rank 47 to rank 42. -SR ID: 703, mesh bin: 67698 is being transferred from rank 47 to rank 42. -SR ID: 703, mesh bin: 67699 is being transferred from rank 47 to rank 42. -SR ID: 267, mesh bin: 83406 is being transferred from rank 47 to rank 0. -SR ID: 267, mesh bin: 83407 is being transferred from rank 47 to rank 0. -SR ID: 267, mesh bin: 83408 is being transferred from rank 47 to rank 0. -SR ID: 267, mesh bin: 83409 is being transferred from rank 47 to rank 0. -SR ID: 2169, mesh bin: 76613 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 83444 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 83445 is being transferred from rank 47 to rank 26. -SR ID: 231, mesh bin: 77683 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 84513 is being transferred from rank 47 to rank 26. -SR ID: 702, mesh bin: 69480 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 69882 is being transferred from rank 47 to rank 7. -SR ID: 3, mesh bin: 74882 is being transferred from rank 47 to rank 7. -SR ID: 702, mesh bin: 68410 is being transferred from rank 45 to rank 47. -SR ID: 249, mesh bin: 80899 is being transferred from rank 38 to rank 47. -SR ID: 3, mesh bin: 67023 is being transferred from rank 47 to rank 41. -SR ID: 3, mesh bin: 66997 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66998 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66999 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 65948 is being transferred from rank 47 to rank 41. -SR ID: 3, mesh bin: 65944 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 65945 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 65946 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 65947 is being transferred from rank 47 to rank 42. -SR ID: 159, mesh bin: 66994 is being transferred from rank 47 to rank 42. -SR ID: 159, mesh bin: 66995 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 79882 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 82376 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 78811 is being transferred from rank 47 to rank 7. -SR ID: 3, mesh bin: 70953 is being transferred from rank 47 to rank 7. -SR ID: 731, mesh bin: 74830 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 80239 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 75954 is being transferred from rank 47 to rank 7. -SR ID: 777, mesh bin: 82329 is being transferred from rank 38 to rank 47. -SR ID: 266, mesh bin: 82687 is being transferred from rank 38 to rank 47. -SR ID: 3, mesh bin: 81308 is being transferred from rank 47 to rank 26. -SR ID: 231, mesh bin: 78754 is being transferred from rank 38 to rank 47. -SR ID: 3, mesh bin: 68810 is being transferred from rank 47 to rank 7. -SR ID: 2169, mesh bin: 75900 is being transferred from rank 45 to rank 47. -SR ID: 2169, mesh bin: 76970 is being transferred from rank 45 to rank 47. -SR ID: 4, mesh bin: 85226 is being transferred from rank 47 to rank 26. -SR ID: 4, mesh bin: 85217 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 76668 is being transferred from rank 47 to rank 7. -SR ID: 3, mesh bin: 66664 is being transferred from rank 47 to rank 41. -SR ID: 3, mesh bin: 66665 is being transferred from rank 47 to rank 41. -SR ID: 4, mesh bin: 85216 is being transferred from rank 47 to rank 0. -SR ID: 4, mesh bin: 85218 is being transferred from rank 47 to rank 0. -SR ID: 266, mesh bin: 83046 is being transferred from rank 47 to rank 0. -SR ID: 794, mesh bin: 82687 is being transferred from rank 38 to rank 47. -SR ID: 759, mesh bin: 79826 is being transferred from rank 38 to rank 47. -SR ID: 266, mesh bin: 83045 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 66648 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66649 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 73811 is being transferred from rank 47 to rank 7. -SR ID: 2167, mesh bin: 70550 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 83089 is being transferred from rank 47 to rank 26. -SR ID: 159, mesh bin: 67349 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 72739 is being transferred from rank 47 to rank 7. -SR ID: 203, mesh bin: 73403 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 77740 is being transferred from rank 47 to rank 7. -SR ID: 687, mesh bin: 66995 is being transferred from rank 47 to rank 42. -SR ID: 687, mesh bin: 66996 is being transferred from rank 47 to rank 42. -SR ID: 2167, mesh bin: 71620 is being transferred from rank 45 to rank 47. -SR ID: 702, mesh bin: 69837 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 66644 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66645 is being transferred from rank 47 to rank 42. -SR ID: 249, mesh bin: 81971 is being transferred from rank 38 to rank 47. -SR ID: 3, mesh bin: 84157 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 66646 is being transferred from rank 47 to rank 42. -SR ID: 249, mesh bin: 81972 is being transferred from rank 38 to rank 47. -SR ID: 777, mesh bin: 80542 is being transferred from rank 38 to rank 47. -SR ID: 3, mesh bin: 66647 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 82020 is being transferred from rank 47 to rank 26. -SR ID: 2263, mesh bin: 70193 is being transferred from rank 45 to rank 47. -SR ID: 2263, mesh bin: 70194 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 84133 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 78454 is being transferred from rank 47 to rank 7. -SR ID: 3, mesh bin: 70596 is being transferred from rank 47 to rank 7. -SR ID: 174, mesh bin: 69123 is being transferred from rank 45 to rank 47. -SR ID: 702, mesh bin: 68767 is being transferred from rank 45 to rank 47. -SR ID: 231, mesh bin: 78040 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 68453 is being transferred from rank 47 to rank 7. -SR ID: 731, mesh bin: 74116 is being transferred from rank 45 to rank 47. -SR ID: 268, mesh bin: 84131 is being transferred from rank 47 to rank 0. -SR ID: 268, mesh bin: 84130 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 75597 is being transferred from rank 47 to rank 7. -SR ID: 268, mesh bin: 84132 is being transferred from rank 47 to rank 0. -SR ID: 731, mesh bin: 74473 is being transferred from rank 45 to rank 47. -SR ID: 687, mesh bin: 67349 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 84869 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 84870 is being transferred from rank 47 to rank 26. -SR ID: 3, mesh bin: 84856 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 84857 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 74525 is being transferred from rank 47 to rank 7. -SR ID: 687, mesh bin: 67347 is being transferred from rank 47 to rank 42. -SR ID: 231, mesh bin: 79111 is being transferred from rank 38 to rank 47. -SR ID: 3, mesh bin: 84854 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 84855 is being transferred from rank 47 to rank 0. -SR ID: 687, mesh bin: 67348 is being transferred from rank 47 to rank 42. -SR ID: 759, mesh bin: 77683 is being transferred from rank 45 to rank 47. -SR ID: 2167, mesh bin: 72333 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 79526 is being transferred from rank 47 to rank 7. -SR ID: 796, mesh bin: 83769 is being transferred from rank 47 to rank 0. -SR ID: 2265, mesh bin: 75186 is being transferred from rank 45 to rank 47. -SR ID: 2169, mesh bin: 76256 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 80951 is being transferred from rank 47 to rank 26. -SR ID: 686, mesh bin: 67346 is being transferred from rank 47 to rank 42. -SR ID: 686, mesh bin: 67345 is being transferred from rank 47 to rank 42. -SR ID: 2263, mesh bin: 72333 is being transferred from rank 45 to rank 47. -SR ID: 686, mesh bin: 67344 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 76311 is being transferred from rank 47 to rank 7. -SR ID: 231, mesh bin: 78396 is being transferred from rank 45 to rank 47. -SR ID: 795, mesh bin: 83768 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 66306 is being transferred from rank 47 to rank 41. -SR ID: 3, mesh bin: 66307 is being transferred from rank 47 to rank 41. -SR ID: 3, mesh bin: 66300 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66296 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66297 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66298 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66299 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66294 is being transferred from rank 47 to rank 42. -SR ID: 3, mesh bin: 66295 is being transferred from rank 47 to rank 42. -SR ID: 796, mesh bin: 84132 is being transferred from rank 47 to rank 0. -SR ID: 3, mesh bin: 83801 is being transferred from rank 47 to rank 26. -SR ID: 777, mesh bin: 80899 is being transferred from rank 38 to rank 47. -SR ID: 174, mesh bin: 68767 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 72382 is being transferred from rank 47 to rank 7. -SR ID: 2167, mesh bin: 70907 is being transferred from rank 45 to rank 47. -SR ID: 2169, mesh bin: 77326 is being transferred from rank 45 to rank 47. -SR ID: 2167, mesh bin: 71977 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 70239 is being transferred from rank 47 to rank 7. -SR ID: 249, mesh bin: 82329 is being transferred from rank 38 to rank 47. -SR ID: 231, mesh bin: 79469 is being transferred from rank 38 to rank 47. -SR ID: 249, mesh bin: 81257 is being transferred from rank 38 to rank 47. -SR ID: 3, mesh bin: 77383 is being transferred from rank 47 to rank 7. -SR ID: 249, mesh bin: 81614 is being transferred from rank 38 to rank 47. -SR ID: 2265, mesh bin: 77326 is being transferred from rank 45 to rank 47. -SR ID: 203, mesh bin: 73760 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 75239 is being transferred from rank 47 to rank 7. -SR ID: 203, mesh bin: 72690 is being transferred from rank 45 to rank 47. -SR ID: 3, mesh bin: 67381 is being transferred from rank 47 to rank 41. -SR ID: 1, mesh bin: 41910 is being transferred from rank 48 to rank 31. -SR ID: 8, mesh bin: 44410 is being transferred from rank 48 to rank 31. -SR ID: 0, mesh bin: 39004 is being transferred from rank 48 to rank 8. -SR ID: 1213, mesh bin: 52591 is being transferred from rank 1 to rank 48. -SR ID: 1073, mesh bin: 42927 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 35794 is being transferred from rank 48 to rank 8. -SR ID: 8, mesh bin: 43339 is being transferred from rank 48 to rank 31. -SR ID: 0, mesh bin: 41858 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 41857 is being transferred from rank 48 to rank 8. -SR ID: 1, mesh bin: 33683 is being transferred from rank 48 to rank 23. -SR ID: 1348, mesh bin: 51508 is being transferred from rank 36 to rank 48. -SR ID: 1, mesh bin: 33684 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33681 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33682 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33687 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33685 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33686 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33679 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33680 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33677 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33678 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 39718 is being transferred from rank 48 to rank 8. -SR ID: 1541, mesh bin: 49362 is being transferred from rank 36 to rank 48. -SR ID: 1, mesh bin: 39766 is being transferred from rank 48 to rank 31. -SR ID: 1, mesh bin: 37623 is being transferred from rank 48 to rank 31. -SR ID: 0, mesh bin: 36864 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 34724 is being transferred from rank 48 to rank 8. -SR ID: 1073, mesh bin: 44355 is being transferred from rank 36 to rank 48. -SR ID: 1, mesh bin: 34765 is being transferred from rank 48 to rank 31. -SR ID: 1, mesh bin: 33691 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33689 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33690 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 33693 is being transferred from rank 48 to rank 31. -SR ID: 0, mesh bin: 37578 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 33674 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 33673 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 33676 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 33668 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 33670 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 33672 is being transferred from rank 48 to rank 23. -SR ID: 1529, mesh bin: 46501 is being transferred from rank 36 to rank 48. -SR ID: 0, mesh bin: 33671 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 41501 is being transferred from rank 48 to rank 8. -SR ID: 1073, mesh bin: 43641 is being transferred from rank 48 to rank 8. -SR ID: 1, mesh bin: 41552 is being transferred from rank 48 to rank 31. -SR ID: 1, mesh bin: 39409 is being transferred from rank 48 to rank 31. -SR ID: 0, mesh bin: 38648 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 36508 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 36507 is being transferred from rank 48 to rank 8. -SR ID: 8, mesh bin: 42981 is being transferred from rank 48 to rank 31. -SR ID: 1, mesh bin: 36551 is being transferred from rank 48 to rank 31. -SR ID: 1073, mesh bin: 42571 is being transferred from rank 48 to rank 8. -SR ID: 8, mesh bin: 44053 is being transferred from rank 48 to rank 31. -SR ID: 1529, mesh bin: 47216 is being transferred from rank 36 to rank 48. -SR ID: 1, mesh bin: 40481 is being transferred from rank 48 to rank 31. -SR ID: 1213, mesh bin: 52954 is being transferred from rank 1 to rank 48. -SR ID: 1328, mesh bin: 45428 is being transferred from rank 36 to rank 48. -SR ID: 0, mesh bin: 39361 is being transferred from rank 48 to rank 8. -SR ID: 1213, mesh bin: 52953 is being transferred from rank 1 to rank 48. -SR ID: 1213, mesh bin: 52949 is being transferred from rank 1 to rank 48. -SR ID: 1355, mesh bin: 52588 is being transferred from rank 1 to rank 48. -SR ID: 0, mesh bin: 35438 is being transferred from rank 48 to rank 8. -SR ID: 536, mesh bin: 42981 is being transferred from rank 48 to rank 31. -SR ID: 1341, mesh bin: 49004 is being transferred from rank 36 to rank 48. -SR ID: 1341, mesh bin: 49005 is being transferred from rank 36 to rank 48. -SR ID: 1548, mesh bin: 50435 is being transferred from rank 36 to rank 48. -SR ID: 1528, mesh bin: 46143 is being transferred from rank 36 to rank 48. -SR ID: 0, mesh bin: 40431 is being transferred from rank 48 to rank 8. -SR ID: 1328, mesh bin: 45786 is being transferred from rank 36 to rank 48. -SR ID: 1328, mesh bin: 45785 is being transferred from rank 36 to rank 48. -SR ID: 1341, mesh bin: 47932 is being transferred from rank 36 to rank 48. -SR ID: 1, mesh bin: 38337 is being transferred from rank 48 to rank 31. -SR ID: 1341, mesh bin: 47931 is being transferred from rank 36 to rank 48. -SR ID: 596, mesh bin: 52955 is being transferred from rank 1 to rank 48. -SR ID: 1, mesh bin: 36194 is being transferred from rank 48 to rank 31. -SR ID: 1529, mesh bin: 46144 is being transferred from rank 36 to rank 48. -SR ID: 1, mesh bin: 41195 is being transferred from rank 48 to rank 31. -SR ID: 1, mesh bin: 42267 is being transferred from rank 48 to rank 31. -SR ID: 1073, mesh bin: 43284 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 38291 is being transferred from rank 48 to rank 8. -SR ID: 8, mesh bin: 43696 is being transferred from rank 48 to rank 31. -SR ID: 536, mesh bin: 44768 is being transferred from rank 48 to rank 31. -SR ID: 1341, mesh bin: 49362 is being transferred from rank 36 to rank 48. -SR ID: 0, mesh bin: 36151 is being transferred from rank 48 to rank 8. -SR ID: 1201, mesh bin: 44713 is being transferred from rank 36 to rank 48. -SR ID: 1348, mesh bin: 51866 is being transferred from rank 36 to rank 48. -SR ID: 0, mesh bin: 41144 is being transferred from rank 48 to rank 8. -SR ID: 1541, mesh bin: 49720 is being transferred from rank 36 to rank 48. -SR ID: 1341, mesh bin: 48289 is being transferred from rank 36 to rank 48. -SR ID: 553, mesh bin: 45125 is being transferred from rank 48 to rank 31. -SR ID: 1548, mesh bin: 52223 is being transferred from rank 36 to rank 48. -SR ID: 0, mesh bin: 42214 is being transferred from rank 48 to rank 8. -SR ID: 1, mesh bin: 39052 is being transferred from rank 48 to rank 31. -SR ID: 1, mesh bin: 40123 is being transferred from rank 48 to rank 31. -SR ID: 1528, mesh bin: 45070 is being transferred from rank 36 to rank 48. -SR ID: 1529, mesh bin: 46859 is being transferred from rank 36 to rank 48. -SR ID: 1085, mesh bin: 52952 is being transferred from rank 1 to rank 48. -SR ID: 1085, mesh bin: 52953 is being transferred from rank 1 to rank 48. -SR ID: 1085, mesh bin: 52950 is being transferred from rank 1 to rank 48. -SR ID: 1085, mesh bin: 52951 is being transferred from rank 1 to rank 48. -SR ID: 0, mesh bin: 37221 is being transferred from rank 48 to rank 8. -SR ID: 1, mesh bin: 37980 is being transferred from rank 48 to rank 31. -SR ID: 1085, mesh bin: 52949 is being transferred from rank 1 to rank 48. -SR ID: 1348, mesh bin: 50793 is being transferred from rank 36 to rank 48. -SR ID: 1529, mesh bin: 46858 is being transferred from rank 36 to rank 48. -SR ID: 1, mesh bin: 35122 is being transferred from rank 48 to rank 31. -SR ID: 1073, mesh bin: 44713 is being transferred from rank 36 to rank 48. -SR ID: 1548, mesh bin: 50078 is being transferred from rank 36 to rank 48. -SR ID: 1201, mesh bin: 42571 is being transferred from rank 48 to rank 8. -SR ID: 1348, mesh bin: 52223 is being transferred from rank 36 to rank 48. -SR ID: 0, mesh bin: 40074 is being transferred from rank 48 to rank 8. -SR ID: 1541, mesh bin: 47574 is being transferred from rank 36 to rank 48. -SR ID: 1341, mesh bin: 48647 is being transferred from rank 36 to rank 48. -SR ID: 1555, mesh bin: 52590 is being transferred from rank 1 to rank 48. -SR ID: 1555, mesh bin: 52584 is being transferred from rank 1 to rank 48. -SR ID: 1555, mesh bin: 52585 is being transferred from rank 1 to rank 48. -SR ID: 0, mesh bin: 37934 is being transferred from rank 48 to rank 8. -SR ID: 1555, mesh bin: 52586 is being transferred from rank 1 to rank 48. -SR ID: 536, mesh bin: 42624 is being transferred from rank 48 to rank 31. -SR ID: 0, mesh bin: 35081 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 34019 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 34012 is being transferred from rank 48 to rank 23. -SR ID: 1, mesh bin: 35837 is being transferred from rank 48 to rank 31. -SR ID: 0, mesh bin: 34011 is being transferred from rank 48 to rank 8. -SR ID: 0, mesh bin: 34014 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 34013 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 34016 is being transferred from rank 48 to rank 23. -SR ID: 0, mesh bin: 34015 is being transferred from rank 48 to rank 23. -SR ID: 1554, mesh bin: 52583 is being transferred from rank 1 to rank 48. -SR ID: 1554, mesh bin: 52582 is being transferred from rank 1 to rank 48. -SR ID: 1341, mesh bin: 47574 is being transferred from rank 36 to rank 48. -SR ID: 1554, mesh bin: 52581 is being transferred from rank 1 to rank 48. -SR ID: 1, mesh bin: 40838 is being transferred from rank 48 to rank 31. -SR ID: 613, mesh bin: 56531 is being transferred from rank 49 to rank 1. -SR ID: 24, mesh bin: 46905 is being transferred from rank 49 to rank 48. -SR ID: 68, mesh bin: 54028 is being transferred from rank 49 to rank 1. -SR ID: 121, mesh bin: 61934 is being transferred from rank 45 to rank 49. -SR ID: 644, mesh bin: 61895 is being transferred from rank 49 to rank 1. -SR ID: 85, mesh bin: 55816 is being transferred from rank 49 to rank 1. -SR ID: 27, mesh bin: 46566 is being transferred from rank 49 to rank 31. -SR ID: 27, mesh bin: 46565 is being transferred from rank 49 to rank 31. -SR ID: 40, mesh bin: 49752 is being transferred from rank 49 to rank 48. -SR ID: 40, mesh bin: 49753 is being transferred from rank 49 to rank 48. -SR ID: 136, mesh bin: 63002 is being transferred from rank 45 to rank 49. -SR ID: 2255, mesh bin: 62610 is being transferred from rank 49 to rank 1. -SR ID: 2159, mesh bin: 62610 is being transferred from rank 49 to rank 1. -SR ID: 569, mesh bin: 48685 is being transferred from rank 49 to rank 48. -SR ID: 68, mesh bin: 52956 is being transferred from rank 49 to rank 1. -SR ID: 54, mesh bin: 50821 is being transferred from rank 49 to rank 48. -SR ID: 54, mesh bin: 50820 is being transferred from rank 49 to rank 48. -SR ID: 53, mesh bin: 51888 is being transferred from rank 49 to rank 48. -SR ID: 53, mesh bin: 51887 is being transferred from rank 49 to rank 48. -SR ID: 41, mesh bin: 47616 is being transferred from rank 49 to rank 48. -SR ID: 568, mesh bin: 48684 is being transferred from rank 49 to rank 48. -SR ID: 568, mesh bin: 49752 is being transferred from rank 49 to rank 48. -SR ID: 25, mesh bin: 45124 is being transferred from rank 49 to rank 48. -SR ID: 25, mesh bin: 45126 is being transferred from rank 49 to rank 31. -SR ID: 98, mesh bin: 58319 is being transferred from rank 49 to rank 1. -SR ID: 582, mesh bin: 50820 is being transferred from rank 49 to rank 48. -SR ID: 596, mesh bin: 52600 is being transferred from rank 49 to rank 48. -SR ID: 569, mesh bin: 47617 is being transferred from rank 49 to rank 48. -SR ID: 98, mesh bin: 59392 is being transferred from rank 49 to rank 1. -SR ID: 569, mesh bin: 47616 is being transferred from rank 49 to rank 48. -SR ID: 664, mesh bin: 64071 is being transferred from rank 45 to rank 49. -SR ID: 596, mesh bin: 54744 is being transferred from rank 49 to rank 1. -SR ID: 596, mesh bin: 54743 is being transferred from rank 49 to rank 1. -SR ID: 24, mesh bin: 46548 is being transferred from rank 49 to rank 48. -SR ID: 24, mesh bin: 46549 is being transferred from rank 49 to rank 48. -SR ID: 643, mesh bin: 60107 is being transferred from rank 49 to rank 1. -SR ID: 554, mesh bin: 45486 is being transferred from rank 49 to rank 31. -SR ID: 68, mesh bin: 54743 is being transferred from rank 49 to rank 1. -SR ID: 644, mesh bin: 62252 is being transferred from rank 49 to rank 1. -SR ID: 556, mesh bin: 47285 is being transferred from rank 49 to rank 31. -SR ID: 556, mesh bin: 47287 is being transferred from rank 49 to rank 31. -SR ID: 556, mesh bin: 47286 is being transferred from rank 49 to rank 31. -SR ID: 2159, mesh bin: 62967 is being transferred from rank 49 to rank 1. -SR ID: 68, mesh bin: 53671 is being transferred from rank 49 to rank 1. -SR ID: 2159, mesh bin: 62968 is being transferred from rank 49 to rank 1. -SR ID: 136, mesh bin: 63358 is being transferred from rank 45 to rank 49. -SR ID: 553, mesh bin: 45485 is being transferred from rank 49 to rank 31. -SR ID: 553, mesh bin: 45484 is being transferred from rank 49 to rank 31. -SR ID: 121, mesh bin: 62290 is being transferred from rank 45 to rank 49. -SR ID: 85, mesh bin: 56174 is being transferred from rank 49 to rank 1. -SR ID: 614, mesh bin: 56889 is being transferred from rank 49 to rank 1. -SR ID: 40, mesh bin: 49396 is being transferred from rank 49 to rank 48. -SR ID: 644, mesh bin: 61180 is being transferred from rank 49 to rank 1. -SR ID: 2159, mesh bin: 64040 is being transferred from rank 49 to rank 1. -SR ID: 68, mesh bin: 52599 is being transferred from rank 49 to rank 48. -SR ID: 54, mesh bin: 50464 is being transferred from rank 49 to rank 48. -SR ID: 53, mesh bin: 51532 is being transferred from rank 49 to rank 48. -SR ID: 41, mesh bin: 48329 is being transferred from rank 49 to rank 48. -SR ID: 41, mesh bin: 48328 is being transferred from rank 49 to rank 48. -SR ID: 663, mesh bin: 64426 is being transferred from rank 45 to rank 49. -SR ID: 663, mesh bin: 64427 is being transferred from rank 45 to rank 49. -SR ID: 25, mesh bin: 45837 is being transferred from rank 49 to rank 48. -SR ID: 25, mesh bin: 45836 is being transferred from rank 49 to rank 48. -SR ID: 26, mesh bin: 46206 is being transferred from rank 49 to rank 31. -SR ID: 26, mesh bin: 46205 is being transferred from rank 49 to rank 31. -SR ID: 573, mesh bin: 48006 is being transferred from rank 49 to rank 31. -SR ID: 26, mesh bin: 46204 is being transferred from rank 49 to rank 31. -SR ID: 573, mesh bin: 48007 is being transferred from rank 49 to rank 31. -SR ID: 555, mesh bin: 46207 is being transferred from rank 49 to rank 31. -SR ID: 643, mesh bin: 60464 is being transferred from rank 49 to rank 1. -SR ID: 136, mesh bin: 63714 is being transferred from rank 45 to rank 49. -SR ID: 649, mesh bin: 61221 is being transferred from rank 45 to rank 49. -SR ID: 136, mesh bin: 63715 is being transferred from rank 45 to rank 49. -SR ID: 24, mesh bin: 47261 is being transferred from rank 49 to rank 48. -SR ID: 554, mesh bin: 46206 is being transferred from rank 49 to rank 31. -SR ID: 572, mesh bin: 48005 is being transferred from rank 49 to rank 31. -SR ID: 552, mesh bin: 47260 is being transferred from rank 49 to rank 48. -SR ID: 613, mesh bin: 55101 is being transferred from rank 49 to rank 1. -SR ID: 68, mesh bin: 54386 is being transferred from rank 49 to rank 1. -SR ID: 553, mesh bin: 46193 is being transferred from rank 49 to rank 48. -SR ID: 85, mesh bin: 55459 is being transferred from rank 49 to rank 1. -SR ID: 614, mesh bin: 57246 is being transferred from rank 49 to rank 1. -SR ID: 2159, mesh bin: 63325 is being transferred from rank 49 to rank 1. -SR ID: 553, mesh bin: 45125 is being transferred from rank 49 to rank 31. -SR ID: 552, mesh bin: 46192 is being transferred from rank 49 to rank 48. -SR ID: 26, mesh bin: 45487 is being transferred from rank 49 to rank 31. -SR ID: 649, mesh bin: 62290 is being transferred from rank 45 to rank 49. -SR ID: 40, mesh bin: 49040 is being transferred from rank 49 to rank 48. -SR ID: 136, mesh bin: 62646 is being transferred from rank 45 to rank 49. -SR ID: 555, mesh bin: 46927 is being transferred from rank 49 to rank 31. -SR ID: 68, mesh bin: 53313 is being transferred from rank 49 to rank 1. -SR ID: 68, mesh bin: 53314 is being transferred from rank 49 to rank 1. -SR ID: 650, mesh bin: 61222 is being transferred from rank 45 to rank 49. -SR ID: 53, mesh bin: 52244 is being transferred from rank 49 to rank 48. -SR ID: 121, mesh bin: 61577 is being transferred from rank 45 to rank 49. -SR ID: 25, mesh bin: 45481 is being transferred from rank 49 to rank 48. -SR ID: 25, mesh bin: 45480 is being transferred from rank 49 to rank 48. -SR ID: 121, mesh bin: 61578 is being transferred from rank 45 to rank 49. -SR ID: 27, mesh bin: 46926 is being transferred from rank 49 to rank 31. -SR ID: 626, mesh bin: 59750 is being transferred from rank 49 to rank 1. -SR ID: 27, mesh bin: 46925 is being transferred from rank 49 to rank 31. -SR ID: 26, mesh bin: 45846 is being transferred from rank 49 to rank 31. -SR ID: 26, mesh bin: 45845 is being transferred from rank 49 to rank 31. -SR ID: 581, mesh bin: 52244 is being transferred from rank 49 to rank 48. -SR ID: 41, mesh bin: 47973 is being transferred from rank 49 to rank 48. -SR ID: 41, mesh bin: 47972 is being transferred from rank 49 to rank 48. -SR ID: 626, mesh bin: 57604 is being transferred from rank 49 to rank 1. -SR ID: 2255, mesh bin: 64398 is being transferred from rank 49 to rank 1. -SR ID: 663, mesh bin: 64783 is being transferred from rank 45 to rank 49. -SR ID: 581, mesh bin: 51176 is being transferred from rank 49 to rank 48. -SR ID: 2159, mesh bin: 64398 is being transferred from rank 49 to rank 1. -SR ID: 98, mesh bin: 57961 is being transferred from rank 49 to rank 1. -SR ID: 54, mesh bin: 50108 is being transferred from rank 49 to rank 48. -SR ID: 98, mesh bin: 59034 is being transferred from rank 49 to rank 1. -SR ID: 664, mesh bin: 62646 is being transferred from rank 45 to rank 49. -SR ID: 582, mesh bin: 50108 is being transferred from rank 49 to rank 48. -SR ID: 643, mesh bin: 60822 is being transferred from rank 49 to rank 1. -SR ID: 649, mesh bin: 61578 is being transferred from rank 45 to rank 49. -SR ID: 572, mesh bin: 47647 is being transferred from rank 49 to rank 31. -SR ID: 572, mesh bin: 47646 is being transferred from rank 49 to rank 31. -SR ID: 572, mesh bin: 47648 is being transferred from rank 49 to rank 31. -SR ID: 572, mesh bin: 47645 is being transferred from rank 49 to rank 31. -SR ID: 4, mesh bin: 113101 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 111716 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 111715 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 112743 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 117049 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 117048 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 117040 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 117039 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 99543 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 98489 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 98488 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 103500 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 113137 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 98473 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 113138 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 114176 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 114175 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 105606 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 103466 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 109581 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 109582 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 107439 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 107438 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 118116 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 118115 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 118114 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 110599 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 99563 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 108459 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 99562 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 109529 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 104574 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 114892 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 112427 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 114891 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 102426 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 112426 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 104536 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 108512 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 101326 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 111312 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 115982 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 113849 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 113848 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 105290 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 97415 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 97414 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 97409 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 97408 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 115965 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 115966 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 114915 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 106319 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 107389 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 113817 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 105249 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 110293 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 110292 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 111360 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 111359 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 100279 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 100278 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 101352 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 109227 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 109226 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 102396 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 112385 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 100256 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 110242 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 106364 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 104217 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 116693 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 103109 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 116694 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 107080 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 117760 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 116682 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 117756 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 117759 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 115627 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 115626 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 98131 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 98130 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 99205 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 99204 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 108102 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 115608 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 98117 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 98119 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 98118 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 97057 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 97056 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 107032 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 99186 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 97053 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 97055 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 97054 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 112071 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 111004 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 102068 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 103143 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 103142 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 104179 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 112027 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 108154 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 113493 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 113492 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 115607 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 113459 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 104892 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 99921 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 99920 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 108870 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 100994 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 102039 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 99899 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 117405 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 117404 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 98847 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 98846 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 109885 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 106007 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 106006 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 114560 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 110955 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 114559 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 103858 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 114533 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 114534 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 105962 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 109937 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 109938 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 115271 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 117398 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 115270 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 115250 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 98829 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 108816 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 108815 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 101710 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 102784 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 111669 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 103823 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 103822 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 100637 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 100636 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 101682 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 102752 is being transferred from rank 14 to rank 50. -SR ID: 4, mesh bin: 116338 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 114204 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 107796 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 114203 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 116324 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 116323 is being transferred from rank 12 to rank 50. -SR ID: 4, mesh bin: 105648 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 97773 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 97772 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 106722 is being transferred from rank 35 to rank 50. -SR ID: 4, mesh bin: 97764 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 97763 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 97762 is being transferred from rank 26 to rank 50. -SR ID: 4, mesh bin: 112781 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 112782 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 110648 is being transferred from rank 40 to rank 50. -SR ID: 4, mesh bin: 107746 is being transferred from rank 14 to rank 50. -SR ID: 161, mesh bin: 68673 is being transferred from rank 51 to rank 1. -SR ID: 2267, mesh bin: 78001 is being transferred from rank 51 to rank 38. -SR ID: 145, mesh bin: 66536 is being transferred from rank 51 to rank 1. -SR ID: 257, mesh bin: 84049 is being transferred from rank 25 to rank 51. -SR ID: 749, mesh bin: 77593 is being transferred from rank 51 to rank 39. -SR ID: 182, mesh bin: 71214 is being transferred from rank 51 to rank 45. -SR ID: 182, mesh bin: 72285 is being transferred from rank 51 to rank 45. -SR ID: 706, mesh bin: 70098 is being transferred from rank 51 to rank 1. -SR ID: 781, mesh bin: 82956 is being transferred from rank 51 to rank 39. -SR ID: 786, mesh bin: 82631 is being transferred from rank 51 to rank 38. -SR ID: 717, mesh bin: 72591 is being transferred from rank 51 to rank 1. -SR ID: 784, mesh bin: 83685 is being transferred from rank 25 to rank 51. -SR ID: 258, mesh bin: 84056 is being transferred from rank 51 to rank 38. -SR ID: 677, mesh bin: 65139 is being transferred from rank 51 to rank 45. -SR ID: 258, mesh bin: 82988 is being transferred from rank 51 to rank 38. -SR ID: 177, mesh bin: 71523 is being transferred from rank 51 to rank 1. -SR ID: 695, mesh bin: 69784 is being transferred from rank 51 to rank 45. -SR ID: 257, mesh bin: 84411 is being transferred from rank 25 to rank 51. -SR ID: 258, mesh bin: 82987 is being transferred from rank 51 to rank 38. -SR ID: 257, mesh bin: 84409 is being transferred from rank 25 to rank 51. -SR ID: 257, mesh bin: 84410 is being transferred from rank 25 to rank 51. -SR ID: 689, mesh bin: 67605 is being transferred from rank 51 to rank 1. -SR ID: 206, mesh bin: 76878 is being transferred from rank 51 to rank 39. -SR ID: 689, mesh bin: 67604 is being transferred from rank 51 to rank 1. -SR ID: 749, mesh bin: 77951 is being transferred from rank 51 to rank 39. -SR ID: 206, mesh bin: 76163 is being transferred from rank 51 to rank 39. -SR ID: 167, mesh bin: 69427 is being transferred from rank 51 to rank 45. -SR ID: 145, mesh bin: 65823 is being transferred from rank 51 to rank 1. -SR ID: 145, mesh bin: 65824 is being transferred from rank 51 to rank 1. -SR ID: 161, mesh bin: 67961 is being transferred from rank 51 to rank 1. -SR ID: 149, mesh bin: 66569 is being transferred from rank 51 to rank 45. -SR ID: 258, mesh bin: 83344 is being transferred from rank 51 to rank 38. -SR ID: 161, mesh bin: 67960 is being transferred from rank 51 to rank 1. -SR ID: 781, mesh bin: 83313 is being transferred from rank 51 to rank 39. -SR ID: 227, mesh bin: 79782 is being transferred from rank 51 to rank 38. -SR ID: 182, mesh bin: 70142 is being transferred from rank 51 to rank 45. -SR ID: 750, mesh bin: 79738 is being transferred from rank 51 to rank 39. -SR ID: 206, mesh bin: 77235 is being transferred from rank 51 to rank 39. -SR ID: 785, mesh bin: 84049 is being transferred from rank 25 to rank 51. -SR ID: 196, mesh bin: 72643 is being transferred from rank 51 to rank 45. -SR ID: 741, mesh bin: 76216 is being transferred from rank 51 to rank 45. -SR ID: 705, mesh bin: 72235 is being transferred from rank 51 to rank 1. -SR ID: 695, mesh bin: 68355 is being transferred from rank 51 to rank 45. -SR ID: 724, mesh bin: 74429 is being transferred from rank 51 to rank 45. -SR ID: 677, mesh bin: 67283 is being transferred from rank 51 to rank 45. -SR ID: 2256, mesh bin: 64772 is being transferred from rank 51 to rank 49. -SR ID: 2256, mesh bin: 64771 is being transferred from rank 51 to rank 49. -SR ID: 741, mesh bin: 77288 is being transferred from rank 51 to rank 45. -SR ID: 784, mesh bin: 84048 is being transferred from rank 25 to rank 51. -SR ID: 755, mesh bin: 79781 is being transferred from rank 51 to rank 38. -SR ID: 755, mesh bin: 79782 is being transferred from rank 51 to rank 38. -SR ID: 2256, mesh bin: 64773 is being transferred from rank 51 to rank 49. -SR ID: 2256, mesh bin: 64775 is being transferred from rank 51 to rank 49. -SR ID: 2256, mesh bin: 64777 is being transferred from rank 51 to rank 49. -SR ID: 177, mesh bin: 70811 is being transferred from rank 51 to rank 1. -SR ID: 177, mesh bin: 70810 is being transferred from rank 51 to rank 1. -SR ID: 2267, mesh bin: 77644 is being transferred from rank 51 to rank 38. -SR ID: 2267, mesh bin: 77645 is being transferred from rank 51 to rank 38. -SR ID: 182, mesh bin: 70499 is being transferred from rank 51 to rank 45. -SR ID: 236, mesh bin: 81526 is being transferred from rank 51 to rank 39. -SR ID: 717, mesh bin: 74733 is being transferred from rank 51 to rank 39. -SR ID: 167, mesh bin: 68712 is being transferred from rank 51 to rank 45. -SR ID: 1229, mesh bin: 73660 is being transferred from rank 51 to rank 39. -SR ID: 764, mesh bin: 82241 is being transferred from rank 51 to rank 39. -SR ID: 206, mesh bin: 75091 is being transferred from rank 51 to rank 39. -SR ID: 764, mesh bin: 80096 is being transferred from rank 51 to rank 39. -SR ID: 241, mesh bin: 82275 is being transferred from rank 51 to rank 38. -SR ID: 206, mesh bin: 75448 is being transferred from rank 51 to rank 39. -SR ID: 182, mesh bin: 71571 is being transferred from rank 51 to rank 45. -SR ID: 227, mesh bin: 79069 is being transferred from rank 51 to rank 38. -SR ID: 770, mesh bin: 80138 is being transferred from rank 51 to rank 38. -SR ID: 258, mesh bin: 82631 is being transferred from rank 51 to rank 38. -SR ID: 769, mesh bin: 81206 is being transferred from rank 51 to rank 38. -SR ID: 196, mesh bin: 73715 is being transferred from rank 51 to rank 45. -SR ID: 2255, mesh bin: 64755 is being transferred from rank 51 to rank 1. -SR ID: 2255, mesh bin: 64756 is being transferred from rank 51 to rank 49. -SR ID: 177, mesh bin: 71879 is being transferred from rank 51 to rank 1. -SR ID: 734, mesh bin: 75090 is being transferred from rank 51 to rank 39. -SR ID: 750, mesh bin: 79381 is being transferred from rank 51 to rank 39. -SR ID: 145, mesh bin: 66180 is being transferred from rank 51 to rank 1. -SR ID: 769, mesh bin: 82275 is being transferred from rank 51 to rank 38. -SR ID: 770, mesh bin: 81207 is being transferred from rank 51 to rank 38. -SR ID: 786, mesh bin: 84056 is being transferred from rank 51 to rank 38. -SR ID: 740, mesh bin: 75501 is being transferred from rank 51 to rank 45. -SR ID: 710, mesh bin: 70142 is being transferred from rank 51 to rank 45. -SR ID: 705, mesh bin: 70454 is being transferred from rank 51 to rank 1. -SR ID: 196, mesh bin: 74072 is being transferred from rank 51 to rank 45. -SR ID: 242, mesh bin: 80494 is being transferred from rank 51 to rank 38. -SR ID: 673, mesh bin: 66892 is being transferred from rank 51 to rank 1. -SR ID: 724, mesh bin: 72643 is being transferred from rank 51 to rank 45. -SR ID: 782, mesh bin: 83314 is being transferred from rank 25 to rank 51. -SR ID: 149, mesh bin: 65854 is being transferred from rank 51 to rank 45. -SR ID: 145, mesh bin: 65111 is being transferred from rank 51 to rank 1. -SR ID: 227, mesh bin: 79425 is being transferred from rank 51 to rank 38. -SR ID: 227, mesh bin: 79426 is being transferred from rank 51 to rank 38. -SR ID: 783, mesh bin: 83684 is being transferred from rank 25 to rank 51. -SR ID: 241, mesh bin: 81563 is being transferred from rank 51 to rank 38. -SR ID: 241, mesh bin: 81562 is being transferred from rank 51 to rank 38. -SR ID: 741, mesh bin: 75859 is being transferred from rank 51 to rank 45. -SR ID: 161, mesh bin: 68317 is being transferred from rank 51 to rank 1. -SR ID: 236, mesh bin: 81883 is being transferred from rank 51 to rank 39. -SR ID: 255, mesh bin: 83681 is being transferred from rank 25 to rank 51. -SR ID: 255, mesh bin: 83682 is being transferred from rank 25 to rank 51. -SR ID: 255, mesh bin: 83683 is being transferred from rank 25 to rank 51. -SR ID: 255, mesh bin: 83684 is being transferred from rank 25 to rank 51. -SR ID: 255, mesh bin: 83678 is being transferred from rank 25 to rank 51. -SR ID: 255, mesh bin: 83679 is being transferred from rank 25 to rank 51. -SR ID: 255, mesh bin: 83680 is being transferred from rank 25 to rank 51. -SR ID: 196, mesh bin: 73000 is being transferred from rank 51 to rank 45. -SR ID: 177, mesh bin: 72235 is being transferred from rank 51 to rank 1. -SR ID: 717, mesh bin: 72948 is being transferred from rank 51 to rank 1. -SR ID: 717, mesh bin: 72947 is being transferred from rank 51 to rank 1. -SR ID: 182, mesh bin: 70856 is being transferred from rank 51 to rank 45. -SR ID: 705, mesh bin: 70811 is being transferred from rank 51 to rank 1. -SR ID: 741, mesh bin: 76931 is being transferred from rank 51 to rank 45. -SR ID: 695, mesh bin: 67641 is being transferred from rank 51 to rank 45. -SR ID: 717, mesh bin: 74018 is being transferred from rank 51 to rank 39. -SR ID: 256, mesh bin: 84044 is being transferred from rank 25 to rank 51. -SR ID: 661, mesh bin: 64762 is being transferred from rank 51 to rank 49. -SR ID: 661, mesh bin: 64763 is being transferred from rank 51 to rank 49. -SR ID: 661, mesh bin: 64761 is being transferred from rank 51 to rank 49. -SR ID: 661, mesh bin: 64758 is being transferred from rank 51 to rank 49. -SR ID: 256, mesh bin: 84046 is being transferred from rank 25 to rank 51. -SR ID: 256, mesh bin: 84045 is being transferred from rank 25 to rank 51. -SR ID: 661, mesh bin: 64759 is being transferred from rank 51 to rank 49. -SR ID: 661, mesh bin: 64757 is being transferred from rank 51 to rank 49. -SR ID: 256, mesh bin: 84048 is being transferred from rank 25 to rank 51. -SR ID: 256, mesh bin: 84047 is being transferred from rank 25 to rank 51. -SR ID: 236, mesh bin: 80811 is being transferred from rank 51 to rank 39. -SR ID: 241, mesh bin: 81919 is being transferred from rank 51 to rank 38. -SR ID: 717, mesh bin: 73304 is being transferred from rank 51 to rank 1. -SR ID: 236, mesh bin: 80096 is being transferred from rank 51 to rank 39. -SR ID: 749, mesh bin: 78308 is being transferred from rank 51 to rank 39. -SR ID: 227, mesh bin: 78357 is being transferred from rank 51 to rank 38. -SR ID: 236, mesh bin: 81168 is being transferred from rank 51 to rank 39. -SR ID: 717, mesh bin: 74376 is being transferred from rank 51 to rank 39. -SR ID: 734, mesh bin: 77236 is being transferred from rank 51 to rank 39. -SR ID: 734, mesh bin: 77235 is being transferred from rank 51 to rank 39. -SR ID: 689, mesh bin: 69742 is being transferred from rank 51 to rank 1. -SR ID: 167, mesh bin: 69070 is being transferred from rank 51 to rank 45. -SR ID: 149, mesh bin: 66211 is being transferred from rank 51 to rank 45. -SR ID: 258, mesh bin: 83700 is being transferred from rank 51 to rank 38. -SR ID: 724, mesh bin: 74787 is being transferred from rank 51 to rank 45. -SR ID: 785, mesh bin: 84411 is being transferred from rank 25 to rank 51. -SR ID: 227, mesh bin: 78713 is being transferred from rank 51 to rank 38. -SR ID: 785, mesh bin: 84412 is being transferred from rank 25 to rank 51. -SR ID: 242, mesh bin: 80850 is being transferred from rank 51 to rank 38. -SR ID: 695, mesh bin: 67998 is being transferred from rank 51 to rank 45. -SR ID: 781, mesh bin: 82598 is being transferred from rank 51 to rank 39. -SR ID: 750, mesh bin: 78666 is being transferred from rank 51 to rank 39. -SR ID: 677, mesh bin: 66926 is being transferred from rank 51 to rank 45. -SR ID: 672, mesh bin: 67248 is being transferred from rank 51 to rank 1. -SR ID: 755, mesh bin: 78357 is being transferred from rank 51 to rank 38. -SR ID: 182, mesh bin: 71928 is being transferred from rank 51 to rank 45. -SR ID: 662, mesh bin: 64770 is being transferred from rank 51 to rank 49. -SR ID: 662, mesh bin: 64769 is being transferred from rank 51 to rank 49. -SR ID: 662, mesh bin: 64768 is being transferred from rank 51 to rank 49. -SR ID: 662, mesh bin: 64767 is being transferred from rank 51 to rank 49. -SR ID: 662, mesh bin: 64766 is being transferred from rank 51 to rank 49. -SR ID: 662, mesh bin: 64765 is being transferred from rank 51 to rank 49. -SR ID: 662, mesh bin: 64764 is being transferred from rank 51 to rank 49. -SR ID: 254, mesh bin: 83320 is being transferred from rank 25 to rank 51. -SR ID: 254, mesh bin: 83319 is being transferred from rank 25 to rank 51. -SR ID: 254, mesh bin: 83318 is being transferred from rank 25 to rank 51. -SR ID: 254, mesh bin: 83317 is being transferred from rank 25 to rank 51. -SR ID: 254, mesh bin: 83316 is being transferred from rank 25 to rank 51. -SR ID: 254, mesh bin: 83315 is being transferred from rank 25 to rank 51. -SR ID: 254, mesh bin: 83314 is being transferred from rank 25 to rank 51. -SR ID: 145, mesh bin: 65467 is being transferred from rank 51 to rank 1. -SR ID: 740, mesh bin: 75144 is being transferred from rank 51 to rank 45. -SR ID: 695, mesh bin: 69427 is being transferred from rank 51 to rank 45. -SR ID: 145, mesh bin: 65468 is being transferred from rank 51 to rank 1. -SR ID: 167, mesh bin: 68355 is being transferred from rank 51 to rank 45. -SR ID: 196, mesh bin: 74429 is being transferred from rank 51 to rank 45. -SR ID: 436, mesh bin: 111113 is being transferred from rank 43 to rank 52. -SR ID: 436, mesh bin: 111115 is being transferred from rank 43 to rank 52. -SR ID: 436, mesh bin: 111114 is being transferred from rank 43 to rank 52. -SR ID: 965, mesh bin: 110767 is being transferred from rank 43 to rank 52. -SR ID: 858, mesh bin: 93996 is being transferred from rank 52 to rank 39. -SR ID: 2273, mesh bin: 92916 is being transferred from rank 52 to rank 39. -SR ID: 2273, mesh bin: 92917 is being transferred from rank 52 to rank 39. -SR ID: 405, mesh bin: 105778 is being transferred from rank 52 to rank 11. -SR ID: 2282, mesh bin: 106847 is being transferred from rank 52 to rank 11. -SR ID: 326, mesh bin: 94677 is being transferred from rank 52 to rank 22. -SR ID: 2271, mesh bin: 91832 is being transferred from rank 52 to rank 22. -SR ID: 415, mesh bin: 109300 is being transferred from rank 52 to rank 2. -SR ID: 2285, mesh bin: 112516 is being transferred from rank 43 to rank 52. -SR ID: 2119, mesh bin: 105728 is being transferred from rank 52 to rank 2. -SR ID: 2285, mesh bin: 112517 is being transferred from rank 43 to rank 52. -SR ID: 2285, mesh bin: 112515 is being transferred from rank 43 to rank 52. -SR ID: 921, mesh bin: 102569 is being transferred from rank 52 to rank 11. -SR ID: 921, mesh bin: 102568 is being transferred from rank 52 to rank 11. -SR ID: 347, mesh bin: 95429 is being transferred from rank 52 to rank 25. -SR ID: 421, mesh bin: 107917 is being transferred from rank 52 to rank 11. -SR ID: 434, mesh bin: 111816 is being transferred from rank 43 to rank 52. -SR ID: 434, mesh bin: 111815 is being transferred from rank 43 to rank 52. -SR ID: 434, mesh bin: 111814 is being transferred from rank 43 to rank 52. -SR ID: 434, mesh bin: 111813 is being transferred from rank 43 to rank 52. -SR ID: 949, mesh bin: 109700 is being transferred from rank 52 to rank 11. -SR ID: 961, mesh bin: 112163 is being transferred from rank 43 to rank 52. -SR ID: 961, mesh bin: 112162 is being transferred from rank 43 to rank 52. -SR ID: 888, mesh bin: 97931 is being transferred from rank 52 to rank 25. -SR ID: 961, mesh bin: 112167 is being transferred from rank 43 to rank 52. -SR ID: 961, mesh bin: 112165 is being transferred from rank 43 to rank 52. -SR ID: 913, mesh bin: 103228 is being transferred from rank 52 to rank 2. -SR ID: 961, mesh bin: 112166 is being transferred from rank 43 to rank 52. -SR ID: 896, mesh bin: 102156 is being transferred from rank 52 to rank 2. -SR ID: 921, mesh bin: 104708 is being transferred from rank 52 to rank 11. -SR ID: 432, mesh bin: 112157 is being transferred from rank 52 to rank 2. -SR ID: 421, mesh bin: 108630 is being transferred from rank 52 to rank 11. -SR ID: 347, mesh bin: 96501 is being transferred from rank 52 to rank 25. -SR ID: 868, mesh bin: 97163 is being transferred from rank 52 to rank 22. -SR ID: 869, mesh bin: 95031 is being transferred from rank 52 to rank 22. -SR ID: 415, mesh bin: 108943 is being transferred from rank 52 to rank 2. -SR ID: 2276, mesh bin: 97874 is being transferred from rank 52 to rank 22. -SR ID: 966, mesh bin: 110768 is being transferred from rank 43 to rank 52. -SR ID: 393, mesh bin: 103638 is being transferred from rank 52 to rank 11. -SR ID: 882, mesh bin: 97873 is being transferred from rank 52 to rank 22. -SR ID: 876, mesh bin: 97216 is being transferred from rank 52 to rank 25. -SR ID: 368, mesh bin: 100013 is being transferred from rank 52 to rank 2. -SR ID: 870, mesh bin: 95032 is being transferred from rank 52 to rank 22. -SR ID: 354, mesh bin: 98229 is being transferred from rank 52 to rank 22. -SR ID: 888, mesh bin: 97573 is being transferred from rank 52 to rank 25. -SR ID: 432, mesh bin: 111086 is being transferred from rank 52 to rank 2. -SR ID: 437, mesh bin: 110766 is being transferred from rank 43 to rank 52. -SR ID: 437, mesh bin: 110767 is being transferred from rank 43 to rank 52. -SR ID: 437, mesh bin: 110764 is being transferred from rank 43 to rank 52. -SR ID: 437, mesh bin: 110765 is being transferred from rank 43 to rank 52. -SR ID: 913, mesh bin: 102871 is being transferred from rank 52 to rank 2. -SR ID: 393, mesh bin: 102568 is being transferred from rank 52 to rank 11. -SR ID: 437, mesh bin: 110763 is being transferred from rank 43 to rank 52. -SR ID: 368, mesh bin: 101085 is being transferred from rank 52 to rank 2. -SR ID: 432, mesh bin: 110014 is being transferred from rank 52 to rank 2. -SR ID: 943, mesh bin: 107871 is being transferred from rank 52 to rank 2. -SR ID: 354, mesh bin: 98942 is being transferred from rank 52 to rank 2. -SR ID: 2123, mesh bin: 105728 is being transferred from rank 52 to rank 2. -SR ID: 882, mesh bin: 99656 is being transferred from rank 52 to rank 2. -SR ID: 368, mesh bin: 101799 is being transferred from rank 52 to rank 2. -SR ID: 913, mesh bin: 103942 is being transferred from rank 52 to rank 2. -SR ID: 368, mesh bin: 100728 is being transferred from rank 52 to rank 2. -SR ID: 2123, mesh bin: 106800 is being transferred from rank 52 to rank 2. -SR ID: 2119, mesh bin: 106085 is being transferred from rank 52 to rank 2. -SR ID: 896, mesh bin: 100013 is being transferred from rank 52 to rank 2. -SR ID: 432, mesh bin: 111800 is being transferred from rank 52 to rank 2. -SR ID: 943, mesh bin: 109657 is being transferred from rank 52 to rank 2. -SR ID: 415, mesh bin: 107871 is being transferred from rank 52 to rank 2. -SR ID: 354, mesh bin: 99656 is being transferred from rank 52 to rank 2. -SR ID: 432, mesh bin: 111443 is being transferred from rank 52 to rank 2. -SR ID: 914, mesh bin: 104657 is being transferred from rank 52 to rank 2. -SR ID: 2123, mesh bin: 105014 is being transferred from rank 52 to rank 2. -SR ID: 368, mesh bin: 101442 is being transferred from rank 52 to rank 2. -SR ID: 943, mesh bin: 107514 is being transferred from rank 52 to rank 2. -SR ID: 354, mesh bin: 99299 is being transferred from rank 52 to rank 2. -SR ID: 896, mesh bin: 101799 is being transferred from rank 52 to rank 2. -SR ID: 415, mesh bin: 109657 is being transferred from rank 52 to rank 2. -SR ID: 2123, mesh bin: 107157 is being transferred from rank 52 to rank 2. -SR ID: 415, mesh bin: 108586 is being transferred from rank 52 to rank 2. -SR ID: 415, mesh bin: 108228 is being transferred from rank 52 to rank 2. -SR ID: 960, mesh bin: 112157 is being transferred from rank 52 to rank 2. -SR ID: 2123, mesh bin: 105371 is being transferred from rank 52 to rank 2. -SR ID: 347, mesh bin: 96143 is being transferred from rank 52 to rank 25. -SR ID: 347, mesh bin: 96144 is being transferred from rank 52 to rank 25. -SR ID: 875, mesh bin: 96501 is being transferred from rank 52 to rank 25. -SR ID: 875, mesh bin: 95071 is being transferred from rank 52 to rank 25. -SR ID: 360, mesh bin: 98288 is being transferred from rank 52 to rank 25. -SR ID: 875, mesh bin: 96858 is being transferred from rank 52 to rank 25. -SR ID: 360, mesh bin: 97931 is being transferred from rank 52 to rank 25. -SR ID: 330, mesh bin: 94714 is being transferred from rank 52 to rank 25. -SR ID: 347, mesh bin: 95786 is being transferred from rank 52 to rank 25. -SR ID: 360, mesh bin: 98645 is being transferred from rank 52 to rank 25. -SR ID: 421, mesh bin: 109700 is being transferred from rank 52 to rank 11. -SR ID: 2282, mesh bin: 107204 is being transferred from rank 52 to rank 11. -SR ID: 888, mesh bin: 99716 is being transferred from rank 52 to rank 11. -SR ID: 393, mesh bin: 103282 is being transferred from rank 52 to rank 11. -SR ID: 905, mesh bin: 100429 is being transferred from rank 52 to rank 11. -SR ID: 421, mesh bin: 109343 is being transferred from rank 52 to rank 11. -SR ID: 393, mesh bin: 104351 is being transferred from rank 52 to rank 11. -SR ID: 393, mesh bin: 104352 is being transferred from rank 52 to rank 11. -SR ID: 438, mesh bin: 110413 is being transferred from rank 52 to rank 11. -SR ID: 421, mesh bin: 108274 is being transferred from rank 52 to rank 11. -SR ID: 949, mesh bin: 107561 is being transferred from rank 52 to rank 11. -SR ID: 393, mesh bin: 103995 is being transferred from rank 52 to rank 11. -SR ID: 904, mesh bin: 101142 is being transferred from rank 52 to rank 11. -SR ID: 933, mesh bin: 106491 is being transferred from rank 52 to rank 11. -SR ID: 905, mesh bin: 100073 is being transferred from rank 52 to rank 11. -SR ID: 393, mesh bin: 102925 is being transferred from rank 52 to rank 11. -SR ID: 438, mesh bin: 110056 is being transferred from rank 52 to rank 11. -SR ID: 405, mesh bin: 105421 is being transferred from rank 52 to rank 11. -SR ID: 360, mesh bin: 99359 is being transferred from rank 52 to rank 11. -SR ID: 904, mesh bin: 102212 is being transferred from rank 52 to rank 11. -SR ID: 360, mesh bin: 99003 is being transferred from rank 52 to rank 11. -SR ID: 393, mesh bin: 104708 is being transferred from rank 52 to rank 11. -SR ID: 904, mesh bin: 101855 is being transferred from rank 52 to rank 11. -SR ID: 949, mesh bin: 107917 is being transferred from rank 52 to rank 11. -SR ID: 405, mesh bin: 106134 is being transferred from rank 52 to rank 11. -SR ID: 905, mesh bin: 100786 is being transferred from rank 52 to rank 11. -SR ID: 966, mesh bin: 110057 is being transferred from rank 52 to rank 11. -SR ID: 421, mesh bin: 108987 is being transferred from rank 52 to rank 11. -SR ID: 1894, mesh bin: 113319 is being transferred from rank 55 to rank 11. -SR ID: 1894, mesh bin: 113318 is being transferred from rank 55 to rank 11. -SR ID: 1168, mesh bin: 121505 is being transferred from rank 55 to rank 11. -SR ID: 1480, mesh bin: 115810 is being transferred from rank 55 to rank 11. -SR ID: 1480, mesh bin: 115809 is being transferred from rank 55 to rank 11. -SR ID: 1679, mesh bin: 116521 is being transferred from rank 55 to rank 11. -SR ID: 1685, mesh bin: 119014 is being transferred from rank 55 to rank 11. -SR ID: 1485, mesh bin: 117946 is being transferred from rank 55 to rank 11. -SR ID: 1894, mesh bin: 112963 is being transferred from rank 55 to rank 11. -SR ID: 1894, mesh bin: 112962 is being transferred from rank 55 to rank 11. -SR ID: 1894, mesh bin: 114031 is being transferred from rank 55 to rank 11. -SR ID: 1894, mesh bin: 114030 is being transferred from rank 55 to rank 11. -SR ID: 2084, mesh bin: 111895 is being transferred from rank 55 to rank 11. -SR ID: 2094, mesh bin: 114387 is being transferred from rank 55 to rank 11. -SR ID: 1684, mesh bin: 119369 is being transferred from rank 55 to rank 11. -SR ID: 1684, mesh bin: 119370 is being transferred from rank 55 to rank 11. -SR ID: 2083, mesh bin: 111894 is being transferred from rank 55 to rank 11. -SR ID: 1680, mesh bin: 116522 is being transferred from rank 55 to rank 11. -SR ID: 2093, mesh bin: 114386 is being transferred from rank 55 to rank 11. -SR ID: 1485, mesh bin: 118658 is being transferred from rank 55 to rank 11. -SR ID: 1485, mesh bin: 118657 is being transferred from rank 55 to rank 11. -SR ID: 1490, mesh bin: 120437 is being transferred from rank 55 to rank 11. -SR ID: 1679, mesh bin: 116877 is being transferred from rank 55 to rank 11. -SR ID: 1690, mesh bin: 121149 is being transferred from rank 55 to rank 11. -SR ID: 2084, mesh bin: 110115 is being transferred from rank 55 to rank 11. -SR ID: 1690, mesh bin: 120082 is being transferred from rank 55 to rank 11. -SR ID: 1490, mesh binSR ID: 1181, mesh bin: 126922 is being transferred from rank 55 to rank 19. -SR ID: 1696, mesh bin: 122281 is being transferred from rank 55 to rank 19. -SR ID: 1309, mesh bin: 125137 is being transferred from rank 55 to rank 19. -SR ID: 1510, mesh bin: 123352 is being transferred from rank 55 to rank 19. -SR ID: 1510, mesh bin: 124423 is being transferred from rank 55 to rank 19. -SR ID: 1496, mesh bin: 121210 is being transferred from rank 55 to rank 19. -SR ID: 2114, mesh bin: 119425 is being transferred from rank 55 to rank 19. -SR ID: 1696, mesh bin: 120496 is being transferred from rank 55 to rank 19. -SR ID: 1181, mesh bin: 126208 is being transferred from rank 55 to rank 19. -SR ID: 1510, mesh bin: 124066 is being transferred from rank 55 to rank 19. -SR ID: 1710, mesh bin: 122638 is being transferred from rank 55 to rank 19. -SR ID: 1710, mesh bin: 124780 is being transferred from rank 55 to rank 19. -SR ID: 1496, mesh bin: 121924 is being transferred from rank 55 to rank 19. -SR ID: 1510, mesh bin: 122995 is being transferred from rank 55 to rank 19. -SR ID: 1914, mesh bin: 119068 is being transferred from rank 55 to rank 19. -SR ID: 1696, mesh bin: 121924 is being transferred from rank 55 to rank 19. -SR ID: 1496, mesh bin: 120853 is being transferred from rank 55 to rank 19. -SR ID: 1510, mesh bin: 123709 is being transferred from rank 55 to rank 19. -SR ID: 1906, mesh bin: 116213 is being transferred from rank 55 to rank 19. -SR ID: 1309, mesh bin: 125494 is being transferred from rank 55 to rank 19. -SR ID: 1181, mesh bin: 126565 is being transferred from rank 55 to rank 19. -SR ID: 1710, mesh bin: 122995 is being transferred from rank 55 to rank 19. -SR ID: 1181, mesh bin: 125494 is being transferred from rank 55 to rank 19. -SR ID: 1496, mesh bin: 121567 is being transferred from rank 55 to rank 19. -SR ID: 1309, mesh bin: 126922 is being transferred from rank 55 to rank 19. -SR ID: 1696, mesh bin: 120139 is being transferred from rank 55 to rank 19. -SR ID: 1309, mesh bin: 127279 is being transferred from rank 55 to rank 19. -SR ID: 329, mesh bin: 93637 is being transferred from rank 52 to rank 39. -SR ID: 329, mesh bin: 93636 is being transferred from rank 52 to rank 39. -SR ID: 329, mesh bin: 93277 is being transferred from rank 52 to rank 39. -SR ID: 329, mesh bin: 93276 is being transferred from rank 52 to rank 39. -SR ID: 330, mesh bin: 94356 is being transferred from rank 52 to rank 39. -SR ID: 330, mesh bin: 94355 is being transferred from rank 52 to rank 39. -SR ID: 312, mesh bin: 91479 is being transferred from rank 52 to rank 39. -SR ID: 2177, mesh bin: 92558 is being transferred from rank 52 to rank 39. -SR ID: 330, mesh bin: 93997 is being transferred from rank 52 to rank 39. -SR ID: 330, mesh bin: 93996 is being transferred from rank 52 to rank 39. -SR ID: 841, mesh bin: 92197 is being transferred from rank 52 to rank 39. -SR ID: 841, mesh bin: 92198 is being transferred from rank 52 to rank 39. -SR ID: 312, mesh bin: 91838 is being transferred from rank 52 to rank 39. -SR ID: 312, mesh bin: 91837 is being transferred from rank 52 to rank 39. -SR ID: 840, mesh bin: 91838 is being transferred from rank 52 to rank 39. -SR ID: 2273, mesh bin: 92556 is being transferred from rank 52 to rank 39. -SR ID: 2273, mesh bin: 92557 is being transferred from rank 52 to rank 39. -SR ID: 857, mesh bin: 93995 is being transferred from rank 52 to rank 39. -SR ID: 963, mesh bin: 111818 is being transferred from rank 43 to rank 52. -SR ID: 436, mesh bin: 111468 is being transferred from rank 43 to rank 52. -SR ID: 962, mesh bin: 111812 is being transferred from rank 43 to rank 52. -SR ID: 437, mesh bin: 111119 is being transferred from rank 43 to rank 52. -SR ID: 964, mesh bin: 111468 is being transferred from rank 43 to rank 52. -SR ID: 435, mesh bin: 111464 is being transferred from rank 43 to rank 52. -SR ID: 435, mesh bin: 111465 is being transferred from rank 43 to rank 52. -SR ID: 435, mesh bin: 111466 is being transferred from rank 43 to rank 52. -SR ID: 435, mesh bin: 111467 is being transferred from rank 43 to rank 52. -SR ID: 435, mesh bin: 111463 is being transferred from rank 43 to rank 52. -SR ID: 438, mesh bin: 110769 is being transferred from rank 43 to rank 52. -SR ID: 438, mesh bin: 110768 is being transferred from rank 43 to rank 52. -SR ID: 436, mesh bin: 111117 is being transferred from rank 43 to rank 52. -SR ID: 436, mesh bin: 111116 is being transferred from rank 43 to rank 52. -SR ID: 326, mesh bin: 93965 is being transferred from rank 52 to rank 22. -SR ID: 326, mesh bin: 93964 is being transferred from rank 52 to rank 22. -SR ID: 854, mesh bin: 94675 is being transferred from rank 52 to rank 22. -SR ID: 854, mesh bin: 93610 is being transferred from rank 52 to rank 22. -SR ID: 326, mesh bin: 94321 is being transferred from rank 52 to rank 22. -SR ID: 326, mesh bin: 94320 is being transferred from rank 52 to rank 22. -SR ID: 2271, mesh bin: 92188 is being transferred from rank 52 to rank 22. -SR ID: 2271, mesh bin: 92189 is being transferred from rank 52 to rank 22. -SR ID: 855, mesh bin: 92544 is being transferred from rank 52 to rank 22. -SR ID: 855, mesh bin: 92545 is being transferred from rank 52 to rank 22. -SR ID: 854, mesh bin: 94676 is being transferred from rank 52 to rank 22. -SR ID: 868, mesh bin: 96452 is being transferred from rank 52 to rank 22. -SR ID: 869, mesh bin: 95387 is being transferred from rank 52 to rank 22. -SR ID: 855, mesh bin: 93611 is being transferred from rank 52 to rank 22. -SR ID: 354, mesh bin: 98585 is being transferred from rank 52 to rank 22. -SR ID: 341, mesh bin: 95742 is being transferred from rank 52 to rank 22. -SR ID: 341, mesh bin: 95741 is being transferred from rank 52 to rank 22. -SR ID: 340, mesh bin: 96808 is being transferred from rank 52 to rank 22. -SR ID: 340, mesh bin: 96807 is being transferred from rank 52 to rank 22. -SR ID: 327, mesh bin: 92543 is being transferred from rank 52 to rank 22. -SR ID: 312, mesh bin: 91478 is being transferred from rank 52 to rank 22. -SR ID: 312, mesh bin: 91477 is being transferred from rank 52 to rank 22. -SR ID: 326, mesh bin: 93610 is being transferred from rank 52 to rank 22. -SR ID: 341, mesh bin: 95386 is being transferred from rank 52 to rank 22. -SR ID: 341, mesh bin: 95387 is being transferred from rank 52 to rank 22. -SR ID: 312, mesh bin: 91834 is being transferred from rank 52 to rank 22. -SR ID: 2276, mesh bin: 97519 is being transferred from rank 52 to rank 22. -SR ID: 2276, mesh bin: 97518 is being transferred from rank 52 to rank 22. -SR ID: 327, mesh bin: 93255 is being transferred from rank 52 to rank 22. -SR ID: 341, mesh bin: 96097 is being transferred from rank 52 to rank 22. -SR ID: 340, mesh bin: 97164 is being transferred from rank 52 to rank 22. -SR ID: 840, mesh bin: 91833 is being transferred from rank 52 to rank 22. -SR ID: 327, mesh bin: 92899 is being transferred from rank 52 to rank 22. -SR ID: 327, mesh bin: 92900 is being transferred from rank 52 to rank 22. -SR ID: 557, mesh bin: 46584 is being transferred from rank 53 to rank 31. -SR ID: 543, mesh bin: 43029 is being transferred from rank 53 to rank 31. -SR ID: 14, mesh bin: 43741 is being transferred from rank 53 to rank 31. -SR ID: 14, mesh bin: 43740 is being transferred from rank 53 to rank 31. -SR ID: 30, mesh bin: 46229 is being transferred from rank 53 to rank 31. -SR ID: 557, mesh bin: 47296 is being transferred from rank 53 to rank 31. -SR ID: 557, mesh bin: 47295 is being transferred from rank 53 to rank 31. -SR ID: 29, mesh bin: 47296 is being transferred from rank 53 to rank 31. -SR ID: 542, mesh bin: 44807 is being transferred from rank 53 to rank 31. -SR ID: 558, mesh bin: 45163 is being transferred from rank 53 to rank 31. -SR ID: 558, mesh bin: 45162 is being transferred from rank 53 to rank 31. -SR ID: 541, mesh bin: 44806 is being transferred from rank 53 to rank 31. -SR ID: 543, mesh bin: 42673 is being transferred from rank 53 to rank 31. -SR ID: 543, mesh bin: 42674 is being transferred from rank 53 to rank 31. -SR ID: 30, mesh bin: 45518 is being transferred from rank 53 to rank 31. -SR ID: 30, mesh bin: 45517 is being transferred from rank 53 to rank 31. -SR ID: 14, mesh bin: 44452 is being transferred from rank 53 to rank 31. -SR ID: 14, mesh bin: 44451 is being transferred from rank 53 to rank 31. -SR ID: 45, mesh bin: 48008 is being transferred from rank 53 to rank 31. -SR ID: 1, mesh bin: 42318 is being transferred from rank 53 to rank 31. -SR ID: 30, mesh bin: 45873 is being transferred from rank 53 to rank 31. -SR ID: 14, mesh bin: 43385 is being transferred from rank 53 to rank 31. -SR ID: 14, mesh bin: 43384 is being transferred from rank 53 to rank 31. -SR ID: 29, mesh bin: 46940 is being transferred from rank 53 to rank 31. -SR ID: 30, mesh bin: 45874 is being transferred from rank 53 to rank 31. -SR ID: 542, mesh bin: 44451 is being transferred from rank 53 to rank 31. -SR ID: 542, mesh bin: 43385 is being transferred from rank 53 to rank 31. -SR ID: 45, mesh bin: 47651 is being transferred from rank 53 to rank 31. -SR ID: 573, mesh bin: 47652 is being transferred from rank 53 to rank 31. -SR ID: 558, mesh bin: 46585 is being transferred from rank 53 to rank 31. -SR ID: 14, mesh bin: 44095 is being transferred from rank 53 to rank 31. -SR ID: 104, mesh bin: 58722 is being transferred from rank 49 to rank 53. -SR ID: 110, mesh bin: 58403 is being transferred from rank 42 to rank 53. -SR ID: 94, mesh bin: 56263 is being transferred from rank 42 to rank 53. -SR ID: 655, mesh bin: 60187 is being transferred from rank 42 to rank 53. -SR ID: 65, mesh bin: 51270 is being transferred from rank 42 to rank 53. -SR ID: 65, mesh bin: 50200 is being transferred from rank 42 to rank 53. -SR ID: 94, mesh bin: 57334 is being transferred from rank 42 to rank 53. -SR ID: 90, mesh bin: 56579 is being transferred from rank 49 to rank 53. -SR ID: 110, mesh bin: 59473 is being transferred from rank 42 to rank 53. -SR ID: 75, mesh bin: 53364 is being transferred from rank 49 to rank 53. -SR ID: 90, mesh bin: 55507 is being transferred from rank 49 to rank 53. -SR ID: 618, mesh bin: 57293 is being transferred from rank 49 to rank 53. -SR ID: 649, mesh bin: 60507 is being transferred from rank 49 to rank 53. -SR ID: 45, mesh bin: 49436 is being transferred from rank 49 to rank 53. -SR ID: 59, mesh bin: 51578 is being transferred from rank 49 to rank 53. -SR ID: 59, mesh bin: 50507 is being transferred from rank 49 to rank 53. -SR ID: 75, mesh bin: 54436 is being transferred from rank 49 to rank 53. -SR ID: 609, mesh bin: 54837 is being transferred from rank 42 to rank 53. -SR ID: 632, mesh bin: 57650 is being transferred from rank 49 to rank 53. -SR ID: 610, mesh bin: 53767 is being transferred from rank 42 to rank 53. -SR ID: 45, mesh bin: 48364 is being transferred from rank 49 to rank 53. -SR ID: 125, mesh bin: 60892 is being transferred from rank 45 to rank 53. -SR ID: 125, mesh bin: 60890 is being transferred from rank 45 to rank 53. -SR ID: 622, mesh bin: 57333 is being transferred from rank 42 to rank 53. -SR ID: 104, mesh bin: 58007 is being transferred from rank 49 to rank 53. -SR ID: 632, mesh bin: 59793 is being transferred from rank 49 to rank 53. -SR ID: 59, mesh bin: 52293 is being transferred from rank 49 to rank 53. -SR ID: 622, mesh bin: 55193 is being transferred from rank 42 to rank 53. -SR ID: 94, mesh bin: 55550 is being transferred from rank 42 to rank 53. -SR ID: 587, mesh bin: 50150 is being transferred from rank 49 to rank 53. -SR ID: 65, mesh bin: 50913 is being transferred from rank 42 to rank 53. -SR ID: 94, mesh bin: 56620 is being transferred from rank 42 to rank 53. -SR ID: 126, mesh bin: 60897 is being transferred from rank 45 to rank 53. -SR ID: 126, mesh bin: 60896 is being transferred from rank 45 to rank 53. -SR ID: 126, mesh bin: 60895 is being transferred from rank 45 to rank 53. -SR ID: 655, mesh bin: 60543 is being transferred from rank 42 to rank 53. -SR ID: 126, mesh bin: 60894 is being transferred from rank 45 to rank 53. -SR ID: 650, mesh bin: 60865 is being transferred from rank 49 to rank 53. -SR ID: 110, mesh bin: 57690 is being transferred from rank 42 to rank 53. -SR ID: 126, mesh bin: 60899 is being transferred from rank 45 to rank 53. -SR ID: 126, mesh bin: 60898 is being transferred from rank 45 to rank 53. -SR ID: 638, mesh bin: 59473 is being transferred from rank 42 to rank 53. -SR ID: 587, mesh bin: 52293 is being transferred from rank 49 to rank 53. -SR ID: 578, mesh bin: 49843 is being transferred from rank 42 to rank 53. -SR ID: 90, mesh bin: 55864 is being transferred from rank 49 to rank 53. -SR ID: 90, mesh bin: 56936 is being transferred from rank 49 to rank 53. -SR ID: 45, mesh bin: 49078 is being transferred from rank 49 to rank 53. -SR ID: 75, mesh bin: 52650 is being transferred from rank 49 to rank 53. -SR ID: 122, mesh bin: 61228 is being transferred from rank 45 to rank 53. -SR ID: 122, mesh bin: 61227 is being transferred from rank 45 to rank 53. -SR ID: 110, mesh bin: 58760 is being transferred from rank 42 to rank 53. -SR ID: 59, mesh bin: 51221 is being transferred from rank 49 to rank 53. -SR ID: 122, mesh bin: 61222 is being transferred from rank 45 to rank 53. -SR ID: 122, mesh bin: 61226 is being transferred from rank 45 to rank 53. -SR ID: 122, mesh bin: 61225 is being transferred from rank 45 to rank 53. -SR ID: 122, mesh bin: 61224 is being transferrSR ID: 461, mesh bin: 115370 is being transferred from rank 43 to rank 54. -SR ID: 2189, mesh bin: 114656 is being transferred from rank 43 to rank 54. -SR ID: 461, mesh bin: 116798 is being transferred from rank 43 to rank 54. -SR ID: 2285, mesh bin: 114656 is being transferred from rank 43 to rank 54. -SR ID: 2188, mesh bin: 112851 is being transferred from rank 2 to rank 54. -SR ID: 2188, mesh bin: 112852 is being transferred from rank 2 to rank 54. -SR ID: 2188, mesh bin: 112847 is being transferred from rank 2 to rank 54. -SR ID: 2188, mesh bin: 112849 is being transferred from rank 2 to rank 54. -SR ID: 2188, mesh bin: 112848 is being transferred from rank 2 to rank 54. -SR ID: 444, mesh bin: 113201 is being transferred from rank 2 to rank 54. -SR ID: 444, mesh bin: 113200 is being transferred from rank 2 to rank 54. -SR ID: 444, mesh bin: 113197 is being transferred from rank 2 to rank 54. -SR ID: 972, mesh bin: 113197 is being transferred from rank 2 to rank 54. -SR ID: 507, mesh bin: 124652 is being transferred from rank 43 to rank 54. -SR ID: 1005, mesh bin: 119654 is being transferred from rank 43 to rank 54. -SR ID: 461, mesh bin: 116084 is being transferred from rank 43 to rank 54. -SR ID: 2195, mesh bin: 121439 is being transferred from rank 43 to rank 54. -SR ID: 477, mesh bin: 117512 is being transferred from rank 43 to rank 54. -SR ID: 2189, mesh bin: 113942 is being transferred from rank 43 to rank 54. -SR ID: 477, mesh bin: 118583 is being transferred from rank 43 to rank 54. -SR ID: 442, mesh bin: 113182 is being transferred from rank 2 to rank 54. -SR ID: 442, mesh bin: 113181 is being transferred from rank 2 to rank 54. -SR ID: 2189, mesh bin: 112869 is being transferred from rank 2 to rank 54. -SR ID: 442, mesh bin: 113180 is being transferred from rank 2 to rank 54. -SR ID: 442, mesh bin: 113179 is being transferred from rank 2 to rank 54. -SR ID: 2285, mesh bin: 112868 is being transferred from rank 2 to rank 54. -SR ID: 2285, mesh bin: 112869 is being transferred from rank 2 to rank 54. -SR ID: 1035, mesh bin: 124652 is being transferred from rank 43 to rank 54. -SR ID: 2189, mesh bin: 112870 is being transferred from rank 2 to rank 54. -SR ID: 2189, mesh bin: 112871 is being transferred from rank 43 to rank 54. -SR ID: 507, mesh bin: 122510 is being transferred from rank 43 to rank 54. -SR ID: 1005, mesh bin: 117512 is being transferred from rank 43 to rank 54. -SR ID: 442, mesh bin: 113178 is being transferred from rank 2 to rank 54. -SR ID: 442, mesh bin: 113177 is being transferred from rank 2 to rank 54. -SR ID: 442, mesh bin: 113176 is being transferred from rank 2 to rank 54. -SR ID: 507, mesh bin: 123581 is being transferred from rank 43 to rank 54. -SR ID: 524, mesh bin: 126438 is being transferred from rank 43 to rank 54. -SR ID: 2187, mesh bin: 113186 is being transferred from rank 2 to rank 54. -SR ID: 446, mesh bin: 112865 is being transferred from rank 2 to rank 54. -SR ID: 446, mesh bin: 112864 is being transferred from rank 2 to rank 54. -SR ID: 2187, mesh bin: 113187 is being transferred from rank 2 to rank 54. -SR ID: 446, mesh bin: 112863 is being transferred from rank 2 to rank 54. -SR ID: 2187, mesh bin: 113188 is being transferred from rank 2 to rank 54. -SR ID: 2187, mesh bin: 113189 is being transferred from rank 2 to rank 54. -SR ID: 446, mesh bin: 112862 is being transferred from rank 2 to rank 54. -SR ID: 2187, mesh bin: 113183 is being transferred from rank 2 to rank 54. -SR ID: 2187, mesh bin: 113184 is being transferred from rank 2 to rank 54. -SR ID: 2187, mesh bin: 113185 is being transferred from rank 2 to rank 54. -SR ID: 971, mesh bin: 113196 is being transferred from rank 2 to rank 54. -SR ID: 971, mesh bin: 113190 is being transferred from rank 2 to rank 54. -SR ID: 446, mesh bin: 112866 is being transferred from rank 2 to rank 54. -SR ID: 441, mesh bin: 113169 is being transferred from rank 2 to rank 54. -SR ID: 441, mesh bin: 113170 is being transferred from rank 2 to rank 54. -SR ID: 441, mesh bin: 113173 is being transferred from rank 2 to rank 54. -SR ID: 441, mesh bin: 113174 is being transferred from ranSR ID: 2086, mesh bin: 111909 is being transferred from rank 9 to rank 55. -SR ID: 1172, mesh bin: 125431 is being transferred from rank 43 to rank 55. -SR ID: 1172, mesh bin: 126502 is being transferred from rank 43 to rank 55. -SR ID: 1298, mesh bin: 124717 is being transferred from rank 43 to rank 55. -SR ID: 1885, mesh bin: 111550 is being transferred from rank 9 to rank 55. -SR ID: 2085, mesh bin: 111908 is being transferred from rank 9 to rank 55. -SR ID: 2096, mesh bin: 113343 is being transferred from rank 9 to rank 55. -SR ID: 1885, mesh bin: 111549 is being transferred from rank 9 to rank 55. -SR ID: 2085, mesh bin: 110831 is being transferred from rank 9 to rank 55. -SR ID: 2309, mesh bin: 113344 is being transferred from rank 9 to rank 55. -SR ID: 2213, mesh bin: 114420 is being transferred from rank 9 to rank 55. -SR ID: 2213, mesh bin: 114419 is being transferred from rank 9 to rank 55. -SR ID: 1172, mesh bin: 125788 is being transferred from rank 43 to rank 55. -SR ID: 2213, mesh bin: 113344 is being transferred from rank 9 to rank 55. -SR ID: 1896, mesh bin: 112984 is being transferred from rank 9 to rank 55. -SR ID: 1896, mesh bin: 112985 is being transferred from rank 9 to rank 55. -SR ID: 2309, mesh bin: 114420 is being transferred from rank 9 to rank 55. -SR ID: 2309, mesh bin: 114421 is being transferred from rank 9 to rank 55. -SR ID: 1298, mesh bin: 122932 is being transferred from rank 43 to rank 55. -SR ID: 1300, mesh bin: 126859 is being transferred from rank 43 to rank 55. -SR ID: 1906, mesh bin: 115496 is being transferred from rank 9 to rank 55. -SR ID: 1906, mesh bin: 115497 is being transferred from rank 9 to rank 55. -SR ID: 1896, mesh bin: 112626 is being transferred from rank 9 to rank 55. -SR ID: 1896, mesh bin: 112627 is being transferred from rank 9 to rank 55. -SR ID: 1172, mesh bin: 126859 is being transferred from rank 43 to rank 55. -SR ID: 1168, mesh bin: 121862 is being transferred from rank 43 to rank 55. -SR ID: 1170, mesh bin: 124003 is being transferred from rank 43 to rank 55. -SR ID: 1300, mesh bin: 127216 is being transferred from rank 43 to rank 55. -SR ID: 1298, mesh bin: 124360 is being transferred from rank 43 to rank 55. -SR ID: 2213, mesh bin: 113702 is being transferred from rank 9 to rank 55. -SR ID: 2213, mesh bin: 113703 is being transferred from rank 9 to rank 55. -SR ID: 2085, mesh bin: 110474 is being transferred from rank 9 to rank 55. -SR ID: 1172, mesh bin: 126145 is being transferred from rank 43 to rank 55. -SR ID: 2084, mesh bin: 110473 is being transferred from rank 9 to rank 55. -SR ID: 1906, mesh bin: 115138 is being transferred from rank 9 to rank 55. -SR ID: 2097, mesh bin: 114779 is being transferred from rank 9 to rank 55. -SR ID: 1300, mesh bin: 125074 is being transferred from rank 43 to rank 55. -SR ID: 1296, mesh bin: 122219 is being transferred from rank 43 to rank 55. -SR ID: 1885, mesh bin: 111190 is being transferred from rank 9 to rank 55. -SR ID: 1885, mesh bin: 111191 is being transferred from rank 9 to rank 55. -SR ID: 1300, mesh bin: 125431 is being transferred from rank 43 to rank 55. -SR ID: 2086, mesh bin: 112268 is being transferred from rank 9 to rank 55. -SR ID: 2096, mesh bin: 112626 is being transferred from rank 9 to rank 55. -SR ID: 2106, mesh bin: 115138 is being transferred from rank 9 to rank 55. -SR ID: 2086, mesh bin: 112267 is being transferred from rank 9 to rank 55. -SR ID: 2096, mesh bin: 112625 is being transferred from rank 9 to rank 55. -SR ID: 2106, mesh bin: 115137 is being transferred from rank 9 to rank 55. -SR ID: 1170, mesh bin: 124360 is being transferred from rank 43 to rank 55. -: 121149 is being transferred from rank 55 to rank 11. -SR ID: 1480, mesh bin: 115454 is being transferred from rank 55 to rank 11. -SR ID: 1480, mesh bin: 115453 is being transferred from rank 55 to rank 11. -SR ID: 1884, mesh bin: 110471 is being transferred from rank 55 to rank 11. -SR ID: 1485, mesh bin: 117589 is being transferred from rank 55 to rank 11. -SR ID: 1485, mesh bin: 117590 is being transferred from rank 55 to rank 11. -SR ID: 2094, mesh bin: 114030 is being transferred from rank 55 to rank 11. -SR ID: 1884, mesh bin: 111539 is being transferred from rank 55 to rank 11. -SR ID: 1884, mesh bin: 111538 is being transferred from rank 55 to rank 11. -SR ID: 1480, mesh bin: 116166 is being transferred from rank 55 to rank 11. -SR ID: 1480, mesh bin: 116165 is being transferred from rank 55 to rank 11. -SR ID: 1685, mesh bin: 117590 is being transferred from rank 55 to rank 11. -SR ID: 1480, mesh bin: 116522 is being transferred from rank 55 to rank 11. -SR ID: 1490, mesh bin: 120081 is being transferred from rank 55 to rank 11. -SR ID: 1684, mesh bin: 119725 is being transferred from rank 55 to rank 11. -SR ID: 1485, mesh bin: 118302 is being transferred from rank 55 to rank 11. -SR ID: 1684, mesh bin: 119726 is being transferred from rank 55 to rank 11. -SR ID: 1884, mesh bin: 111183 is being transferred from rank 55 to rank 11. -SR ID: 1894, mesh bin: 112606 is being transferred from rank 55 to rank 11. -SR ID: 1914, mesh bin: 118354 is being transferred from rank 55 to rank 19. -ed from rank 45 to rank 53. -SR ID: 122, mesh bin: 61223 is being transferred from rank 45 to rank 53. -SR ID: 59, mesh bin: 50150 is being transferred from rank 49 to rank 53. -SR ID: 75, mesh bin: 54793 is being transferred from rank 49 to rank 53. -SR ID: 123, mesh bin: 61230 is being transferred from rank 45 to rank 53. -SR ID: 123, mesh bin: 61231 is being transferred from rank 45 to rank 53. -SR ID: 123, mesh bin: 61232 is being transferred from rank 45 to rank 53. -SR ID: 123, mesh bin: 61233 is being transferred from rank 45 to rank 53. -SR ID: 123, mesh bin: 61229 is being transferred from rank 45 to rank 53. -SR ID: 123, mesh bin: 61234 is being transferred from rank 45 to rank 53. -SR ID: 610, mesh bin: 53054 is being transferred from rank 42 to rank 53. -SR ID: 610, mesh bin: 53053 is being transferred from rank 42 to rank 53. -SR ID: 124, mesh bin: 61239 is being transferred from rank 45 to rank 53. -SR ID: 124, mesh bin: 61240 is being transferred from rank 45 to rank 53. -SR ID: 124, mesh bin: 61237 is being transferred from rank 45 to rank 53. -SR ID: 45, mesh bin: 48007 is being transferred from rank 49 to rank 53. -SR ID: 124, mesh bin: 61236 is being transferred from rank 45 to rank 53. -SR ID: 65, mesh bin: 51627 is being transferred from rank 42 to rank 53. -SR ID: 654, mesh bin: 60899 is being transferred from rank 45 to rank 53. -SR ID: 104, mesh bin: 58365 is being transferred from rank 49 to rank 53. -SR ID: 638, mesh bin: 59830 is being transferred from rank 42 to rank 53. -SR ID: 632, mesh bin: 58007 is being transferred from rank 49 to rank 53. -SR ID: 110, mesh bin: 59117 is being transferred from rank 42 to rank 53. -SR ID: 59, mesh bin: 51936 is being transferred from rank 49 to rank 53. -SR ID: 94, mesh bin: 55907 is being transferred from rank 42 to rank 53. -SR ID: 638, mesh bin: 57690 is being transferred from rank 42 to rank 53. -SR ID: 632, mesh bin: 59079 is being transferred from rank 49 to rank 53. -SR ID: 90, mesh bin: 56222 is being transferred from rank 49 to rank 53. -SR ID: 622, mesh bin: 55550 is being transferred from rank 42 to rank 53. -SR ID: 618, mesh bin: 56936 is being transferred from rank 49 to rank 53. -SR ID: 649, mesh bin: 60150 is being transferred from rank 49 to rank 53. -SR ID: 65, mesh bin: 50557 is being transferred from rank 42 to rank 53. -SR ID: 75, mesh bin: 53007 is being transferred from rank 49 to rank 53. -SR ID: 94, mesh bin: 56977 is being transferred from rank 42 to rank 53. -SR ID: 125, mesh bin: 61244 is being transferred from rank 45 to rank 53. -SR ID: 90, mesh bin: 55150 is being transferred from rank 49 to rank 53. -SR ID: 651, mesh bin: 61229 is being transferred from rank 45 to rank 53. -SR ID: 603, mesh bin: 52650 is being transferred from rank 49 to rank 53. -SR ID: 651, mesh bin: 61235 is being transferred from rank 45 to rank 53. -SR ID: 110, mesh bin: 58047 is being transferred from rank 42 to rank 53. -SR ID: 573, mesh bin: 49793 is being transferred from rank 49 to rank 53. -SR ID: 59, mesh bin: 50864 is being transferred from rank 49 to rank 53. -SR ID: 45, mesh bin: 48721 is being transferred from rank 49 to rank 53. -SR ID: 45, mesh bin: 49793 is being transferred from rank 49 to rank 53. -SR ID: 593, mesh bin: 50200 is being transferred from rank 42 to rank 53. -SR ID: 603, mesh bin: 54793 is being transferred from rank 49 to rank 53. -SR ID: 75, mesh bin: 54079 is being transferred from rank 49 to rank 53. -SR ID: 655, mesh bin: 60900 is being transferred from rank 42 to rank 53. -SR ID: 650, mesh bin: 61222 is being transferred from rank 49 to rank 53. -SR ID: 609, mesh bin: 54480 is being transferred from rank 42 to rank 53. -SR ID: 593, mesh bin: 52340 is being transferred from rank 42 to rank 53. -SR ID: 650, mesh bin: 61228 is being transferred from rank 45 to rank 53. -SR ID: 610, mesh bin: 53410 is being transferred from rank 42 to rank 53. -SR ID: 632, mesh bin: 59436 is being transferred from rank 49 to rank 53. -SR ID: 652, mesh bin: 61236 is being transferred from rank 45 to rank 53. -SR ID: 618, mesh bin: 55150 is being transferred from rank 49 to rank 53. -k 2 to rank 54. -SR ID: 441, mesh bin: 113171 is being transferred from rank 2 to rank 54. -SR ID: 441, mesh bin: 113172 is being transferred from rank 2 to rank 54. -SR ID: 441, mesh bin: 113175 is being transferred from rank 2 to rank 54. -SR ID: 461, mesh bin: 115013 is being transferred from rank 43 to rank 54. -SR ID: 2195, mesh bin: 120725 is being transferred from rank 43 to rank 54. -SR ID: 443, mesh bin: 113194 is being transferred from rank 2 to rank 54. -SR ID: 443, mesh bin: 113195 is being transferred from rank 2 to rank 54. -SR ID: 461, mesh bin: 116441 is being transferred from rank 43 to rank 54. -SR ID: 443, mesh bin: 113196 is being transferred from rank 2 to rank 54. -SR ID: 969, mesh bin: 113169 is being transferred from rank 2 to rank 54. -SR ID: 443, mesh bin: 113192 is being transferred from rank 2 to rank 54. -SR ID: 2283, mesh bin: 113189 is being transferred from rank 2 to rank 54. -SR ID: 443, mesh bin: 113193 is being transferred from rank 2 to rank 54. -SR ID: 989, mesh bin: 115013 is being transferred from rank 43 to rank 54. -SR ID: 2283, mesh bin: 113183 is being transferred from rank 2 to rank 54. -SR ID: 974, mesh bin: 112861 is being transferred from rank 2 to rank 54. -SR ID: 507, mesh bin: 124295 is being transferred from rank 43 to rank 54. -SR ID: 969, mesh bin: 113175 is being transferred from rank 2 to rank 54. -SR ID: 974, mesh bin: 112867 is being transferred from rank 2 to rank 54. -SR ID: 974, mesh bin: 112866 is being transferred from rank 2 to rank 54. -SR ID: 974, mesh bin: 112862 is being transferred from rank 2 to rank 54. -SR ID: 1035, mesh bin: 122510 is being transferred from rank 43 to rank 54. -SR ID: 970, mesh bin: 113176 is being transferred from rank 2 to rank 54. -SR ID: 970, mesh bin: 113182 is being transferred from rank 2 to rank 54. -SR ID: 2189, mesh bin: 114299 is being transferred from rank 43 to rank 54. -SR ID: 524, mesh bin: 127152 is being transferred from rank 43 to rank 54. -SR ID: 2195, mesh bin: 121796 is being transferred from rank 43 to rank 54. -SR ID: 461, mesh bin: 115727 is being transferred from rank 43 to rank 54. -SR ID: 2189, mesh bin: 113228 is being transferred from rank 43 to rank 54. -SR ID: 477, mesh bin: 118226 is being transferred from rank 43 to rank 54. -SR ID: 461, mesh bin: 117155 is being transferred from rank 43 to rank 54. -SR ID: 445, mesh bin: 112858 is being transferred from rank 2 to rank 54. -SR ID: 445, mesh bin: 112859 is being transferred from rank 2 to rank 54. -SR ID: 973, mesh bin: 112860 is being transferred from rank 2 to rank 54. -SR ID: 973, mesh bin: 112859 is being transferred from rank 2 to rank 54. -SR ID: 973, mesh bin: 112855 is being transferred from rank 2 to rank 54. -SR ID: 445, mesh bin: 112856 is being transferred from rank 2 to rank 54. -SR ID: 445, mesh bin: 112857 is being transferred from rank 2 to rank 54. -SR ID: 445, mesh bin: 112855 is being transferred from rank 2 to rank 54. -SR ID: 1052, mesh bin: 127152 is being transferred from rank 43 to rank 54. -SR ID: 507, mesh bin: 123224 is being transferred from rank 43 to rank 54. -SR ID: 2195, mesh bin: 121082 is being transferred from rank 43 to rank 54. -SR ID: 524, mesh bin: 126080 is being transferred from rank 43 to rank 54. -SR ID: 989, mesh bin: 117155 is being transferred from rank 43 to rank 54. -SR ID: 2195, mesh bin: 120011 is being transferred from rank 43 to rank 54. -SR ID: 524, mesh bin: 125009 is being transferred from rank 43 to rank 54. -SR ID: 2195, mesh bin: 122153 is being transferred from rank 43 to rank 54. -SR ID: 477, mesh bin: 117869 is being transferred from rank 43 to rank 54. -SR ID: 477, mesh bin: 118940 is being transferred from rank 43 to rank 54. -SR ID: 2189, mesh bin: 113585 is being transferred from rank 43 to rank 54. -SR ID: 2291, mesh bin: 122153 is being transferred from rank 43 to rank 54. -SR ID: 1052, mesh bin: 125009 is being transferred from rank 43 to rank 54. -SR ID: 507, mesh bin: 122867 is being transferred from rank 43 to rank 54. -SR ID: 507, mesh bin: 123938 is being transferred from rank 43 to rank 54. -SR ID: 2291, mesh bin: 120011 is being trSR ID: 1906, mesh bin: 115855 is being transferred from rank 9 to rank 55. -SR ID: 2213, mesh bin: 114062 is being transferred from rank 9 to rank 55. -SR ID: 2213, mesh bin: 114061 is being transferred from rank 9 to rank 55. -ansferred from rank 43 to rank 54. -SR ID: 2195, mesh bin: 120368 is being transferred from rank 43 to rank 54. -SR ID: 1680, mesh bin: 115098 is being transferred from rank 55 to rank 11. -SR ID: 1894, mesh bin: 113674 is being transferred from rank 55 to rank 11. -SR ID: 2114, mesh bin: 119782 is being transferred from rank 55 to rank 19. -SR ID: 1884, mesh bin: 110827 is being transferred from rank 55 to rank 11. -SR ID: 1480, mesh bin: 115098 is being transferred from rank 55 to rank 11. -SR ID: 1684, mesh bin: 119013 is being transferred from rank 55 to rank 11. -SR ID: 1296, mesh bin: 121505 is being transferred from rank 55 to rank 11. -SR ID: 1679, mesh bin: 117234 is being transferred from rank 55 to rank 11. -SR ID: 1181, mesh bin: 125851 is being transferred from rank 55 to rank 19. -SR ID: 1906, mesh bin: 116927 is being transferred from rank 55 to rank 19. -SR ID: 1490, mesh bin: 120793 is being transferred from rank 55 to rank 11. -SR ID: 2114, mesh bin: 117640 is being transferred from rank 55 to rank 19. -SR ID: 2094, mesh bin: 112606 is being transferred from rank 55 to rank 11. -SR ID: 1914, mesh bin: 119425 is being transferred from rank 55 to rank 19. -SR ID: 2093, mesh bin: 114742 is being transferred from rank 55 to rank 11. -SR ID: 1885, mesh bin: 110832 is being transferred from rank 9 to rank 55. -SR ID: 1885, mesh bin: 110831 is being transferred from rank 9 to rank 55. -SR ID: 2083, mesh bin: 112250 is being transferred from rank 55 to rank 11. -SR ID: 2083, mesh bin: 112251 is being transferred from rank 55 to rank 11. -SR ID: 2309, mesh bin: 114778 is being transferred from rank 9 to rank 55. -SR ID: 1, mesh bin: 26911 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 13377 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 12301 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 12302 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 13365 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 13366 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 14784 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 23696 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 14782 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 29769 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 18695 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 19767 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 27625 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 27626 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 24768 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 16601 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 14093 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 28697 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 14075 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 14073 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 14074 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 13019 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 13018 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 15491 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 15492 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 15490 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 17623 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 25482 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 29443 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29441 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29442 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30483 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 31555 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 31556 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 20481 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 21553 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 16600 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 15525 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 15526 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 26554 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 16555 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 16554 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 13011 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 30499 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30500 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30497 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 13010 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 30498 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 19410 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 17266 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 22267 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 23339 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 31203 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 31204 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 31205 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 31198 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 16243 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 16242 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 28340 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 18338 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 12660 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 13720 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 12657 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 12658 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 12661 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 12656 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 21196 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 19052 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 29054 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 15168 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 16201 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 16199 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 16200 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 13735 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 26197 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 13734 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 24053 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 25125 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 15137 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 15136 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 30147 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30148 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30145 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30146 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30149 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29092 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29089 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29090 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30144 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29087 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29088 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 20124 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 30126 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 16909 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 16910 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 21910 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 22982 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 14451 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 15884 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 20838 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 27983 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 14427 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 14428 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 14429 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 14430 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 14809 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 14810 is being transferred from rank 6 to rank 56. -SR ID: 1, mesh bin: 25839 is being transferred from rank 23 to rank 56. -SR ID: 1, mesh bin: 30851 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 15844 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 15845 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 15846 is being transferred from rank 56 to rank 17. -SR ID: 1, mesh bin: 30852 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30849 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30850 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 30853 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29795 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29793 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29794 is being transferred from rank 31 to rank 56. -SR ID: 1, mesh bin: 29792 is being transferred from rank 31 to rank 56. -SR ID: 3, mesh bin: 42824 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 42826 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 42827 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 35650 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 40660 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 40659 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 41744 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 41743 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 40662 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 40661 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 30659 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 39579 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 39578 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 31729 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 39577 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 36720 is being transferred from rank 44 to rank 57. -SR ID: 3, mesh bin: 43548 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 43549 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 43547 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 27476 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27475 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27473 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27480 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27478 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27477 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27468 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27467 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27466 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 39576 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 27465 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27472 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27471 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27470 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27469 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27460 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27459 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27458 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27464 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27463 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27462 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 37433 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 29590 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 27461 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 34581 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 32442 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 33512 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 41383 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 41382 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 41381 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 27484 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27483 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27482 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27481 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27486 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27485 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 28521 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 38503 is being transferred from rank 18 to rank 57. -SR ID: 2, mesh bin: 42465 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 29234 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 39218 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 39217 is being transferred from rank 18 to rank 57. -SR ID: 2, mesh bin: 36363 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 34224 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 35294 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 40300 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 40299 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 40298 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 30303 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 40301 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 43185 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 43186 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 43187 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 32086 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 32085 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 33155 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 31016 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 37076 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 28164 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 28165 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 36007 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 42105 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 43908 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 43909 is being transferred from rank 10 to rank 57. -SR ID: 3, mesh bin: 43910 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 42104 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 42103 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 41023 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 41022 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 41021 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 33868 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 29947 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 39940 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 38860 is being transferred from rank 18 to rank 57. -SR ID: 2, mesh bin: 39939 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 39938 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 39937 is being transferred from rank 10 to rank 57. -SR ID: 2, mesh bin: 27810 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27809 is being transferred from rank 57 to rank 16. -SR ID: 2, mesh bin: 27808 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 37789 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 34937 is being transferred from rank 44 to rank 57. -SR ID: 2, mesh bin: 32798 is being transferred from rank 44 to rank 57. -SR ID: 1, mesh bin: 34823 is being transferred from rank 58 to rank 31. -SR ID: 51, mesh bin: 49136 is being transferred from rank 42 to rank 58. -SR ID: 51, mesh bin: 49137 is being transferred from rank 42 to rank 58. -SR ID: 1, mesh bin: 35894 is being transferred from rank 58 to rank 31. -SR ID: 51, mesh bin: 49135 is being transferred from rank 42 to rank 58. -SR ID: 543, mesh bin: 43035 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 30929 is being transferred from rank 58 to rank 30. -SR ID: 34, mesh bin: 46260 is being transferred from rank 53 to rank 58. -SR ID: 2, mesh bin: 41658 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 45584 is being transferred from rank 58 to rank 18. -SR ID: 2, mesh bin: 33800 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 33799 is being transferred from rank 58 to rank 30. -SR ID: 1, mesh bin: 29853 is being transferred from rank 58 to rank 30. -SR ID: 1, mesh bin: 29854 is being transferred from rank 58 to rank 30. -SR ID: 580, mesh bin: 48075 is being transferred from rank 42 to rank 58. -SR ID: 580, mesh bin: 48074 is being transferred from rank 42 to rank 58. -SR ID: 1, mesh bin: 40890 is being transferred from rank 58 to rank 31. -SR ID: 1, mesh bin: 38749 is being transferred from rank 58 to rank 31. -SR ID: 2, mesh bin: 38803 is being transferred from rank 58 to rank 18. -SR ID: 52, mesh bin: 48074 is being transferred from rank 42 to rank 58. -SR ID: 2, mesh bin: 36662 is being transferred from rank 58 to rank 18. -SR ID: 50, mesh bin: 49127 is being transferred from rank 53 to rank 58. -SR ID: 50, mesh bin: 49126 is being transferred from rank 53 to rank 58. -SR ID: 562, mesh bin: 45185 is being transferred from rank 53 to rank 58. -SR ID: 16, mesh bin: 43752 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 41604 is being transferred from rank 58 to rank 31. -SR ID: 3, mesh bin: 46655 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 44513 is being transferred from rank 58 to rank 18. -SR ID: 544, mesh bin: 44826 is being transferred from rank 53 to rank 58. -SR ID: 544, mesh bin: 44827 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 36607 is being transferred from rank 58 to rank 31. -SR ID: 1, mesh bin: 37678 is being transferred from rank 58 to rank 31. -SR ID: 2, mesh bin: 34516 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 34517 is being transferred from rank 58 to rank 30. -SR ID: 1, mesh bin: 32723 is being transferred from rank 58 to rank 30. -SR ID: 1, mesh bin: 32724 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 35591 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 48076 is being transferred from rank 42 to rank 58. -SR ID: 2, mesh bin: 33441 is being transferred from rank 58 to rank 30. -SR ID: 1, mesh bin: 30571 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 33440 is being transferred from rank 58 to rank 30. -SR ID: 563, mesh bin: 46977 is being transferred from rank 53 to rank 58. -SR ID: 49, mesh bin: 48052 is being transferred from rank 53 to rank 58. -SR ID: 2, mesh bin: 40588 is being transferred from rank 58 to rank 18. -SR ID: 1, mesh bin: 31647 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 38446 is being transferred from rank 58 to rank 18. -SR ID: 52, mesh bin: 48784 is being transferred from rank 42 to rank 58. -SR ID: 2, mesh bin: 39517 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 43443 is being transferred from rank 58 to rank 18. -SR ID: 562, mesh bin: 46976 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 35537 is being transferred from rank 58 to rank 31. -SR ID: 51, mesh bin: 48781 is being transferred from rank 42 to rank 58. -SR ID: 51, mesh bin: 48782 is being transferred from rank 42 to rank 58. -SR ID: 3, mesh bin: 46298 is being transferred from rank 58 to rank 18. -SR ID: 16, mesh bin: 44468 is being transferred from rank 53 to rank 58. -SR ID: 2, mesh bin: 41301 is being transferred from rank 58 to rank 18. -SR ID: 34, mesh bin: 45902 is being transferred from rank 53 to rank 58. -SR ID: 16, mesh bin: 44469 is being transferred from rank 53 to rank 58. -SR ID: 580, mesh bin: 48783 is being transferred from rank 42 to rank 58. -SR ID: 50, mesh bin: 49843 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 40534 is being transferred from rank 58 to rank 31. -SR ID: 1, mesh bin: 38392 is being transferred from rank 58 to rank 31. -SR ID: 1, mesh bin: 39463 is being transferred from rank 58 to rank 31. -SR ID: 578, mesh bin: 49845 is being transferred from rank 42 to rank 58. -SR ID: 1, mesh bin: 32364 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 36305 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 47720 is being transferred from rank 42 to rank 58. -SR ID: 1, mesh bin: 32365 is being transferred from rank 58 to rank 30. -SR ID: 3, mesh bin: 47721 is being transferred from rank 42 to rank 58. -SR ID: 3, mesh bin: 47722 is being transferred from rank 42 to rank 58. -SR ID: 2, mesh bin: 37376 is being transferred from rank 58 to rank 18. -SR ID: 543, mesh bin: 42677 is being transferred from rank 53 to rank 58. -SR ID: 2, mesh bin: 35234 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 35233 is being transferred from rank 58 to rank 30. -SR ID: 579, mesh bin: 48782 is being transferred from rank 42 to rank 58. -SR ID: 2, mesh bin: 42372 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 44157 is being transferred from rank 58 to rank 18. -SR ID: 16, mesh bin: 43394 is being transferred from rank 53 to rank 58. -SR ID: 16, mesh bin: 43393 is being transferred from rank 53 to rank 58. -SR ID: 2, mesh bin: 40231 is being transferred from rank 58 to rank 18. -SR ID: 49, mesh bin: 48768 is being transferred from rank 53 to rank 58. -SR ID: 578, mesh bin: 48769 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 37321 is being transferred from rank 58 to rank 31. -SR ID: 1, mesh bin: 35180 is being transferred from rank 58 to rank 31. -SR ID: 1, mesh bin: 30212 is being transferred from rank 58 to rank 30. -SR ID: 1, mesh bin: 42318 is being transferred from rank 58 to rank 31. -SR ID: 1, mesh bin: 40177 is being transferred from rank 58 to rank 31. -SR ID: 1, mesh bin: 42319 is being transferred from rank 53 to rank 58. -SR ID: 544, mesh bin: 44469 is being transferred from rank 53 to rank 58. -SR ID: 49, mesh bin: 47694 is being transferred from rank 53 to rank 58. -SR ID: 577, mesh bin: 48768 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 31288 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 33082 is being transferred from rank 58 to rank 30. -SR ID: 544, mesh bin: 43393 is being transferred from rank 53 to rank 58. -SR ID: 2, mesh bin: 38089 is being transferred from rank 58 to rank 18. -SR ID: 34, mesh bin: 46619 is being transferred from rank 53 to rank 58. -SR ID: 34, mesh bin: 46618 is being transferred from rank 53 to rank 58. -SR ID: 52, mesh bin: 48429 is being transferred from rank 42 to rank 58. -SR ID: 52, mesh bin: 48428 is being transferred from rank 42 to rank 58. -SR ID: 577, mesh bin: 47693 is being transferred from rank 53 to rank 58. -SR ID: 52, mesh bin: 48430 is being transferred from rank 42 to rank 58. -SR ID: 562, mesh bin: 46619 is being transferred from rank 53 to rank 58. -SR ID: 34, mesh bin: 45544 is being transferred from rank 53 to rank 58. -SR ID: 34, mesh bin: 45543 is being transferred from rank 53 to rank 58. -SR ID: 52, mesh bin: 48427 is being transferred from rank 42 to rank 58. -SR ID: 51, mesh bin: 49491 is being transferred from rank 42 to rank 58. -SR ID: 2, mesh bin: 42015 is being transferred from rank 58 to rank 18. -SR ID: 579, mesh bin: 49490 is being transferred from rank 42 to rank 58. -SR ID: 2, mesh bin: 34159 is being transferred from rank 58 to rank 30. -SR ID: 3, mesh bin: 45941 is being transferred from rank 58 to rank 18. -SR ID: 2, mesh bin: 34158 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 34157 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 39160 is being transferred from rank 58 to rank 18. -SR ID: 2, mesh bin: 37019 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 43086 is being transferred from rank 58 to rank 18. -SR ID: 1, mesh bin: 38035 is being transferred from rank 58 to rank 31. -SR ID: 50, mesh bin: 49485 is being transferred from rank 53 to rank 58. -SR ID: 578, mesh bin: 49489 is being transferred from rank 42 to rank 58. -SR ID: 578, mesh bin: 49488 is being transferred from rank 42 to rank 58. -SR ID: 1, mesh bin: 32006 is being transferred from rank 58 to rank 30. -SR ID: 3, mesh bin: 47368 is being transferred from rank 42 to rank 58. -SR ID: 3, mesh bin: 47366 is being transferred from rank 42 to rank 58. -SR ID: 3, mesh bin: 47367 is being transferred from rank 42 to rank 58. -SR ID: 562, mesh bin: 45543 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 41961 is being transferred from rank 58 to rank 31. -SR ID: 3, mesh bin: 47012 is being transferred from rank 58 to rank 18. -SR ID: 2, mesh bin: 39874 is being transferred from rank 58 to rank 18. -SR ID: 1, mesh bin: 39106 is being transferred from rank 58 to rank 31. -SR ID: 16, mesh bin: 44110 is being transferred from rank 53 to rank 58. -SR ID: 16, mesh bin: 44111 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 33081 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 34875 is being transferred from rank 58 to rank 30. -SR ID: 2, mesh bin: 35948 is being transferred from rank 58 to rank 18. -SR ID: 49, mesh bin: 48411 is being transferred from rank 53 to rank 58. -SR ID: 49, mesh bin: 48410 is being transferred from rank 53 to rank 58. -SR ID: 1, mesh bin: 39820 is being transferred from rank 58 to rank 31. -SR ID: 563, mesh bin: 47335 is being transferred from rank 53 to rank 58. -SR ID: 3, mesh bin: 44870 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 42729 is being transferred from rank 58 to rank 18. -SR ID: 3, mesh bin: 43800 is being transferred from rank 58 to rank 18. -SR ID: 1, mesh bin: 14492 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 14489 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 14490 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 14493 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 34823 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 26951 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 15925 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 34824 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 15926 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 24809 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 33759 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 33758 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 15899 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 30918 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 29852 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 15900 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 15898 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 15901 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 29853 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 30883 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 17672 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 31627 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 21643 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 31628 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 31629 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 22668 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 33748 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 33749 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 23739 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 31599 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 16642 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 21598 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 17716 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 27711 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 25570 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 16603 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 16604 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 16602 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 18743 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 30563 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 32692 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 28735 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 26594 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 22714 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 20572 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 16605 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 16606 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 30564 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 30562 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 32693 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 32674 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 29451 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 14135 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 15567 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 14134 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 33403 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 33404 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 33402 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 23428 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 15547 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 15548 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 15546 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 33391 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 33390 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 28425 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 24453 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 25523 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 29496 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 18430 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 30525 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 19501 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 28378 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 34467 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 34468 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 20527 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 24499 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 34465 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 34464 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 31241 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 23382 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 21241 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 31242 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 25213 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 17359 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 17358 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 15209 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 18386 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 26237 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 16251 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 27308 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 16252 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 16250 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 22357 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 15195 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 15208 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 15193 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 15194 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 17315 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 30209 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 32338 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 20215 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 30208 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 21286 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 31273 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 32316 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 22311 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 25166 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 16283 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 16284 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 23025 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 20170 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 17000 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 30167 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 33047 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 33048 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 18029 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 19100 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 28021 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 34113 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 34114 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 29093 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 24142 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 34107 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 31983 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 22000 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 33032 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 34112 is being transferred from rank 58 to rank 59. -SR ID: 1, mesh bin: 23071 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 18073 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 28068 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 24096 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 20884 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 14487 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 14488 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 14851 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 14850 is being transferred from rank 59 to rank 20. -SR ID: 1, mesh bin: 14486 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 14843 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 25880 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 14841 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 14842 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 14840 is being transferred from rank 59 to rank 6. -SR ID: 1, mesh bin: 16958 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 19858 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 20929 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 31957 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 31958 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 29809 is being transferred from rank 31 to rank 59. -SR ID: 1, mesh bin: 24856 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 21955 is being transferred from rank 59 to rank 56. -SR ID: 1, mesh bin: 25927 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 23785 is being transferred from rank 59 to rank 30. -SR ID: 1, mesh bin: 19813 is being transferred from rank 59 to rank 56. -Best imbalance during optimization was 1.39% at iteration 198. - 1/1 0.81537 15.01323 -SR ID: 4, mesh bin: 90565 is being transferred from rank 0 to rank 0. diff --git a/examples/2D_c5g7_python_mesh/pin_power_error.py b/examples/2D_c5g7_python_mesh/pin_power_error.py deleted file mode 100644 index f2bbec94642..00000000000 --- a/examples/2D_c5g7_python_mesh/pin_power_error.py +++ /dev/null @@ -1,60 +0,0 @@ -import numpy as np -import matplotlib.pyplot as plt -import math -import sys -import openmc - -def reformat(arr, dev): - arr = np.rot90(arr, 3) - dev = np.rot90(dev, 3) - val = arr.sum() - factor = ((17 * 17 * 4) - (25 * 4)) / val - arr = arr * factor - dev = dev * factor - return arr[0:34,0:34], dev[0:34,0:34] - -def get_err(fname): - # Load the statepoint file - sp = openmc.StatePoint(fname) - tally = sp.get_tally(scores=['fission']) - fission = tally.get_slice(scores=['fission']) - - dim = 51 - - fission.std_dev.shape = (dim, dim) - fission.mean.shape = (dim, dim) - - trrm_power, trrm_std_dev = reformat(fission.mean, fission.std_dev) - - ref = np.loadtxt("reference.txt") - ref = ref.reshape((34, 34)) - val = ref.sum() - factor = ((17 * 17 * 4) - (25 * 4)) / val - ref = ref * factor - - trrm_power[trrm_power == 0] = np.nan - ref[ref == 0] = np.nan - - rel_diff = (trrm_power - ref) / ref - - rel_diff_squared = np.power(rel_diff, 2) - - RMS = math.sqrt(np.nanmean(rel_diff_squared)) - - abs_percent_diff = np.absolute(rel_diff) - - print("C5G7 Pin Power Errors:") - print("RMS = ", 100.0 * RMS) - print("AAPE = ", 100.0 * np.nanmean(abs_percent_diff)) - print("MAX = ", 100.0 *np.nanmax(abs_percent_diff)) - - -n = len(sys.argv) -if (n != 2): - print("Must provide statepoint name to read as argument.") - exit(1) - -fname = sys.argv[1] -print("Opening statepoint file: ", fname) - -get_err(fname) diff --git a/examples/2D_c5g7_python_mesh/reference.txt b/examples/2D_c5g7_python_mesh/reference.txt deleted file mode 100644 index 71e05ad26c7..00000000000 --- a/examples/2D_c5g7_python_mesh/reference.txt +++ /dev/null @@ -1,34 +0,0 @@ -2.197612652000000E+00 2.203064459000000E+00 2.213433582000000E+00 2.224465473000000E+00 2.231713169000000E+00 2.227586900000000E+00 2.183993825000000E+00 2.147990520000000E+00 2.120156373000000E+00 2.054662000000000E+00 1.997559134000000E+00 1.945536069000000E+00 1.852992182000000E+00 1.750771873000000E+00 1.630889847000000E+00 1.480633774000000E+00 1.281694135000000E+00 1.311371206000000E+00 1.060656506000000E+00 9.374435330000000E-01 8.642268360000000E-01 8.147009120000000E-01 7.690233230000000E-01 7.131519230000000E-01 6.652080920000000E-01 6.219635050000000E-01 5.705476220000000E-01 5.266338520000000E-01 4.851637750000000E-01 4.382162350000000E-01 3.985185290000000E-01 3.778700780000000E-01 4.121052870000000E-01 6.014796770000000E-01 -2.202551348000000E+00 2.212279081000000E+00 2.239666393000000E+00 2.273724152000000E+00 2.302437001000000E+00 2.370424239000000E+00 2.254632138000000E+00 2.213754276000000E+00 2.247812034000000E+00 2.118471658000000E+00 2.062717847000000E+00 2.072231784000000E+00 1.916921566000000E+00 1.795566483000000E+00 1.655076628000000E+00 1.492031257000000E+00 1.280736328000000E+00 1.295428413000000E+00 1.343395761000000E+00 1.170746659000000E+00 1.093852665000000E+00 1.049271850000000E+00 1.046340702000000E+00 9.199614060000000E-01 8.516620250000000E-01 8.392725260000000E-01 7.331525710000000E-01 6.724408230000000E-01 6.580288110000000E-01 5.677704070000000E-01 5.044375150000000E-01 4.706234850000000E-01 5.174940580000000E-01 5.921624320000000E-01 -2.209307312000000E+00 2.239345699000000E+00 2.312335772000000E+00 2.443649488000000E+00 2.472148541000000E+00 0.000000000000000E+00 2.383594094000000E+00 2.334955425000000E+00 0.000000000000000E+00 2.239987088000000E+00 2.177366138000000E+00 0.000000000000000E+00 2.058339298000000E+00 1.929229822000000E+00 1.711076305000000E+00 1.510308707000000E+00 1.284030929000000E+00 1.288332512000000E+00 1.318898976000000E+00 1.175274865000000E+00 1.175944048000000E+00 1.121246391000000E+00 0.000000000000000E+00 9.487255660000000E-01 8.719277800000000E-01 0.000000000000000E+00 7.556225680000000E-01 6.882681660000000E-01 0.000000000000000E+00 6.070362440000000E-01 5.427049230000000E-01 4.764708150000000E-01 5.082281250000000E-01 5.872857380000000E-01 -2.222519926000000E+00 2.275755217000000E+00 2.444504674000000E+00 0.000000000000000E+00 2.497697205000000E+00 2.453612398000000E+00 2.295616898000000E+00 2.243258172000000E+00 2.294547916000000E+00 2.150962289000000E+00 2.098804532000000E+00 2.144484260000000E+00 2.078652089000000E+00 0.000000000000000E+00 1.813241027000000E+00 1.541208693000000E+00 1.292383953000000E+00 1.291086209000000E+00 1.334424866000000E+00 1.262642743000000E+00 0.000000000000000E+00 1.114077799000000E+00 1.128739953000000E+00 9.589257900000000E-01 8.815464780000000E-01 8.792225120000000E-01 7.592228980000000E-01 6.976431360000000E-01 7.026203150000000E-01 5.902126100000000E-01 0.000000000000000E+00 5.150653320000000E-01 5.135174460000000E-01 5.880960260000000E-01 -2.230002799000000E+00 2.303249427000000E+00 2.472426477000000E+00 2.497633066000000E+00 2.399671580000000E+00 2.426951994000000E+00 2.278192495000000E+00 2.229553826000000E+00 2.276439365000000E+00 2.137309254000000E+00 2.085138670000000E+00 2.121997160000000E+00 1.999092054000000E+00 1.972955450000000E+00 1.831717308000000E+00 1.561333343000000E+00 1.296142492000000E+00 1.293611144000000E+00 1.357367352000000E+00 1.288097336000000E+00 1.179300651000000E+00 1.141161520000000E+00 1.083607544000000E+00 9.265292290000000E-01 8.556920860000000E-01 8.548796600000000E-01 7.377598830000000E-01 6.767338530000000E-01 6.759898420000000E-01 6.106151950000000E-01 5.391687320000000E-01 5.217272260000000E-01 5.217999170000000E-01 5.863364820000000E-01 -2.229553826000000E+00 2.372220129000000E+00 0.000000000000000E+00 2.455151732000000E+00 2.426866475000000E+00 0.000000000000000E+00 2.343699696000000E+00 2.298332111000000E+00 0.000000000000000E+00 2.205287941000000E+00 2.150064344000000E+00 0.000000000000000E+00 2.027824145000000E+00 1.940030813000000E+00 0.000000000000000E+00 1.614151731000000E+00 1.297887071000000E+00 1.293251966000000E+00 1.423064832000000E+00 0.000000000000000E+00 1.281910070000000E+00 1.142395125000000E+00 0.000000000000000E+00 9.828538770000000E-01 9.021115490000000E-01 0.000000000000000E+00 7.854685380000000E-01 7.126495020000000E-01 0.000000000000000E+00 6.197357470000000E-01 5.784730520000000E-01 0.000000000000000E+00 5.480049350000000E-01 5.887224490000000E-01 -2.181043435000000E+00 2.254054888000000E+00 2.381905103000000E+00 2.295958972000000E+00 2.276674541000000E+00 2.347163197000000E+00 2.215272230000000E+00 2.172598479000000E+00 2.224080640000000E+00 2.084174448000000E+00 2.027321724000000E+00 2.055241389000000E+00 1.901000152000000E+00 1.814008556000000E+00 1.766667631000000E+00 1.529832590000000E+00 1.276370606000000E+00 1.272601377000000E+00 1.332366007000000E+00 1.224896998000000E+00 1.146335392000000E+00 1.038133061000000E+00 1.037316359000000E+00 8.993664040000000E-01 8.322151090000000E-01 8.339425830000000E-01 7.227727590000000E-01 6.605580220000000E-01 6.544691020000000E-01 5.620299750000000E-01 5.221954400000000E-01 4.886956900000000E-01 5.135751710000000E-01 5.793645830000000E-01 -2.145467723000000E+00 2.212065285000000E+00 2.334720249000000E+00 2.245909247000000E+00 2.231114540000000E+00 2.301004565000000E+00 2.178135805000000E+00 2.138369684000000E+00 2.184656593000000E+00 2.047206922000000E+00 1.993494866000000E+00 2.015723272000000E+00 1.864665463000000E+00 1.776305570000000E+00 1.733294021000000E+00 1.505647947000000E+00 1.255238975000000E+00 1.253800126000000E+00 1.311358378000000E+00 1.198341353000000E+00 1.123014486000000E+00 1.018128136000000E+00 1.017972065000000E+00 8.885055490000000E-01 8.216300520000000E-01 8.223270280000000E-01 7.115676920000000E-01 6.527202480000000E-01 6.448974390000000E-01 5.514149870000000E-01 5.139984880000000E-01 4.805564630000000E-01 5.099534610000000E-01 5.753430740000000E-01 -2.118614902000000E+00 2.250527248000000E+00 0.000000000000000E+00 2.291276832000000E+00 2.276182810000000E+00 0.000000000000000E+00 2.225128242000000E+00 2.186773177000000E+00 0.000000000000000E+00 2.096593878000000E+00 2.036683866000000E+00 0.000000000000000E+00 1.904929729000000E+00 1.813636551000000E+00 0.000000000000000E+00 1.538420789000000E+00 1.244720195000000E+00 1.242887960000000E+00 1.358261021000000E+00 0.000000000000000E+00 1.187508292000000E+00 1.072699654000000E+00 0.000000000000000E+00 9.436564550000000E-01 8.714788080000000E-01 0.000000000000000E+00 7.575274930000000E-01 6.902799900000000E-01 0.000000000000000E+00 5.896973610000000E-01 5.413280750000000E-01 0.000000000000000E+00 5.309675040000000E-01 5.720997830000000E-01 -2.052568934000000E+00 2.119991750000000E+00 2.235882198000000E+00 2.148118798000000E+00 2.134142930000000E+00 2.206998312000000E+00 2.087321530000000E+00 2.050837184000000E+00 2.098118246000000E+00 1.965945068000000E+00 1.915824791000000E+00 1.939346665000000E+00 1.792870511000000E+00 1.707206591000000E+00 1.672118334000000E+00 1.451181189000000E+00 1.212101286000000E+00 1.209619111000000E+00 1.267196605000000E+00 1.162451361000000E+00 1.088757898000000E+00 9.874034630000000E-01 9.896868080000000E-01 8.628521250000000E-01 8.012381560000000E-01 8.036070200000000E-01 6.962791160000000E-01 6.374722920000000E-01 6.300236280000000E-01 5.407615150000000E-01 5.015405750000000E-01 4.708672130000000E-01 4.967750540000000E-01 5.633020640000000E-01 -2.000770355000000E+00 2.061928938000000E+00 2.180936537000000E+00 2.097551686000000E+00 2.084437418000000E+00 2.146044973000000E+00 2.027854076000000E+00 1.996550015000000E+00 2.039882259000000E+00 1.915258230000000E+00 1.865920447000000E+00 1.892016429000000E+00 1.751806647000000E+00 1.672336407000000E+00 1.632858911000000E+00 1.418572971000000E+00 1.185357501000000E+00 1.184784527000000E+00 1.242595059000000E+00 1.143126309000000E+00 1.071660604000000E+00 9.744987160000000E-01 9.726279980000000E-01 8.479868650000000E-01 7.881196120000000E-01 7.897102570000000E-01 6.819975200000000E-01 6.286061580000000E-01 6.224124780000000E-01 5.352455690000000E-01 4.990541230000000E-01 4.681284820000000E-01 4.924285740000000E-01 5.578502570000000E-01 -1.949544750000000E+00 2.070532103000000E+00 0.000000000000000E+00 2.141533870000000E+00 2.121402806000000E+00 0.000000000000000E+00 2.054242960000000E+00 2.016527146000000E+00 0.000000000000000E+00 1.938985349000000E+00 1.889613358000000E+00 0.000000000000000E+00 1.790747514000000E+00 1.717477368000000E+00 0.000000000000000E+00 1.438458169000000E+00 1.165705341000000E+00 1.166289005000000E+00 1.287248564000000E+00 0.000000000000000E+00 1.160398916000000E+00 1.043601971000000E+00 0.000000000000000E+00 9.053078040000000E-01 8.314176490000000E-01 0.000000000000000E+00 7.270273060000000E-01 6.659585180000000E-01 0.000000000000000E+00 5.804613580000000E-01 5.402569550000000E-01 0.000000000000000E+00 5.169916370000000E-01 5.540746130000000E-01 -1.857313006000000E+00 1.920432102000000E+00 2.060250637000000E+00 2.079545757000000E+00 2.002478588000000E+00 2.025318452000000E+00 1.902943561000000E+00 1.866852599000000E+00 1.907854463000000E+00 1.792030292000000E+00 1.752659694000000E+00 1.791848565000000E+00 1.690143505000000E+00 1.671506877000000E+00 1.563965176000000E+00 1.338472031000000E+00 1.117060258000000E+00 1.120562242000000E+00 1.185635436000000E+00 1.134424797000000E+00 1.042537265000000E+00 1.015177747000000E+00 9.691816010000000E-01 8.328287040000000E-01 7.695834690000000E-01 7.718518480000000E-01 6.714338420000000E-01 6.178778570000000E-01 6.218844010000000E-01 5.599304950000000E-01 4.954324130000000E-01 4.774606920000000E-01 4.817793780000000E-01 5.412126250000000E-01 -1.753859092000000E+00 1.796180079000000E+00 1.932483802000000E+00 0.000000000000000E+00 1.975146863000000E+00 1.938996039000000E+00 1.816185003000000E+00 1.779572379000000E+00 1.816843496000000E+00 1.706543822000000E+00 1.674249884000000E+00 1.717126741000000E+00 1.670713692000000E+00 0.000000000000000E+00 1.478459465000000E+00 1.260724989000000E+00 1.066448249000000E+00 1.074884653000000E+00 1.124295127000000E+00 1.076122534000000E+00 0.000000000000000E+00 9.644994610000000E-01 9.849383920000000E-01 8.375600180000000E-01 7.746376150000000E-01 7.740090530000000E-01 6.737193250000000E-01 6.251554850000000E-01 6.335576810000000E-01 5.322053850000000E-01 0.000000000000000E+00 4.667045980000000E-01 4.673951600000000E-01 5.330285010000000E-01 -1.634317002000000E+00 1.653821643000000E+00 1.712979092000000E+00 1.814709808000000E+00 1.831471442000000E+00 0.000000000000000E+00 1.766917773000000E+00 1.736922145000000E+00 0.000000000000000E+00 1.671795502000000E+00 1.636202686000000E+00 0.000000000000000E+00 1.562618259000000E+00 1.477176687000000E+00 1.317847098000000E+00 1.173810360000000E+00 1.013805174000000E+00 1.033284159000000E+00 1.083081605000000E+00 9.830826390000000E-01 9.994637150000000E-01 9.604800890000000E-01 0.000000000000000E+00 8.246060970000000E-01 7.601315330000000E-01 0.000000000000000E+00 6.680815150000000E-01 6.131978550000000E-01 0.000000000000000E+00 5.463223580000000E-01 4.893734250000000E-01 4.305131520000000E-01 4.585867510000000E-01 5.268198550000000E-01 -1.486498208000000E+00 1.494483502000000E+00 1.514118558000000E+00 1.538700862000000E+00 1.561421000000000E+00 1.613533859000000E+00 1.533719407000000E+00 1.506539478000000E+00 1.539098523000000E+00 1.452076996000000E+00 1.419359741000000E+00 1.437812504000000E+00 1.336024063000000E+00 1.261965008000000E+00 1.175601974000000E+00 1.080988538000000E+00 9.547353820000000E-01 1.004842831000000E+00 1.088144302000000E+00 9.846540420000000E-01 9.436521790000000E-01 9.159035510000000E-01 9.235446320000000E-01 8.188100780000000E-01 7.654999590000000E-01 7.599583570000000E-01 6.689794600000000E-01 6.179740650000000E-01 6.070554860000000E-01 5.282031170000000E-01 4.721029560000000E-01 4.404033710000000E-01 4.781533920000000E-01 5.379479550000000E-01 -1.283132985000000E+00 1.281508132000000E+00 1.286352758000000E+00 1.293307553000000E+00 1.297324786000000E+00 1.299950205000000E+00 1.278326843000000E+00 1.259309658000000E+00 1.245936696000000E+00 1.213747518000000E+00 1.183803202000000E+00 1.164967744000000E+00 1.116681839000000E+00 1.067583507000000E+00 1.011848938000000E+00 9.541410280000000E-01 8.786260200000000E-01 1.014797189000000E+00 9.101973270000000E-01 8.536203990000000E-01 8.195476750000000E-01 7.873841530000000E-01 7.559069170000000E-01 7.096242830000000E-01 6.675427480000000E-01 6.308788130000000E-01 5.837196150000000E-01 5.413858000000000E-01 5.055727740000000E-01 4.605408490000000E-01 4.208089360000000E-01 3.971523700000000E-01 4.227630350000000E-01 5.780048380000000E-01 -1.311371206000000E+00 1.295428413000000E+00 1.288332512000000E+00 1.291086209000000E+00 1.293611144000000E+00 1.293251966000000E+00 1.272601377000000E+00 1.253800126000000E+00 1.242887960000000E+00 1.209619111000000E+00 1.184784527000000E+00 1.166289005000000E+00 1.120562242000000E+00 1.074884653000000E+00 1.033284159000000E+00 1.004842831000000E+00 1.014797189000000E+00 7.955062760000000E-01 7.908946890000000E-01 7.730790390000000E-01 7.509019440000000E-01 7.273993120000000E-01 7.012092590000000E-01 6.615927960000000E-01 6.233296640000000E-01 5.880810600000000E-01 5.453880680000000E-01 5.066973430000000E-01 4.723445460000000E-01 4.313469580000000E-01 3.955125520000000E-01 3.762345360000000E-01 3.921110520000000E-01 5.029345270000000E-01 -1.060656506000000E+00 1.343395761000000E+00 1.318898976000000E+00 1.334424866000000E+00 1.357367352000000E+00 1.423064832000000E+00 1.332366007000000E+00 1.311358378000000E+00 1.358261021000000E+00 1.267196605000000E+00 1.242595059000000E+00 1.287248564000000E+00 1.185635436000000E+00 1.124295127000000E+00 1.083081605000000E+00 1.088144302000000E+00 9.101973270000000E-01 7.919871880000000E-01 8.266008170000000E-01 8.311033680000000E-01 8.274944860000000E-01 8.118681110000000E-01 8.072201780000000E-01 7.400710210000000E-01 6.968328480000000E-01 6.799258330000000E-01 6.129434370000000E-01 5.718304000000000E-01 5.476436190000000E-01 4.861664790000000E-01 4.435932130000000E-01 4.144142870000000E-01 4.243836110000000E-01 5.294516880000000E-01 -9.374435330000000E-01 1.170746659000000E+00 1.175274865000000E+00 1.262642743000000E+00 1.288097336000000E+00 0.000000000000000E+00 1.224896998000000E+00 1.198341353000000E+00 0.000000000000000E+00 1.162451361000000E+00 1.143126309000000E+00 0.000000000000000E+00 1.134424797000000E+00 1.076122534000000E+00 9.830826390000000E-01 9.846540420000000E-01 8.536203990000000E-01 7.714263940000000E-01 8.313406820000000E-01 8.656977550000000E-01 9.015578160000000E-01 8.875456040000000E-01 0.000000000000000E+00 7.998677220000000E-01 7.533007390000000E-01 0.000000000000000E+00 6.644747710000000E-01 6.179676520000000E-01 0.000000000000000E+00 5.373300830000000E-01 4.908935170000000E-01 4.406770310000000E-01 4.378976780000000E-01 5.361563410000000E-01 -8.642268360000000E-01 1.093852665000000E+00 1.175944048000000E+00 0.000000000000000E+00 1.179300651000000E+00 1.281910070000000E+00 1.146335392000000E+00 1.123014486000000E+00 1.187508292000000E+00 1.088757898000000E+00 1.071660604000000E+00 1.160398916000000E+00 1.042537265000000E+00 0.000000000000000E+00 9.994637150000000E-01 9.436521790000000E-01 8.195476750000000E-01 7.505235250000000E-01 8.264618490000000E-01 8.982225930000000E-01 0.000000000000000E+00 8.911993830000000E-01 8.514311250000000E-01 7.674668850000000E-01 7.219496430000000E-01 7.081469510000000E-01 6.377502280000000E-01 5.940801860000000E-01 5.816543420000000E-01 5.415354570000000E-01 0.000000000000000E+00 4.656484440000000E-01 4.435419020000000E-01 5.316965500000000E-01 -8.147009120000000E-01 1.049271850000000E+00 1.121246391000000E+00 1.114077799000000E+00 1.141161520000000E+00 1.142395125000000E+00 1.038133061000000E+00 1.018128136000000E+00 1.072699654000000E+00 9.874034630000000E-01 9.744987160000000E-01 1.043601971000000E+00 1.015177747000000E+00 9.644994610000000E-01 9.604800890000000E-01 9.159035510000000E-01 7.873841530000000E-01 7.266018510000000E-01 8.129905410000000E-01 8.889288660000000E-01 8.899037770000000E-01 8.389368660000000E-01 8.231757990000000E-01 7.498393760000000E-01 7.077257720000000E-01 6.916931840000000E-01 6.232035240000000E-01 5.820135200000000E-01 5.681808960000000E-01 5.141652490000000E-01 4.945943310000000E-01 4.633886170000000E-01 4.429133400000000E-01 5.195016060000000E-01 -7.690233230000000E-01 1.046340702000000E+00 0.000000000000000E+00 1.128739953000000E+00 1.083607544000000E+00 0.000000000000000E+00 1.037316359000000E+00 1.017972065000000E+00 0.000000000000000E+00 9.896868080000000E-01 9.726279980000000E-01 0.000000000000000E+00 9.691816010000000E-01 9.849383920000000E-01 0.000000000000000E+00 9.235446320000000E-01 7.559069170000000E-01 7.011387060000000E-01 8.099802890000000E-01 0.000000000000000E+00 8.499516540000000E-01 8.225707560000000E-01 0.000000000000000E+00 7.525909350000000E-01 7.121620460000000E-01 0.000000000000000E+00 6.291299590000000E-01 5.853487430000000E-01 0.000000000000000E+00 5.097631820000000E-01 4.739009830000000E-01 0.000000000000000E+00 4.457824870000000E-01 5.094766950000000E-01 -7.131519230000000E-01 9.199614060000000E-01 9.487255660000000E-01 9.589257900000000E-01 9.265292290000000E-01 9.828538770000000E-01 8.993664040000000E-01 8.885055490000000E-01 9.436564550000000E-01 8.628521250000000E-01 8.479868650000000E-01 9.053078040000000E-01 8.328287040000000E-01 8.375600180000000E-01 8.246060970000000E-01 8.188100780000000E-01 7.096242830000000E-01 6.590806890000000E-01 7.393847350000000E-01 8.018218200000000E-01 7.674305400000000E-01 7.486378410000000E-01 7.523578970000000E-01 6.897241200000000E-01 6.532034270000000E-01 6.432362420000000E-01 5.787360220000000E-01 5.374433950000000E-01 5.238758790000000E-01 4.660760370000000E-01 4.314966160000000E-01 4.258759100000000E-01 4.123725320000000E-01 4.852578450000000E-01 -6.652080920000000E-01 8.516620250000000E-01 8.719277800000000E-01 8.815464780000000E-01 8.556920860000000E-01 9.021115490000000E-01 8.322151090000000E-01 8.216300520000000E-01 8.714788080000000E-01 8.012381560000000E-01 7.881196120000000E-01 8.314176490000000E-01 7.695834690000000E-01 7.746376150000000E-01 7.601315330000000E-01 7.654999590000000E-01 6.675427480000000E-01 6.222157850000000E-01 6.979274850000000E-01 7.555391870000000E-01 7.239400870000000E-01 7.055471870000000E-01 7.103020180000000E-01 6.534728110000000E-01 6.206614850000000E-01 6.093088990000000E-01 5.505448350000000E-01 5.123693600000000E-01 4.972881650000000E-01 4.416262860000000E-01 4.108994750000000E-01 4.046972430000000E-01 3.926989920000000E-01 4.616739700000000E-01 -6.219635050000000E-01 8.392725260000000E-01 0.000000000000000E+00 8.792225120000000E-01 8.548796600000000E-01 0.000000000000000E+00 8.339425830000000E-01 8.223270280000000E-01 0.000000000000000E+00 8.036070200000000E-01 7.897102570000000E-01 0.000000000000000E+00 7.718518480000000E-01 7.740090530000000E-01 0.000000000000000E+00 7.599583570000000E-01 6.308788130000000E-01 5.881473370000000E-01 6.806099810000000E-01 0.000000000000000E+00 7.106996790000000E-01 6.922426400000000E-01 0.000000000000000E+00 6.443522590000000E-01 6.107071280000000E-01 0.000000000000000E+00 5.430598250000000E-01 5.059383660000000E-01 0.000000000000000E+00 4.362920680000000E-01 4.043423410000000E-01 0.000000000000000E+00 3.855475050000000E-01 4.394819090000000E-01 -5.705476220000000E-01 7.331525710000000E-01 7.556225680000000E-01 7.592228980000000E-01 7.377598830000000E-01 7.854685380000000E-01 7.227727590000000E-01 7.115676920000000E-01 7.575274930000000E-01 6.962791160000000E-01 6.819975200000000E-01 7.270273060000000E-01 6.714338420000000E-01 6.737193250000000E-01 6.680815150000000E-01 6.689794600000000E-01 5.837196150000000E-01 5.455911740000000E-01 6.141000760000000E-01 6.641198690000000E-01 6.392403880000000E-01 6.242874720000000E-01 6.306457750000000E-01 5.797558300000000E-01 5.504635930000000E-01 5.430042380000000E-01 4.888859690000000E-01 4.565257540000000E-01 4.440699790000000E-01 3.934430040000000E-01 3.649995380000000E-01 3.612581020000000E-01 3.500722770000000E-01 4.110833400000000E-01 -5.266338520000000E-01 6.724408230000000E-01 6.882681660000000E-01 6.976431360000000E-01 6.767338530000000E-01 7.126495020000000E-01 6.605580220000000E-01 6.527202480000000E-01 6.902799900000000E-01 6.374722920000000E-01 6.286061580000000E-01 6.659585180000000E-01 6.178778570000000E-01 6.251554850000000E-01 6.131978550000000E-01 6.179740650000000E-01 5.413858000000000E-01 5.054359440000000E-01 5.689569770000000E-01 6.178650290000000E-01 5.949460610000000E-01 5.820904870000000E-01 5.850750840000000E-01 5.401864020000000E-01 5.128867470000000E-01 5.046641390000000E-01 4.548324870000000E-01 4.262436390000000E-01 4.137322770000000E-01 3.688500100000000E-01 3.421981570000000E-01 3.361605480000000E-01 3.271939300000000E-01 3.842882440000000E-01 -4.851637750000000E-01 6.580288110000000E-01 0.000000000000000E+00 7.026203150000000E-01 6.759898420000000E-01 0.000000000000000E+00 6.544691020000000E-01 6.448974390000000E-01 0.000000000000000E+00 6.300236280000000E-01 6.224124780000000E-01 0.000000000000000E+00 6.218844010000000E-01 6.335576810000000E-01 0.000000000000000E+00 6.070554860000000E-01 5.055727740000000E-01 4.719041250000000E-01 5.468033990000000E-01 0.000000000000000E+00 5.825522870000000E-01 5.679093750000000E-01 0.000000000000000E+00 5.251586570000000E-01 4.976794130000000E-01 0.000000000000000E+00 4.429646520000000E-01 4.130224730000000E-01 0.000000000000000E+00 3.594707640000000E-01 3.344181080000000E-01 0.000000000000000E+00 3.151849890000000E-01 3.589063420000000E-01 -4.382162350000000E-01 5.677704070000000E-01 6.070362440000000E-01 5.902126100000000E-01 6.106151950000000E-01 6.197357470000000E-01 5.620299750000000E-01 5.514149870000000E-01 5.896973610000000E-01 5.407615150000000E-01 5.352455690000000E-01 5.804613580000000E-01 5.599304950000000E-01 5.322053850000000E-01 5.463223580000000E-01 5.282031170000000E-01 4.605408490000000E-01 4.310583330000000E-01 4.869938710000000E-01 5.375887770000000E-01 5.411228300000000E-01 5.143298720000000E-01 5.089015830000000E-01 4.664394910000000E-01 4.411986940000000E-01 4.362407560000000E-01 3.932890700000000E-01 3.679648930000000E-01 3.594515220000000E-01 3.252654870000000E-01 3.118925250000000E-01 2.944830890000000E-01 2.815526850000000E-01 3.283591200000000E-01 -3.985185290000000E-01 5.044375150000000E-01 5.427049230000000E-01 0.000000000000000E+00 5.391687320000000E-01 5.784730520000000E-01 5.221954400000000E-01 5.139984880000000E-01 5.413280750000000E-01 5.015405750000000E-01 4.990541230000000E-01 5.402569550000000E-01 4.954324130000000E-01 0.000000000000000E+00 4.893734250000000E-01 4.721029560000000E-01 4.208089360000000E-01 3.953928260000000E-01 4.435055560000000E-01 4.914964220000000E-01 0.000000000000000E+00 4.934783150000000E-01 4.737149800000000E-01 4.321294530000000E-01 4.104227100000000E-01 4.033396370000000E-01 3.657798940000000E-01 3.411569690000000E-01 3.344352120000000E-01 3.136285510000000E-01 0.000000000000000E+00 2.701723060000000E-01 2.567801030000000E-01 3.008200120000000E-01 -3.778700780000000E-01 4.706234850000000E-01 4.764708150000000E-01 5.150653320000000E-01 5.217272260000000E-01 0.000000000000000E+00 4.886956900000000E-01 4.805564630000000E-01 0.000000000000000E+00 4.708672130000000E-01 4.681284820000000E-01 0.000000000000000E+00 4.774606920000000E-01 4.667045980000000E-01 4.305131520000000E-01 4.404033710000000E-01 3.971523700000000E-01 3.746503050000000E-01 4.153314740000000E-01 4.414124900000000E-01 4.657040310000000E-01 4.630743360000000E-01 0.000000000000000E+00 4.259293590000000E-01 4.048297970000000E-01 0.000000000000000E+00 3.607749220000000E-01 3.368126270000000E-01 0.000000000000000E+00 2.965547750000000E-01 2.699820270000000E-01 2.428833400000000E-01 2.373524290000000E-01 2.771420670000000E-01 -4.121052870000000E-01 5.174940580000000E-01 5.082281250000000E-01 5.135174460000000E-01 5.217999170000000E-01 5.480049350000000E-01 5.135751710000000E-01 5.099534610000000E-01 5.309675040000000E-01 4.967750540000000E-01 4.924285740000000E-01 5.169916370000000E-01 4.817793780000000E-01 4.673951600000000E-01 4.585867510000000E-01 4.781533920000000E-01 4.227630350000000E-01 3.903964060000000E-01 4.256535610000000E-01 4.399757790000000E-01 4.458380740000000E-01 4.412842120000000E-01 4.447348850000000E-01 4.127851590000000E-01 3.936781800000000E-01 3.857677150000000E-01 3.498606180000000E-01 3.273970360000000E-01 3.165939070000000E-01 2.826216670000000E-01 2.560574710000000E-01 2.363796550000000E-01 2.315029610000000E-01 2.654944420000000E-01 -6.014796770000000E-01 5.921624320000000E-01 5.872857380000000E-01 5.880960260000000E-01 5.863364820000000E-01 5.887224490000000E-01 5.793645830000000E-01 5.753430740000000E-01 5.720997830000000E-01 5.633020640000000E-01 5.578502570000000E-01 5.540746130000000E-01 5.412126250000000E-01 5.330285010000000E-01 5.268198550000000E-01 5.379479550000000E-01 5.780048380000000E-01 5.015106430000000E-01 5.273329660000000E-01 5.350937730000000E-01 5.318355170000000E-01 5.195016060000000E-01 5.076872200000000E-01 4.835154050000000E-01 4.602736040000000E-01 4.398624670000000E-01 4.112372740000000E-01 3.843288650000000E-01 3.578608780000000E-01 3.286220890000000E-01 3.000503450000000E-01 2.765840580000000E-01 2.652378860000000E-01 2.862925500000000E-01 diff --git a/examples/c5g7_no_mesh/pin_power_error.py b/examples/c5g7_no_mesh/pin_power_error.py deleted file mode 100644 index 027b9e86644..00000000000 --- a/examples/c5g7_no_mesh/pin_power_error.py +++ /dev/null @@ -1,63 +0,0 @@ -import numpy as np -import matplotlib.pyplot as plt -import math -import sys -import openmc - -def reformat(arr, dev): - arr = np.rot90(arr, 3) - dev = np.rot90(dev, 3) - val = arr.sum() - factor = ((17 * 17 * 4) - (25 * 4)) / val - arr = arr * factor - dev = dev * factor - return arr[0:34,0:34], dev[0:34,0:34] - -def get_err(fname): - # Load the statepoint file - sp = openmc.StatePoint(fname) - tally = sp.get_tally(scores=['flux']) - flux = tally.get_slice(scores=['flux']) - fission = tally.get_slice(scores=['fission']) - - dim = 51 - flux.std_dev.shape = (dim, dim) - flux.mean.shape = (dim, dim) - fission.std_dev.shape = (dim, dim) - fission.mean.shape = (dim, dim) - - trrm_power, trrm_std_dev = reformat(fission.mean, fission.std_dev) - - np.savetxt("trrm.csv", trrm_power, delimiter=",") - - ref = np.loadtxt("reference.txt") - ref = ref.reshape((34, 34)) - val = ref.sum() - factor = ((17 * 17 * 4) - (25 * 4)) / val - ref = ref * factor - - trrm_power[trrm_power == 0] = np.nan - ref[ref == 0] = np.nan - - rel_diff = (trrm_power - ref) / ref - - rel_diff_squared = np.power(rel_diff, 2) - - RMS = math.sqrt(np.nanmean(rel_diff_squared)) - - abs_percent_diff = np.absolute(rel_diff) - - print("RMS = ", 100.0 * RMS) - print("AAPE = ", 100.0 * np.nanmean(abs_percent_diff)) - print("MAX = ", 100.0 *np.nanmax(abs_percent_diff)) - - -n = len(sys.argv) -if (n != 2): - print("Must provide statepoint name to read as argument.") - exit(1) - -fname = sys.argv[1] -print("Opening statepoint file: ", fname) - -get_err(fname) diff --git a/examples/c5g7_no_mesh/reference.txt b/examples/c5g7_no_mesh/reference.txt deleted file mode 100644 index 71e05ad26c7..00000000000 --- a/examples/c5g7_no_mesh/reference.txt +++ /dev/null @@ -1,34 +0,0 @@ -2.197612652000000E+00 2.203064459000000E+00 2.213433582000000E+00 2.224465473000000E+00 2.231713169000000E+00 2.227586900000000E+00 2.183993825000000E+00 2.147990520000000E+00 2.120156373000000E+00 2.054662000000000E+00 1.997559134000000E+00 1.945536069000000E+00 1.852992182000000E+00 1.750771873000000E+00 1.630889847000000E+00 1.480633774000000E+00 1.281694135000000E+00 1.311371206000000E+00 1.060656506000000E+00 9.374435330000000E-01 8.642268360000000E-01 8.147009120000000E-01 7.690233230000000E-01 7.131519230000000E-01 6.652080920000000E-01 6.219635050000000E-01 5.705476220000000E-01 5.266338520000000E-01 4.851637750000000E-01 4.382162350000000E-01 3.985185290000000E-01 3.778700780000000E-01 4.121052870000000E-01 6.014796770000000E-01 -2.202551348000000E+00 2.212279081000000E+00 2.239666393000000E+00 2.273724152000000E+00 2.302437001000000E+00 2.370424239000000E+00 2.254632138000000E+00 2.213754276000000E+00 2.247812034000000E+00 2.118471658000000E+00 2.062717847000000E+00 2.072231784000000E+00 1.916921566000000E+00 1.795566483000000E+00 1.655076628000000E+00 1.492031257000000E+00 1.280736328000000E+00 1.295428413000000E+00 1.343395761000000E+00 1.170746659000000E+00 1.093852665000000E+00 1.049271850000000E+00 1.046340702000000E+00 9.199614060000000E-01 8.516620250000000E-01 8.392725260000000E-01 7.331525710000000E-01 6.724408230000000E-01 6.580288110000000E-01 5.677704070000000E-01 5.044375150000000E-01 4.706234850000000E-01 5.174940580000000E-01 5.921624320000000E-01 -2.209307312000000E+00 2.239345699000000E+00 2.312335772000000E+00 2.443649488000000E+00 2.472148541000000E+00 0.000000000000000E+00 2.383594094000000E+00 2.334955425000000E+00 0.000000000000000E+00 2.239987088000000E+00 2.177366138000000E+00 0.000000000000000E+00 2.058339298000000E+00 1.929229822000000E+00 1.711076305000000E+00 1.510308707000000E+00 1.284030929000000E+00 1.288332512000000E+00 1.318898976000000E+00 1.175274865000000E+00 1.175944048000000E+00 1.121246391000000E+00 0.000000000000000E+00 9.487255660000000E-01 8.719277800000000E-01 0.000000000000000E+00 7.556225680000000E-01 6.882681660000000E-01 0.000000000000000E+00 6.070362440000000E-01 5.427049230000000E-01 4.764708150000000E-01 5.082281250000000E-01 5.872857380000000E-01 -2.222519926000000E+00 2.275755217000000E+00 2.444504674000000E+00 0.000000000000000E+00 2.497697205000000E+00 2.453612398000000E+00 2.295616898000000E+00 2.243258172000000E+00 2.294547916000000E+00 2.150962289000000E+00 2.098804532000000E+00 2.144484260000000E+00 2.078652089000000E+00 0.000000000000000E+00 1.813241027000000E+00 1.541208693000000E+00 1.292383953000000E+00 1.291086209000000E+00 1.334424866000000E+00 1.262642743000000E+00 0.000000000000000E+00 1.114077799000000E+00 1.128739953000000E+00 9.589257900000000E-01 8.815464780000000E-01 8.792225120000000E-01 7.592228980000000E-01 6.976431360000000E-01 7.026203150000000E-01 5.902126100000000E-01 0.000000000000000E+00 5.150653320000000E-01 5.135174460000000E-01 5.880960260000000E-01 -2.230002799000000E+00 2.303249427000000E+00 2.472426477000000E+00 2.497633066000000E+00 2.399671580000000E+00 2.426951994000000E+00 2.278192495000000E+00 2.229553826000000E+00 2.276439365000000E+00 2.137309254000000E+00 2.085138670000000E+00 2.121997160000000E+00 1.999092054000000E+00 1.972955450000000E+00 1.831717308000000E+00 1.561333343000000E+00 1.296142492000000E+00 1.293611144000000E+00 1.357367352000000E+00 1.288097336000000E+00 1.179300651000000E+00 1.141161520000000E+00 1.083607544000000E+00 9.265292290000000E-01 8.556920860000000E-01 8.548796600000000E-01 7.377598830000000E-01 6.767338530000000E-01 6.759898420000000E-01 6.106151950000000E-01 5.391687320000000E-01 5.217272260000000E-01 5.217999170000000E-01 5.863364820000000E-01 -2.229553826000000E+00 2.372220129000000E+00 0.000000000000000E+00 2.455151732000000E+00 2.426866475000000E+00 0.000000000000000E+00 2.343699696000000E+00 2.298332111000000E+00 0.000000000000000E+00 2.205287941000000E+00 2.150064344000000E+00 0.000000000000000E+00 2.027824145000000E+00 1.940030813000000E+00 0.000000000000000E+00 1.614151731000000E+00 1.297887071000000E+00 1.293251966000000E+00 1.423064832000000E+00 0.000000000000000E+00 1.281910070000000E+00 1.142395125000000E+00 0.000000000000000E+00 9.828538770000000E-01 9.021115490000000E-01 0.000000000000000E+00 7.854685380000000E-01 7.126495020000000E-01 0.000000000000000E+00 6.197357470000000E-01 5.784730520000000E-01 0.000000000000000E+00 5.480049350000000E-01 5.887224490000000E-01 -2.181043435000000E+00 2.254054888000000E+00 2.381905103000000E+00 2.295958972000000E+00 2.276674541000000E+00 2.347163197000000E+00 2.215272230000000E+00 2.172598479000000E+00 2.224080640000000E+00 2.084174448000000E+00 2.027321724000000E+00 2.055241389000000E+00 1.901000152000000E+00 1.814008556000000E+00 1.766667631000000E+00 1.529832590000000E+00 1.276370606000000E+00 1.272601377000000E+00 1.332366007000000E+00 1.224896998000000E+00 1.146335392000000E+00 1.038133061000000E+00 1.037316359000000E+00 8.993664040000000E-01 8.322151090000000E-01 8.339425830000000E-01 7.227727590000000E-01 6.605580220000000E-01 6.544691020000000E-01 5.620299750000000E-01 5.221954400000000E-01 4.886956900000000E-01 5.135751710000000E-01 5.793645830000000E-01 -2.145467723000000E+00 2.212065285000000E+00 2.334720249000000E+00 2.245909247000000E+00 2.231114540000000E+00 2.301004565000000E+00 2.178135805000000E+00 2.138369684000000E+00 2.184656593000000E+00 2.047206922000000E+00 1.993494866000000E+00 2.015723272000000E+00 1.864665463000000E+00 1.776305570000000E+00 1.733294021000000E+00 1.505647947000000E+00 1.255238975000000E+00 1.253800126000000E+00 1.311358378000000E+00 1.198341353000000E+00 1.123014486000000E+00 1.018128136000000E+00 1.017972065000000E+00 8.885055490000000E-01 8.216300520000000E-01 8.223270280000000E-01 7.115676920000000E-01 6.527202480000000E-01 6.448974390000000E-01 5.514149870000000E-01 5.139984880000000E-01 4.805564630000000E-01 5.099534610000000E-01 5.753430740000000E-01 -2.118614902000000E+00 2.250527248000000E+00 0.000000000000000E+00 2.291276832000000E+00 2.276182810000000E+00 0.000000000000000E+00 2.225128242000000E+00 2.186773177000000E+00 0.000000000000000E+00 2.096593878000000E+00 2.036683866000000E+00 0.000000000000000E+00 1.904929729000000E+00 1.813636551000000E+00 0.000000000000000E+00 1.538420789000000E+00 1.244720195000000E+00 1.242887960000000E+00 1.358261021000000E+00 0.000000000000000E+00 1.187508292000000E+00 1.072699654000000E+00 0.000000000000000E+00 9.436564550000000E-01 8.714788080000000E-01 0.000000000000000E+00 7.575274930000000E-01 6.902799900000000E-01 0.000000000000000E+00 5.896973610000000E-01 5.413280750000000E-01 0.000000000000000E+00 5.309675040000000E-01 5.720997830000000E-01 -2.052568934000000E+00 2.119991750000000E+00 2.235882198000000E+00 2.148118798000000E+00 2.134142930000000E+00 2.206998312000000E+00 2.087321530000000E+00 2.050837184000000E+00 2.098118246000000E+00 1.965945068000000E+00 1.915824791000000E+00 1.939346665000000E+00 1.792870511000000E+00 1.707206591000000E+00 1.672118334000000E+00 1.451181189000000E+00 1.212101286000000E+00 1.209619111000000E+00 1.267196605000000E+00 1.162451361000000E+00 1.088757898000000E+00 9.874034630000000E-01 9.896868080000000E-01 8.628521250000000E-01 8.012381560000000E-01 8.036070200000000E-01 6.962791160000000E-01 6.374722920000000E-01 6.300236280000000E-01 5.407615150000000E-01 5.015405750000000E-01 4.708672130000000E-01 4.967750540000000E-01 5.633020640000000E-01 -2.000770355000000E+00 2.061928938000000E+00 2.180936537000000E+00 2.097551686000000E+00 2.084437418000000E+00 2.146044973000000E+00 2.027854076000000E+00 1.996550015000000E+00 2.039882259000000E+00 1.915258230000000E+00 1.865920447000000E+00 1.892016429000000E+00 1.751806647000000E+00 1.672336407000000E+00 1.632858911000000E+00 1.418572971000000E+00 1.185357501000000E+00 1.184784527000000E+00 1.242595059000000E+00 1.143126309000000E+00 1.071660604000000E+00 9.744987160000000E-01 9.726279980000000E-01 8.479868650000000E-01 7.881196120000000E-01 7.897102570000000E-01 6.819975200000000E-01 6.286061580000000E-01 6.224124780000000E-01 5.352455690000000E-01 4.990541230000000E-01 4.681284820000000E-01 4.924285740000000E-01 5.578502570000000E-01 -1.949544750000000E+00 2.070532103000000E+00 0.000000000000000E+00 2.141533870000000E+00 2.121402806000000E+00 0.000000000000000E+00 2.054242960000000E+00 2.016527146000000E+00 0.000000000000000E+00 1.938985349000000E+00 1.889613358000000E+00 0.000000000000000E+00 1.790747514000000E+00 1.717477368000000E+00 0.000000000000000E+00 1.438458169000000E+00 1.165705341000000E+00 1.166289005000000E+00 1.287248564000000E+00 0.000000000000000E+00 1.160398916000000E+00 1.043601971000000E+00 0.000000000000000E+00 9.053078040000000E-01 8.314176490000000E-01 0.000000000000000E+00 7.270273060000000E-01 6.659585180000000E-01 0.000000000000000E+00 5.804613580000000E-01 5.402569550000000E-01 0.000000000000000E+00 5.169916370000000E-01 5.540746130000000E-01 -1.857313006000000E+00 1.920432102000000E+00 2.060250637000000E+00 2.079545757000000E+00 2.002478588000000E+00 2.025318452000000E+00 1.902943561000000E+00 1.866852599000000E+00 1.907854463000000E+00 1.792030292000000E+00 1.752659694000000E+00 1.791848565000000E+00 1.690143505000000E+00 1.671506877000000E+00 1.563965176000000E+00 1.338472031000000E+00 1.117060258000000E+00 1.120562242000000E+00 1.185635436000000E+00 1.134424797000000E+00 1.042537265000000E+00 1.015177747000000E+00 9.691816010000000E-01 8.328287040000000E-01 7.695834690000000E-01 7.718518480000000E-01 6.714338420000000E-01 6.178778570000000E-01 6.218844010000000E-01 5.599304950000000E-01 4.954324130000000E-01 4.774606920000000E-01 4.817793780000000E-01 5.412126250000000E-01 -1.753859092000000E+00 1.796180079000000E+00 1.932483802000000E+00 0.000000000000000E+00 1.975146863000000E+00 1.938996039000000E+00 1.816185003000000E+00 1.779572379000000E+00 1.816843496000000E+00 1.706543822000000E+00 1.674249884000000E+00 1.717126741000000E+00 1.670713692000000E+00 0.000000000000000E+00 1.478459465000000E+00 1.260724989000000E+00 1.066448249000000E+00 1.074884653000000E+00 1.124295127000000E+00 1.076122534000000E+00 0.000000000000000E+00 9.644994610000000E-01 9.849383920000000E-01 8.375600180000000E-01 7.746376150000000E-01 7.740090530000000E-01 6.737193250000000E-01 6.251554850000000E-01 6.335576810000000E-01 5.322053850000000E-01 0.000000000000000E+00 4.667045980000000E-01 4.673951600000000E-01 5.330285010000000E-01 -1.634317002000000E+00 1.653821643000000E+00 1.712979092000000E+00 1.814709808000000E+00 1.831471442000000E+00 0.000000000000000E+00 1.766917773000000E+00 1.736922145000000E+00 0.000000000000000E+00 1.671795502000000E+00 1.636202686000000E+00 0.000000000000000E+00 1.562618259000000E+00 1.477176687000000E+00 1.317847098000000E+00 1.173810360000000E+00 1.013805174000000E+00 1.033284159000000E+00 1.083081605000000E+00 9.830826390000000E-01 9.994637150000000E-01 9.604800890000000E-01 0.000000000000000E+00 8.246060970000000E-01 7.601315330000000E-01 0.000000000000000E+00 6.680815150000000E-01 6.131978550000000E-01 0.000000000000000E+00 5.463223580000000E-01 4.893734250000000E-01 4.305131520000000E-01 4.585867510000000E-01 5.268198550000000E-01 -1.486498208000000E+00 1.494483502000000E+00 1.514118558000000E+00 1.538700862000000E+00 1.561421000000000E+00 1.613533859000000E+00 1.533719407000000E+00 1.506539478000000E+00 1.539098523000000E+00 1.452076996000000E+00 1.419359741000000E+00 1.437812504000000E+00 1.336024063000000E+00 1.261965008000000E+00 1.175601974000000E+00 1.080988538000000E+00 9.547353820000000E-01 1.004842831000000E+00 1.088144302000000E+00 9.846540420000000E-01 9.436521790000000E-01 9.159035510000000E-01 9.235446320000000E-01 8.188100780000000E-01 7.654999590000000E-01 7.599583570000000E-01 6.689794600000000E-01 6.179740650000000E-01 6.070554860000000E-01 5.282031170000000E-01 4.721029560000000E-01 4.404033710000000E-01 4.781533920000000E-01 5.379479550000000E-01 -1.283132985000000E+00 1.281508132000000E+00 1.286352758000000E+00 1.293307553000000E+00 1.297324786000000E+00 1.299950205000000E+00 1.278326843000000E+00 1.259309658000000E+00 1.245936696000000E+00 1.213747518000000E+00 1.183803202000000E+00 1.164967744000000E+00 1.116681839000000E+00 1.067583507000000E+00 1.011848938000000E+00 9.541410280000000E-01 8.786260200000000E-01 1.014797189000000E+00 9.101973270000000E-01 8.536203990000000E-01 8.195476750000000E-01 7.873841530000000E-01 7.559069170000000E-01 7.096242830000000E-01 6.675427480000000E-01 6.308788130000000E-01 5.837196150000000E-01 5.413858000000000E-01 5.055727740000000E-01 4.605408490000000E-01 4.208089360000000E-01 3.971523700000000E-01 4.227630350000000E-01 5.780048380000000E-01 -1.311371206000000E+00 1.295428413000000E+00 1.288332512000000E+00 1.291086209000000E+00 1.293611144000000E+00 1.293251966000000E+00 1.272601377000000E+00 1.253800126000000E+00 1.242887960000000E+00 1.209619111000000E+00 1.184784527000000E+00 1.166289005000000E+00 1.120562242000000E+00 1.074884653000000E+00 1.033284159000000E+00 1.004842831000000E+00 1.014797189000000E+00 7.955062760000000E-01 7.908946890000000E-01 7.730790390000000E-01 7.509019440000000E-01 7.273993120000000E-01 7.012092590000000E-01 6.615927960000000E-01 6.233296640000000E-01 5.880810600000000E-01 5.453880680000000E-01 5.066973430000000E-01 4.723445460000000E-01 4.313469580000000E-01 3.955125520000000E-01 3.762345360000000E-01 3.921110520000000E-01 5.029345270000000E-01 -1.060656506000000E+00 1.343395761000000E+00 1.318898976000000E+00 1.334424866000000E+00 1.357367352000000E+00 1.423064832000000E+00 1.332366007000000E+00 1.311358378000000E+00 1.358261021000000E+00 1.267196605000000E+00 1.242595059000000E+00 1.287248564000000E+00 1.185635436000000E+00 1.124295127000000E+00 1.083081605000000E+00 1.088144302000000E+00 9.101973270000000E-01 7.919871880000000E-01 8.266008170000000E-01 8.311033680000000E-01 8.274944860000000E-01 8.118681110000000E-01 8.072201780000000E-01 7.400710210000000E-01 6.968328480000000E-01 6.799258330000000E-01 6.129434370000000E-01 5.718304000000000E-01 5.476436190000000E-01 4.861664790000000E-01 4.435932130000000E-01 4.144142870000000E-01 4.243836110000000E-01 5.294516880000000E-01 -9.374435330000000E-01 1.170746659000000E+00 1.175274865000000E+00 1.262642743000000E+00 1.288097336000000E+00 0.000000000000000E+00 1.224896998000000E+00 1.198341353000000E+00 0.000000000000000E+00 1.162451361000000E+00 1.143126309000000E+00 0.000000000000000E+00 1.134424797000000E+00 1.076122534000000E+00 9.830826390000000E-01 9.846540420000000E-01 8.536203990000000E-01 7.714263940000000E-01 8.313406820000000E-01 8.656977550000000E-01 9.015578160000000E-01 8.875456040000000E-01 0.000000000000000E+00 7.998677220000000E-01 7.533007390000000E-01 0.000000000000000E+00 6.644747710000000E-01 6.179676520000000E-01 0.000000000000000E+00 5.373300830000000E-01 4.908935170000000E-01 4.406770310000000E-01 4.378976780000000E-01 5.361563410000000E-01 -8.642268360000000E-01 1.093852665000000E+00 1.175944048000000E+00 0.000000000000000E+00 1.179300651000000E+00 1.281910070000000E+00 1.146335392000000E+00 1.123014486000000E+00 1.187508292000000E+00 1.088757898000000E+00 1.071660604000000E+00 1.160398916000000E+00 1.042537265000000E+00 0.000000000000000E+00 9.994637150000000E-01 9.436521790000000E-01 8.195476750000000E-01 7.505235250000000E-01 8.264618490000000E-01 8.982225930000000E-01 0.000000000000000E+00 8.911993830000000E-01 8.514311250000000E-01 7.674668850000000E-01 7.219496430000000E-01 7.081469510000000E-01 6.377502280000000E-01 5.940801860000000E-01 5.816543420000000E-01 5.415354570000000E-01 0.000000000000000E+00 4.656484440000000E-01 4.435419020000000E-01 5.316965500000000E-01 -8.147009120000000E-01 1.049271850000000E+00 1.121246391000000E+00 1.114077799000000E+00 1.141161520000000E+00 1.142395125000000E+00 1.038133061000000E+00 1.018128136000000E+00 1.072699654000000E+00 9.874034630000000E-01 9.744987160000000E-01 1.043601971000000E+00 1.015177747000000E+00 9.644994610000000E-01 9.604800890000000E-01 9.159035510000000E-01 7.873841530000000E-01 7.266018510000000E-01 8.129905410000000E-01 8.889288660000000E-01 8.899037770000000E-01 8.389368660000000E-01 8.231757990000000E-01 7.498393760000000E-01 7.077257720000000E-01 6.916931840000000E-01 6.232035240000000E-01 5.820135200000000E-01 5.681808960000000E-01 5.141652490000000E-01 4.945943310000000E-01 4.633886170000000E-01 4.429133400000000E-01 5.195016060000000E-01 -7.690233230000000E-01 1.046340702000000E+00 0.000000000000000E+00 1.128739953000000E+00 1.083607544000000E+00 0.000000000000000E+00 1.037316359000000E+00 1.017972065000000E+00 0.000000000000000E+00 9.896868080000000E-01 9.726279980000000E-01 0.000000000000000E+00 9.691816010000000E-01 9.849383920000000E-01 0.000000000000000E+00 9.235446320000000E-01 7.559069170000000E-01 7.011387060000000E-01 8.099802890000000E-01 0.000000000000000E+00 8.499516540000000E-01 8.225707560000000E-01 0.000000000000000E+00 7.525909350000000E-01 7.121620460000000E-01 0.000000000000000E+00 6.291299590000000E-01 5.853487430000000E-01 0.000000000000000E+00 5.097631820000000E-01 4.739009830000000E-01 0.000000000000000E+00 4.457824870000000E-01 5.094766950000000E-01 -7.131519230000000E-01 9.199614060000000E-01 9.487255660000000E-01 9.589257900000000E-01 9.265292290000000E-01 9.828538770000000E-01 8.993664040000000E-01 8.885055490000000E-01 9.436564550000000E-01 8.628521250000000E-01 8.479868650000000E-01 9.053078040000000E-01 8.328287040000000E-01 8.375600180000000E-01 8.246060970000000E-01 8.188100780000000E-01 7.096242830000000E-01 6.590806890000000E-01 7.393847350000000E-01 8.018218200000000E-01 7.674305400000000E-01 7.486378410000000E-01 7.523578970000000E-01 6.897241200000000E-01 6.532034270000000E-01 6.432362420000000E-01 5.787360220000000E-01 5.374433950000000E-01 5.238758790000000E-01 4.660760370000000E-01 4.314966160000000E-01 4.258759100000000E-01 4.123725320000000E-01 4.852578450000000E-01 -6.652080920000000E-01 8.516620250000000E-01 8.719277800000000E-01 8.815464780000000E-01 8.556920860000000E-01 9.021115490000000E-01 8.322151090000000E-01 8.216300520000000E-01 8.714788080000000E-01 8.012381560000000E-01 7.881196120000000E-01 8.314176490000000E-01 7.695834690000000E-01 7.746376150000000E-01 7.601315330000000E-01 7.654999590000000E-01 6.675427480000000E-01 6.222157850000000E-01 6.979274850000000E-01 7.555391870000000E-01 7.239400870000000E-01 7.055471870000000E-01 7.103020180000000E-01 6.534728110000000E-01 6.206614850000000E-01 6.093088990000000E-01 5.505448350000000E-01 5.123693600000000E-01 4.972881650000000E-01 4.416262860000000E-01 4.108994750000000E-01 4.046972430000000E-01 3.926989920000000E-01 4.616739700000000E-01 -6.219635050000000E-01 8.392725260000000E-01 0.000000000000000E+00 8.792225120000000E-01 8.548796600000000E-01 0.000000000000000E+00 8.339425830000000E-01 8.223270280000000E-01 0.000000000000000E+00 8.036070200000000E-01 7.897102570000000E-01 0.000000000000000E+00 7.718518480000000E-01 7.740090530000000E-01 0.000000000000000E+00 7.599583570000000E-01 6.308788130000000E-01 5.881473370000000E-01 6.806099810000000E-01 0.000000000000000E+00 7.106996790000000E-01 6.922426400000000E-01 0.000000000000000E+00 6.443522590000000E-01 6.107071280000000E-01 0.000000000000000E+00 5.430598250000000E-01 5.059383660000000E-01 0.000000000000000E+00 4.362920680000000E-01 4.043423410000000E-01 0.000000000000000E+00 3.855475050000000E-01 4.394819090000000E-01 -5.705476220000000E-01 7.331525710000000E-01 7.556225680000000E-01 7.592228980000000E-01 7.377598830000000E-01 7.854685380000000E-01 7.227727590000000E-01 7.115676920000000E-01 7.575274930000000E-01 6.962791160000000E-01 6.819975200000000E-01 7.270273060000000E-01 6.714338420000000E-01 6.737193250000000E-01 6.680815150000000E-01 6.689794600000000E-01 5.837196150000000E-01 5.455911740000000E-01 6.141000760000000E-01 6.641198690000000E-01 6.392403880000000E-01 6.242874720000000E-01 6.306457750000000E-01 5.797558300000000E-01 5.504635930000000E-01 5.430042380000000E-01 4.888859690000000E-01 4.565257540000000E-01 4.440699790000000E-01 3.934430040000000E-01 3.649995380000000E-01 3.612581020000000E-01 3.500722770000000E-01 4.110833400000000E-01 -5.266338520000000E-01 6.724408230000000E-01 6.882681660000000E-01 6.976431360000000E-01 6.767338530000000E-01 7.126495020000000E-01 6.605580220000000E-01 6.527202480000000E-01 6.902799900000000E-01 6.374722920000000E-01 6.286061580000000E-01 6.659585180000000E-01 6.178778570000000E-01 6.251554850000000E-01 6.131978550000000E-01 6.179740650000000E-01 5.413858000000000E-01 5.054359440000000E-01 5.689569770000000E-01 6.178650290000000E-01 5.949460610000000E-01 5.820904870000000E-01 5.850750840000000E-01 5.401864020000000E-01 5.128867470000000E-01 5.046641390000000E-01 4.548324870000000E-01 4.262436390000000E-01 4.137322770000000E-01 3.688500100000000E-01 3.421981570000000E-01 3.361605480000000E-01 3.271939300000000E-01 3.842882440000000E-01 -4.851637750000000E-01 6.580288110000000E-01 0.000000000000000E+00 7.026203150000000E-01 6.759898420000000E-01 0.000000000000000E+00 6.544691020000000E-01 6.448974390000000E-01 0.000000000000000E+00 6.300236280000000E-01 6.224124780000000E-01 0.000000000000000E+00 6.218844010000000E-01 6.335576810000000E-01 0.000000000000000E+00 6.070554860000000E-01 5.055727740000000E-01 4.719041250000000E-01 5.468033990000000E-01 0.000000000000000E+00 5.825522870000000E-01 5.679093750000000E-01 0.000000000000000E+00 5.251586570000000E-01 4.976794130000000E-01 0.000000000000000E+00 4.429646520000000E-01 4.130224730000000E-01 0.000000000000000E+00 3.594707640000000E-01 3.344181080000000E-01 0.000000000000000E+00 3.151849890000000E-01 3.589063420000000E-01 -4.382162350000000E-01 5.677704070000000E-01 6.070362440000000E-01 5.902126100000000E-01 6.106151950000000E-01 6.197357470000000E-01 5.620299750000000E-01 5.514149870000000E-01 5.896973610000000E-01 5.407615150000000E-01 5.352455690000000E-01 5.804613580000000E-01 5.599304950000000E-01 5.322053850000000E-01 5.463223580000000E-01 5.282031170000000E-01 4.605408490000000E-01 4.310583330000000E-01 4.869938710000000E-01 5.375887770000000E-01 5.411228300000000E-01 5.143298720000000E-01 5.089015830000000E-01 4.664394910000000E-01 4.411986940000000E-01 4.362407560000000E-01 3.932890700000000E-01 3.679648930000000E-01 3.594515220000000E-01 3.252654870000000E-01 3.118925250000000E-01 2.944830890000000E-01 2.815526850000000E-01 3.283591200000000E-01 -3.985185290000000E-01 5.044375150000000E-01 5.427049230000000E-01 0.000000000000000E+00 5.391687320000000E-01 5.784730520000000E-01 5.221954400000000E-01 5.139984880000000E-01 5.413280750000000E-01 5.015405750000000E-01 4.990541230000000E-01 5.402569550000000E-01 4.954324130000000E-01 0.000000000000000E+00 4.893734250000000E-01 4.721029560000000E-01 4.208089360000000E-01 3.953928260000000E-01 4.435055560000000E-01 4.914964220000000E-01 0.000000000000000E+00 4.934783150000000E-01 4.737149800000000E-01 4.321294530000000E-01 4.104227100000000E-01 4.033396370000000E-01 3.657798940000000E-01 3.411569690000000E-01 3.344352120000000E-01 3.136285510000000E-01 0.000000000000000E+00 2.701723060000000E-01 2.567801030000000E-01 3.008200120000000E-01 -3.778700780000000E-01 4.706234850000000E-01 4.764708150000000E-01 5.150653320000000E-01 5.217272260000000E-01 0.000000000000000E+00 4.886956900000000E-01 4.805564630000000E-01 0.000000000000000E+00 4.708672130000000E-01 4.681284820000000E-01 0.000000000000000E+00 4.774606920000000E-01 4.667045980000000E-01 4.305131520000000E-01 4.404033710000000E-01 3.971523700000000E-01 3.746503050000000E-01 4.153314740000000E-01 4.414124900000000E-01 4.657040310000000E-01 4.630743360000000E-01 0.000000000000000E+00 4.259293590000000E-01 4.048297970000000E-01 0.000000000000000E+00 3.607749220000000E-01 3.368126270000000E-01 0.000000000000000E+00 2.965547750000000E-01 2.699820270000000E-01 2.428833400000000E-01 2.373524290000000E-01 2.771420670000000E-01 -4.121052870000000E-01 5.174940580000000E-01 5.082281250000000E-01 5.135174460000000E-01 5.217999170000000E-01 5.480049350000000E-01 5.135751710000000E-01 5.099534610000000E-01 5.309675040000000E-01 4.967750540000000E-01 4.924285740000000E-01 5.169916370000000E-01 4.817793780000000E-01 4.673951600000000E-01 4.585867510000000E-01 4.781533920000000E-01 4.227630350000000E-01 3.903964060000000E-01 4.256535610000000E-01 4.399757790000000E-01 4.458380740000000E-01 4.412842120000000E-01 4.447348850000000E-01 4.127851590000000E-01 3.936781800000000E-01 3.857677150000000E-01 3.498606180000000E-01 3.273970360000000E-01 3.165939070000000E-01 2.826216670000000E-01 2.560574710000000E-01 2.363796550000000E-01 2.315029610000000E-01 2.654944420000000E-01 -6.014796770000000E-01 5.921624320000000E-01 5.872857380000000E-01 5.880960260000000E-01 5.863364820000000E-01 5.887224490000000E-01 5.793645830000000E-01 5.753430740000000E-01 5.720997830000000E-01 5.633020640000000E-01 5.578502570000000E-01 5.540746130000000E-01 5.412126250000000E-01 5.330285010000000E-01 5.268198550000000E-01 5.379479550000000E-01 5.780048380000000E-01 5.015106430000000E-01 5.273329660000000E-01 5.350937730000000E-01 5.318355170000000E-01 5.195016060000000E-01 5.076872200000000E-01 4.835154050000000E-01 4.602736040000000E-01 4.398624670000000E-01 4.112372740000000E-01 3.843288650000000E-01 3.578608780000000E-01 3.286220890000000E-01 3.000503450000000E-01 2.765840580000000E-01 2.652378860000000E-01 2.862925500000000E-01 diff --git a/examples/c5g7_no_mesh/test b/examples/c5g7_no_mesh/test deleted file mode 100644 index 60cd895705a..00000000000 --- a/examples/c5g7_no_mesh/test +++ /dev/null @@ -1,51561 +0,0 @@ - %%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%% - %%%%%%%%%%%%%%%%%%%%%%%% - ############### %%%%%%%%%%%%%%%%%%%%%%%% - ################## %%%%%%%%%%%%%%%%%%%%%%% - ################### %%%%%%%%%%%%%%%%%%%%%%% - #################### %%%%%%%%%%%%%%%%%%%%%% - ##################### %%%%%%%%%%%%%%%%%%%%% - ###################### %%%%%%%%%%%%%%%%%%%% - ####################### %%%%%%%%%%%%%%%%%% - ####################### %%%%%%%%%%%%%%%%% - ###################### %%%%%%%%%%%%%%%%% - #################### %%%%%%%%%%%%%%%%% - ################# %%%%%%%%%%%%%%%%% - ############### %%%%%%%%%%%%%%%% - ############ %%%%%%%%%%%%%%% - ######## %%%%%%%%%%%%%% - %%%%%%%%%%% - - | The OpenMC Monte Carlo Code - Copyright | 2011-2025 MIT, UChicago Argonne LLC, and contributors - License | https://docs.openmc.org/en/latest/license.html - Version | 0.15.3-dev136 - Commit Hash | 5cf00a81a4fa4f09dfb20de70f7f3d84ec8077a9 - Date/Time | 2025-12-12 14:31:01 - MPI Processes | 64 - OpenMP Threads | 1 - - Reading settings XML file... - Reading cross sections HDF5 file... - Reading materials XML file... - Reading geometry XML file... - Loading cross section data... - Loading uo2 data... - Loading mox43 data... - Loading mox7 data... - Loading mox87 data... - Loading fiss_chamber data... - Loading guide_tube data... - Loading water data... - Loading control_rod data... - Reading tallies XML file... - Preparing distributed cell instances... - Reading plot XML file... - - ==========> K EIGENVALUE SIMULATION (RANDOM RAY SOLVER) <========== - - Bat./Gen. k Entropy Average k - ========= ======== ======== ==================== -Calculating 8000 grid points for Voronoi tessellation... -Lloyd's algorithm converged in 59 iterations. -Rank 0 broadcasting 3258 source regions to other ranks. -Rank 1 broadcasting 2159 source regions to other ranks. -Rank 2 broadcasting 2153 source regions to other ranks. -Rank 3 broadcasting 1896 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.623960 -SourceRegion.volume = 0.356839 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.019733 -SourceRegion.volume = 0.602918 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.879958 -SourceRegion.volume = 1.142698 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.356519 -SourceRegion.volume = 1.404196 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.001485 -SourceRegion.volume = 3.214951 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.205780 -SourceRegion.volume = 4.282687 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.336774 -SourceRegion.volume = 0.962291 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.708854 -SourceRegion.volume = 0.142973 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.030348 -SourceRegion.volume = 2.825403 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.716313 -SourceRegion.volume = 0.982880 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.222726 -SourceRegion.volume = 2.286352 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.002958 -SourceRegion.volume = 1.860601 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.851059 -SourceRegion.volume = 0.962503 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.657127 -SourceRegion.volume = 0.632736 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.418242 -SourceRegion.volume = 1.632580 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.411682 -SourceRegion.volume = 0.210610 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.495868 -SourceRegion.volume = 1.289803 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.244187 -SourceRegion.volume = 1.819552 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 5.164148 -SourceRegion.volume = 0.398405 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.678614 -SourceRegion.volume = 1.561009 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.225386 -SourceRegion.volume = 1.088352 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.585180 -SourceRegion.volume = 0.439419 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.345049 -SourceRegion.volume = 0.321855 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.582443 -SourceRegion.volume = 1.838141 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.766761 -SourceRegion.volume = 1.057471 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.074589 -SourceRegion.volume = 0.494352 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.229826 -SourceRegion.volume = 0.347353 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.685070 -SourceRegion.volume = 1.010171 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.224850 -SourceRegion.volume = 0.417141 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.626538 -SourceRegion.volume = 0.584880 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.775824 -SourceRegion.volume = 0.109092 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.106599 -SourceRegion.volume = 0.942332 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.312111 -SourceRegion.volume = 2.736205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.700284 -SourceRegion.volume = 1.752772 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.290991 -SourceRegion.volume = 0.647329 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.691248 -SourceRegion.volume = 0.495987 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.992215 -SourceRegion.volume = 3.399701 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.766236 -SourceRegion.volume = 2.649133 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.185934 -SourceRegion.volume = 2.072868 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.747228 -SourceRegion.volume = 0.935308 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.934977 -SourceRegion.volume = 2.272649 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.355008 -SourceRegion.volume = 2.044908 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.746700 -SourceRegion.volume = 1.255679 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.916403 -SourceRegion.volume = 1.818611 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.781907 -SourceRegion.volume = 0.904913 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.849754 -SourceRegion.volume = 0.615945 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.937472 -SourceRegion.volume = 3.439082 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.094235 -SourceRegion.volume = 0.621143 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.829602 -SourceRegion.volume = 1.578612 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.790240 -SourceRegion.volume = 2.050074 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.884146 -SourceRegion.volume = 2.155155 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.760930 -SourceRegion.volume = 1.707972 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.691431 -SourceRegion.volume = 2.521549 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.012122 -SourceRegion.volume = 3.421967 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 4 broadcasting 1908 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.658023 -SourceRegion.volume = 2.308722 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.589545 -SourceRegion.volume = 1.456747 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.135074 -SourceRegion.volume = 2.467322 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.678419 -SourceRegion.volume = 1.337231 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.420032 -SourceRegion.volume = 2.180876 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.728615 -SourceRegion.volume = 1.192665 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.609365 -SourceRegion.volume = 2.021046 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.493932 -SourceRegion.volume = 0.908378 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.285969 -SourceRegion.volume = 0.702209 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.944201 -SourceRegion.volume = 1.182908 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.437748 -SourceRegion.volume = 2.273257 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.682389 -SourceRegion.volume = 1.343909 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.520253 -SourceRegion.volume = 0.252769 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.775991 -SourceRegion.volume = 0.621372 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.631571 -SourceRegion.volume = 0.410933 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.982993 -SourceRegion.volume = 1.311015 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.623673 -SourceRegion.volume = 1.462040 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.161411 -SourceRegion.volume = 0.395817 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.274935 -SourceRegion.volume = 0.594772 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.347742 -SourceRegion.volume = 0.960735 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.007658 -SourceRegion.volume = 0.255219 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.297158 -SourceRegion.volume = 0.997297 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.768425 -SourceRegion.volume = 0.683905 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.091546 -SourceRegion.volume = 1.449747 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.961719 -SourceRegion.volume = 1.011767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.724328 -SourceRegion.volume = 2.839394 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.754555 -SourceRegion.volume = 1.185027 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.860302 -SourceRegion.volume = 0.941106 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.356833 -SourceRegion.volume = 2.679476 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.668806 -SourceRegion.volume = 2.152274 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.683228 -SourceRegion.volume = 2.740481 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.483061 -SourceRegion.volume = 2.360750 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.455984 -SourceRegion.volume = 1.373963 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.115894 -SourceRegion.volume = 1.838730 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.159131 -SourceRegion.volume = 0.677681 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.741752 -SourceRegion.volume = 2.035657 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.110193 -SourceRegion.volume = 1.629762 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.975636 -SourceRegion.volume = 2.909508 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.457871 -SourceRegion.volume = 2.319013 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.784745 -SourceRegion.volume = 3.102515 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.047506 -SourceRegion.volume = 1.989100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.777806 -SourceRegion.volume = 2.780648 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.814614 -SourceRegion.volume = 1.515064 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.129700 -SourceRegion.volume = 1.901993 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.948856 -SourceRegion.volume = 0.595149 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.714236 -SourceRegion.volume = 1.472916 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 5 broadcasting 2889 source regions to other ranks. -Rank 6 broadcasting 253 source regions to other ranks. -Rank 7 broadcasting 3697 source regions to other ranks. -Rank 8 broadcasting 2216 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.938698 -SourceRegion.volume = 0.488355 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.196415 -SourceRegion.volume = 1.923956 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.292947 -SourceRegion.volume = 1.732231 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.013263 -SourceRegion.volume = 0.875110 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.245162 -SourceRegion.volume = 1.730821 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.155781 -SourceRegion.volume = 0.832837 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.092980 -SourceRegion.volume = 3.037786 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.521551 -SourceRegion.volume = 1.863650 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.564337 -SourceRegion.volume = 0.944555 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.669094 -SourceRegion.volume = 2.208903 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.388121 -SourceRegion.volume = 2.230284 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.878513 -SourceRegion.volume = 1.043528 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.008158 -SourceRegion.volume = 0.479462 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.495936 -SourceRegion.volume = 0.856187 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.847500 -SourceRegion.volume = 0.045588 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.387447 -SourceRegion.volume = 0.399232 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.339176 -SourceRegion.volume = 0.801498 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.184349 -SourceRegion.volume = 1.156251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.890602 -SourceRegion.volume = 1.112668 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.713046 -SourceRegion.volume = 1.546100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.763184 -SourceRegion.volume = 1.469867 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.185514 -SourceRegion.volume = 2.312209 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.828463 -SourceRegion.volume = 2.798035 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.386532 -SourceRegion.volume = 1.321441 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.025498 -SourceRegion.volume = 0.938446 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.919644 -SourceRegion.volume = 2.295238 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.767133 -SourceRegion.volume = 2.477963 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.488757 -SourceRegion.volume = 1.606671 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.662290 -SourceRegion.volume = 1.033737 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.517052 -SourceRegion.volume = 1.869501 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.929847 -SourceRegion.volume = 0.841417 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.007676 -SourceRegion.volume = 2.491439 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.019881 -SourceRegion.volume = 0.842858 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.385311 -SourceRegion.volume = 4.724223 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.483870 -SourceRegion.volume = 1.421679 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 9 broadcasting 2419 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.823804 -SourceRegion.volume = 1.224351 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.149190 -SourceRegion.volume = 1.120350 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.982652 -SourceRegion.volume = 0.591583 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.861247 -SourceRegion.volume = 0.922725 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.850461 -SourceRegion.volume = 0.316225 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.262525 -SourceRegion.volume = 0.640497 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.090260 -SourceRegion.volume = 0.742505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.893313 -SourceRegion.volume = 0.500647 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.415333 -SourceRegion.volume = 1.275895 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.181907 -SourceRegion.volume = 1.047893 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.421642 -SourceRegion.volume = 1.090887 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.450413 -SourceRegion.volume = 1.509915 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.334411 -SourceRegion.volume = 0.423860 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.857839 -SourceRegion.volume = 0.085427 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.817939 -SourceRegion.volume = 2.329565 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.124639 -SourceRegion.volume = 1.953572 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.058621 -SourceRegion.volume = 1.428319 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.755304 -SourceRegion.volume = 1.916234 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.378037 -SourceRegion.volume = 0.761737 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.489187 -SourceRegion.volume = 2.674156 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 10 broadcasting 624 source regions to other ranks. -Rank 11 broadcasting 2159 source regions to other ranks. -test1 -SourceRegion_add.volume = 3.093003 -SourceRegion.volume = 0.407553 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.024866 -SourceRegion.volume = 0.939117 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.381353 -SourceRegion.volume = 0.089100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.897439 -SourceRegion.volume = 0.171156 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.163180 -SourceRegion.volume = 0.387100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.905744 -SourceRegion.volume = 1.078292 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.214194 -SourceRegion.volume = 1.250244 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.914698 -SourceRegion.volume = 4.265282 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.824674 -SourceRegion.volume = 1.393901 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.792976 -SourceRegion.volume = 1.085694 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.887257 -SourceRegion.volume = 2.563867 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.416529 -SourceRegion.volume = 0.826254 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.779990 -SourceRegion.volume = 1.266720 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.900898 -SourceRegion.volume = 1.451872 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.042141 -SourceRegion.volume = 1.073919 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.618707 -SourceRegion.volume = 0.728859 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.050306 -SourceRegion.volume = 4.729983 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.667962 -SourceRegion.volume = 0.697791 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.198133 -SourceRegion.volume = 2.377252 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.315804 -SourceRegion.volume = 1.943458 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.291722 -SourceRegion.volume = 0.706756 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.856822 -SourceRegion.volume = 1.193098 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.230793 -SourceRegion.volume = 0.963850 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.806758 -SourceRegion.volume = 2.365349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.719381 -SourceRegion.volume = 0.852396 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.664018 -SourceRegion.volume = 1.563205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.636405 -SourceRegion.volume = 0.276347 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.050418 -SourceRegion.volume = 0.619492 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.289081 -SourceRegion.volume = 1.676738 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.895492 -SourceRegion.volume = 0.792785 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.633484 -SourceRegion.volume = 1.502557 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.024328 -SourceRegion.volume = 1.615679 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.965787 -SourceRegion.volume = 1.619228 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.245464 -SourceRegion.volume = 1.894356 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.072150 -SourceRegion.volume = 1.462185 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.610575 -SourceRegion.volume = 0.286766 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 12 broadcasting 4528 source regions to other ranks. -Rank 13 broadcasting 2060 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.151673 -SourceRegion.volume = 1.485499 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.677005 -SourceRegion.volume = 1.125135 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.135157 -SourceRegion.volume = 0.876423 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.670436 -SourceRegion.volume = 1.564319 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.697619 -SourceRegion.volume = 2.667501 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.703903 -SourceRegion.volume = 0.903262 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.104059 -SourceRegion.volume = 0.584814 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.552719 -SourceRegion.volume = 1.052116 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.239243 -SourceRegion.volume = 2.527882 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.278681 -SourceRegion.volume = 0.861511 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.663264 -SourceRegion.volume = 0.179283 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.500055 -SourceRegion.volume = 0.760288 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.492555 -SourceRegion.volume = 1.162386 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.826654 -SourceRegion.volume = 0.946938 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.278703 -SourceRegion.volume = 1.009827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.429323 -SourceRegion.volume = 1.575016 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.153402 -SourceRegion.volume = 0.461377 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.044401 -SourceRegion.volume = 1.434961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.235766 -SourceRegion.volume = 1.730616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.764968 -SourceRegion.volume = 1.119750 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.857148 -SourceRegion.volume = 2.560440 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.816168 -SourceRegion.volume = 0.950894 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.427022 -SourceRegion.volume = 1.059408 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.582418 -SourceRegion.volume = 1.238578 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.071759 -SourceRegion.volume = 0.810579 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.660155 -SourceRegion.volume = 1.157465 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.752451 -SourceRegion.volume = 1.489081 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.612548 -SourceRegion.volume = 0.585731 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.517283 -SourceRegion.volume = 1.420608 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.692081 -SourceRegion.volume = 0.717282 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.165199 -SourceRegion.volume = 1.310674 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.776837 -SourceRegion.volume = 1.093099 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.868089 -SourceRegion.volume = 0.685898 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 2.392375 -SourceRegion.volume = 0.445402 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.383399 -SourceRegion.volume = 1.950689 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.711313 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.868335 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.047636 -SourceRegion.volume = 2.087426 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.062961 -SourceRegion.volume = 1.013488 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.312614 -SourceRegion.volume = 1.932343 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.291088 -SourceRegion.volume = 1.671200 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.236108 -SourceRegion.volume = 1.299416 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.615809 -SourceRegion.volume = 1.873372 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.022551 -SourceRegion.volume = 1.864199 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.250323 -SourceRegion.volume = 0.870617 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.021158 -SourceRegion.volume = 1.662452 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.231651 -SourceRegion.volume = 0.743888 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.655681 -SourceRegion.volume = 1.684650 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.501701 -SourceRegion.volume = 2.348061 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.154381 -SourceRegion.volume = 2.187823 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.632497 -SourceRegion.volume = 1.968653 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.775292 -SourceRegion.volume = 0.783406 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.551612 -SourceRegion.volume = 1.961569 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.638457 -SourceRegion.volume = 3.682597 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.742057 -SourceRegion.volume = 0.706115 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.717095 -SourceRegion.volume = 0.831262 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.258409 -SourceRegion.volume = 2.585912 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.430511 -SourceRegion.volume = 1.075603 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.432867 -SourceRegion.volume = 0.368781 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.684845 -SourceRegion.volume = 0.848346 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.423811 -SourceRegion.volume = 1.368577 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.524684 -SourceRegion.volume = 1.418288 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.028045 -SourceRegion.volume = 1.428523 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.437781 -SourceRegion.volume = 0.729664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.409396 -SourceRegion.volume = 1.330016 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.292898 -SourceRegion.volume = 1.713983 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.325703 -SourceRegion.volume = 0.944627 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.594094 -SourceRegion.volume = 1.063164 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.003474 -SourceRegion.volume = 2.075301 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.079399 -SourceRegion.volume = 2.372491 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.703133 -SourceRegion.volume = 0.515694 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.741637 -SourceRegion.volume = 0.928025 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.023784 -SourceRegion.volume = 2.756101 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.609417 -SourceRegion.volume = 1.556746 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.881440 -SourceRegion.volume = 1.285242 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.670306 -SourceRegion.volume = 1.495840 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.469738 -SourceRegion.volume = 3.301858 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.466767 -SourceRegion.volume = 3.163325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.111582 -SourceRegion.volume = 1.535405 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.889706 -SourceRegion.volume = 1.265874 -test1 -SourceRegion_add.volume = 1.549394 -SourceRegion.volume = 1.555559 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.541940 -SourceRegion.volume = 0.465875 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.878498 -SourceRegion.volume = 0.890146 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.773248 -SourceRegion.volume = 0.592430 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.987777 -SourceRegion.volume = 1.569680 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.805002 -SourceRegion.volume = 0.367904 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.669216 -SourceRegion.volume = 1.743134 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.756271 -SourceRegion.volume = 0.806618 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.427992 -SourceRegion.volume = 1.128681 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.075967 -SourceRegion.volume = 1.772062 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.031160 -SourceRegion.volume = 2.323289 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.450459 -SourceRegion.volume = 0.622471 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.577758 -SourceRegion.volume = 0.588864 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.864748 -SourceRegion.volume = 0.694612 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 14 broadcasting 3627 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.479208 -SourceRegion.volume = 0.231099 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.199019 -SourceRegion.volume = 0.271742 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.702011 -SourceRegion.volume = 0.668656 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.790545 -SourceRegion.volume = 0.396875 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.970905 -SourceRegion.volume = 0.769826 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.251012 -SourceRegion.volume = 0.680352 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.897225 -SourceRegion.volume = 0.805410 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.656352 -SourceRegion.volume = 1.517651 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.472650 -SourceRegion.volume = 1.104852 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.574343 -SourceRegion.volume = 0.086862 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.312291 -SourceRegion.volume = 0.562717 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.001147 -SourceRegion.volume = 0.208479 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.454382 -SourceRegion.volume = 0.692132 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.037795 -SourceRegion.volume = 0.401147 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.544963 -SourceRegion.volume = 0.783817 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.322814 -SourceRegion.volume = 1.074571 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.694419 -SourceRegion.volume = 1.004911 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.221044 -SourceRegion.volume = 0.796100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.894661 -SourceRegion.volume = 0.914887 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.002289 -SourceRegion.volume = 1.262603 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.833920 -SourceRegion.volume = 0.460160 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.028910 -SourceRegion.volume = 0.043193 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.699267 -SourceRegion.volume = 0.315065 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.589956 -SourceRegion.volume = 1.050926 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.160966 -SourceRegion.volume = 0.949019 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.895939 -SourceRegion.volume = 0.611529 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.846818 -SourceRegion.volume = 1.070224 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.430685 -SourceRegion.volume = 0.347967 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.132502 -SourceRegion.volume = 1.217070 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.588934 -SourceRegion.volume = 0.279656 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.126787 -SourceRegion.volume = 0.576380 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.601734 -SourceRegion.volume = 0.818326 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.438213 -SourceRegion.volume = 0.399671 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.428916 -SourceRegion.volume = 0.236394 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.489053 -SourceRegion.volume = 0.736493 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.268932 -SourceRegion.volume = 0.538711 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.240438 -SourceRegion.volume = 1.193797 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.402963 -SourceRegion.volume = 0.473303 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.687956 -SourceRegion.volume = 0.392932 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.013526 -SourceRegion.volume = 0.219895 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.442461 -SourceRegion.volume = 1.909385 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.177545 -SourceRegion.volume = 0.482024 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.043597 -SourceRegion.volume = 1.120469 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.711278 -SourceRegion.volume = 0.823369 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.505432 -SourceRegion.volume = 0.813797 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 15 broadcasting 2280 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.709945 -SourceRegion.volume = 1.051677 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.222137 -SourceRegion.volume = 1.421112 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.235552 -SourceRegion.volume = 1.891820 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.539220 -SourceRegion.volume = 1.927956 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.567915 -SourceRegion.volume = 3.352178 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.543870 -SourceRegion.volume = 1.654962 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.110501 -SourceRegion.volume = 1.110863 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.386999 -SourceRegion.volume = 0.617002 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.966091 -SourceRegion.volume = 2.275214 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.375813 -SourceRegion.volume = 0.248477 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.119037 -SourceRegion.volume = 1.721038 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.781361 -SourceRegion.volume = 1.510726 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.656988 -SourceRegion.volume = 0.603106 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.188991 -SourceRegion.volume = 0.724179 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.445104 -SourceRegion.volume = 1.797255 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.619437 -SourceRegion.volume = 2.890830 -test1.1 -test1 -SourceRegion_add.volume = 1.602967 -SourceRegion.volume = 2.984254 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.550485 -SourceRegion.volume = 0.803827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.617082 -SourceRegion.volume = 2.073646 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 1.670192 -SourceRegion.volume = 1.003559 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.736420 -SourceRegion.volume = 0.984194 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.949187 -SourceRegion.volume = 0.954689 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.064258 -SourceRegion.volume = 0.695689 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.879304 -SourceRegion.volume = 1.310790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.695013 -SourceRegion.volume = 1.184028 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.559588 -SourceRegion.volume = 0.824562 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.773659 -SourceRegion.volume = 2.585167 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.538781 -SourceRegion.volume = 2.775222 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 1.756723 -SourceRegion.volume = 0.590534 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.804237 -SourceRegion.volume = 1.934966 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.583364 -SourceRegion.volume = 1.094776 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.006241 -SourceRegion.volume = 1.676930 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.475348 -SourceRegion.volume = 0.979497 -test1.1 -test1 -SourceRegion_add.volume = 1.124861 -SourceRegion.volume = 2.488242 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.931789 -SourceRegion.volume = 0.994382 -test1.1 -test1.2 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.145575 -SourceRegion.volume = 1.592667 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.497816 -SourceRegion.volume = 2.701795 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.003194 -SourceRegion.volume = 0.797837 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.569874 -SourceRegion.volume = 1.338557 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.206991 -SourceRegion.volume = 2.230013 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.618755 -SourceRegion.volume = 0.591365 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.004776 -SourceRegion.volume = 1.547097 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.728932 -SourceRegion.volume = 0.289257 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.667276 -SourceRegion.volume = 2.059940 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.019957 -SourceRegion.volume = 1.359062 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.886247 -SourceRegion.volume = 1.671190 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.453884 -SourceRegion.volume = 3.315398 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.155906 -test1 -SourceRegion_add.volume = 0.638043 -SourceRegion.volume = 0.517664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.430117 -SourceRegion.volume = 1.166235 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 3.309017 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.680405 -SourceRegion.volume = 2.257345 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.560004 -SourceRegion.volume = 2.196849 -test1 -SourceRegion_add.volume = 0.888178 -SourceRegion.volume = 1.358682 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.153029 -SourceRegion.volume = 2.188527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.710228 -SourceRegion.volume = 1.421088 -test1.1 -test1 -SourceRegion_add.volume = 1.207431 -SourceRegion.volume = 1.597047 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.461319 -SourceRegion.volume = 1.728588 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.401107 -SourceRegion.volume = 0.403439 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.459324 -SourceRegion.volume = 1.051476 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.536232 -SourceRegion.volume = 1.670063 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.995360 -SourceRegion.volume = 1.195510 -test1.1 -test1 -SourceRegion_add.volume = 2.823858 -SourceRegion.volume = 0.251501 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 2.135899 -SourceRegion.volume = 0.302762 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.508455 -SourceRegion.volume = 0.113449 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.981522 -SourceRegion.volume = 2.382412 -test1.1 -test1.2 -SourceRegion_add.volume = 0.648693 -SourceRegion.volume = 0.478864 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.665702 -SourceRegion.volume = 1.401379 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.469116 -SourceRegion.volume = 2.169897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.972008 -SourceRegion.volume = 1.011434 -test1.1 -test1.2 -test1.3 -test1.4 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.135533 -SourceRegion.volume = 2.030972 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.408457 -SourceRegion.volume = 0.965957 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.221079 -SourceRegion.volume = 0.138013 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.772954 -SourceRegion.volume = 0.625616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.800154 -SourceRegion.volume = 0.213927 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.914520 -SourceRegion.volume = 2.177820 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.765835 -SourceRegion.volume = 1.807634 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.384330 -SourceRegion.volume = 1.982848 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.183918 -SourceRegion.volume = 1.768305 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.277914 -SourceRegion.volume = 1.479903 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.566275 -SourceRegion.volume = 1.278865 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.866849 -SourceRegion.volume = 1.008413 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.136001 -SourceRegion.volume = 2.185931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.975617 -SourceRegion.volume = 1.444621 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.807545 -SourceRegion.volume = 1.060785 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.544085 -SourceRegion.volume = 1.927824 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.904278 -SourceRegion.volume = 0.741399 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.429160 -SourceRegion.volume = 1.624380 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.504054 -SourceRegion.volume = 0.249457 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.758037 -SourceRegion.volume = 1.225307 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.568679 -SourceRegion.volume = 2.142836 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.198089 -SourceRegion.volume = 1.602367 -test1 -SourceRegion_add.volume = 1.728756 -SourceRegion.volume = 1.752326 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.229236 -SourceRegion.volume = 1.467837 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.494875 -SourceRegion.volume = 1.296155 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.197232 -SourceRegion.volume = 0.670103 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.330407 -SourceRegion.volume = 1.656607 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.488186 -SourceRegion.volume = 2.451459 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.685832 -SourceRegion.volume = 1.803841 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.902708 -SourceRegion.volume = 1.389867 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.597505 -SourceRegion.volume = 1.021902 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.473835 -SourceRegion.volume = 0.596647 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.503094 -SourceRegion.volume = 2.866348 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.699391 -SourceRegion.volume = 1.836108 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 1.846070 -SourceRegion.volume = 1.039643 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.419940 -test1 -SourceRegion_add.volume = 3.312785 -SourceRegion.volume = 0.682698 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.220110 -SourceRegion.volume = 1.035523 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.391373 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.949683 -SourceRegion.volume = 1.054992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.435662 -SourceRegion.volume = 3.603983 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 0.150247 -SourceRegion.volume = 3.869695 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.848785 -SourceRegion.volume = 1.246560 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.892714 -test1 -SourceRegion_add.volume = 0.955737 -SourceRegion.volume = 0.711917 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion_add.volume = 1.105029 -SourceRegion.volume = 1.616965 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.817115 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.583764 -SourceRegion.volume = 2.014992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.159247 -SourceRegion.volume = 5.287824 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.492217 -SourceRegion.volume = 0.660496 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.056491 -SourceRegion.volume = 1.950998 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.189871 -SourceRegion.volume = 1.382071 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.245016 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.649673 -SourceRegion.volume = 1.737090 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.373277 -SourceRegion.volume = 1.089020 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.413745 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.809161 -SourceRegion.volume = 0.610561 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.686320 -SourceRegion.volume = 0.656890 -test1 -SourceRegion_add.volume = 3.082976 -SourceRegion.volume = 0.802653 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.761549 -SourceRegion.volume = 1.281934 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.455731 -SourceRegion.volume = 0.275764 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.761630 -SourceRegion.volume = 0.382254 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.697119 -SourceRegion.volume = 0.702284 -test1.1 -test1.2 -test1.3 -test1.4 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.160053 -SourceRegion.volume = 1.477840 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.413649 -SourceRegion.volume = 0.936073 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.042418 -SourceRegion.volume = 1.053961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.406179 -SourceRegion.volume = 5.109535 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.425289 -SourceRegion.volume = 4.240548 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.006800 -SourceRegion.volume = 1.891770 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.554369 -SourceRegion.volume = 0.743477 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.022630 -SourceRegion.volume = 2.553521 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.390694 -SourceRegion.volume = 0.628971 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 16 broadcasting 42 source regions to other ranks. -test1 -SourceRegion_add.volume = 2.910556 -SourceRegion.volume = 0.022292 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.033617 -SourceRegion.volume = 1.126728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 118.204492 -SourceRegion.volume = 68.767732 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 66.259811 -SourceRegion.volume = 28.534582 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 74.433413 -SourceRegion.volume = 94.749950 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 80.464239 -SourceRegion.volume = 64.678656 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 70.359224 -SourceRegion.volume = 2.555395 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 60.171868 -Rank 17 broadcasting 134 source regions to other ranks. -SourceRegion.volume = 67.966021 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 28.001004 -SourceRegion.volume = 112.227894 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 41.008435 -SourceRegion.volume = 74.676768 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 7.898993 -SourceRegion.volume = 108.551284 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 30.632244 -SourceRegion.volume = 69.467398 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 33.567898 -SourceRegion.volume = 118.018141 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 18 broadcasting 4146 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.097136 -SourceRegion.volume = 0.023790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.690777 -SourceRegion.volume = 0.689850 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.326604 -SourceRegion.volume = 0.521449 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.293766 -SourceRegion.volume = 0.315658 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.453207 -SourceRegion.volume = 0.519651 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.991777 -SourceRegion.volume = 0.709920 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.158241 -SourceRegion.volume = 1.235809 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.106233 -SourceRegion.volume = 1.185849 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.852507 -SourceRegion.volume = 0.453289 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.690959 -SourceRegion.volume = 1.203460 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.961785 -SourceRegion.volume = 0.376527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.812400 -SourceRegion.volume = 0.694975 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.798472 -SourceRegion.volume = 0.371279 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.057497 -SourceRegion.volume = 0.422828 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.180310 -SourceRegion.volume = 0.769039 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.581055 -SourceRegion.volume = 0.847092 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.153075 -SourceRegion.volume = 1.731271 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.446382 -SourceRegion.volume = 0.666422 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.126770 -SourceRegion.volume = 0.720701 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.474815 -SourceRegion.volume = 0.456888 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.097451 -SourceRegion.volume = 0.612414 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.726498 -SourceRegion.volume = 0.275692 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.362871 -SourceRegion.volume = 1.133722 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.781315 -SourceRegion.volume = 0.212381 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.385323 -SourceRegion.volume = 0.509105 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.063988 -SourceRegion.volume = 0.043132 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 19 broadcasting 2309 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.324688 -SourceRegion.volume = 1.580258 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.708307 -SourceRegion.volume = 0.769715 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.720724 -SourceRegion.volume = 1.037330 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.832066 -SourceRegion.volume = 0.510453 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.407829 -SourceRegion.volume = 1.180604 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.488018 -SourceRegion.volume = 1.360902 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.188399 -SourceRegion.volume = 0.851353 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.577953 -SourceRegion.volume = 1.913315 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.408995 -SourceRegion.volume = 0.936534 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.517426 -SourceRegion.volume = 0.151695 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.493253 -SourceRegion.volume = 0.513052 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.829192 -SourceRegion.volume = 0.548809 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.912538 -SourceRegion.volume = 0.989896 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.447654 -SourceRegion.volume = 0.688002 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.114984 -SourceRegion.volume = 0.903346 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.014781 -SourceRegion.volume = 0.991553 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.364001 -SourceRegion.volume = 2.131096 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.150284 -SourceRegion.volume = 1.617068 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.104746 -SourceRegion.volume = 1.391251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.647900 -SourceRegion.volume = 0.967756 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.088496 -SourceRegion.volume = 0.187208 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.516821 -SourceRegion.volume = 1.703668 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.031988 -SourceRegion.volume = 2.028466 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.102652 -SourceRegion.volume = 1.709624 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.680238 -SourceRegion.volume = 1.584467 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.728821 -SourceRegion.volume = 0.306798 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.557211 -SourceRegion.volume = 1.047211 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.016703 -SourceRegion.volume = 1.580957 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.481145 -SourceRegion.volume = 0.487708 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.103562 -SourceRegion.volume = 1.468506 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.470116 -SourceRegion.volume = 0.786597 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.631000 -SourceRegion.volume = 0.494080 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.163525 -SourceRegion.volume = 0.813516 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.674878 -SourceRegion.volume = 0.475251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.731097 -SourceRegion.volume = 0.204942 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.265577 -SourceRegion.volume = 0.986578 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.240691 -SourceRegion.volume = 0.020497 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.765682 -SourceRegion.volume = 1.301034 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.730826 -SourceRegion.volume = 0.479021 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.078243 -SourceRegion.volume = 1.151137 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.940627 -SourceRegion.volume = 1.617836 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.644151 -SourceRegion.volume = 0.808415 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.452120 -SourceRegion.volume = 0.830068 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.218778 -SourceRegion.volume = 0.914928 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.321010 -SourceRegion.volume = 1.641047 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.631632 -SourceRegion.volume = 0.502232 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.244753 -SourceRegion.volume = 1.243425 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.351755 -SourceRegion.volume = 0.446955 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.722907 -SourceRegion.volume = 1.924291 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.533656 -SourceRegion.volume = 0.224744 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.309392 -SourceRegion.volume = 1.260741 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.665238 -SourceRegion.volume = 2.183427 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.532476 -SourceRegion.volume = 0.795124 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 20 broadcasting 252 source regions to other ranks. -test1 -SourceRegion_add.volume = 74.106899 -SourceRegion.volume = 73.868307 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.123346 -SourceRegion.volume = 2.358714 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 68.660304 -SourceRegion.volume = 88.549144 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 70.937682 -SourceRegion.volume = 77.154442 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 39.783331 -SourceRegion.volume = 78.285305 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 71.721368 -SourceRegion.volume = 62.391556 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 65.678905 -SourceRegion.volume = 77.995844 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 21 broadcasting 194 source regions to other ranks. -Rank 22 broadcasting 2301 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.838565 -SourceRegion.volume = 2.325159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.233911 -SourceRegion.volume = 2.085770 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.106439 -SourceRegion.volume = 1.836309 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.593503 -SourceRegion.volume = 1.130598 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.128646 -SourceRegion.volume = 1.359777 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.906914 -SourceRegion.volume = 0.311498 -test1.1 -test1 -SourceRegion_add.volume = 1.896048 -SourceRegion.volume = 1.596905 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.701406 -SourceRegion.volume = 1.624710 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.731199 -SourceRegion.volume = 0.820323 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.052849 -SourceRegion.volume = 1.222085 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.028193 -SourceRegion.volume = 0.875239 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.446704 -SourceRegion.volume = 0.606583 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.379129 -SourceRegion.volume = 1.385299 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.496630 -SourceRegion.volume = 1.228113 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.672154 -SourceRegion.volume = 2.336042 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.331549 -SourceRegion.volume = 2.703583 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.002738 -SourceRegion.volume = 1.985404 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 1.015391 -SourceRegion.volume = 1.042778 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 2.550586 -SourceRegion.volume = 0.347763 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.237948 -SourceRegion.volume = 0.973064 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.285083 -SourceRegion.volume = 0.634534 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion_add.volume = 1.538955 -SourceRegion.volume = 0.472809 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.428449 -SourceRegion.volume = 0.617732 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.793616 -SourceRegion.volume = 0.331560 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.549709 -SourceRegion.volume = 1.067334 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.494286 -SourceRegion.volume = 0.877215 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.824785 -SourceRegion.volume = 1.114255 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.788150 -SourceRegion.volume = 0.777877 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.566079 -SourceRegion.volume = 1.886273 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.501258 -SourceRegion.volume = 1.034120 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.351062 -SourceRegion.volume = 0.911171 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.397049 -SourceRegion.volume = 1.400789 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.530527 -SourceRegion.volume = 1.914871 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.023744 -SourceRegion.volume = 1.068801 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.804581 -SourceRegion.volume = 0.841150 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.350916 -SourceRegion.volume = 1.718211 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.618131 -SourceRegion.volume = 1.410361 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.278029 -SourceRegion.volume = 1.745263 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.889234 -SourceRegion.volume = 1.308238 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.357502 -SourceRegion.volume = 1.037980 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.895399 -SourceRegion.volume = 2.053813 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.088087 -SourceRegion.volume = 2.167205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.949332 -SourceRegion.volume = 1.013771 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.540196 -SourceRegion.volume = 1.478729 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.322384 -test1 -SourceRegion_add.volume = 1.772912 -SourceRegion.volume = 1.797109 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.399886 -SourceRegion.volume = 2.080830 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.227366 -SourceRegion.volume = 1.756542 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.953192 -SourceRegion.volume = 3.571094 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.215682 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.509722 -SourceRegion.volume = 2.020464 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.888213 -SourceRegion.volume = 2.265146 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.080354 -SourceRegion.volume = 2.418411 -test1.1 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.564945 -SourceRegion.volume = 0.651813 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.952621 -SourceRegion.volume = 1.869408 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.328998 -SourceRegion.volume = 1.982292 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.911441 -SourceRegion.volume = 1.977591 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.447289 -SourceRegion.volume = 0.471456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.537392 -SourceRegion.volume = 0.958976 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.638491 -SourceRegion.volume = 1.115205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.101400 -SourceRegion.volume = 1.282805 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.610709 -SourceRegion.volume = 1.312456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.535080 -SourceRegion.volume = 1.397079 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.132804 -SourceRegion.volume = 1.162441 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.515070 -SourceRegion.volume = 1.249182 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 1.002581 -SourceRegion.volume = 2.094998 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.955946 -SourceRegion.volume = 1.602821 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.851743 -SourceRegion.volume = 1.893744 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.398352 -SourceRegion.volume = 2.536674 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 0.901604 -SourceRegion.volume = 1.330794 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.403876 -SourceRegion.volume = 0.780947 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.974272 -SourceRegion.volume = 1.712277 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -SourceRegion_add.volume = 1.390126 -SourceRegion.volume = 1.568941 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.121839 -SourceRegion.volume = 0.361239 -test1.1 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.780578 -SourceRegion.volume = 1.763096 -test2 -test3 -test1 -SourceRegion_add.volume = 1.416843 -SourceRegion.volume = 1.948154 -test1.1 -test1.2 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.076339 -SourceRegion.volume = 1.524378 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.881956 -SourceRegion.volume = 0.787935 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.339417 -SourceRegion.volume = 1.797072 -test1.1 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.896578 -SourceRegion.volume = 1.419507 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.557852 -SourceRegion.volume = 0.906622 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.631587 -SourceRegion.volume = 1.480039 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.269211 -SourceRegion.volume = 0.558954 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.782424 -SourceRegion.volume = 1.567616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.750188 -SourceRegion.volume = 0.768847 -test1 -SourceRegion_add.volume = 1.080014 -SourceRegion.volume = 1.709872 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.519164 -SourceRegion.volume = 1.379156 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.220956 -SourceRegion.volume = 2.208565 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.909619 -SourceRegion.volume = 2.733483 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.540625 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 2.294458 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.836656 -SourceRegion.volume = 0.893997 -test1.1 -test1.2 -test1.3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.280781 -SourceRegion.volume = 0.943660 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.004846 -SourceRegion.volume = 1.531894 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.828686 -SourceRegion.volume = 1.301225 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.907528 -SourceRegion.volume = 1.152504 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.757757 -SourceRegion.volume = 1.380044 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.727226 -SourceRegion.volume = 1.530445 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.380022 -SourceRegion.volume = 1.142693 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.788527 -SourceRegion.volume = 2.235496 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.471022 -SourceRegion.volume = 0.840888 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.846062 -SourceRegion.volume = 0.742100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.965963 -SourceRegion.volume = 1.426438 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.642936 -SourceRegion.volume = 1.711290 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.187213 -SourceRegion.volume = 2.543121 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.038578 -SourceRegion.volume = 3.168872 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.825686 -SourceRegion.volume = 1.647890 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.894235 -SourceRegion.volume = 0.725927 -test1.1 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.506945 -SourceRegion.volume = 1.165159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.405907 -SourceRegion.volume = 1.214672 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.325425 -SourceRegion.volume = 1.046096 -test1 -SourceRegion_add.volume = 1.341732 -SourceRegion.volume = 2.331563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.316991 -SourceRegion.volume = 1.144088 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.364567 -SourceRegion.volume = 3.159752 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.608402 -SourceRegion.volume = 0.614676 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.640064 -SourceRegion.volume = 0.214856 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.283809 -SourceRegion.volume = 0.418959 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.772487 -SourceRegion.volume = 0.241992 -test1.1 -test1 -SourceRegion_add.volume = 0.936648 -SourceRegion.volume = 0.908285 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.655342 -SourceRegion.volume = 1.420175 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.547428 -SourceRegion.volume = 0.676490 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.386004 -SourceRegion.volume = 0.878388 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.692352 -SourceRegion.volume = 1.035926 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.767832 -SourceRegion.volume = 3.218396 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.594241 -SourceRegion.volume = 1.152647 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.435696 -SourceRegion.volume = 0.757564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.307486 -SourceRegion.volume = 1.598546 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.665405 -SourceRegion.volume = 2.013904 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.402636 -SourceRegion.volume = 0.650240 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.595475 -SourceRegion.volume = 0.670710 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 23 broadcasting 3586 source regions to other ranks. -Rank 24 broadcasting 172 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.564415 -SourceRegion.volume = 0.406093 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.414496 -SourceRegion.volume = 0.284896 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.082737 -SourceRegion.volume = 1.800092 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.430871 -SourceRegion.volume = 0.273289 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.580431 -SourceRegion.volume = 0.621595 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.394036 -SourceRegion.volume = 1.592767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 50.811575 -SourceRegion.volume = 109.362814 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.507151 -SourceRegion.volume = 0.280859 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 91.730111 -SourceRegion.volume = 16.923504 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 86.718867 -SourceRegion.volume = 57.754506 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.368479 -SourceRegion.volume = 0.901238 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.532247 -SourceRegion.volume = 0.275524 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.252021 -SourceRegion.volume = 0.854143 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.215351 -SourceRegion.volume = 1.516299 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 25 broadcasting 2279 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.312497 -SourceRegion.volume = 0.708737 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.081003 -SourceRegion.volume = 1.174680 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.107456 -SourceRegion.volume = 2.785577 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.271378 -SourceRegion.volume = 1.912818 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.160834 -SourceRegion.volume = 1.407592 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.115937 -SourceRegion.volume = 0.739753 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.792718 -SourceRegion.volume = 1.527573 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.303106 -SourceRegion.volume = 1.041314 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.260879 -SourceRegion.volume = 0.711981 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.689491 -SourceRegion.volume = 1.520978 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.798229 -SourceRegion.volume = 0.530638 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 2.642793 -SourceRegion.volume = 1.781386 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.563960 -SourceRegion.volume = 1.992860 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.601978 -SourceRegion.volume = 2.040006 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.457605 -SourceRegion.volume = 1.561938 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.615969 -SourceRegion.volume = 2.041384 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.442930 -SourceRegion.volume = 0.997155 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.351214 -SourceRegion.volume = 0.945480 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.681543 -SourceRegion.volume = 0.641422 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.134427 -SourceRegion.volume = 1.946250 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 2.300518 -SourceRegion.volume = 0.990959 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.747905 -SourceRegion.volume = 1.786974 -test1.1 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.819648 -SourceRegion.volume = 1.480659 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.878251 -SourceRegion.volume = 1.860400 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.137545 -SourceRegion.volume = 1.677171 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.126745 -SourceRegion.volume = 1.238882 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.252766 -SourceRegion.volume = 1.589986 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.612039 -SourceRegion.volume = 0.972745 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.476741 -SourceRegion.volume = 1.131815 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.274686 -SourceRegion.volume = 1.849765 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.005010 -SourceRegion.volume = 2.291357 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.705882 -SourceRegion.volume = 0.621137 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.062581 -SourceRegion.volume = 2.340977 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.927301 -SourceRegion.volume = 1.430997 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.364811 -SourceRegion.volume = 2.551901 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.044536 -SourceRegion.volume = 1.847840 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.266513 -SourceRegion.volume = 0.716108 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.365940 -SourceRegion.volume = 2.610623 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.690821 -SourceRegion.volume = 1.176015 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.046521 -SourceRegion.volume = 2.160917 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.389801 -SourceRegion.volume = 1.829262 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.778524 -SourceRegion.volume = 1.594148 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.530001 -SourceRegion.volume = 1.018850 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.206595 -SourceRegion.volume = 0.658336 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.199975 -SourceRegion.volume = 1.989437 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.437470 -SourceRegion.volume = 1.089476 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.546573 -SourceRegion.volume = 0.504256 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.434367 -SourceRegion.volume = 1.578626 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.040747 -SourceRegion.volume = 0.625584 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.614201 -SourceRegion.volume = 1.063963 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.548802 -SourceRegion.volume = 0.369567 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.773562 -SourceRegion.volume = 1.042218 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.257302 -SourceRegion.volume = 1.566995 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.615358 -SourceRegion.volume = 1.746654 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.632794 -SourceRegion.volume = 0.875064 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.445698 -SourceRegion.volume = 0.807852 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.141037 -SourceRegion.volume = 1.544076 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.240086 -SourceRegion.volume = 1.059315 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.152328 -SourceRegion.volume = 1.606324 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.329254 -SourceRegion.volume = 0.006160 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.683240 -SourceRegion.volume = 0.086272 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 26 broadcasting 4264 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.249881 -SourceRegion.volume = 0.745612 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.971922 -SourceRegion.volume = 0.025900 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.217222 -SourceRegion.volume = 0.811836 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.985298 -SourceRegion.volume = 0.059116 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.504341 -SourceRegion.volume = 0.409670 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.066816 -SourceRegion.volume = 0.982137 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.835134 -SourceRegion.volume = 0.458066 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.394327 -SourceRegion.volume = 0.144798 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.385702 -SourceRegion.volume = 0.448828 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.813748 -SourceRegion.volume = 1.353178 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.022846 -SourceRegion.volume = 1.368883 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.064559 -SourceRegion.volume = 1.160247 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.271819 -SourceRegion.volume = 0.443466 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.877417 -SourceRegion.volume = 0.755750 -test1.1 -test1 -SourceRegion_add.volume = 0.875896 -SourceRegion.volume = 0.760185 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.538757 -SourceRegion.volume = 0.925924 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.984219 -SourceRegion.volume = 0.948766 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.288181 -SourceRegion.volume = 0.368801 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.151101 -SourceRegion.volume = 0.676055 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.216572 -SourceRegion.volume = 1.015093 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.732623 -SourceRegion.volume = 0.053999 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.990927 -SourceRegion.volume = 1.415656 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 1.136261 -SourceRegion.volume = 0.495662 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.521561 -SourceRegion.volume = 0.377983 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.858028 -SourceRegion.volume = 0.992106 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.013956 -SourceRegion.volume = 1.336473 -test1.1 -test1.2 -test1.3 -test1.4 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.287377 -SourceRegion.volume = 1.160129 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.967360 -SourceRegion.volume = 0.208421 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.957011 -SourceRegion.volume = 0.606942 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.934370 -SourceRegion.volume = 0.336872 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.269831 -SourceRegion.volume = 0.574289 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.131728 -SourceRegion.volume = 0.461708 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.527956 -SourceRegion.volume = 0.550482 -test1.1 -test1 -SourceRegion_add.volume = 1.113379 -SourceRegion.volume = 1.633596 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.337711 -SourceRegion.volume = 0.577886 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.685791 -SourceRegion.volume = 1.095875 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.870328 -SourceRegion.volume = 0.408244 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.726952 -SourceRegion.volume = 0.250899 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.134451 -SourceRegion.volume = 1.147538 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.260960 -SourceRegion.volume = 0.132035 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.630395 -SourceRegion.volume = 1.042606 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.620040 -SourceRegion.volume = 1.181628 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.337986 -SourceRegion.volume = 2.033584 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.441449 -SourceRegion.volume = 1.145755 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.617744 -SourceRegion.volume = 0.290230 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.868793 -SourceRegion.volume = 0.881009 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.739736 -SourceRegion.volume = 0.383162 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.080963 -SourceRegion.volume = 1.426592 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.711999 -SourceRegion.volume = 0.041805 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.570034 -SourceRegion.volume = 0.158987 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.350103 -SourceRegion.volume = 0.643467 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.789343 -SourceRegion.volume = 1.142370 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.385214 -SourceRegion.volume = 1.630243 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.063794 -SourceRegion.volume = 0.607435 -test1.1 -test1 -SourceRegion_add.volume = 0.905322 -SourceRegion.volume = 1.129645 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.302156 -SourceRegion.volume = 0.609473 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.478527 -SourceRegion.volume = 0.329831 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.994231 -SourceRegion.volume = 0.695659 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.452673 -SourceRegion.volume = 0.884364 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.657149 -SourceRegion.volume = 0.572648 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.628762 -SourceRegion.volume = 0.200214 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.206227 -SourceRegion.volume = 0.885180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.762815 -SourceRegion.volume = 1.414607 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.526933 -SourceRegion.volume = 0.303611 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.392046 -SourceRegion.volume = 0.202816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.240067 -SourceRegion.volume = 0.809082 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.398704 -SourceRegion.volume = 0.295227 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.041909 -SourceRegion.volume = 0.324499 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.908254 -SourceRegion.volume = 1.211128 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.517716 -SourceRegion.volume = 1.186192 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 41.769972 -SourceRegion.volume = 133.772133 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.024102 -SourceRegion.volume = 2.067381 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.638395 -SourceRegion.volume = 0.948600 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.667185 -test1 -SourceRegion_add.volume = 0.983585 -SourceRegion.volume = 0.185602 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 65.291842 -SourceRegion.volume = 108.682747 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.623435 -SourceRegion.volume = 1.564767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.562784 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.122706 -SourceRegion.volume = 0.300541 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.258693 -SourceRegion.volume = 0.456446 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.559568 -SourceRegion.volume = 0.444439 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.540876 -SourceRegion.volume = 0.538739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.731386 -SourceRegion.volume = 0.307930 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.695846 -SourceRegion.volume = 0.233869 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 77.963191 -SourceRegion.volume = 10.538113 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.095332 -SourceRegion.volume = 0.326732 -test1.1 -test1 -SourceRegion_add.volume = 0.875553 -SourceRegion.volume = 0.454677 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.907943 -SourceRegion.volume = 0.326401 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.979093 -SourceRegion.volume = 0.948431 -test1.1 -test1.2 -test1.3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.072714 -SourceRegion.volume = 0.946183 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.238118 -SourceRegion.volume = 1.282608 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.368871 -SourceRegion.volume = 1.613790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.220762 -SourceRegion.volume = 0.632159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.537911 -SourceRegion.volume = 1.043057 -test1 -SourceRegion_add.volume = 0.426846 -SourceRegion.volume = 0.889949 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.068570 -SourceRegion.volume = 1.215127 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.550692 -SourceRegion.volume = 0.310362 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.671550 -SourceRegion.volume = 0.012693 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.277757 -SourceRegion.volume = 0.711746 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.266380 -SourceRegion.volume = 0.663856 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.540599 -SourceRegion.volume = 0.973634 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.079735 -SourceRegion.volume = 1.064832 -test1.1 -test1 -SourceRegion_add.volume = 0.449691 -SourceRegion.volume = 0.584769 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.197055 -SourceRegion.volume = 0.154391 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.839488 -SourceRegion.volume = 0.815331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.639115 -SourceRegion.volume = 0.088391 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.842375 -SourceRegion.volume = 0.673183 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.196119 -SourceRegion.volume = 1.053479 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.293669 -SourceRegion.volume = 1.411969 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.684187 -SourceRegion.volume = 0.235774 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.210562 -SourceRegion.volume = 0.236834 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.824237 -SourceRegion.volume = 0.748423 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.790337 -SourceRegion.volume = 0.589508 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.865321 -SourceRegion.volume = 0.245615 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 27 broadcasting 3750 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.645159 -SourceRegion.volume = 0.315248 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 28 broadcasting 47 source regions to other ranks. -test1 -SourceRegion_add.volume = 87.699759 -SourceRegion.volume = 79.301992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 59.892666 -SourceRegion.volume = 107.354261 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 46.122454 -SourceRegion.volume = 74.654336 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 35.775617 -SourceRegion.volume = 113.058239 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 51.078952 -SourceRegion.volume = 95.870934 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 69.338557 -SourceRegion.volume = 81.076761 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 108.622929 -SourceRegion.volume = 59.733924 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 76.377140 -SourceRegion.volume = 86.242413 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 144.917184 -SourceRegion.volume = 33.740092 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 107.418196 -SourceRegion.volume = 45.302723 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 107.410467 -SourceRegion.volume = 72.914618 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 132.978496 -SourceRegion.volume = 71.996377 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 29 broadcasting 2488 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.886630 -SourceRegion.volume = 0.807785 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.011160 -SourceRegion.volume = 1.912911 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.503912 -SourceRegion.volume = 1.906364 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.511963 -SourceRegion.volume = 0.908113 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.329866 -SourceRegion.volume = 0.107359 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.266749 -SourceRegion.volume = 3.433188 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.869928 -SourceRegion.volume = 1.954090 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.540567 -SourceRegion.volume = 0.466918 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.556746 -SourceRegion.volume = 1.911346 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.289727 -SourceRegion.volume = 3.049824 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.000016 -SourceRegion.volume = 2.242385 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.886756 -SourceRegion.volume = 0.609811 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.431073 -SourceRegion.volume = 2.004130 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.538949 -SourceRegion.volume = 2.009100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.572531 -SourceRegion.volume = 0.490613 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.655252 -SourceRegion.volume = 3.174631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.516781 -SourceRegion.volume = 1.298147 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.573532 -SourceRegion.volume = 1.585092 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.956719 -SourceRegion.volume = 0.052360 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.186986 -SourceRegion.volume = 2.390597 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.328550 -SourceRegion.volume = 1.214546 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.549178 -SourceRegion.volume = 0.921195 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.962594 -SourceRegion.volume = 2.317593 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.986370 -SourceRegion.volume = 4.098376 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.448593 -SourceRegion.volume = 2.413905 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.592076 -SourceRegion.volume = 1.950779 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.311663 -SourceRegion.volume = 0.861098 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.327591 -SourceRegion.volume = 1.597587 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.771913 -SourceRegion.volume = 2.007349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.771571 -SourceRegion.volume = 2.069630 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.427602 -SourceRegion.volume = 0.743715 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.807807 -SourceRegion.volume = 1.336406 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.748266 -SourceRegion.volume = 0.354362 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.398368 -SourceRegion.volume = 0.241726 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.532232 -SourceRegion.volume = 2.063658 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.148126 -SourceRegion.volume = 1.752781 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.180858 -SourceRegion.volume = 1.032677 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.063095 -SourceRegion.volume = 2.205502 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.505567 -SourceRegion.volume = 0.452530 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.874518 -SourceRegion.volume = 1.234769 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.343207 -SourceRegion.volume = 3.412004 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.790730 -SourceRegion.volume = 0.027747 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.006097 -SourceRegion.volume = 2.423956 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.663105 -SourceRegion.volume = 1.893104 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.551179 -SourceRegion.volume = 0.544330 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.975864 -SourceRegion.volume = 0.564898 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.130566 -SourceRegion.volume = 1.525838 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.516337 -SourceRegion.volume = 0.904218 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.409299 -SourceRegion.volume = 0.764048 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 30 broadcasting 4034 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.161342 -SourceRegion.volume = 0.265263 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.897268 -SourceRegion.volume = 0.633028 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.480051 -SourceRegion.volume = 0.695232 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.871432 -SourceRegion.volume = 0.692456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.365889 -SourceRegion.volume = 0.601878 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.379583 -SourceRegion.volume = 1.270221 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.963246 -SourceRegion.volume = 0.479591 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.216291 -SourceRegion.volume = 0.953264 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 13.926261 -SourceRegion.volume = 123.421024 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.327621 -SourceRegion.volume = 0.865233 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.302048 -SourceRegion.volume = 1.408422 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.131335 -SourceRegion.volume = 0.898081 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.758957 -SourceRegion.volume = 0.126854 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.596416 -SourceRegion.volume = 1.161726 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.152094 -SourceRegion.volume = 0.852210 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.441480 -SourceRegion.volume = 0.527041 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.572600 -SourceRegion.volume = 0.789268 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.467687 -SourceRegion.volume = 1.414981 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.327252 -SourceRegion.volume = 1.113529 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.823495 -SourceRegion.volume = 0.523212 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.233809 -SourceRegion.volume = 0.389473 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.598171 -SourceRegion.volume = 0.443616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.672014 -SourceRegion.volume = 1.143205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.241005 -SourceRegion.volume = 0.392520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.745308 -SourceRegion.volume = 0.606313 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.749774 -SourceRegion.volume = 0.603275 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.767458 -SourceRegion.volume = 0.570621 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.321093 -SourceRegion.volume = 0.246816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.395744 -SourceRegion.volume = 0.349790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.480746 -SourceRegion.volume = 0.325393 -test1 -SourceRegion_add.volume = 0.055138 -SourceRegion.volume = 1.250129 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.430889 -SourceRegion.volume = 0.543763 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.326435 -SourceRegion.volume = 0.824090 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.848493 -SourceRegion.volume = 0.006929 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.629959 -SourceRegion.volume = 0.050740 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.286066 -SourceRegion.volume = 0.467436 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.378549 -SourceRegion.volume = 0.579690 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.512071 -SourceRegion.volume = 1.753238 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 94.447067 -SourceRegion.volume = 87.853789 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 49.234710 -SourceRegion.volume = 54.288495 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.003293 -test1 -SourceRegion_add.volume = 1.622694 -SourceRegion.volume = 0.677117 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 148.935215 -SourceRegion.volume = 26.798709 -test1.1 -test1.2 -test1.3 -test1.4 -SourceRegion.volume = 1.843816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.740344 -SourceRegion.volume = 1.211955 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.610548 -SourceRegion.volume = 1.108793 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.544329 -SourceRegion.volume = 1.512792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.992314 -SourceRegion.volume = 0.696013 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.730380 -SourceRegion.volume = 0.338057 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 31 broadcasting 3788 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.487300 -SourceRegion.volume = 0.627462 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.274570 -SourceRegion.volume = 0.598720 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.667205 -SourceRegion.volume = 0.336471 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.335693 -SourceRegion.volume = 0.126870 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.031240 -SourceRegion.volume = 0.217662 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.224796 -SourceRegion.volume = 0.613478 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.566887 -SourceRegion.volume = 0.421250 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.549237 -SourceRegion.volume = 0.495185 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.238662 -SourceRegion.volume = 0.426815 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.019568 -SourceRegion.volume = 0.665849 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.406840 -SourceRegion.volume = 1.124704 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.043096 -SourceRegion.volume = 1.162175 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.238193 -SourceRegion.volume = 1.074760 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.141718 -SourceRegion.volume = 0.631789 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.844379 -SourceRegion.volume = 0.935167 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.092573 -SourceRegion.volume = 1.419892 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.075381 -SourceRegion.volume = 0.029478 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.477653 -SourceRegion.volume = 1.020184 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.855156 -SourceRegion.volume = 0.222952 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.145813 -SourceRegion.volume = 1.042925 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.562306 -SourceRegion.volume = 0.658814 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.250314 -SourceRegion.volume = 2.484805 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.487130 -SourceRegion.volume = 0.423348 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.314278 -SourceRegion.volume = 0.526495 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.988022 -SourceRegion.volume = 0.243630 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.389875 -SourceRegion.volume = 1.096589 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.488773 -SourceRegion.volume = 0.655965 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.387846 -SourceRegion.volume = 0.744898 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.354536 -SourceRegion.volume = 0.996531 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.936597 -SourceRegion.volume = 1.093366 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.660393 -SourceRegion.volume = 0.915948 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.346442 -SourceRegion.volume = 0.261514 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.549866 -SourceRegion.volume = 1.115868 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.758633 -SourceRegion.volume = 0.311614 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.788334 -SourceRegion.volume = 0.271777 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.850466 -SourceRegion.volume = 0.774162 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 32 broadcasting 3838 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.705391 -SourceRegion.volume = 0.397928 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.851932 -SourceRegion.volume = 0.330415 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.526298 -SourceRegion.volume = 1.328742 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.326664 -SourceRegion.volume = 0.727217 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.566713 -SourceRegion.volume = 0.659563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.115481 -SourceRegion.volume = 0.737007 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.301330 -SourceRegion.volume = 0.933740 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.681813 -SourceRegion.volume = 0.601023 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.753510 -SourceRegion.volume = 0.712734 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.366247 -SourceRegion.volume = 0.500829 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.927813 -SourceRegion.volume = 0.159481 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.788184 -SourceRegion.volume = 0.751646 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.690835 -SourceRegion.volume = 0.608849 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.062055 -SourceRegion.volume = 1.171833 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.195933 -SourceRegion.volume = 0.405609 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.018303 -SourceRegion.volume = 0.431764 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.386870 -SourceRegion.volume = 1.399562 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.675042 -SourceRegion.volume = 1.069288 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.436881 -SourceRegion.volume = 0.106328 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.345433 -SourceRegion.volume = 0.547505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.075669 -SourceRegion.volume = 1.570024 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.992287 -SourceRegion.volume = 0.014211 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.066385 -SourceRegion.volume = 1.156594 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.402063 -SourceRegion.volume = 0.550728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.962332 -SourceRegion.volume = 0.840860 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.688782 -SourceRegion.volume = 1.221942 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.397971 -SourceRegion.volume = 0.772036 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.416744 -SourceRegion.volume = 1.052217 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.874824 -SourceRegion.volume = 0.801818 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.715788 -SourceRegion.volume = 0.832854 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.024816 -SourceRegion.volume = 0.419967 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.017327 -SourceRegion.volume = 0.320776 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.716294 -SourceRegion.volume = 0.674926 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.839809 -SourceRegion.volume = 0.168407 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.412734 -SourceRegion.volume = 0.156367 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.483864 -SourceRegion.volume = 0.409318 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.222708 -SourceRegion.volume = 0.462549 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.801496 -SourceRegion.volume = 0.623612 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.053859 -SourceRegion.volume = 0.408975 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.269974 -SourceRegion.volume = 0.726500 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.227764 -SourceRegion.volume = 0.654551 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.119940 -SourceRegion.volume = 0.602058 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.382211 -SourceRegion.volume = 0.282934 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.308095 -SourceRegion.volume = 1.634893 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.785974 -SourceRegion.volume = 0.214459 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.221202 -SourceRegion.volume = 0.503046 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.545725 -SourceRegion.volume = 0.704103 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.780339 -SourceRegion.volume = 1.440671 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.982174 -SourceRegion.volume = 0.375436 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.815126 -SourceRegion.volume = 0.665862 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.676942 -SourceRegion.volume = 0.787251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.576844 -SourceRegion.volume = 1.030678 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.147741 -SourceRegion.volume = 0.872310 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.486190 -SourceRegion.volume = 0.294181 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.240559 -test1 -SourceRegion_add.volume = 0.576038 -SourceRegion.volume = 0.773652 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.308600 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.687019 -SourceRegion.volume = 1.030584 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.706583 -SourceRegion.volume = 0.121810 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.429455 -SourceRegion.volume = 0.242829 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 2.045294 -SourceRegion.volume = 0.007180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.923190 -SourceRegion.volume = 0.963813 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.450329 -SourceRegion.volume = 0.654910 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.936608 -SourceRegion.volume = 0.676506 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.209583 -SourceRegion.volume = 0.847524 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.102127 -SourceRegion.volume = 1.272362 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.613573 -SourceRegion.volume = 0.218078 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.059685 -SourceRegion.volume = 0.960407 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.186375 -SourceRegion.volume = 0.617094 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.501231 -SourceRegion.volume = 0.963906 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.386959 -SourceRegion.volume = 2.260595 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.515033 -SourceRegion.volume = 0.093577 -test1.1 -test1 -SourceRegion_add.volume = 0.646756 -SourceRegion.volume = 0.726082 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.035678 -SourceRegion.volume = 0.577412 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.778318 -SourceRegion.volume = 0.119364 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.150922 -SourceRegion.volume = 0.436429 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.479798 -SourceRegion.volume = 0.556684 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.864103 -SourceRegion.volume = 0.094990 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.051248 -SourceRegion.volume = 0.375460 -test1.1 -test1.2 -test1.3 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.917660 -SourceRegion.volume = 0.636741 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.320658 -SourceRegion.volume = 0.197865 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.899893 -SourceRegion.volume = 0.951946 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.232553 -SourceRegion.volume = 0.664402 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.425371 -SourceRegion.volume = 0.412124 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.581837 -SourceRegion.volume = 0.153877 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.674304 -SourceRegion.volume = 0.601298 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.430711 -SourceRegion.volume = 1.214728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.484759 -SourceRegion.volume = 1.078060 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.104928 -SourceRegion.volume = 1.418947 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.945110 -SourceRegion.volume = 0.841756 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.319580 -SourceRegion.volume = 0.789834 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.475846 -SourceRegion.volume = 0.824961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.110763 -SourceRegion.volume = 0.574086 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.882109 -SourceRegion.volume = 0.371043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.717195 -SourceRegion.volume = 1.030100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.454419 -SourceRegion.volume = 0.596962 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.665937 -SourceRegion.volume = 0.086706 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.773294 -SourceRegion.volume = 0.663533 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.521523 -SourceRegion.volume = 0.682009 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.405043 -SourceRegion.volume = 0.978659 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.573385 -SourceRegion.volume = 1.616204 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.256496 -SourceRegion.volume = 0.848086 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.280845 -SourceRegion.volume = 1.591671 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.286676 -SourceRegion.volume = 1.171422 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.146549 -SourceRegion.volume = 0.001104 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.726871 -SourceRegion.volume = 0.199897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.812541 -SourceRegion.volume = 1.269177 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.487739 -SourceRegion.volume = 0.625100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.330832 -SourceRegion.volume = 0.576473 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.653470 -SourceRegion.volume = 0.940365 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.057536 -SourceRegion.volume = 0.159800 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.892514 -SourceRegion.volume = 0.931372 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.386106 -SourceRegion.volume = 0.249101 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.659732 -SourceRegion.volume = 0.202909 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 33 broadcasting 255 source regions to other ranks. -test1 -SourceRegion_add.volume = 62.621104 -SourceRegion.volume = 133.177226 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.553277 -SourceRegion.volume = 0.610086 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 38.859038 -SourceRegion.volume = 140.261775 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.161795 -SourceRegion.volume = 0.861125 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 100.350001 -SourceRegion.volume = 56.380476 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 98.469974 -SourceRegion.volume = 60.482859 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.333631 -SourceRegion.volume = 0.545381 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.558809 -SourceRegion.volume = 0.476748 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.013375 -SourceRegion.volume = 1.566885 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.285847 -SourceRegion.volume = 1.197653 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 58.424045 -SourceRegion.volume = 89.425163 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 40.853966 -SourceRegion.volume = 108.653615 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.280306 -SourceRegion.volume = 1.560192 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.861479 -SourceRegion.volume = 0.283792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.901654 -SourceRegion.volume = 0.932498 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 73.162435 -SourceRegion.volume = 88.171707 -test1.1 -test1 -SourceRegion_add.volume = 73.458751 -SourceRegion.volume = 75.361517 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 81.738115 -SourceRegion.volume = 85.999247 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 67.997313 -SourceRegion.volume = 74.696510 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 71.079393 -SourceRegion.volume = 95.926430 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.087394 -SourceRegion.volume = 0.427141 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 93.710211 -SourceRegion.volume = 36.234375 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.837997 -SourceRegion.volume = 1.149523 -test1.1 -test1.2 -test1.3 -Rank 34 broadcasting 68 source regions to other ranks. -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 29.822182 -SourceRegion.volume = 110.138475 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 67.404992 -SourceRegion.volume = 41.787988 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 17.235927 -SourceRegion.volume = 31.728022 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 44.123189 -SourceRegion.volume = 42.337086 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.336898 -SourceRegion.volume = 0.118298 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 87.416470 -SourceRegion.volume = 75.179070 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 75.416711 -SourceRegion.volume = 79.641031 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.319603 -SourceRegion.volume = 1.617384 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 67.582836 -SourceRegion.volume = 79.264074 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 74.282313 -SourceRegion.volume = 62.304275 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 35 broadcasting 141 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.201528 -SourceRegion.volume = 1.702022 -test1 -SourceRegion_add.volume = 79.110405 -SourceRegion.volume = 52.797513 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.869679 -SourceRegion.volume = 0.126633 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.746101 -SourceRegion.volume = 0.256961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 48.655562 -SourceRegion.volume = 109.650527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.650963 -SourceRegion.volume = 0.906422 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.090474 -SourceRegion.volume = 1.474305 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.665027 -SourceRegion.volume = 0.297382 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.655274 -SourceRegion.volume = 0.644062 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 90.480621 -SourceRegion.volume = 63.743123 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 82.406993 -SourceRegion.volume = 64.144581 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 88.465091 -SourceRegion.volume = 77.081633 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 39.334339 -SourceRegion.volume = 88.501304 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.194539 -SourceRegion.volume = 0.093703 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.940893 -SourceRegion.volume = 1.016499 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.645016 -SourceRegion.volume = 0.667882 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.655311 -SourceRegion.volume = 1.578391 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.722805 -SourceRegion.volume = 0.556734 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 81.606401 -SourceRegion.volume = 64.303253 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -Rank 36 broadcasting 2138 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.778486 -SourceRegion.volume = 0.326874 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.846153 -SourceRegion.volume = 0.665659 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 2.062675 -SourceRegion.volume = 3.557564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 1.841368 -SourceRegion.volume = 1.704141 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.982023 -SourceRegion.volume = 1.081234 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.319993 -SourceRegion.volume = 1.425616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.049592 -SourceRegion.volume = 0.610852 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.829832 -SourceRegion.volume = 1.290373 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.583022 -SourceRegion.volume = 1.121877 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.133042 -SourceRegion.volume = 0.905390 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 1.804002 -SourceRegion.volume = 1.228365 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.988446 -SourceRegion.volume = 1.017616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 1.875542 -SourceRegion.volume = 1.309274 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.152720 -SourceRegion.volume = 1.153234 -test1 -SourceRegion_add.volume = 1.220384 -SourceRegion.volume = 0.942798 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.266977 -SourceRegion.volume = 1.055811 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.847706 -SourceRegion.volume = 1.472310 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.400968 -SourceRegion.volume = 0.302882 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.138677 -SourceRegion.volume = 2.577821 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.496598 -SourceRegion.volume = 0.602203 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.344172 -SourceRegion.volume = 2.181505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.899201 -SourceRegion.volume = 2.991399 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.714142 -SourceRegion.volume = 1.926530 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.025930 -SourceRegion.volume = 0.030813 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.111201 -SourceRegion.volume = 0.874767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.368414 -SourceRegion.volume = 0.179136 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.088674 -SourceRegion.volume = 3.336089 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.989780 -SourceRegion.volume = 2.948465 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.204912 -SourceRegion.volume = 1.157373 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.107667 -SourceRegion.volume = 0.496004 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.574539 -SourceRegion.volume = 1.848445 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.583502 -SourceRegion.volume = 1.095056 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.490236 -SourceRegion.volume = 0.734602 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.946927 -SourceRegion.volume = 1.740942 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.504874 -SourceRegion.volume = 1.283686 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.950596 -SourceRegion.volume = 0.164855 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 2.294185 -SourceRegion.volume = 1.101953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.304344 -SourceRegion.volume = 1.775755 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.208117 -SourceRegion.volume = 0.792816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.489274 -SourceRegion.volume = 0.634533 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.251385 -SourceRegion.volume = 0.223882 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.056108 -SourceRegion.volume = 0.277869 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.899995 -SourceRegion.volume = 0.942983 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.969727 -SourceRegion.volume = 0.060988 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 1.352123 -SourceRegion.volume = 0.252560 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.606588 -SourceRegion.volume = 0.071085 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.153807 -SourceRegion.volume = 0.535230 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.480852 -SourceRegion.volume = 3.161582 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.184654 -SourceRegion.volume = 0.807615 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.093363 -SourceRegion.volume = 0.935949 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.731554 -SourceRegion.volume = 0.392313 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.224606 -SourceRegion.volume = 0.704112 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.236746 -SourceRegion.volume = 0.934317 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.680840 -SourceRegion.volume = 0.421296 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.981544 -SourceRegion.volume = 2.574198 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.546479 -SourceRegion.volume = 1.342827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.589199 -SourceRegion.volume = 0.501177 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.310946 -SourceRegion.volume = 1.088732 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.781457 -SourceRegion.volume = 0.392461 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.257199 -SourceRegion.volume = 2.186260 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.675691 -SourceRegion.volume = 1.404632 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.414062 -SourceRegion.volume = 0.764222 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.135184 -SourceRegion.volume = 1.021330 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.745058 -SourceRegion.volume = 1.962264 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.302402 -SourceRegion.volume = 1.437893 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.379613 -SourceRegion.volume = 0.694393 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.301130 -SourceRegion.volume = 0.454220 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.261154 -SourceRegion.volume = 0.028024 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.106285 -SourceRegion.volume = 1.941397 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.073694 -SourceRegion.volume = 2.584326 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.720763 -SourceRegion.volume = 0.083754 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.870039 -SourceRegion.volume = 0.074314 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.296708 -SourceRegion.volume = 2.863717 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.715717 -SourceRegion.volume = 0.731533 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.610928 -SourceRegion.volume = 0.984785 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.162298 -SourceRegion.volume = 1.031251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.826352 -SourceRegion.volume = 0.305960 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.233341 -SourceRegion.volume = 1.731523 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.925668 -SourceRegion.volume = 1.280604 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.597273 -SourceRegion.volume = 1.208761 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.613739 -SourceRegion.volume = 1.744019 -test1.1 -test1 -SourceRegion_add.volume = 0.765345 -SourceRegion.volume = 0.877934 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.134258 -SourceRegion.volume = 0.318819 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.874372 -SourceRegion.volume = 1.239075 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.500925 -SourceRegion.volume = 1.298889 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.576380 -SourceRegion.volume = 0.795676 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.954764 -SourceRegion.volume = 1.851506 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.527924 -SourceRegion.volume = 1.960597 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.860218 -SourceRegion.volume = 0.080184 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.559978 -SourceRegion.volume = 3.041992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.319071 -SourceRegion.volume = 0.870153 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.443463 -SourceRegion.volume = 1.662372 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.702909 -SourceRegion.volume = 0.897464 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.144232 -SourceRegion.volume = 1.264466 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.884441 -SourceRegion.volume = 1.488045 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.736839 -SourceRegion.volume = 1.772565 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 1.140717 -SourceRegion.volume = 1.356490 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.758089 -SourceRegion.volume = 2.283273 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.136048 -SourceRegion.volume = 0.792294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.817948 -SourceRegion.volume = 1.205443 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.847543 -SourceRegion.volume = 0.448373 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.160775 -SourceRegion.volume = 1.916012 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.065676 -SourceRegion.volume = 0.093836 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.290053 -SourceRegion.volume = 2.291185 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.973864 -SourceRegion.volume = 0.308034 -test1.1 -test1 -SourceRegion_add.volume = 0.598887 -SourceRegion.volume = 1.748468 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.379624 -SourceRegion.volume = 2.747321 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.964142 -SourceRegion.volume = 0.453301 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.342040 -SourceRegion.volume = 0.593116 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.610015 -SourceRegion.volume = 2.029963 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.428820 -SourceRegion.volume = 1.899121 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.227455 -SourceRegion.volume = 1.484496 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.962792 -SourceRegion.volume = 1.714533 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.146265 -SourceRegion.volume = 1.351944 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.389256 -SourceRegion.volume = 0.685176 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.900533 -SourceRegion.volume = 0.625799 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.525540 -SourceRegion.volume = 1.621904 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.046910 -SourceRegion.volume = 2.226817 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.914306 -SourceRegion.volume = 2.452610 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.531176 -SourceRegion.volume = 0.155580 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.009106 -SourceRegion.volume = 0.826616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.161700 -SourceRegion.volume = 1.074541 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.599319 -SourceRegion.volume = 1.101239 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.702363 -SourceRegion.volume = 0.614639 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 1.894016 -SourceRegion.volume = 2.215936 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -Rank 37 broadcasting 3538 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.195996 -SourceRegion.volume = 0.669748 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.357002 -SourceRegion.volume = 0.915428 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.982683 -SourceRegion.volume = 1.006926 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.895176 -SourceRegion.volume = 1.019180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.146936 -SourceRegion.volume = 0.708404 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.254834 -SourceRegion.volume = 0.771812 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.081605 -SourceRegion.volume = 1.003842 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.685303 -SourceRegion.volume = 0.799729 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.780191 -SourceRegion.volume = 0.350151 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.723004 -SourceRegion.volume = 0.437407 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.098555 -SourceRegion.volume = 1.617789 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.277538 -SourceRegion.volume = 1.330902 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.960640 -SourceRegion.volume = 0.686280 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.916127 -SourceRegion.volume = 0.433870 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.512210 -SourceRegion.volume = 0.446775 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.921025 -SourceRegion.volume = 0.143083 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.257019 -SourceRegion.volume = 0.609745 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 65.107662 -SourceRegion.volume = 78.282290 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.888468 -SourceRegion.volume = 0.522588 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.882005 -SourceRegion.volume = 0.307008 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.870941 -SourceRegion.volume = 0.577544 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.285834 -SourceRegion.volume = 0.351790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.981152 -SourceRegion.volume = 1.255256 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.003478 -SourceRegion.volume = 0.943809 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.859219 -SourceRegion.volume = 0.513886 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.673990 -SourceRegion.volume = 0.002202 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.205048 -SourceRegion.volume = 0.870991 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 71.238580 -SourceRegion.volume = 48.963949 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 32.193908 -SourceRegion.volume = 86.460275 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 76.328195 -SourceRegion.volume = 59.642734 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.393423 -SourceRegion.volume = 0.912014 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.022639 -SourceRegion.volume = 1.750236 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.821166 -SourceRegion.volume = 1.753691 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 66.357902 -SourceRegion.volume = 77.868307 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.376656 -SourceRegion.volume = 0.787342 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.197134 -SourceRegion.volume = 0.129126 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.668229 -SourceRegion.volume = 0.717674 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 53.487335 -SourceRegion.volume = 70.677468 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.388180 -SourceRegion.volume = 2.154184 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.271617 -SourceRegion.volume = 1.614704 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.335642 -SourceRegion.volume = 0.259666 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.801468 -SourceRegion.volume = 0.164265 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.174600 -SourceRegion.volume = 1.511516 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.403091 -SourceRegion.volume = 0.718221 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.666438 -SourceRegion.volume = 0.518114 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.395545 -SourceRegion.volume = 0.582535 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.710958 -SourceRegion.volume = 0.761120 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.571628 -SourceRegion.volume = 0.683833 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.714683 -SourceRegion.volume = 0.891941 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.525563 -SourceRegion.volume = 0.348591 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.778586 -SourceRegion.volume = 0.722650 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.282796 -SourceRegion.volume = 0.563003 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.338779 -SourceRegion.volume = 1.182764 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.615873 -SourceRegion.volume = 0.313817 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.286434 -SourceRegion.volume = 0.613220 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.306536 -SourceRegion.volume = 0.475899 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.512555 -SourceRegion.volume = 1.402871 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.999422 -SourceRegion.volume = 0.209541 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.149592 -SourceRegion.volume = 0.090102 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.381661 -SourceRegion.volume = 0.640880 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.671267 -SourceRegion.volume = 1.197351 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.749275 -SourceRegion.volume = 0.724456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.291011 -SourceRegion.volume = 0.588065 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.634794 -SourceRegion.volume = 0.408091 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.082972 -SourceRegion.volume = 1.229197 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.270473 -SourceRegion.volume = 0.037998 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.774596 -SourceRegion.volume = 0.357393 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.619209 -SourceRegion.volume = 0.165810 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.140161 -SourceRegion.volume = 0.864801 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.955211 -SourceRegion.volume = 1.350659 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.674973 -SourceRegion.volume = 0.921703 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.367661 -SourceRegion.volume = 0.151197 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.840944 -SourceRegion.volume = 0.565404 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.266153 -SourceRegion.volume = 0.835601 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.252693 -SourceRegion.volume = 0.102087 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.009077 -SourceRegion.volume = 0.936830 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.769891 -SourceRegion.volume = 0.289061 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.529387 -SourceRegion.volume = 1.278061 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.316773 -SourceRegion.volume = 0.933471 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.362584 -SourceRegion.volume = 0.166152 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.932964 -SourceRegion.volume = 0.533846 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.930484 -SourceRegion.volume = 0.829475 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.649284 -SourceRegion.volume = 0.961346 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.790063 -SourceRegion.volume = 0.620953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.344753 -SourceRegion.volume = 1.084954 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.505688 -SourceRegion.volume = 1.005759 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.236460 -SourceRegion.volume = 1.283209 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.939798 -SourceRegion.volume = 0.020392 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 38 broadcasting 2274 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.547122 -SourceRegion.volume = 1.423544 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.182374 -SourceRegion.volume = 2.025695 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.444162 -SourceRegion.volume = 2.117419 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.585943 -SourceRegion.volume = 0.818204 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.717332 -SourceRegion.volume = 0.501102 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.633337 -SourceRegion.volume = 1.585360 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.455125 -SourceRegion.volume = 1.245026 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.184197 -SourceRegion.volume = 0.484134 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.875850 -SourceRegion.volume = 1.281134 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.451911 -SourceRegion.volume = 1.038960 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.078918 -SourceRegion.volume = 1.520022 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.714125 -SourceRegion.volume = 0.468377 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.290546 -SourceRegion.volume = 1.035941 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.385784 -SourceRegion.volume = 1.836128 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.917770 -SourceRegion.volume = 1.873182 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.880120 -SourceRegion.volume = 3.110882 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.166686 -SourceRegion.volume = 0.346240 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.819340 -SourceRegion.volume = 1.328308 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.149448 -SourceRegion.volume = 1.222648 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.107900 -SourceRegion.volume = 1.674696 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.140755 -SourceRegion.volume = 1.501387 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.356443 -SourceRegion.volume = 2.173266 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.742897 -SourceRegion.volume = 0.992346 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.062729 -SourceRegion.volume = 1.688120 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.695836 -SourceRegion.volume = 0.842623 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.145326 -SourceRegion.volume = 1.776076 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.720851 -SourceRegion.volume = 0.907437 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.195046 -SourceRegion.volume = 1.259826 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.939344 -SourceRegion.volume = 0.609847 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.025871 -SourceRegion.volume = 1.587519 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.160704 -SourceRegion.volume = 2.023090 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.136459 -SourceRegion.volume = 0.239906 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.440017 -SourceRegion.volume = 1.723794 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.896315 -SourceRegion.volume = 0.521919 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.375866 -SourceRegion.volume = 1.448523 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.300851 -SourceRegion.volume = 1.996678 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.662534 -SourceRegion.volume = 1.224055 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.761456 -SourceRegion.volume = 1.033317 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.499721 -SourceRegion.volume = 1.120326 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.908162 -SourceRegion.volume = 3.226731 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.513692 -SourceRegion.volume = 0.044788 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.038913 -SourceRegion.volume = 1.942027 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.135565 -SourceRegion.volume = 1.428247 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.982422 -SourceRegion.volume = 1.361767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.557181 -SourceRegion.volume = 1.005402 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.146407 -SourceRegion.volume = 0.550157 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.222672 -SourceRegion.volume = 1.853564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.756824 -SourceRegion.volume = 1.085258 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.106957 -SourceRegion.volume = 0.747731 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.127164 -SourceRegion.volume = 0.379901 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.013219 -SourceRegion.volume = 1.874407 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.995299 -SourceRegion.volume = 1.409335 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.741296 -SourceRegion.volume = 1.204691 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.006259 -SourceRegion.volume = 1.468302 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.421174 -SourceRegion.volume = 0.416073 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.585741 -SourceRegion.volume = 1.046161 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.879900 -SourceRegion.volume = 1.999356 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.944068 -SourceRegion.volume = 0.698328 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.217989 -SourceRegion.volume = 1.455251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.230004 -SourceRegion.volume = 3.950735 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.606127 -SourceRegion.volume = 2.859698 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.578969 -SourceRegion.volume = 2.657603 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.823803 -SourceRegion.volume = 1.732023 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.780434 -SourceRegion.volume = 2.266334 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.426930 -SourceRegion.volume = 0.946926 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.472090 -SourceRegion.volume = 1.002189 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.777324 -SourceRegion.volume = 0.586301 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.186054 -SourceRegion.volume = 0.409858 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.328497 -SourceRegion.volume = 2.803815 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.072634 -SourceRegion.volume = 1.084481 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.299325 -SourceRegion.volume = 1.882760 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.484112 -SourceRegion.volume = 1.820764 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.746557 -SourceRegion.volume = 2.446129 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.242656 -SourceRegion.volume = 1.133305 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.308718 -SourceRegion.volume = 1.397946 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.515549 -SourceRegion.volume = 0.974897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.239966 -SourceRegion.volume = 1.749340 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.897168 -SourceRegion.volume = 0.045643 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.151620 -SourceRegion.volume = 1.214726 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.642441 -SourceRegion.volume = 1.032958 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.715802 -SourceRegion.volume = 0.098804 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.155921 -SourceRegion.volume = 2.110967 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.710234 -SourceRegion.volume = 1.450836 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.429318 -SourceRegion.volume = 1.418976 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.404122 -SourceRegion.volume = 1.984337 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.603331 -SourceRegion.volume = 1.635066 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.879795 -SourceRegion.volume = 1.120431 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.009231 -SourceRegion.volume = 0.633639 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.508241 -SourceRegion.volume = 2.192562 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.581646 -SourceRegion.volume = 0.167475 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.015055 -SourceRegion.volume = 3.100728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.666619 -SourceRegion.volume = 0.849933 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.291454 -SourceRegion.volume = 0.933739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.645059 -SourceRegion.volume = 0.531673 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.055683 -SourceRegion.volume = 0.758193 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.720847 -SourceRegion.volume = 0.491673 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.254175 -SourceRegion.volume = 0.561774 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.835129 -SourceRegion.volume = 0.373605 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.550994 -SourceRegion.volume = 1.428949 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.480476 -SourceRegion.volume = 2.065285 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.812420 -SourceRegion.volume = 2.003167 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.185895 -SourceRegion.volume = 0.531374 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.474493 -SourceRegion.volume = 1.258926 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.685047 -SourceRegion.volume = 0.664029 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.976989 -SourceRegion.volume = 2.531060 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.625638 -SourceRegion.volume = 1.587177 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.221622 -SourceRegion.volume = 0.672750 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.313967 -SourceRegion.volume = 1.971974 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.887650 -SourceRegion.volume = 1.995790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.003279 -SourceRegion.volume = 1.028650 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 39 broadcasting 2252 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.257579 -SourceRegion.volume = 1.255246 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.076993 -SourceRegion.volume = 1.012765 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.308845 -SourceRegion.volume = 0.917471 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.725560 -SourceRegion.volume = 0.550793 -test1 -SourceRegion_add.volume = 1.652021 -SourceRegion.volume = 0.900266 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.416483 -SourceRegion.volume = 1.899189 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.411063 -SourceRegion.volume = 2.189555 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.311093 -SourceRegion.volume = 1.132957 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.697497 -SourceRegion.volume = 2.949162 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.558918 -SourceRegion.volume = 0.907935 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.679048 -SourceRegion.volume = 0.564069 -test1.1 -test1 -SourceRegion_add.volume = 0.222380 -SourceRegion.volume = 1.414267 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.659789 -SourceRegion.volume = 1.742942 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.886537 -SourceRegion.volume = 1.882153 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 1.059278 -SourceRegion.volume = 1.825845 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.503857 -SourceRegion.volume = 2.873554 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.003149 -SourceRegion.volume = 0.205010 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.049197 -SourceRegion.volume = 2.645294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.033685 -SourceRegion.volume = 2.171206 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.985707 -SourceRegion.volume = 0.928463 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.815956 -SourceRegion.volume = 0.670193 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.289863 -SourceRegion.volume = 1.106114 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.629155 -SourceRegion.volume = 1.429906 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.957153 -SourceRegion.volume = 1.684807 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.563381 -SourceRegion.volume = 1.459513 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.989927 -SourceRegion.volume = 2.340497 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.451481 -SourceRegion.volume = 1.730949 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.280613 -SourceRegion.volume = 0.957234 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.668796 -SourceRegion.volume = 1.361316 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.493685 -SourceRegion.volume = 0.424922 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.905965 -SourceRegion.volume = 0.840685 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 1.006084 -SourceRegion.volume = 0.347149 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.270230 -SourceRegion.volume = 2.320259 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.971981 -SourceRegion.volume = 2.645875 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 1.136060 -SourceRegion.volume = 1.865913 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.740312 -SourceRegion.volume = 4.191855 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.033587 -SourceRegion.volume = 1.884509 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.409410 -SourceRegion.volume = 0.532043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.189156 -SourceRegion.volume = 1.256685 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.610653 -SourceRegion.volume = 3.790711 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.280861 -SourceRegion.volume = 1.298196 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.805120 -SourceRegion.volume = 2.938541 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.708654 -SourceRegion.volume = 1.095944 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.239990 -SourceRegion.volume = 1.222854 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.359610 -SourceRegion.volume = 0.847540 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.371183 -SourceRegion.volume = 0.137000 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.271823 -SourceRegion.volume = 1.326715 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.143231 -SourceRegion.volume = 2.328572 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.858693 -SourceRegion.volume = 0.025870 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.654883 -SourceRegion.volume = 1.800997 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.218002 -SourceRegion.volume = 2.696253 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.663412 -SourceRegion.volume = 0.599720 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.193982 -SourceRegion.volume = 2.878792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.057799 -SourceRegion.volume = 0.486564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.223578 -test1 -SourceRegion_add.volume = 2.412336 -SourceRegion.volume = 2.007162 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.444019 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.214619 -SourceRegion.volume = 1.973334 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.238917 -SourceRegion.volume = 1.087428 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.431894 -SourceRegion.volume = 4.479008 -test1.1 -test1 -SourceRegion_add.volume = 1.181105 -SourceRegion.volume = 1.159653 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.946168 -SourceRegion.volume = 1.524480 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.099904 -SourceRegion.volume = 1.931572 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.166935 -SourceRegion.volume = 1.037014 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.185855 -SourceRegion.volume = 2.000335 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.204524 -SourceRegion.volume = 1.103859 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.759710 -SourceRegion.volume = 0.941906 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.464475 -SourceRegion.volume = 0.778506 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 3.903376 -SourceRegion.volume = 0.253961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.732979 -SourceRegion.volume = 1.102697 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion_add.volume = 1.050974 -SourceRegion.volume = 1.894862 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.030535 -SourceRegion.volume = 2.006719 -test1 -SourceRegion_add.volume = 0.549127 -SourceRegion.volume = 4.503400 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.619943 -SourceRegion.volume = 1.366236 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 1.841721 -SourceRegion.volume = 1.000504 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.201410 -SourceRegion.volume = 2.517433 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.593644 -SourceRegion.volume = 1.138393 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 2.056816 -SourceRegion.volume = 1.516495 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.806016 -SourceRegion.volume = 2.090258 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.515742 -SourceRegion.volume = 1.273324 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.704432 -SourceRegion.volume = 2.606153 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.098297 -SourceRegion.volume = 0.879227 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.976535 -SourceRegion.volume = 0.880363 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.376641 -SourceRegion.volume = 2.602399 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.836887 -SourceRegion.volume = 0.260231 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.468381 -SourceRegion.volume = 1.600977 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.570618 -SourceRegion.volume = 0.071235 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.739865 -SourceRegion.volume = 0.926403 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.163089 -SourceRegion.volume = 1.267804 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.815914 -SourceRegion.volume = 2.320664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.844541 -SourceRegion.volume = 3.649084 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.444131 -SourceRegion.volume = 2.298316 -test1 -SourceRegion_add.volume = 0.518407 -SourceRegion.volume = 1.161037 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.076585 -SourceRegion.volume = 1.237117 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.058781 -SourceRegion.volume = 1.258262 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.356804 -SourceRegion.volume = 1.337135 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.586809 -SourceRegion.volume = 1.398557 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.412792 -SourceRegion.volume = 0.922180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.274662 -SourceRegion.volume = 3.002995 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 2.388781 -SourceRegion.volume = 1.565180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.198988 -SourceRegion.volume = 1.592268 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.656645 -SourceRegion.volume = 1.267604 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.527482 -SourceRegion.volume = 1.895794 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.183646 -SourceRegion.volume = 3.260982 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.141292 -SourceRegion.volume = 1.245202 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.454089 -SourceRegion.volume = 0.623564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.050783 -SourceRegion.volume = 0.780036 -test1.1 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.440964 -SourceRegion.volume = 1.681810 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.465334 -SourceRegion.volume = 0.658363 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.356113 -SourceRegion.volume = 1.891922 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.049626 -SourceRegion.volume = 0.745660 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.241429 -SourceRegion.volume = 1.122042 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.170404 -SourceRegion.volume = 1.801350 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.508742 -SourceRegion.volume = 0.430839 -test1 -SourceRegion_add.volume = 0.696019 -SourceRegion.volume = 1.408792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.944869 -SourceRegion.volume = 2.562324 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.547187 -SourceRegion.volume = 0.815963 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.607451 -SourceRegion.volume = 1.524227 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.055307 -SourceRegion.volume = 0.926112 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.725396 -SourceRegion.volume = 2.871167 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.787667 -SourceRegion.volume = 1.747248 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.712337 -SourceRegion.volume = 1.519347 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.184800 -SourceRegion.volume = 2.057328 -test1 -SourceRegion_add.volume = 4.649237 -SourceRegion.volume = 0.138868 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.749056 -SourceRegion.volume = 0.956602 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.007769 -SourceRegion.volume = 2.298798 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.143584 -SourceRegion.volume = 1.694812 -test1.1 -test1 -SourceRegion_add.volume = 2.344666 -SourceRegion.volume = 0.858955 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.490998 -SourceRegion.volume = 1.214987 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.015974 -SourceRegion.volume = 2.043486 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.628307 -SourceRegion.volume = 1.750388 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.034229 -SourceRegion.volume = 2.363707 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.146013 -SourceRegion.volume = 1.916877 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.390119 -SourceRegion.volume = 0.266773 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.380452 -SourceRegion.volume = 2.388930 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.145445 -SourceRegion.volume = 1.096450 -test1 -SourceRegion_add.volume = 2.971236 -SourceRegion.volume = 1.499687 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.355642 -SourceRegion.volume = 1.847211 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.737279 -SourceRegion.volume = 1.031555 -test1.1 -test1.2 -test1.3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.981164 -SourceRegion.volume = 0.652668 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.709471 -SourceRegion.volume = 0.724880 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.883937 -SourceRegion.volume = 0.511154 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.396735 -SourceRegion.volume = 0.737205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.809607 -SourceRegion.volume = 2.075913 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.596966 -SourceRegion.volume = 1.443714 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.021950 -SourceRegion.volume = 0.736811 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.461740 -SourceRegion.volume = 3.332144 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.315380 -SourceRegion.volume = 0.034134 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.009744 -test1 -SourceRegion_add.volume = 1.150932 -SourceRegion.volume = 0.884553 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.641588 -SourceRegion.volume = 1.237449 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 40 broadcasting 547 source regions to other ranks. -SourceRegion.volume = 0.757743 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.495822 -SourceRegion.volume = 1.045334 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.674448 -SourceRegion.volume = 1.069494 -test1.1 -test1 -SourceRegion_add.volume = 41.335513 -SourceRegion.volume = 81.399457 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.343492 -SourceRegion.volume = 0.754739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 61.866280 -SourceRegion.volume = 84.248714 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.385874 -SourceRegion.volume = 0.649587 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.566205 -SourceRegion.volume = 0.166255 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.105854 -SourceRegion.volume = 0.929044 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.379011 -SourceRegion.volume = 0.605298 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.403919 -SourceRegion.volume = 0.617435 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 48.290272 -SourceRegion.volume = 76.215760 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.994921 -SourceRegion.volume = 0.504405 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.453851 -SourceRegion.volume = 0.342108 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.451269 -SourceRegion.volume = 0.683932 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.135541 -SourceRegion.volume = 0.280037 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.126156 -SourceRegion.volume = 0.625228 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.374631 -SourceRegion.volume = 0.872595 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.325082 -SourceRegion.volume = 0.469719 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.708513 -SourceRegion.volume = 1.041230 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.203599 -SourceRegion.volume = 0.236958 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.979593 -SourceRegion.volume = 0.529039 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.480281 -SourceRegion.volume = 1.744760 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.447011 -SourceRegion.volume = 0.402861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.146615 -SourceRegion.volume = 0.465087 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.969654 -SourceRegion.volume = 0.615359 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.364303 -SourceRegion.volume = 0.591113 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.265066 -SourceRegion.volume = 0.391525 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.140438 -SourceRegion.volume = 0.753748 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.676379 -SourceRegion.volume = 0.774016 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.450003 -SourceRegion.volume = 1.389297 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.716954 -SourceRegion.volume = 1.504813 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.914147 -SourceRegion.volume = 1.002294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 41 broadcasting 4023 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.949608 -SourceRegion.volume = 0.521731 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.570006 -SourceRegion.volume = 1.735387 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.388301 -SourceRegion.volume = 1.114136 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.975340 -SourceRegion.volume = 1.072897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.633061 -SourceRegion.volume = 0.017089 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.364299 -SourceRegion.volume = 0.710052 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.478656 -SourceRegion.volume = 0.786859 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.496264 -test1 -SourceRegion_add.volume = 0.601700 -SourceRegion.volume = 1.463460 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.352890 -SourceRegion.volume = 0.603586 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.006502 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.244327 -SourceRegion.volume = 0.649557 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.721864 -SourceRegion.volume = 0.966469 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.435471 -SourceRegion.volume = 0.910136 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.629370 -SourceRegion.volume = 0.258933 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.909341 -test1 -SourceRegion_add.volume = 1.732136 -SourceRegion.volume = 0.018814 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.583176 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.906604 -SourceRegion.volume = 0.961549 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.444524 -SourceRegion.volume = 0.910058 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.874903 -SourceRegion.volume = 1.448008 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 1.066636 -SourceRegion.volume = 0.724492 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.315041 -SourceRegion.volume = 1.107554 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.537034 -SourceRegion.volume = 0.832513 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.845912 -SourceRegion.volume = 1.717629 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.760136 -SourceRegion.volume = 0.346646 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.728201 -SourceRegion.volume = 1.552984 -test1.1 -test1 -SourceRegion_add.volume = 0.775619 -SourceRegion.volume = 0.552417 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.202143 -SourceRegion.volume = 0.837797 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.469595 -SourceRegion.volume = 0.208606 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.016094 -SourceRegion.volume = 0.316071 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.488374 -SourceRegion.volume = 0.581038 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.459701 -SourceRegion.volume = 0.586207 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.965963 -SourceRegion.volume = 0.049426 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.095815 -SourceRegion.volume = 0.966197 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.001498 -SourceRegion.volume = 1.012873 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.629918 -SourceRegion.volume = 0.239167 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.317605 -SourceRegion.volume = 0.938874 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.587889 -SourceRegion.volume = 1.984069 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.202108 -SourceRegion.volume = 1.144422 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.506542 -SourceRegion.volume = 1.953293 -test1.1 -test1 -SourceRegion_add.volume = 0.544375 -SourceRegion.volume = 1.200846 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.200883 -SourceRegion.volume = 1.100931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.074975 -SourceRegion.volume = 0.617054 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.568060 -SourceRegion.volume = 0.251940 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.901214 -SourceRegion.volume = 1.258550 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.794405 -SourceRegion.volume = 0.262279 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.124248 -SourceRegion.volume = 1.699791 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.685197 -SourceRegion.volume = 0.832826 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.279107 -SourceRegion.volume = 1.442631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.959932 -SourceRegion.volume = 0.383316 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.176461 -SourceRegion.volume = 0.618548 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.943972 -SourceRegion.volume = 1.026147 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 1.068277 -SourceRegion.volume = 0.117109 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.219826 -SourceRegion.volume = 0.335256 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.478107 -SourceRegion.volume = 1.172730 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.262233 -SourceRegion.volume = 1.030195 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.197989 -SourceRegion.volume = 1.145669 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.880337 -SourceRegion.volume = 0.084758 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.834612 -SourceRegion.volume = 0.008847 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.858227 -SourceRegion.volume = 0.589326 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.110419 -SourceRegion.volume = 1.153648 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.485796 -SourceRegion.volume = 0.298729 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.061738 -SourceRegion.volume = 0.511462 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.168028 -SourceRegion.volume = 0.759382 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.274081 -SourceRegion.volume = 0.918309 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.144311 -SourceRegion.volume = 1.141217 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.504714 -SourceRegion.volume = 1.053191 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.908396 -SourceRegion.volume = 0.545361 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.663358 -SourceRegion.volume = 1.081325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.591421 -SourceRegion.volume = 0.643840 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.309856 -SourceRegion.volume = 1.509637 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.093577 -SourceRegion.volume = 1.281255 -test1 -SourceRegion_add.volume = 0.406049 -SourceRegion.volume = 0.888496 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.978415 -SourceRegion.volume = 1.680855 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.673643 -SourceRegion.volume = 0.553041 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.340691 -SourceRegion.volume = 0.554378 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.731619 -SourceRegion.volume = 0.418128 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.551020 -SourceRegion.volume = 1.074766 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.762028 -SourceRegion.volume = 0.591142 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.202527 -SourceRegion.volume = 1.920283 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.493212 -SourceRegion.volume = 1.267470 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.874557 -SourceRegion.volume = 0.844059 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.389749 -SourceRegion.volume = 0.490912 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 1.171889 -SourceRegion.volume = 0.278566 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.719187 -SourceRegion.volume = 0.398531 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.430941 -SourceRegion.volume = 0.366332 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.091928 -SourceRegion.volume = 1.504941 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.134258 -SourceRegion.volume = 1.109002 -test1 -SourceRegion_add.volume = 0.808807 -SourceRegion.volume = 0.299148 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.221613 -SourceRegion.volume = 0.685650 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.330837 -SourceRegion.volume = 1.100816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.253598 -SourceRegion.volume = 0.706346 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.848335 -SourceRegion.volume = 0.353861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.227648 -SourceRegion.volume = 0.677000 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.131193 -SourceRegion.volume = 0.704405 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.349757 -SourceRegion.volume = 0.834650 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.393113 -SourceRegion.volume = 0.585509 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.522937 -SourceRegion.volume = 1.135721 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.495892 -SourceRegion.volume = 1.140087 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.183146 -SourceRegion.volume = 0.130057 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.552727 -SourceRegion.volume = 0.799913 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.445808 -SourceRegion.volume = 0.054243 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.741703 -SourceRegion.volume = 0.413813 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.935763 -SourceRegion.volume = 0.968899 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.871173 -SourceRegion.volume = 0.613809 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.267697 -SourceRegion.volume = 0.597897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.017317 -SourceRegion.volume = 0.889935 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.697082 -SourceRegion.volume = 0.804255 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.858732 -SourceRegion.volume = 0.104766 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.222726 -SourceRegion.volume = 0.464088 -test1 -SourceRegion_add.volume = 1.658631 -SourceRegion.volume = 0.416399 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.530825 -SourceRegion.volume = 0.464198 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.252424 -SourceRegion.volume = 0.477442 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.910126 -SourceRegion.volume = 0.327167 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.306885 -SourceRegion.volume = 0.343139 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.349790 -SourceRegion.volume = 0.315553 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.234302 -SourceRegion.volume = 1.023021 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.570741 -SourceRegion.volume = 0.422506 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.249918 -SourceRegion.volume = 0.169874 -test1 -SourceRegion_add.volume = 0.539562 -SourceRegion.volume = 0.310562 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.747291 -SourceRegion.volume = 0.323157 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.222150 -SourceRegion.volume = 0.240827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.859077 -SourceRegion.volume = 0.079576 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.746396 -SourceRegion.volume = 0.859705 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.682097 -SourceRegion.volume = 0.978389 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.379365 -SourceRegion.volume = 0.244133 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 42 broadcasting 3523 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.499313 -SourceRegion.volume = 0.616349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.214790 -SourceRegion.volume = 0.806609 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.566533 -SourceRegion.volume = 0.384178 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.199240 -SourceRegion.volume = 0.330071 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.299221 -SourceRegion.volume = 0.734735 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.934637 -SourceRegion.volume = 0.494163 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.704459 -SourceRegion.volume = 0.717811 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.372967 -SourceRegion.volume = 1.355192 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.765289 -SourceRegion.volume = 0.287968 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.925955 -SourceRegion.volume = 0.024737 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.304088 -SourceRegion.volume = 0.732694 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.503840 -SourceRegion.volume = 0.022897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.251307 -SourceRegion.volume = 0.924987 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.640316 -SourceRegion.volume = 0.726101 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.439578 -SourceRegion.volume = 0.817261 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.282274 -SourceRegion.volume = 0.698610 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.998085 -SourceRegion.volume = 0.436983 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.380876 -SourceRegion.volume = 0.353895 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.649976 -SourceRegion.volume = 1.133490 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.141838 -SourceRegion.volume = 2.403279 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.998633 -SourceRegion.volume = 0.301520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.478213 -SourceRegion.volume = 1.302864 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.534267 -SourceRegion.volume = 0.413889 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.753654 -SourceRegion.volume = 0.619912 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.347514 -SourceRegion.volume = 0.646541 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.173954 -SourceRegion.volume = 0.346397 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.067825 -SourceRegion.volume = 0.583041 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.465119 -SourceRegion.volume = 1.059236 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.638946 -SourceRegion.volume = 0.579505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.840308 -SourceRegion.volume = 0.521251 -test1.1 -test1 -SourceRegion_add.volume = 0.870255 -SourceRegion.volume = 0.970131 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.225930 -SourceRegion.volume = 0.387571 -test1.1 -test1.2 -test1.3 -test1.4 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.696475 -SourceRegion.volume = 0.355852 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.377207 -SourceRegion.volume = 0.942836 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.145785 -SourceRegion.volume = 1.635239 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.865653 -SourceRegion.volume = 0.158610 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.971904 -SourceRegion.volume = 0.075209 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.365214 -SourceRegion.volume = 0.477255 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.486857 -SourceRegion.volume = 0.675132 -test1.1 -test1 -SourceRegion_add.volume = 2.173650 -SourceRegion.volume = 0.147068 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.885386 -SourceRegion.volume = 0.705617 -test1.1 -test1.2 -test1.3 -test1.4 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.533419 -SourceRegion.volume = 0.648489 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.399268 -SourceRegion.volume = 0.538529 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.585138 -SourceRegion.volume = 0.911091 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.604212 -SourceRegion.volume = 1.150478 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.591088 -SourceRegion.volume = 1.292414 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.492053 -SourceRegion.volume = 0.880832 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.227810 -SourceRegion.volume = 1.060343 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.489374 -SourceRegion.volume = 0.055665 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.671536 -SourceRegion.volume = 0.443138 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.406097 -SourceRegion.volume = 1.357621 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.507196 -SourceRegion.volume = 0.755836 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.659370 -SourceRegion.volume = 0.151299 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.030137 -SourceRegion.volume = 0.276781 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.658331 -SourceRegion.volume = 0.636779 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.248381 -SourceRegion.volume = 0.500051 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.161653 -SourceRegion.volume = 0.990180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.834725 -SourceRegion.volume = 0.787628 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.039922 -SourceRegion.volume = 0.891260 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.218306 -SourceRegion.volume = 1.172009 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.529470 -SourceRegion.volume = 1.216062 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.610980 -SourceRegion.volume = 1.522679 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.295117 -SourceRegion.volume = 0.787869 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.079027 -SourceRegion.volume = 0.528191 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.354845 -SourceRegion.volume = 0.376839 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.473517 -SourceRegion.volume = 0.419172 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.361416 -SourceRegion.volume = 1.132072 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 43 broadcasting 2255 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.960784 -SourceRegion.volume = 0.964280 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.653149 -SourceRegion.volume = 0.226649 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.749891 -SourceRegion.volume = 1.385331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.315369 -SourceRegion.volume = 1.551503 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.425980 -SourceRegion.volume = 1.760047 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.234805 -SourceRegion.volume = 2.659431 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.525942 -SourceRegion.volume = 5.221394 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.768921 -SourceRegion.volume = 0.356886 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.136658 -SourceRegion.volume = 2.040767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.294408 -SourceRegion.volume = 1.073795 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.852958 -SourceRegion.volume = 1.630804 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.983957 -SourceRegion.volume = 1.410267 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.622343 -SourceRegion.volume = 0.719838 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.722663 -SourceRegion.volume = 0.664649 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.727564 -SourceRegion.volume = 1.182410 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.410317 -SourceRegion.volume = 1.568347 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.366744 -SourceRegion.volume = 1.086927 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.856382 -SourceRegion.volume = 2.805367 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.190161 -SourceRegion.volume = 1.422494 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.250768 -SourceRegion.volume = 2.035136 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.070624 -SourceRegion.volume = 1.330042 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.974153 -SourceRegion.volume = 1.160067 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.989130 -SourceRegion.volume = 1.607914 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.476844 -SourceRegion.volume = 2.559841 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.269713 -SourceRegion.volume = 1.879064 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.657970 -SourceRegion.volume = 2.126859 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.612135 -SourceRegion.volume = 2.194926 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.885645 -SourceRegion.volume = 1.943784 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.553065 -SourceRegion.volume = 0.712952 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.431230 -SourceRegion.volume = 0.683909 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.641807 -SourceRegion.volume = 1.510505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.503734 -SourceRegion.volume = 1.267893 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.053418 -SourceRegion.volume = 1.223914 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.664402 -SourceRegion.volume = 0.759083 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.545922 -SourceRegion.volume = 1.954783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.877828 -SourceRegion.volume = 1.362412 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.607572 -SourceRegion.volume = 1.241935 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.805394 -SourceRegion.volume = 1.013447 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.612960 -SourceRegion.volume = 1.246728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.659845 -SourceRegion.volume = 1.838188 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.955609 -SourceRegion.volume = 1.371711 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.437439 -SourceRegion.volume = 3.333252 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.310390 -SourceRegion.volume = 1.420351 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.988498 -SourceRegion.volume = 1.855316 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.151782 -SourceRegion.volume = 3.185363 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.090179 -SourceRegion.volume = 0.903988 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.974690 -SourceRegion.volume = 1.456197 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.626512 -SourceRegion.volume = 1.046792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.402686 -SourceRegion.volume = 1.554063 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.584504 -SourceRegion.volume = 2.759104 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.739066 -SourceRegion.volume = 1.136497 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.119093 -SourceRegion.volume = 1.900536 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.707411 -SourceRegion.volume = 0.702748 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.602906 -SourceRegion.volume = 2.087424 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.071210 -SourceRegion.volume = 3.003455 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.871499 -SourceRegion.volume = 0.559249 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.980863 -SourceRegion.volume = 1.514740 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.228944 -SourceRegion.volume = 1.397021 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.673697 -SourceRegion.volume = 1.467346 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.232340 -SourceRegion.volume = 0.574530 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.963054 -SourceRegion.volume = 2.131577 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 44 broadcasting 3918 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.134451 -SourceRegion.volume = 0.728992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.971648 -SourceRegion.volume = 0.413391 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.318620 -SourceRegion.volume = 0.460299 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.093509 -SourceRegion.volume = 1.494455 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.703034 -SourceRegion.volume = 1.052436 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.376233 -SourceRegion.volume = 0.870507 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.622503 -SourceRegion.volume = 0.929691 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.620572 -SourceRegion.volume = 0.634079 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.964670 -SourceRegion.volume = 0.446817 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.227753 -SourceRegion.volume = 0.638552 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.871375 -SourceRegion.volume = 0.012687 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.047555 -SourceRegion.volume = 0.576969 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.309275 -SourceRegion.volume = 0.460057 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.296156 -SourceRegion.volume = 1.463079 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.522464 -SourceRegion.volume = 0.131571 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.076295 -SourceRegion.volume = 0.184072 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.946005 -SourceRegion.volume = 0.475782 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.850490 -SourceRegion.volume = 0.770354 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.595674 -SourceRegion.volume = 0.541681 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.134875 -SourceRegion.volume = 0.562587 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.951155 -SourceRegion.volume = 0.720091 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.136715 -SourceRegion.volume = 2.278023 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.159959 -SourceRegion.volume = 1.758142 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.446759 -SourceRegion.volume = 0.703794 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.010933 -SourceRegion.volume = 0.912897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.081352 -SourceRegion.volume = 0.856545 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.550471 -SourceRegion.volume = 0.402996 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.898693 -SourceRegion.volume = 0.282050 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.115819 -SourceRegion.volume = 0.834153 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.586892 -SourceRegion.volume = 0.293868 -test1 -SourceRegion_add.volume = 0.535295 -SourceRegion.volume = 1.443074 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.469348 -SourceRegion.volume = 0.356668 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.530179 -SourceRegion.volume = 0.485726 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.525102 -SourceRegion.volume = 0.613939 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.619119 -SourceRegion.volume = 1.261323 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.908494 -SourceRegion.volume = 0.189664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.328804 -SourceRegion.volume = 1.375794 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.170473 -SourceRegion.volume = 0.020415 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.770219 -SourceRegion.volume = 0.124421 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.457601 -SourceRegion.volume = 0.468187 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.318497 -SourceRegion.volume = 0.690534 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.664103 -SourceRegion.volume = 1.013718 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.711042 -SourceRegion.volume = 0.525212 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.151847 -SourceRegion.volume = 2.269206 -test1.1 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.536327 -SourceRegion.volume = 0.531842 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.396138 -SourceRegion.volume = 0.151921 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.676833 -SourceRegion.volume = 0.767141 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.119110 -SourceRegion.volume = 1.457763 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.759324 -SourceRegion.volume = 0.655862 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.204507 -SourceRegion.volume = 1.363946 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.585142 -SourceRegion.volume = 0.329131 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.726429 -SourceRegion.volume = 0.377481 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.891052 -SourceRegion.volume = 0.238160 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.775582 -SourceRegion.volume = 1.425520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.441457 -SourceRegion.volume = 0.969758 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.647289 -SourceRegion.volume = 0.001732 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.339434 -SourceRegion.volume = 0.833934 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.243484 -SourceRegion.volume = 0.814029 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.910651 -SourceRegion.volume = 1.245376 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.877213 -SourceRegion.volume = 0.417901 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.383184 -SourceRegion.volume = 0.963848 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.165716 -SourceRegion.volume = 0.959276 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.861100 -SourceRegion.volume = 0.062831 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.387902 -SourceRegion.volume = 0.907904 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.653684 -SourceRegion.volume = 0.772888 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.210000 -SourceRegion.volume = 1.094541 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.351990 -SourceRegion.volume = 0.775464 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.776142 -SourceRegion.volume = 0.162924 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.140869 -SourceRegion.volume = 1.171654 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.112913 -SourceRegion.volume = 0.112188 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.568520 -SourceRegion.volume = 0.774507 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.949710 -SourceRegion.volume = 1.056270 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.566744 -SourceRegion.volume = 0.069044 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.681578 -SourceRegion.volume = 0.657851 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.634839 -SourceRegion.volume = 0.869897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.283279 -SourceRegion.volume = 0.033359 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.122541 -SourceRegion.volume = 0.091873 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.286110 -SourceRegion.volume = 0.118739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.401306 -SourceRegion.volume = 0.774827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.936610 -SourceRegion.volume = 0.729167 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.171018 -SourceRegion.volume = 1.437249 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.555515 -SourceRegion.volume = 0.149382 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.277673 -test1 -SourceRegion_add.volume = 0.912972 -SourceRegion.volume = 0.808222 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -SourceRegion.volume = 0.871158 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.590137 -SourceRegion.volume = 0.676482 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.851868 -SourceRegion.volume = 1.330931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.326381 -SourceRegion.volume = 1.249874 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.674679 -SourceRegion.volume = 0.571613 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.835057 -SourceRegion.volume = 0.890246 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.033464 -SourceRegion.volume = 0.743630 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.721248 -SourceRegion.volume = 0.297466 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.040355 -SourceRegion.volume = 0.725257 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.189082 -SourceRegion.volume = 0.874722 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.533037 -SourceRegion.volume = 0.814458 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.877309 -SourceRegion.volume = 0.142504 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.162822 -SourceRegion.volume = 0.298762 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.660071 -SourceRegion.volume = 2.128371 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.273374 -SourceRegion.volume = 0.579318 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.106432 -SourceRegion.volume = 1.627216 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.941614 -SourceRegion.volume = 0.146542 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.622017 -SourceRegion.volume = 0.626373 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.082416 -SourceRegion.volume = 0.603330 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.301063 -SourceRegion.volume = 0.907318 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.774528 -SourceRegion.volume = 0.541508 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.709204 -SourceRegion.volume = 0.049612 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.098065 -SourceRegion.volume = 0.454867 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.662792 -SourceRegion.volume = 0.586410 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.579384 -SourceRegion.volume = 0.593950 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.109232 -SourceRegion.volume = 0.161665 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.898454 -SourceRegion.volume = 0.013944 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.411649 -SourceRegion.volume = 0.703286 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.149497 -SourceRegion.volume = 0.913622 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.571493 -SourceRegion.volume = 0.466658 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.235227 -SourceRegion.volume = 0.287732 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.011942 -SourceRegion.volume = 1.147380 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.451153 -SourceRegion.volume = 1.410096 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.450563 -SourceRegion.volume = 0.887520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.775080 -SourceRegion.volume = 0.200000 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.931558 -SourceRegion.volume = 0.131571 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 45 broadcasting 2220 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.289551 -SourceRegion.volume = 1.174272 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.329987 -SourceRegion.volume = 2.342279 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.047258 -SourceRegion.volume = 2.330171 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.612712 -SourceRegion.volume = 1.398463 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.436107 -SourceRegion.volume = 1.672713 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.191057 -SourceRegion.volume = 0.137112 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.157599 -SourceRegion.volume = 0.921134 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.032475 -SourceRegion.volume = 0.980386 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.612568 -SourceRegion.volume = 0.054296 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.989999 -SourceRegion.volume = 3.498527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.938440 -SourceRegion.volume = 0.304011 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.322552 -SourceRegion.volume = 0.464963 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.701666 -SourceRegion.volume = 1.552510 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.535593 -SourceRegion.volume = 1.187927 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.091858 -SourceRegion.volume = 0.166321 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 3.230939 -SourceRegion.volume = 0.580335 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.713583 -SourceRegion.volume = 2.113652 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.781856 -SourceRegion.volume = 0.658956 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.903743 -SourceRegion.volume = 0.858595 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 2.041005 -SourceRegion.volume = 0.738256 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.295407 -SourceRegion.volume = 1.557649 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.879343 -SourceRegion.volume = 0.974566 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.713878 -SourceRegion.volume = 0.818771 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.805451 -SourceRegion.volume = 1.749240 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.747518 -SourceRegion.volume = 1.707125 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.438414 -SourceRegion.volume = 0.329985 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.445266 -SourceRegion.volume = 1.423066 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.386646 -SourceRegion.volume = 2.911520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.774980 -SourceRegion.volume = 1.884034 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.439872 -SourceRegion.volume = 2.566294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.922178 -SourceRegion.volume = 0.626594 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.910024 -SourceRegion.volume = 1.464855 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.252647 -SourceRegion.volume = 0.167583 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.467075 -SourceRegion.volume = 2.112893 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.141148 -SourceRegion.volume = 2.155803 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.078287 -SourceRegion.volume = 2.920633 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.024445 -SourceRegion.volume = 0.613533 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 1.149696 -SourceRegion.volume = 0.772876 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.565809 -SourceRegion.volume = 0.833820 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.999175 -test2 -test3 -SourceRegion.volume = 1.265248 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.117091 -SourceRegion.volume = 0.718868 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.797537 -SourceRegion.volume = 2.366954 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.973290 -SourceRegion.volume = 1.138422 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.892067 -SourceRegion.volume = 1.363976 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.101345 -SourceRegion.volume = 1.988871 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.822459 -SourceRegion.volume = 0.666504 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.108562 -SourceRegion.volume = 0.849343 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 1.110279 -SourceRegion.volume = 0.407706 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 2.345446 -SourceRegion.volume = 0.924089 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.794719 -SourceRegion.volume = 1.295376 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 1.508971 -SourceRegion.volume = 1.078200 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.822051 -SourceRegion.volume = 0.860595 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.915343 -SourceRegion.volume = 0.962385 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.009092 -SourceRegion.volume = 0.169160 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.353533 -SourceRegion.volume = 0.683499 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.322333 -SourceRegion.volume = 1.593767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.557154 -SourceRegion.volume = 1.364783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.887211 -SourceRegion.volume = 0.687501 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.051202 -SourceRegion.volume = 1.883869 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.609740 -SourceRegion.volume = 2.158638 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.473710 -SourceRegion.volume = 1.387202 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.691571 -SourceRegion.volume = 1.664343 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.237960 -SourceRegion.volume = 1.081477 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.224023 -SourceRegion.volume = 1.355710 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.268925 -SourceRegion.volume = 2.176540 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 46 broadcasting 2752 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.087782 -SourceRegion.volume = 2.516771 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.467134 -SourceRegion.volume = 0.060909 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.459285 -SourceRegion.volume = 0.432867 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.547086 -SourceRegion.volume = 1.815549 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.470560 -SourceRegion.volume = 1.176777 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.065587 -SourceRegion.volume = 4.047743 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.626739 -SourceRegion.volume = 0.739077 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.333022 -SourceRegion.volume = 1.060138 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.291100 -SourceRegion.volume = 1.465689 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.879877 -SourceRegion.volume = 1.642366 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.479107 -SourceRegion.volume = 6.208418 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.284609 -SourceRegion.volume = 0.064172 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.522130 -SourceRegion.volume = 2.118017 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.574761 -SourceRegion.volume = 0.227621 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.857149 -SourceRegion.volume = 0.546993 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.982408 -SourceRegion.volume = 0.959569 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.995674 -SourceRegion.volume = 1.999243 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.784391 -SourceRegion.volume = 1.116922 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.760482 -SourceRegion.volume = 3.492891 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.626723 -SourceRegion.volume = 0.677232 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.193007 -SourceRegion.volume = 0.618344 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.855611 -SourceRegion.volume = 2.680336 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.370439 -SourceRegion.volume = 0.427456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.551553 -SourceRegion.volume = 1.211152 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.648378 -SourceRegion.volume = 0.087831 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.751975 -SourceRegion.volume = 0.725287 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.354846 -SourceRegion.volume = 0.191222 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.574235 -SourceRegion.volume = 1.514099 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.415711 -SourceRegion.volume = 2.392921 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.701147 -SourceRegion.volume = 1.188811 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.406993 -test1 -SourceRegion_add.volume = 0.251339 -SourceRegion.volume = 1.376758 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.140654 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.808717 -SourceRegion.volume = 0.778211 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.330476 -SourceRegion.volume = 1.294578 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.263709 -SourceRegion.volume = 1.268729 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.774494 -SourceRegion.volume = 2.364959 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.082738 -SourceRegion.volume = 3.443852 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.881468 -SourceRegion.volume = 2.718244 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 1.054296 -SourceRegion.volume = 0.792548 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.486665 -SourceRegion.volume = 0.455116 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.760093 -SourceRegion.volume = 2.920014 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.230573 -SourceRegion.volume = 0.768627 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.612327 -SourceRegion.volume = 2.396219 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.325899 -SourceRegion.volume = 2.306810 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.089551 -SourceRegion.volume = 0.219654 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.987517 -SourceRegion.volume = 0.771376 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.039846 -SourceRegion.volume = 0.955631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.357444 -SourceRegion.volume = 1.236343 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.418894 -SourceRegion.volume = 0.704473 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.163347 -SourceRegion.volume = 2.994426 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.171871 -SourceRegion.volume = 1.320727 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.721062 -SourceRegion.volume = 0.506349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.478032 -SourceRegion.volume = 0.204442 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.193925 -SourceRegion.volume = 0.718381 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.000425 -SourceRegion.volume = 0.992459 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.794253 -SourceRegion.volume = 0.239102 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.800987 -SourceRegion.volume = 0.674687 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.424754 -SourceRegion.volume = 0.967977 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.277723 -SourceRegion.volume = 1.035924 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.700405 -SourceRegion.volume = 2.570783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.035905 -SourceRegion.volume = 1.436582 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.548767 -SourceRegion.volume = 0.614099 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.552109 -SourceRegion.volume = 0.643229 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.336229 -SourceRegion.volume = 0.382959 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.302331 -SourceRegion.volume = 0.023042 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.457361 -SourceRegion.volume = 1.545241 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.185618 -SourceRegion.volume = 1.745030 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.202013 -SourceRegion.volume = 0.362952 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.952535 -SourceRegion.volume = 0.373613 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.670481 -SourceRegion.volume = 1.699879 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.586125 -SourceRegion.volume = 0.829505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.532237 -SourceRegion.volume = 2.978265 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.018551 -SourceRegion.volume = 2.805698 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.951785 -SourceRegion.volume = 1.212182 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.608322 -SourceRegion.volume = 1.539730 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.598823 -SourceRegion.volume = 0.541735 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.692733 -SourceRegion.volume = 1.052194 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.025570 -SourceRegion.volume = 1.271109 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.501712 -SourceRegion.volume = 1.502312 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.272307 -SourceRegion.volume = 1.361999 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.971697 -SourceRegion.volume = 1.834640 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.817659 -SourceRegion.volume = 1.624276 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.155356 -SourceRegion.volume = 1.206707 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.122999 -SourceRegion.volume = 1.601050 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.528109 -SourceRegion.volume = 0.061974 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.025597 -SourceRegion.volume = 0.605653 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.832892 -SourceRegion.volume = 1.251379 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.513011 -SourceRegion.volume = 0.395168 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.140701 -SourceRegion.volume = 0.428362 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.322205 -SourceRegion.volume = 0.404177 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.769396 -SourceRegion.volume = 2.084987 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.154636 -SourceRegion.volume = 0.498731 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.130645 -SourceRegion.volume = 1.185693 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.272264 -SourceRegion.volume = 0.643101 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.950998 -SourceRegion.volume = 1.079284 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.954050 -SourceRegion.volume = 0.933292 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.563337 -SourceRegion.volume = 0.640795 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.396963 -SourceRegion.volume = 0.330892 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.143964 -SourceRegion.volume = 0.643520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.863975 -SourceRegion.volume = 1.082604 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.280977 -SourceRegion.volume = 2.120519 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.938811 -SourceRegion.volume = 0.831631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.142797 -SourceRegion.volume = 0.254343 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.462741 -SourceRegion.volume = 0.591815 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.727226 -SourceRegion.volume = 0.581792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.586003 -SourceRegion.volume = 0.563117 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.201243 -SourceRegion.volume = 0.942759 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.602767 -SourceRegion.volume = 0.708284 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.579685 -SourceRegion.volume = 0.658557 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.268485 -SourceRegion.volume = 1.114688 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.150375 -SourceRegion.volume = 1.517954 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.824246 -SourceRegion.volume = 0.176554 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.799479 -SourceRegion.volume = 0.334879 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.675687 -SourceRegion.volume = 0.615139 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.435401 -SourceRegion.volume = 0.300159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.430763 -SourceRegion.volume = 0.006861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.755638 -SourceRegion.volume = 2.425579 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.296651 -SourceRegion.volume = 1.142019 -test1 -SourceRegion_add.volume = 0.774582 -SourceRegion.volume = 0.657738 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.301565 -SourceRegion.volume = 0.508651 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.246266 -SourceRegion.volume = 0.208322 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.871713 -SourceRegion.volume = 0.517091 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.334310 -SourceRegion.volume = 0.203194 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.793878 -SourceRegion.volume = 0.957986 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.418111 -SourceRegion.volume = 1.054129 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.869721 -SourceRegion.volume = 1.657903 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.842039 -SourceRegion.volume = 2.131956 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.795123 -SourceRegion.volume = 0.840446 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.232686 -SourceRegion.volume = 0.139968 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.579072 -SourceRegion.volume = 1.123446 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.497304 -SourceRegion.volume = 1.463281 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.890049 -SourceRegion.volume = 0.203654 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.943060 -SourceRegion.volume = 0.467945 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.303419 -SourceRegion.volume = 0.855331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.904793 -SourceRegion.volume = 0.451117 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.356910 -SourceRegion.volume = 1.484139 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.270365 -SourceRegion.volume = 1.388236 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.718372 -SourceRegion.volume = 1.139996 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.528161 -SourceRegion.volume = 0.742043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.471487 -SourceRegion.volume = 0.280295 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.621881 -SourceRegion.volume = 1.517738 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.515324 -SourceRegion.volume = 0.630056 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.577122 -SourceRegion.volume = 0.815345 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.771854 -SourceRegion.volume = 2.269591 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.985730 -SourceRegion.volume = 0.182723 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.801980 -SourceRegion.volume = 2.717052 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 1.540113 -SourceRegion.volume = 0.590013 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 3.707539 -SourceRegion.volume = 0.441571 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.764807 -SourceRegion.volume = 0.302604 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.584702 -SourceRegion.volume = 0.419472 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.041211 -SourceRegion.volume = 1.296509 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.979347 -SourceRegion.volume = 1.255584 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.049933 -SourceRegion.volume = 1.762022 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.636519 -SourceRegion.volume = 0.705723 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.295653 -SourceRegion.volume = 2.832941 -test1.1 -test1 -SourceRegion_add.volume = 0.846610 -SourceRegion.volume = 0.934376 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.133706 -SourceRegion.volume = 0.462403 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.907938 -SourceRegion.volume = 1.381744 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.304261 -SourceRegion.volume = 0.980493 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.853177 -SourceRegion.volume = 1.608472 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.169553 -SourceRegion.volume = 0.037350 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.651098 -SourceRegion.volume = 1.915505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.187288 -SourceRegion.volume = 1.638638 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.853829 -SourceRegion.volume = 0.634796 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.560084 -SourceRegion.volume = 0.968187 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.507839 -SourceRegion.volume = 0.813010 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.199195 -SourceRegion.volume = 0.817943 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.158116 -SourceRegion.volume = 0.743715 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.901383 -SourceRegion.volume = 0.870253 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.738191 -SourceRegion.volume = 1.910446 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.419020 -SourceRegion.volume = 2.044930 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.669641 -SourceRegion.volume = 1.060306 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.263474 -SourceRegion.volume = 2.047875 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.326828 -SourceRegion.volume = 0.015540 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.718534 -SourceRegion.volume = 1.284940 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.663513 -SourceRegion.volume = 1.170005 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.758546 -SourceRegion.volume = 1.401175 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.935904 -SourceRegion.volume = 0.476026 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.498157 -SourceRegion.volume = 0.711760 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.256083 -SourceRegion.volume = 0.357213 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.214994 -SourceRegion.volume = 3.417026 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.156566 -SourceRegion.volume = 0.568939 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.097313 -SourceRegion.volume = 0.500971 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.695119 -SourceRegion.volume = 1.796025 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.642008 -SourceRegion.volume = 0.427883 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.763186 -SourceRegion.volume = 1.184725 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.744599 -SourceRegion.volume = 3.591236 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.699738 -SourceRegion.volume = 0.273076 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 47 broadcasting 3995 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.283699 -SourceRegion.volume = 1.985216 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.822802 -SourceRegion.volume = 0.993144 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.191507 -SourceRegion.volume = 0.375771 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.572907 -SourceRegion.volume = 1.628073 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.812099 -SourceRegion.volume = 1.478143 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.078375 -SourceRegion.volume = 0.000582 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.133713 -SourceRegion.volume = 1.111514 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.870178 -SourceRegion.volume = 0.445595 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.985189 -SourceRegion.volume = 0.804315 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.442273 -SourceRegion.volume = 2.813349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.023118 -SourceRegion.volume = 2.200160 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.205084 -SourceRegion.volume = 0.332451 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.164816 -SourceRegion.volume = 0.424202 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.475159 -SourceRegion.volume = 0.265148 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.979041 -SourceRegion.volume = 1.092739 -test1.1 -test1 -SourceRegion_add.volume = 1.668412 -SourceRegion.volume = 0.572279 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.166810 -SourceRegion.volume = 3.508411 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.372960 -SourceRegion.volume = 0.265251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.016154 -SourceRegion.volume = 0.390904 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.764540 -SourceRegion.volume = 1.021560 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.281373 -SourceRegion.volume = 1.101052 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.143783 -SourceRegion.volume = 0.629201 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.375738 -SourceRegion.volume = 1.094462 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.671888 -SourceRegion.volume = 0.496285 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.453317 -SourceRegion.volume = 0.791750 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.707570 -SourceRegion.volume = 0.857165 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.919007 -SourceRegion.volume = 0.117628 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.347315 -SourceRegion.volume = 0.294642 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.978605 -SourceRegion.volume = 0.162708 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.564128 -SourceRegion.volume = 1.571005 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.292714 -SourceRegion.volume = 0.460777 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.064557 -SourceRegion.volume = 0.076987 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.561415 -SourceRegion.volume = 1.792267 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.216519 -SourceRegion.volume = 0.307587 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.070454 -SourceRegion.volume = 3.329292 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.019097 -SourceRegion.volume = 0.193112 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.230373 -SourceRegion.volume = 1.564354 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.143054 -SourceRegion.volume = 0.567402 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.514186 -SourceRegion.volume = 0.599554 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.444615 -SourceRegion.volume = 0.503549 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.869708 -SourceRegion.volume = 0.687185 -test1 -SourceRegion_add.volume = 0.311958 -SourceRegion.volume = 1.176556 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.297313 -SourceRegion.volume = 0.610734 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.272838 -SourceRegion.volume = 1.144807 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.652205 -SourceRegion.volume = 0.974340 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.612106 -test1 -SourceRegion_add.volume = 1.484850 -SourceRegion.volume = 1.958658 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.073831 -SourceRegion.volume = 2.892855 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.968563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.676188 -SourceRegion.volume = 1.617729 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.752869 -SourceRegion.volume = 0.764921 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.285817 -SourceRegion.volume = 0.338200 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.143714 -SourceRegion.volume = 1.350340 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.194625 -SourceRegion.volume = 1.366754 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.512831 -SourceRegion.volume = 0.283505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.001776 -SourceRegion.volume = 0.522212 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.835632 -SourceRegion.volume = 1.165558 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.803318 -SourceRegion.volume = 1.155058 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.402715 -SourceRegion.volume = 0.699944 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.268529 -SourceRegion.volume = 0.963229 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.117560 -SourceRegion.volume = 0.581945 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.000914 -SourceRegion.volume = 0.941174 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.868080 -SourceRegion.volume = 0.863880 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.719214 -SourceRegion.volume = 1.138818 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.461179 -SourceRegion.volume = 1.076261 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.999084 -SourceRegion.volume = 0.522456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.113075 -SourceRegion.volume = 0.373613 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.077714 -SourceRegion.volume = 1.012634 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.887550 -SourceRegion.volume = 0.795790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.029875 -SourceRegion.volume = 0.499507 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.092033 -SourceRegion.volume = 1.211687 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.106047 -SourceRegion.volume = 0.250514 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.049420 -SourceRegion.volume = 1.690149 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.220699 -SourceRegion.volume = 0.566618 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.422815 -SourceRegion.volume = 1.146366 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.236103 -SourceRegion.volume = 2.156878 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.672739 -SourceRegion.volume = 0.539764 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.099876 -SourceRegion.volume = 1.839948 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.165499 -SourceRegion.volume = 0.257776 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.995190 -SourceRegion.volume = 0.459582 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.032231 -SourceRegion.volume = 0.965831 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.392859 -SourceRegion.volume = 0.937606 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.003541 -SourceRegion.volume = 1.272546 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.193056 -SourceRegion.volume = 1.213563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.139309 -SourceRegion.volume = 1.065622 -test1 -SourceRegion_add.volume = 1.339681 -SourceRegion.volume = 2.402371 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.726712 -SourceRegion.volume = 0.604357 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.336212 -SourceRegion.volume = 1.214199 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.778386 -SourceRegion.volume = 0.968159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.070882 -SourceRegion.volume = 0.917139 -test1 -SourceRegion_add.volume = 0.512005 -SourceRegion.volume = 2.235729 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.220503 -SourceRegion.volume = 1.450479 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.432324 -SourceRegion.volume = 0.722833 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.025792 -SourceRegion.volume = 1.954219 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.151203 -SourceRegion.volume = 0.404143 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.485135 -SourceRegion.volume = 0.512701 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.691892 -SourceRegion.volume = 1.641582 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.192515 -SourceRegion.volume = 2.013424 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.689600 -SourceRegion.volume = 0.079454 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.671336 -SourceRegion.volume = 0.374497 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.230563 -SourceRegion.volume = 0.681853 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.281273 -SourceRegion.volume = 4.032988 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.650525 -SourceRegion.volume = 1.177055 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.286789 -SourceRegion.volume = 2.518628 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.161118 -SourceRegion.volume = 0.169142 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.420012 -SourceRegion.volume = 2.210650 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.228732 -SourceRegion.volume = 1.568797 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.148987 -SourceRegion.volume = 1.274040 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.913715 -SourceRegion.volume = 3.126065 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.229907 -SourceRegion.volume = 0.960153 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.892405 -SourceRegion.volume = 0.518464 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.172195 -SourceRegion.volume = 2.084180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.828638 -SourceRegion.volume = 1.046881 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.870867 -SourceRegion.volume = 0.363162 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.724940 -SourceRegion.volume = 0.216733 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.724354 -SourceRegion.volume = 0.381731 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.238873 -SourceRegion.volume = 1.740229 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.269963 -SourceRegion.volume = 0.583307 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.021643 -SourceRegion.volume = 1.088889 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.199912 -SourceRegion.volume = 1.079508 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.870314 -SourceRegion.volume = 1.629989 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.801995 -SourceRegion.volume = 0.114653 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.167656 -SourceRegion.volume = 1.460230 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.557247 -SourceRegion.volume = 0.088311 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.974680 -SourceRegion.volume = 0.403251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.161780 -SourceRegion.volume = 1.814268 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.427954 -SourceRegion.volume = 4.204683 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.711680 -SourceRegion.volume = 2.687683 -test1.1 -test1 -SourceRegion_add.volume = 0.672934 -SourceRegion.volume = 2.387131 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.995545 -SourceRegion.volume = 0.510018 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.887082 -SourceRegion.volume = 0.715169 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.529197 -SourceRegion.volume = 1.173527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.773397 -SourceRegion.volume = 0.121692 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.144280 -SourceRegion.volume = 0.740967 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.508005 -SourceRegion.volume = 2.499872 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.230574 -SourceRegion.volume = 0.604147 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.065430 -SourceRegion.volume = 0.713516 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.988266 -SourceRegion.volume = 0.134035 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.572756 -SourceRegion.volume = 0.969227 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.460870 -SourceRegion.volume = 1.160548 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.101788 -SourceRegion.volume = 0.484021 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.275658 -SourceRegion.volume = 0.788149 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.305585 -SourceRegion.volume = 2.424559 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.375375 -SourceRegion.volume = 0.658337 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.452553 -SourceRegion.volume = 1.047163 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.475404 -SourceRegion.volume = 0.143911 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.387509 -SourceRegion.volume = 1.014164 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.416628 -SourceRegion.volume = 2.206585 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.354874 -SourceRegion.volume = 1.188835 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.404600 -SourceRegion.volume = 1.350832 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.247055 -SourceRegion.volume = 0.758338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.979747 -SourceRegion.volume = 0.823205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.985586 -SourceRegion.volume = 0.308979 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.632768 -SourceRegion.volume = 0.053698 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.761740 -SourceRegion.volume = 1.535739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.921558 -SourceRegion.volume = 0.807772 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.265807 -SourceRegion.volume = 1.551291 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.384692 -SourceRegion.volume = 0.985608 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.680176 -SourceRegion.volume = 1.334265 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.611925 -SourceRegion.volume = 0.680456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.307468 -SourceRegion.volume = 0.995668 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.824424 -SourceRegion.volume = 0.213875 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.764119 -SourceRegion.volume = 1.934982 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.187652 -SourceRegion.volume = 2.023577 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.652886 -SourceRegion.volume = 1.350476 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.476749 -SourceRegion.volume = 0.932227 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.139765 -SourceRegion.volume = 1.214303 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.134034 -SourceRegion.volume = 0.719984 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.445156 -SourceRegion.volume = 0.711824 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.937975 -SourceRegion.volume = 0.453580 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.981016 -SourceRegion.volume = 1.045293 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.774488 -SourceRegion.volume = 1.016853 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.133564 -SourceRegion.volume = 0.866514 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.140366 -SourceRegion.volume = 1.157520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.293169 -SourceRegion.volume = 1.004351 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.524207 -SourceRegion.volume = 0.671291 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.279470 -SourceRegion.volume = 1.074984 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.200304 -SourceRegion.volume = 0.751394 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.919496 -SourceRegion.volume = 1.898859 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.141733 -SourceRegion.volume = 1.247902 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.335556 -SourceRegion.volume = 0.214196 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.471584 -SourceRegion.volume = 0.650544 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 1.099429 -SourceRegion.volume = 1.027610 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -SourceRegion_add.volume = 1.611309 -SourceRegion.volume = 1.948296 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.677533 -SourceRegion.volume = 0.652256 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 2.391137 -SourceRegion.volume = 0.471277 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.153049 -SourceRegion.volume = 2.666594 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.396184 -SourceRegion.volume = 1.315062 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.232313 -SourceRegion.volume = 0.780253 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.741848 -SourceRegion.volume = 0.934404 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.663247 -SourceRegion.volume = 0.786589 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.935809 -SourceRegion.volume = 2.977105 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.707079 -SourceRegion.volume = 1.077125 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.462694 -SourceRegion.volume = 0.001239 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.096184 -SourceRegion.volume = 1.723631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.348809 -SourceRegion.volume = 0.215581 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.414068 -SourceRegion.volume = 4.363677 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.359392 -SourceRegion.volume = 0.804311 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.506048 -SourceRegion.volume = 0.516861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.569282 -SourceRegion.volume = 0.462807 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.001500 -SourceRegion.volume = 1.154627 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.126521 -SourceRegion.volume = 0.206561 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.126107 -SourceRegion.volume = 1.063453 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.321626 -SourceRegion.volume = 2.233103 -test1.1 -test1 -SourceRegion_add.volume = 1.432779 -SourceRegion.volume = 1.464325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.817201 -SourceRegion.volume = 0.614516 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.000158 -SourceRegion.volume = 0.196783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.649938 -SourceRegion.volume = 0.392827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 48 broadcasting 3548 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.388651 -SourceRegion.volume = 0.412492 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.255915 -SourceRegion.volume = 2.582809 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.099472 -SourceRegion.volume = 0.871572 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.365334 -SourceRegion.volume = 0.870050 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.500739 -SourceRegion.volume = 0.556686 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.252419 -SourceRegion.volume = 0.968527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.745720 -SourceRegion.volume = 0.143462 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.275194 -SourceRegion.volume = 0.946266 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.454024 -SourceRegion.volume = 0.529205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.247583 -SourceRegion.volume = 0.995132 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.329643 -SourceRegion.volume = 0.507668 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.143336 -SourceRegion.volume = 0.933955 -test1.1 -test1 -SourceRegion_add.volume = 0.803017 -SourceRegion.volume = 0.820071 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.490839 -SourceRegion.volume = 0.182641 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.193882 -SourceRegion.volume = 0.993967 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.384047 -SourceRegion.volume = 0.286041 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.901469 -SourceRegion.volume = 0.927440 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.746732 -SourceRegion.volume = 1.215502 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.588669 -SourceRegion.volume = 0.957775 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.197605 -SourceRegion.volume = 0.297015 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.223459 -SourceRegion.volume = 0.554374 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 4.050738 -SourceRegion.volume = 1.215479 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.603841 -SourceRegion.volume = 0.977738 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.525746 -SourceRegion.volume = 0.133824 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.649349 -SourceRegion.volume = 0.754206 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.492144 -SourceRegion.volume = 1.368903 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.015942 -SourceRegion.volume = 0.197245 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.484921 -SourceRegion.volume = 0.392890 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.494908 -SourceRegion.volume = 0.384280 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.168366 -SourceRegion.volume = 0.033063 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.274010 -SourceRegion.volume = 0.582488 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.009575 -SourceRegion.volume = 0.879217 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.447400 -SourceRegion.volume = 2.429519 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.796302 -SourceRegion.volume = 5.520657 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.576227 -SourceRegion.volume = 0.131488 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.933552 -SourceRegion.volume = 2.825134 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.054444 -SourceRegion.volume = 1.446143 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.706601 -SourceRegion.volume = 1.378524 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.254927 -SourceRegion.volume = 0.842294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.211493 -SourceRegion.volume = 0.037790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.180459 -SourceRegion.volume = 0.413575 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.775453 -SourceRegion.volume = 0.342162 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.897200 -SourceRegion.volume = 0.332059 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.271940 -SourceRegion.volume = 0.659192 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.200747 -SourceRegion.volume = 1.277416 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.563529 -SourceRegion.volume = 0.674098 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.000608 -SourceRegion.volume = 2.450621 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.868922 -SourceRegion.volume = 0.703322 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.771814 -SourceRegion.volume = 0.584501 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.334091 -SourceRegion.volume = 1.093811 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.851139 -SourceRegion.volume = 0.923150 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.185143 -SourceRegion.volume = 2.406479 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.364076 -SourceRegion.volume = 1.068834 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.334281 -SourceRegion.volume = 1.187788 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.233474 -SourceRegion.volume = 0.030182 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.529240 -SourceRegion.volume = 0.624711 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.688266 -SourceRegion.volume = 0.577434 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.295577 -SourceRegion.volume = 1.224085 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.613347 -SourceRegion.volume = 0.886624 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.000622 -SourceRegion.volume = 2.329332 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.948011 -SourceRegion.volume = 2.832199 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.711523 -SourceRegion.volume = 0.582302 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.399241 -SourceRegion.volume = 0.321283 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.370250 -SourceRegion.volume = 0.202713 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.104480 -SourceRegion.volume = 0.985712 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.297735 -SourceRegion.volume = 0.101012 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.941829 -SourceRegion.volume = 0.145332 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.717675 -SourceRegion.volume = 0.688377 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.739161 -SourceRegion.volume = 1.317862 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.445610 -SourceRegion.volume = 2.339788 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.070622 -SourceRegion.volume = 0.752372 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.034546 -SourceRegion.volume = 0.639737 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.356419 -SourceRegion.volume = 0.289931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.031359 -SourceRegion.volume = 0.037804 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.590045 -SourceRegion.volume = 3.165190 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.259936 -SourceRegion.volume = 0.302159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.854814 -SourceRegion.volume = 1.312922 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.442515 -SourceRegion.volume = 2.755887 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.904367 -test1 -SourceRegion_add.volume = 0.602019 -SourceRegion.volume = 0.518486 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.456318 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.775236 -SourceRegion.volume = 0.857527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.183495 -SourceRegion.volume = 1.219870 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.799814 -SourceRegion.volume = 0.651233 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.248469 -SourceRegion.volume = 0.355107 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.065904 -SourceRegion.volume = 0.420483 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.946881 -SourceRegion.volume = 0.476564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.946772 -SourceRegion.volume = 0.130473 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.564287 -SourceRegion.volume = 2.342577 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.625542 -SourceRegion.volume = 0.654116 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.181442 -SourceRegion.volume = 0.573373 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.602120 -SourceRegion.volume = 0.853817 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.233404 -SourceRegion.volume = 0.322634 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.134711 -SourceRegion.volume = 1.622341 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.293177 -SourceRegion.volume = 0.417777 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.990923 -SourceRegion.volume = 0.470349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.761544 -SourceRegion.volume = 0.286101 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.217727 -SourceRegion.volume = 0.467816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.047839 -SourceRegion.volume = 1.213010 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.777483 -SourceRegion.volume = 0.190108 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.197554 -SourceRegion.volume = 0.331190 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.182734 -SourceRegion.volume = 0.565824 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.615977 -SourceRegion.volume = 1.244347 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.030444 -SourceRegion.volume = 0.907705 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.240341 -SourceRegion.volume = 1.102766 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.470050 -SourceRegion.volume = 0.031097 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.325095 -SourceRegion.volume = 0.420063 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.194001 -SourceRegion.volume = 1.143941 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.602703 -SourceRegion.volume = 1.227573 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.455699 -SourceRegion.volume = 0.802594 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.175097 -SourceRegion.volume = 0.733732 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.435542 -SourceRegion.volume = 0.395915 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.623370 -SourceRegion.volume = 1.007525 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.253630 -SourceRegion.volume = 0.100848 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.897068 -SourceRegion.volume = 0.363517 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.243701 -SourceRegion.volume = 1.018308 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.569780 -SourceRegion.volume = 0.993913 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.309574 -SourceRegion.volume = 1.133789 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.369398 -SourceRegion.volume = 0.075112 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.507816 -SourceRegion.volume = 1.363847 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.288936 -SourceRegion.volume = 2.500379 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.806782 -SourceRegion.volume = 0.851603 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.422695 -SourceRegion.volume = 0.251576 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.330798 -SourceRegion.volume = 0.158345 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.251069 -SourceRegion.volume = 1.793237 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.346697 -SourceRegion.volume = 0.125153 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.115563 -SourceRegion.volume = 0.618523 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.764529 -SourceRegion.volume = 0.626872 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.125930 -SourceRegion.volume = 1.778492 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.757611 -SourceRegion.volume = 3.025286 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.204356 -SourceRegion.volume = 1.317002 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.392735 -SourceRegion.volume = 0.224840 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.470476 -SourceRegion.volume = 0.341728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.090727 -SourceRegion.volume = 1.521255 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 49 broadcasting 2159 source regions to other ranks. -test1 -SourceRegion_add.volume = 2.441457 -SourceRegion.volume = 0.666645 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.384268 -SourceRegion.volume = 1.696245 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.162263 -SourceRegion.volume = 1.116675 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.341120 -SourceRegion.volume = 0.821893 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.422492 -SourceRegion.volume = 1.589726 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.122481 -SourceRegion.volume = 0.304754 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.215440 -SourceRegion.volume = 1.677999 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.416421 -SourceRegion.volume = 1.628849 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.594415 -SourceRegion.volume = 3.002254 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.306781 -SourceRegion.volume = 0.169924 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.616422 -SourceRegion.volume = 1.480075 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.435392 -SourceRegion.volume = 0.237434 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.867281 -SourceRegion.volume = 1.168765 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.708617 -SourceRegion.volume = 1.636383 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.582300 -SourceRegion.volume = 2.281529 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.909094 -SourceRegion.volume = 0.648681 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.819388 -SourceRegion.volume = 1.499763 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.286371 -SourceRegion.volume = 1.002307 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.230642 -SourceRegion.volume = 0.477314 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.842199 -SourceRegion.volume = 1.366560 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.333950 -SourceRegion.volume = 2.145085 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.338689 -SourceRegion.volume = 2.117316 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.606818 -SourceRegion.volume = 0.837458 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.333980 -SourceRegion.volume = 0.519526 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.653760 -SourceRegion.volume = 0.290154 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.030918 -SourceRegion.volume = 2.342150 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.092001 -SourceRegion.volume = 2.327100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.067962 -SourceRegion.volume = 1.070017 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.231712 -SourceRegion.volume = 2.303498 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.214282 -SourceRegion.volume = 2.287281 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.350130 -SourceRegion.volume = 1.764305 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.094459 -SourceRegion.volume = 2.371433 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.314655 -SourceRegion.volume = 1.231799 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.811037 -SourceRegion.volume = 0.859631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.255389 -SourceRegion.volume = 1.088179 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 1.999962 -SourceRegion.volume = 0.898880 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.424628 -SourceRegion.volume = 3.079776 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.864559 -SourceRegion.volume = 1.308453 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.802173 -SourceRegion.volume = 1.098927 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.330942 -SourceRegion.volume = 2.061914 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.825843 -SourceRegion.volume = 1.811409 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.288699 -SourceRegion.volume = 1.237633 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.561793 -SourceRegion.volume = 1.006388 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.093316 -SourceRegion.volume = 2.051789 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.203123 -SourceRegion.volume = 1.307709 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.050642 -SourceRegion.volume = 1.740580 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.249215 -SourceRegion.volume = 1.145171 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.661969 -SourceRegion.volume = 2.951671 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.196195 -SourceRegion.volume = 0.656963 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.517890 -SourceRegion.volume = 0.712229 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.050639 -SourceRegion.volume = 0.728826 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.121673 -SourceRegion.volume = 4.996567 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.408695 -SourceRegion.volume = 2.502990 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.739753 -SourceRegion.volume = 0.008159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.935527 -SourceRegion.volume = 2.709400 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.888611 -SourceRegion.volume = 1.217956 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.600775 -SourceRegion.volume = 0.622863 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.444006 -SourceRegion.volume = 1.009961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.179402 -SourceRegion.volume = 1.696326 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.189811 -SourceRegion.volume = 1.031749 -test1.1 -test1 -SourceRegion_add.volume = 0.678509 -SourceRegion.volume = 1.490554 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.472688 -SourceRegion.volume = 2.011495 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.501917 -SourceRegion.volume = 0.864086 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.031655 -SourceRegion.volume = 1.418676 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.490473 -SourceRegion.volume = 1.382940 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.205306 -SourceRegion.volume = 1.473754 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.795932 -SourceRegion.volume = 0.659004 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.245418 -SourceRegion.volume = 1.765921 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.011125 -SourceRegion.volume = 0.376464 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.030697 -SourceRegion.volume = 3.007787 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.882715 -SourceRegion.volume = 0.073201 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.957763 -SourceRegion.volume = 0.749102 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.069183 -SourceRegion.volume = 2.694325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.541995 -SourceRegion.volume = 0.108482 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.799673 -SourceRegion.volume = 0.533101 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.272331 -SourceRegion.volume = 2.102300 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.392721 -SourceRegion.volume = 2.305748 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.001999 -SourceRegion.volume = 0.443272 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.024315 -SourceRegion.volume = 2.488521 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.540132 -SourceRegion.volume = 1.357342 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.027871 -SourceRegion.volume = 0.686102 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.997825 -SourceRegion.volume = 2.218014 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.816444 -SourceRegion.volume = 1.134301 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.031065 -SourceRegion.volume = 1.048339 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.569912 -SourceRegion.volume = 0.062874 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.352503 -SourceRegion.volume = 0.803825 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.950240 -SourceRegion.volume = 2.123024 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.611354 -SourceRegion.volume = 1.814697 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.980777 -SourceRegion.volume = 2.539059 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.185425 -SourceRegion.volume = 2.204108 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.966638 -SourceRegion.volume = 0.594662 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.592531 -SourceRegion.volume = 0.746295 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.313370 -SourceRegion.volume = 0.227315 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.506633 -SourceRegion.volume = 1.323755 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.215275 -SourceRegion.volume = 3.065052 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.923205 -SourceRegion.volume = 2.313110 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.936233 -SourceRegion.volume = 0.116567 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.021573 -SourceRegion.volume = 2.009293 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.796127 -SourceRegion.volume = 0.671937 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 2.018202 -SourceRegion.volume = 0.644705 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.126111 -SourceRegion.volume = 1.935156 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.998373 -SourceRegion.volume = 1.461326 -test1.1 -test1 -SourceRegion_add.volume = 1.876142 -SourceRegion.volume = 1.323661 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.065639 -SourceRegion.volume = 2.309667 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.603720 -SourceRegion.volume = 1.249800 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.751952 -SourceRegion.volume = 0.867308 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.674909 -SourceRegion.volume = 0.781633 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.048684 -SourceRegion.volume = 0.414092 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.868154 -SourceRegion.volume = 1.779796 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.148487 -SourceRegion.volume = 1.806245 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.660264 -SourceRegion.volume = 1.784925 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.853800 -SourceRegion.volume = 2.544080 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.063490 -SourceRegion.volume = 0.336362 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 1.610639 -SourceRegion.volume = 1.728200 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.511497 -SourceRegion.volume = 2.059229 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.784407 -SourceRegion.volume = 0.717153 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.584846 -SourceRegion.volume = 0.994440 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.223221 -SourceRegion.volume = 0.724384 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -Rank 50 broadcasting 2512 source regions to other ranks. -test1 -SourceRegion_add.volume = 85.904902 -SourceRegion.volume = 62.873285 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 66.375071 -SourceRegion.volume = 79.467907 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.180535 -SourceRegion.volume = 0.526011 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.355627 -SourceRegion.volume = 1.227122 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.916619 -SourceRegion.volume = 0.069063 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.130747 -SourceRegion.volume = 0.994931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.952445 -SourceRegion.volume = 0.058151 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.465957 -SourceRegion.volume = 1.124846 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 107.960501 -SourceRegion.volume = 37.330115 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 47.069480 -SourceRegion.volume = 122.734970 -test1 -SourceRegion_add.volume = 0.873943 -SourceRegion.volume = 1.134713 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.824101 -SourceRegion.volume = 0.765803 -test1 -SourceRegion_add.volume = 0.500203 -SourceRegion.volume = 1.256634 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.992767 -SourceRegion.volume = 1.834040 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.636081 -SourceRegion.volume = 0.467916 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.397020 -SourceRegion.volume = 0.245807 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.483171 -SourceRegion.volume = 0.076304 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.393795 -SourceRegion.volume = 0.885417 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.281069 -SourceRegion.volume = 1.605519 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.373164 -SourceRegion.volume = 1.137071 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.340423 -SourceRegion.volume = 0.134678 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.624762 -SourceRegion.volume = 0.638735 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.019704 -SourceRegion.volume = 1.294406 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.487203 -SourceRegion.volume = 0.335724 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 74.537531 -SourceRegion.volume = 77.108475 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.793804 -SourceRegion.volume = 0.253339 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.602249 -SourceRegion.volume = 1.257753 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.181092 -SourceRegion.volume = 0.841130 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.353355 -SourceRegion.volume = 0.298527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.771703 -SourceRegion.volume = 0.234344 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.526435 -SourceRegion.volume = 1.251551 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.202306 -SourceRegion.volume = 1.350724 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.319440 -SourceRegion.volume = 1.718986 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.546121 -SourceRegion.volume = 0.434885 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.201547 -SourceRegion.volume = 1.039994 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.267917 -SourceRegion.volume = 0.706315 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.295540 -SourceRegion.volume = 0.942396 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.067426 -SourceRegion.volume = 0.786466 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.802809 -SourceRegion.volume = 0.380869 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.534054 -SourceRegion.volume = 0.236551 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.101740 -SourceRegion.volume = 0.799125 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.399756 -SourceRegion.volume = 1.138708 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.013653 -SourceRegion.volume = 1.234549 -test1 -SourceRegion_add.volume = 0.741913 -SourceRegion.volume = 0.607564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.332483 -SourceRegion.volume = 1.408294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.973323 -SourceRegion.volume = 1.425247 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.727259 -test1 -SourceRegion_add.volume = 99.736385 -SourceRegion.volume = 61.359749 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.245710 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.184663 -SourceRegion.volume = 1.066776 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.116662 -SourceRegion.volume = 0.488042 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.098821 -SourceRegion.volume = 1.202414 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.265217 -SourceRegion.volume = 1.154616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.218020 -SourceRegion.volume = 0.371189 -test1 -SourceRegion_add.volume = 56.686929 -SourceRegion.volume = 66.903457 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.027360 -SourceRegion.volume = 0.340928 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.610207 -SourceRegion.volume = 2.134118 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.049160 -SourceRegion.volume = 0.966973 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 116.328997 -SourceRegion.volume = 64.090043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.059861 -SourceRegion.volume = 1.428269 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 54.287417 -SourceRegion.volume = 99.200496 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.124172 -SourceRegion.volume = 0.052511 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.726020 -SourceRegion.volume = 2.533130 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 41.238039 -SourceRegion.volume = 117.880393 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.802832 -SourceRegion.volume = 0.889736 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.394033 -SourceRegion.volume = 0.507139 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.202949 -SourceRegion.volume = 0.076737 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.927530 -SourceRegion.volume = 0.243589 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.168180 -SourceRegion.volume = 0.459924 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.568145 -SourceRegion.volume = 1.541328 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.538541 -test1 -SourceRegion_add.volume = 0.424833 -SourceRegion.volume = 2.223058 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.792003 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.371759 -SourceRegion.volume = 1.341191 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.241752 -SourceRegion.volume = 0.045917 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.052075 -SourceRegion.volume = 0.439128 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.843880 -SourceRegion.volume = 0.662280 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.280608 -SourceRegion.volume = 1.023343 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.401132 -SourceRegion.volume = 0.314303 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.056007 -SourceRegion.volume = 0.717699 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.645628 -SourceRegion.volume = 0.634948 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.727426 -SourceRegion.volume = 0.270338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.977009 -SourceRegion.volume = 0.217466 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.811784 -test1 -SourceRegion_add.volume = 1.498598 -SourceRegion.volume = 0.471325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.829086 -SourceRegion.volume = 0.807436 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.190783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.849733 -SourceRegion.volume = 0.711131 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.525148 -SourceRegion.volume = 0.977484 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.748572 -SourceRegion.volume = 0.867996 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 91.901099 -SourceRegion.volume = 54.082297 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.631812 -SourceRegion.volume = 0.527282 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.505707 -SourceRegion.volume = 0.591180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.293850 -SourceRegion.volume = 0.465175 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.238398 -SourceRegion.volume = 0.738094 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.817718 -SourceRegion.volume = 0.521654 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.468262 -SourceRegion.volume = 1.197919 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.828698 -SourceRegion.volume = 0.038984 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.285447 -SourceRegion.volume = 0.272394 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.926089 -SourceRegion.volume = 0.693398 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.728837 -SourceRegion.volume = 0.211551 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.710614 -SourceRegion.volume = 1.184610 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.284179 -SourceRegion.volume = 0.040113 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.809329 -SourceRegion.volume = 0.226230 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.148116 -SourceRegion.volume = 1.410839 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.327197 -SourceRegion.volume = 1.214040 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.258170 -SourceRegion.volume = 1.520370 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.681523 -SourceRegion.volume = 0.760151 -test1 -SourceRegion_add.volume = 58.921425 -SourceRegion.volume = 97.889594 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.916706 -SourceRegion.volume = 1.034655 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.256420 -SourceRegion.volume = 0.206174 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.010885 -SourceRegion.volume = 0.690977 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.886201 -SourceRegion.volume = 1.345233 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.337198 -SourceRegion.volume = 0.752881 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.788889 -SourceRegion.volume = 0.953600 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.471619 -SourceRegion.volume = 0.275310 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.460978 -SourceRegion.volume = 1.487893 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.692190 -SourceRegion.volume = 0.715482 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.879000 -SourceRegion.volume = 0.350617 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.697884 -SourceRegion.volume = 0.873969 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.071493 -SourceRegion.volume = 0.911061 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.166641 -SourceRegion.volume = 0.933491 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.146432 -SourceRegion.volume = 0.656603 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 51 broadcasting 2233 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.266953 -SourceRegion.volume = 1.229776 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.275344 -SourceRegion.volume = 1.614271 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.551316 -SourceRegion.volume = 2.456697 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.403782 -SourceRegion.volume = 1.154140 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.700802 -SourceRegion.volume = 1.049325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.898904 -SourceRegion.volume = 0.188986 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.440084 -SourceRegion.volume = 0.566225 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.294076 -SourceRegion.volume = 1.442901 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.139798 -SourceRegion.volume = 1.805060 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.203771 -SourceRegion.volume = 0.056529 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.272240 -SourceRegion.volume = 2.765563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.713386 -SourceRegion.volume = 0.801338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.173757 -SourceRegion.volume = 3.400591 -test1 -SourceRegion_add.volume = 1.106426 -SourceRegion.volume = 3.613130 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.456163 -SourceRegion.volume = 3.785550 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.765728 -SourceRegion.volume = 1.448683 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.986951 -SourceRegion.volume = 2.081991 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.545351 -SourceRegion.volume = 1.828056 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.540488 -SourceRegion.volume = 0.641404 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.839517 -SourceRegion.volume = 1.814814 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.667047 -SourceRegion.volume = 2.430471 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.785529 -SourceRegion.volume = 1.104106 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.832050 -SourceRegion.volume = 1.606045 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.766027 -SourceRegion.volume = 0.587124 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.205348 -SourceRegion.volume = 0.586567 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.171559 -SourceRegion.volume = 0.452441 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.352063 -SourceRegion.volume = 0.686491 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.759735 -SourceRegion.volume = 0.033270 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.402819 -SourceRegion.volume = 3.210932 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.389680 -SourceRegion.volume = 0.910896 -test1.1 -test1.2 -test1.3 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.842089 -SourceRegion.volume = 2.196054 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.422988 -SourceRegion.volume = 1.176949 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.119645 -SourceRegion.volume = 0.114617 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.081462 -SourceRegion.volume = 1.886051 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.532022 -SourceRegion.volume = 3.353596 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.449790 -SourceRegion.volume = 0.694996 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.914294 -SourceRegion.volume = 3.681065 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.632799 -SourceRegion.volume = 1.206861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.382309 -SourceRegion.volume = 1.004416 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.795833 -SourceRegion.volume = 3.102953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.298134 -SourceRegion.volume = 0.325713 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.079681 -SourceRegion.volume = 1.282358 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.887264 -SourceRegion.volume = 2.051848 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.718841 -SourceRegion.volume = 1.738242 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.895028 -SourceRegion.volume = 3.221668 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.451503 -SourceRegion.volume = 1.559907 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.918357 -SourceRegion.volume = 1.141080 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.093049 -SourceRegion.volume = 0.628718 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.283539 -SourceRegion.volume = 1.686311 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.544591 -SourceRegion.volume = 4.374028 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.402021 -SourceRegion.volume = 2.051139 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.137979 -SourceRegion.volume = 0.316341 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.685199 -SourceRegion.volume = 0.987986 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.649591 -SourceRegion.volume = 1.815614 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.929766 -SourceRegion.volume = 1.835158 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.776417 -SourceRegion.volume = 0.021909 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.767452 -SourceRegion.volume = 0.590075 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.785869 -SourceRegion.volume = 0.655966 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 2.346809 -SourceRegion.volume = 1.320651 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.873721 -SourceRegion.volume = 1.517456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.360459 -SourceRegion.volume = 3.595352 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.008654 -SourceRegion.volume = 0.375321 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.539043 -SourceRegion.volume = 1.507760 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.885678 -SourceRegion.volume = 2.516880 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.179823 -SourceRegion.volume = 1.135906 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.805535 -SourceRegion.volume = 0.955806 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.000844 -SourceRegion.volume = 2.954665 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.947117 -SourceRegion.volume = 2.306073 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.651952 -SourceRegion.volume = 0.642555 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.085901 -SourceRegion.volume = 2.079815 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.164155 -SourceRegion.volume = 1.338626 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.107371 -SourceRegion.volume = 1.023512 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.586306 -SourceRegion.volume = 2.077810 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.809836 -SourceRegion.volume = 1.443615 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.600383 -SourceRegion.volume = 1.506860 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.060167 -SourceRegion.volume = 0.330472 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.906868 -test1 -SourceRegion_add.volume = 2.358344 -SourceRegion.volume = 0.258457 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.494469 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.455880 -SourceRegion.volume = 1.622816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.109121 -SourceRegion.volume = 1.196643 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.717083 -SourceRegion.volume = 2.442711 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.225917 -SourceRegion.volume = 0.589164 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.964110 -SourceRegion.volume = 0.509774 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.357870 -SourceRegion.volume = 0.349828 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.685185 -SourceRegion.volume = 1.873637 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.138516 -SourceRegion.volume = 1.436458 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.705918 -SourceRegion.volume = 0.895295 -test1.1 -test1 -SourceRegion_add.volume = 3.105491 -SourceRegion.volume = 1.680819 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.993655 -SourceRegion.volume = 0.634060 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.231479 -SourceRegion.volume = 0.328520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.277282 -SourceRegion.volume = 2.148204 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.541500 -SourceRegion.volume = 0.999783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.061614 -SourceRegion.volume = 2.315086 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.722628 -SourceRegion.volume = 5.784186 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.096073 -SourceRegion.volume = 2.026420 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.175671 -SourceRegion.volume = 1.247979 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.849102 -SourceRegion.volume = 0.592620 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.401871 -SourceRegion.volume = 0.811904 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 2.292135 -test1 -SourceRegion_add.volume = 1.705794 -SourceRegion.volume = 2.028694 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.970331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.375656 -SourceRegion.volume = 1.293121 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.639596 -SourceRegion.volume = 2.359077 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.095239 -SourceRegion.volume = 1.021832 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.316793 -SourceRegion.volume = 1.403994 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.156213 -SourceRegion.volume = 1.487924 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.929405 -SourceRegion.volume = 0.731873 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.802524 -SourceRegion.volume = 1.102816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.794983 -SourceRegion.volume = 0.450315 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.781106 -SourceRegion.volume = 1.700781 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.170306 -SourceRegion.volume = 0.258847 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.952648 -SourceRegion.volume = 1.071976 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.199349 -SourceRegion.volume = 2.280669 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.539126 -SourceRegion.volume = 1.126783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.218531 -SourceRegion.volume = 1.516047 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.650570 -SourceRegion.volume = 1.139485 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.550882 -SourceRegion.volume = 1.437847 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.953747 -SourceRegion.volume = 1.796637 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.726336 -SourceRegion.volume = 0.534378 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.938264 -SourceRegion.volume = 1.039344 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.160269 -SourceRegion.volume = 1.087600 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.659446 -SourceRegion.volume = 1.400674 -test1 -SourceRegion_add.volume = 1.462524 -SourceRegion.volume = 1.015768 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.528451 -SourceRegion.volume = 0.481151 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.194912 -SourceRegion.volume = 2.168859 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 1.847978 -SourceRegion.volume = 0.427221 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.791567 -SourceRegion.volume = 2.441537 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.714109 -SourceRegion.volume = 1.272894 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 1.406766 -SourceRegion.volume = 0.254181 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.524950 -SourceRegion.volume = 1.944676 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 2.039018 -SourceRegion.volume = 1.305900 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.418567 -SourceRegion.volume = 1.165130 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.681182 -SourceRegion.volume = 0.490749 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.923260 -SourceRegion.volume = 1.075118 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.752903 -SourceRegion.volume = 1.789791 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.710621 -SourceRegion.volume = 1.307775 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.090685 -SourceRegion.volume = 1.194451 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.847512 -SourceRegion.volume = 0.666668 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.180259 -SourceRegion.volume = 1.464223 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.903064 -SourceRegion.volume = 2.483714 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.063680 -SourceRegion.volume = 2.655704 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.836124 -SourceRegion.volume = 0.862566 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.724551 -SourceRegion.volume = 1.516758 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.590296 -SourceRegion.volume = 0.572399 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.277343 -SourceRegion.volume = 1.114468 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.218145 -SourceRegion.volume = 0.788585 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.138339 -SourceRegion.volume = 2.968056 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.395376 -SourceRegion.volume = 0.940613 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.589732 -SourceRegion.volume = 2.155433 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 2.004294 -SourceRegion.volume = 0.423025 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.602317 -SourceRegion.volume = 0.656326 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.262338 -SourceRegion.volume = 1.494764 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.899181 -SourceRegion.volume = 2.225344 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.059458 -SourceRegion.volume = 0.939287 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.127427 -SourceRegion.volume = 2.080492 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.522803 -SourceRegion.volume = 1.855041 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.352121 -SourceRegion.volume = 2.409922 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.547112 -SourceRegion.volume = 1.519386 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.092726 -SourceRegion.volume = 1.829014 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.686071 -SourceRegion.volume = 0.876663 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.091095 -SourceRegion.volume = 1.671210 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.192737 -SourceRegion.volume = 1.635321 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.625037 -SourceRegion.volume = 1.878431 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.998279 -SourceRegion.volume = 3.444398 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.092762 -SourceRegion.volume = 1.404863 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.161489 -SourceRegion.volume = 1.439901 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.940272 -SourceRegion.volume = 0.142479 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.412391 -SourceRegion.volume = 0.479332 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.453987 -SourceRegion.volume = 1.624762 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.183262 -SourceRegion.volume = 0.980111 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.379052 -SourceRegion.volume = 0.823921 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.646536 -SourceRegion.volume = 1.806656 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.920759 -SourceRegion.volume = 1.710145 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.646898 -SourceRegion.volume = 2.082746 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.902892 -SourceRegion.volume = 1.701020 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.315662 -SourceRegion.volume = 1.006680 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.431581 -SourceRegion.volume = 1.701800 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.988581 -SourceRegion.volume = 1.089993 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.828847 -SourceRegion.volume = 1.719183 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.468773 -SourceRegion.volume = 0.528593 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.870985 -SourceRegion.volume = 2.133517 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.018846 -SourceRegion.volume = 4.647912 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.828784 -SourceRegion.volume = 2.532036 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.920446 -SourceRegion.volume = 1.605259 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.937655 -SourceRegion.volume = 1.200211 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.930977 -SourceRegion.volume = 0.493887 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.472093 -SourceRegion.volume = 2.305043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.499776 -SourceRegion.volume = 0.229780 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.864507 -SourceRegion.volume = 1.423984 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.193290 -SourceRegion.volume = 1.814586 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.229874 -SourceRegion.volume = 1.218990 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.362739 -SourceRegion.volume = 2.153374 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 1.320123 -SourceRegion.volume = 0.674128 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.619407 -SourceRegion.volume = 0.809526 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.174801 -SourceRegion.volume = 2.164813 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.192937 -SourceRegion.volume = 0.361747 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 1.081029 -SourceRegion.volume = 0.232974 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.982469 -SourceRegion.volume = 0.500338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.165455 -SourceRegion.volume = 1.940584 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.847586 -SourceRegion.volume = 0.925395 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.714214 -SourceRegion.volume = 1.456415 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.528058 -SourceRegion.volume = 3.533501 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.179902 -SourceRegion.volume = 0.162472 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.120280 -SourceRegion.volume = 1.902105 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.488732 -SourceRegion.volume = 0.973078 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.393894 -SourceRegion.volume = 0.962272 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.407940 -SourceRegion.volume = 2.502016 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.654780 -SourceRegion.volume = 2.133030 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 1.614171 -SourceRegion.volume = 1.699518 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.656077 -SourceRegion.volume = 2.423704 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.080042 -SourceRegion.volume = 0.906624 -test1.1 -test1 -SourceRegion_add.volume = 1.585557 -SourceRegion.volume = 0.975317 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.659226 -SourceRegion.volume = 0.928842 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.467170 -SourceRegion.volume = 1.692464 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.205683 -SourceRegion.volume = 0.900311 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.025514 -SourceRegion.volume = 0.852624 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.381310 -SourceRegion.volume = 1.235567 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.835334 -SourceRegion.volume = 2.505109 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.143493 -SourceRegion.volume = 1.643883 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.099858 -SourceRegion.volume = 3.532076 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.646263 -SourceRegion.volume = 0.286916 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.582475 -SourceRegion.volume = 1.358117 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.938844 -SourceRegion.volume = 0.747552 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 52 broadcasting 2216 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.072444 -SourceRegion.volume = 2.174710 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.536435 -SourceRegion.volume = 1.968571 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.857125 -SourceRegion.volume = 2.237659 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.467758 -SourceRegion.volume = 0.930472 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.202209 -SourceRegion.volume = 1.024767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.606280 -SourceRegion.volume = 1.211288 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.169983 -SourceRegion.volume = 3.013705 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.183072 -SourceRegion.volume = 1.450022 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.843883 -SourceRegion.volume = 0.441255 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.055151 -SourceRegion.volume = 1.939199 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.070569 -SourceRegion.volume = 1.763593 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.757826 -SourceRegion.volume = 1.645898 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.605073 -SourceRegion.volume = 1.006992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.859171 -SourceRegion.volume = 1.301144 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.901063 -SourceRegion.volume = 3.514144 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.137824 -SourceRegion.volume = 0.006574 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.925437 -SourceRegion.volume = 0.686235 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.454015 -SourceRegion.volume = 2.466450 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.842026 -SourceRegion.volume = 1.550007 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.105684 -SourceRegion.volume = 1.798284 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.999380 -SourceRegion.volume = 2.087345 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.465316 -SourceRegion.volume = 1.037965 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.386557 -SourceRegion.volume = 2.131196 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.441779 -SourceRegion.volume = 0.610133 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.128659 -SourceRegion.volume = 0.381563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.801864 -SourceRegion.volume = 2.720041 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.095739 -SourceRegion.volume = 2.189638 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.038204 -SourceRegion.volume = 0.007780 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.509740 -SourceRegion.volume = 1.404638 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.079408 -SourceRegion.volume = 2.734616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.114040 -SourceRegion.volume = 1.786950 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.113689 -SourceRegion.volume = 2.042498 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.447447 -SourceRegion.volume = 1.991350 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.523831 -SourceRegion.volume = 0.487306 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.917082 -SourceRegion.volume = 1.283295 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.708580 -SourceRegion.volume = 0.102291 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.684698 -SourceRegion.volume = 2.828356 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.076993 -SourceRegion.volume = 1.522623 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.886779 -SourceRegion.volume = 0.402655 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.817498 -SourceRegion.volume = 1.619459 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.958179 -SourceRegion.volume = 1.903942 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.267074 -SourceRegion.volume = 1.394961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.342665 -SourceRegion.volume = 2.540437 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.050802 -SourceRegion.volume = 1.704197 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.706663 -SourceRegion.volume = 1.904930 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.774205 -SourceRegion.volume = 2.016470 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.814302 -SourceRegion.volume = 1.121764 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.336304 -SourceRegion.volume = 0.024387 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.584700 -SourceRegion.volume = 1.118131 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.726701 -SourceRegion.volume = 1.607349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.204681 -SourceRegion.volume = 0.709877 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.776920 -SourceRegion.volume = 1.682182 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.325596 -SourceRegion.volume = 0.756903 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.514044 -SourceRegion.volume = 0.231897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.746552 -SourceRegion.volume = 1.365931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.451459 -SourceRegion.volume = 1.929866 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.460858 -SourceRegion.volume = 1.497296 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.925853 -SourceRegion.volume = 1.795681 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.686193 -SourceRegion.volume = 0.751585 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.687854 -SourceRegion.volume = 0.407644 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.826985 -SourceRegion.volume = 0.833268 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.218135 -SourceRegion.volume = 1.088644 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.823208 -SourceRegion.volume = 1.644193 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.995483 -SourceRegion.volume = 0.780419 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.077764 -SourceRegion.volume = 1.618113 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.908208 -SourceRegion.volume = 0.889438 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.562390 -SourceRegion.volume = 1.671072 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.856409 -SourceRegion.volume = 0.064182 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.621401 -SourceRegion.volume = 0.975377 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.449817 -SourceRegion.volume = 1.542690 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.422480 -SourceRegion.volume = 1.208012 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.272218 -SourceRegion.volume = 0.369048 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.260061 -SourceRegion.volume = 2.074376 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.661823 -SourceRegion.volume = 1.190598 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.855541 -SourceRegion.volume = 2.209629 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.947173 -SourceRegion.volume = 1.327911 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.998760 -SourceRegion.volume = 2.661378 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.935965 -SourceRegion.volume = 0.672759 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.089296 -SourceRegion.volume = 2.304236 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.814203 -SourceRegion.volume = 0.376582 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.078588 -SourceRegion.volume = 1.708439 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.197081 -SourceRegion.volume = 4.603869 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.472477 -SourceRegion.volume = 2.446589 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.078498 -SourceRegion.volume = 3.175469 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.623560 -SourceRegion.volume = 1.846470 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.955448 -SourceRegion.volume = 1.428492 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.686360 -SourceRegion.volume = 4.218575 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.435857 -SourceRegion.volume = 1.126265 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.474376 -SourceRegion.volume = 1.885582 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.133294 -SourceRegion.volume = 3.801552 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.937711 -SourceRegion.volume = 2.174542 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.678091 -SourceRegion.volume = 0.010187 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.354343 -SourceRegion.volume = 2.372546 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.315215 -SourceRegion.volume = 1.171282 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.612294 -SourceRegion.volume = 3.092047 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.764220 -SourceRegion.volume = 1.874054 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.470836 -SourceRegion.volume = 0.060654 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.021511 -SourceRegion.volume = 0.855885 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.015715 -SourceRegion.volume = 1.674439 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.499095 -SourceRegion.volume = 1.875355 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.731445 -SourceRegion.volume = 1.264876 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.992222 -SourceRegion.volume = 2.256082 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.124817 -SourceRegion.volume = 1.765253 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.214926 -SourceRegion.volume = 1.434554 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.371595 -SourceRegion.volume = 1.048367 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.186509 -SourceRegion.volume = 2.194917 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.582380 -SourceRegion.volume = 1.862637 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.623625 -SourceRegion.volume = 1.071328 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.460222 -SourceRegion.volume = 1.161127 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.766388 -SourceRegion.volume = 1.278258 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.752085 -SourceRegion.volume = 2.180434 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.947229 -SourceRegion.volume = 1.126059 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.008800 -SourceRegion.volume = 1.127232 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.061251 -SourceRegion.volume = 3.670524 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.020176 -SourceRegion.volume = 0.675973 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.957492 -SourceRegion.volume = 0.763834 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.945333 -SourceRegion.volume = 1.943309 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.808578 -SourceRegion.volume = 0.501447 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.887303 -SourceRegion.volume = 0.525409 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.584490 -SourceRegion.volume = 4.580254 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.452674 -SourceRegion.volume = 0.866211 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.685609 -SourceRegion.volume = 0.260397 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.292510 -SourceRegion.volume = 3.896158 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.124352 -SourceRegion.volume = 1.943451 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.985848 -SourceRegion.volume = 1.247393 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.042556 -SourceRegion.volume = 2.129304 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.524218 -SourceRegion.volume = 1.928994 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.089620 -SourceRegion.volume = 1.128378 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.655789 -SourceRegion.volume = 0.847566 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.020378 -SourceRegion.volume = 2.332546 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.952635 -SourceRegion.volume = 1.384458 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.896028 -SourceRegion.volume = 1.292436 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.812889 -SourceRegion.volume = 1.352740 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.432192 -SourceRegion.volume = 2.958190 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.308240 -SourceRegion.volume = 2.113373 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.158253 -SourceRegion.volume = 1.289143 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.079007 -SourceRegion.volume = 2.998930 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.507755 -SourceRegion.volume = 1.931890 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.114871 -SourceRegion.volume = 2.233656 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.681739 -SourceRegion.volume = 1.956910 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.784974 -SourceRegion.volume = 2.018293 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.060129 -SourceRegion.volume = 1.009093 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.531660 -SourceRegion.volume = 2.233828 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.509308 -SourceRegion.volume = 0.791804 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.770195 -SourceRegion.volume = 2.745043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.754248 -SourceRegion.volume = 1.177683 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.780277 -SourceRegion.volume = 2.270603 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.419014 -SourceRegion.volume = 2.008770 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.600994 -SourceRegion.volume = 2.409226 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.753328 -SourceRegion.volume = 1.564851 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.918394 -SourceRegion.volume = 1.708654 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.884669 -SourceRegion.volume = 1.874185 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.664275 -SourceRegion.volume = 1.119818 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.094869 -SourceRegion.volume = 1.076797 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.077592 -SourceRegion.volume = 0.520494 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.485517 -SourceRegion.volume = 0.961708 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.323339 -SourceRegion.volume = 0.102828 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.537476 -SourceRegion.volume = 1.255823 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.544083 -SourceRegion.volume = 0.694316 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.538906 -SourceRegion.volume = 1.649804 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.872425 -SourceRegion.volume = 0.898334 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.665769 -SourceRegion.volume = 1.560977 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.490522 -SourceRegion.volume = 0.994815 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.290111 -SourceRegion.volume = 0.070946 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.311353 -SourceRegion.volume = 1.790069 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.987175 -SourceRegion.volume = 0.780953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.934385 -SourceRegion.volume = 2.087207 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.138465 -SourceRegion.volume = 1.298056 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.639966 -SourceRegion.volume = 1.892776 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.366839 -SourceRegion.volume = 0.298646 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.470112 -SourceRegion.volume = 1.617591 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.267725 -SourceRegion.volume = 1.907045 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.836862 -SourceRegion.volume = 0.832837 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.530981 -SourceRegion.volume = 1.179916 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.835474 -SourceRegion.volume = 1.013894 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 53 broadcasting 2006 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.707527 -SourceRegion.volume = 0.814782 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.017128 -SourceRegion.volume = 1.251717 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.564647 -SourceRegion.volume = 1.584420 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.507290 -SourceRegion.volume = 1.738831 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.868238 -SourceRegion.volume = 0.311935 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.781030 -SourceRegion.volume = 1.722102 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.909570 -SourceRegion.volume = 1.727444 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.685359 -SourceRegion.volume = 1.385414 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.992435 -SourceRegion.volume = 1.132736 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.835117 -SourceRegion.volume = 0.279088 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.909848 -SourceRegion.volume = 0.680996 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.450852 -SourceRegion.volume = 2.709706 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.453682 -SourceRegion.volume = 0.463910 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.958282 -SourceRegion.volume = 1.234424 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.395793 -SourceRegion.volume = 2.712239 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.303097 -SourceRegion.volume = 0.905081 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.885745 -SourceRegion.volume = 0.108739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.701293 -SourceRegion.volume = 1.357595 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.740570 -SourceRegion.volume = 1.241483 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.847810 -SourceRegion.volume = 0.605198 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.390974 -SourceRegion.volume = 1.172189 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.929896 -SourceRegion.volume = 2.074487 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.671441 -SourceRegion.volume = 1.968834 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.093186 -SourceRegion.volume = 2.607282 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.666864 -SourceRegion.volume = 1.316122 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.472430 -SourceRegion.volume = 1.407098 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.506480 -SourceRegion.volume = 0.547594 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.820489 -SourceRegion.volume = 0.730309 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.100089 -SourceRegion.volume = 1.654606 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.437689 -SourceRegion.volume = 2.391614 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.351647 -SourceRegion.volume = 1.276911 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.735904 -SourceRegion.volume = 2.194455 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.261622 -SourceRegion.volume = 1.552861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.813814 -SourceRegion.volume = 0.208057 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.374107 -SourceRegion.volume = 0.700363 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.993941 -SourceRegion.volume = 0.906238 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.278795 -SourceRegion.volume = 0.485055 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.925058 -SourceRegion.volume = 0.972490 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.613590 -SourceRegion.volume = 1.855812 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.419031 -SourceRegion.volume = 1.081554 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.317898 -SourceRegion.volume = 1.609720 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.001740 -SourceRegion.volume = 1.166004 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.471972 -SourceRegion.volume = 0.600357 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.785457 -SourceRegion.volume = 2.020498 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.459384 -SourceRegion.volume = 0.409438 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.143759 -SourceRegion.volume = 1.888932 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.918909 -SourceRegion.volume = 0.475028 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.105320 -SourceRegion.volume = 1.730756 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.546441 -SourceRegion.volume = 2.984995 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.561185 -SourceRegion.volume = 1.499677 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.414292 -SourceRegion.volume = 0.282786 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.603984 -SourceRegion.volume = 1.234525 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.804255 -SourceRegion.volume = 1.397559 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.875564 -SourceRegion.volume = 2.159066 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.524405 -SourceRegion.volume = 2.238713 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.545836 -SourceRegion.volume = 0.653297 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.733443 -SourceRegion.volume = 2.959418 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.516439 -SourceRegion.volume = 2.256510 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.953782 -SourceRegion.volume = 1.122684 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.859049 -SourceRegion.volume = 1.754375 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.368204 -SourceRegion.volume = 1.906425 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.635615 -SourceRegion.volume = 0.975634 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.402040 -SourceRegion.volume = 2.053099 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.998517 -SourceRegion.volume = 0.323687 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.941370 -SourceRegion.volume = 0.510147 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.482114 -SourceRegion.volume = 1.136567 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.434310 -SourceRegion.volume = 0.825580 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.735715 -SourceRegion.volume = 1.373299 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.912330 -SourceRegion.volume = 1.440753 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.737637 -SourceRegion.volume = 0.875515 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.933184 -SourceRegion.volume = 1.715077 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.877482 -SourceRegion.volume = 0.951282 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.553333 -SourceRegion.volume = 1.906638 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.929821 -SourceRegion.volume = 1.231462 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.938990 -SourceRegion.volume = 2.168601 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.447366 -SourceRegion.volume = 1.856571 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.802128 -SourceRegion.volume = 1.325319 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.574409 -SourceRegion.volume = 0.753098 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.145890 -SourceRegion.volume = 2.619609 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.924835 -SourceRegion.volume = 1.227386 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.603725 -SourceRegion.volume = 2.997404 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.849454 -SourceRegion.volume = 1.934257 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.669393 -SourceRegion.volume = 0.900323 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.883579 -SourceRegion.volume = 1.168437 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.654177 -SourceRegion.volume = 2.279502 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.573659 -SourceRegion.volume = 1.261526 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.020984 -SourceRegion.volume = 2.332910 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.771723 -SourceRegion.volume = 1.174877 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.756580 -SourceRegion.volume = 1.939552 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.295446 -SourceRegion.volume = 2.780635 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.955484 -SourceRegion.volume = 0.789048 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.189502 -SourceRegion.volume = 0.230314 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.055121 -SourceRegion.volume = 1.313464 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.524695 -SourceRegion.volume = 2.429722 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.369005 -SourceRegion.volume = 1.310470 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.350785 -SourceRegion.volume = 1.707434 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.133379 -SourceRegion.volume = 1.866718 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.374547 -SourceRegion.volume = 1.585762 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.641040 -SourceRegion.volume = 0.462319 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.443943 -SourceRegion.volume = 1.948764 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.292038 -SourceRegion.volume = 0.755611 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.292336 -SourceRegion.volume = 1.262363 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.309798 -SourceRegion.volume = 0.832010 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.871918 -SourceRegion.volume = 1.496113 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.066277 -SourceRegion.volume = 0.218513 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.387582 -SourceRegion.volume = 2.902359 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.397405 -SourceRegion.volume = 1.789187 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.263968 -SourceRegion.volume = 0.884306 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.453627 -SourceRegion.volume = 1.985302 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.410045 -SourceRegion.volume = 2.025677 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.249541 -SourceRegion.volume = 1.230386 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.889270 -SourceRegion.volume = 1.120435 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.148573 -SourceRegion.volume = 1.018616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.452717 -SourceRegion.volume = 1.865640 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.038253 -SourceRegion.volume = 1.885835 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.907631 -SourceRegion.volume = 0.838338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.396462 -SourceRegion.volume = 0.975366 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.825075 -SourceRegion.volume = 1.985477 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.275793 -SourceRegion.volume = 0.698769 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.408430 -SourceRegion.volume = 0.601480 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.492881 -SourceRegion.volume = 1.602399 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.584989 -SourceRegion.volume = 2.644020 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.418172 -SourceRegion.volume = 1.518206 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.233881 -SourceRegion.volume = 0.903338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.883145 -SourceRegion.volume = 1.903843 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.753523 -SourceRegion.volume = 1.607954 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.509662 -SourceRegion.volume = 1.079953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.211006 -SourceRegion.volume = 1.701547 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.226907 -SourceRegion.volume = 0.679783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.067652 -SourceRegion.volume = 1.290975 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.025187 -SourceRegion.volume = 2.488126 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.178252 -SourceRegion.volume = 1.301258 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.857990 -SourceRegion.volume = 0.477003 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.227501 -SourceRegion.volume = 2.365198 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.896557 -SourceRegion.volume = 0.104311 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.553109 -SourceRegion.volume = 1.374953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.527671 -SourceRegion.volume = 1.917063 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.083287 -SourceRegion.volume = 0.536474 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.753600 -SourceRegion.volume = 1.183410 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.663201 -SourceRegion.volume = 0.101636 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.824616 -SourceRegion.volume = 2.707509 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.124517 -SourceRegion.volume = 0.765165 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.852267 -SourceRegion.volume = 1.505468 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.375306 -SourceRegion.volume = 1.230445 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.298586 -SourceRegion.volume = 0.778797 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.515219 -SourceRegion.volume = 1.521425 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.575696 -SourceRegion.volume = 0.494369 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.874956 -SourceRegion.volume = 1.306324 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.143243 -SourceRegion.volume = 1.662325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.329277 -SourceRegion.volume = 0.135457 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.843990 -SourceRegion.volume = 3.855629 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.904044 -SourceRegion.volume = 1.148427 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.137476 -SourceRegion.volume = 1.165747 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.349490 -SourceRegion.volume = 2.479156 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.282839 -SourceRegion.volume = 1.436998 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.151980 -SourceRegion.volume = 1.330235 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.564716 -SourceRegion.volume = 0.932225 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.406586 -SourceRegion.volume = 0.890231 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.781803 -SourceRegion.volume = 0.571173 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.808471 -SourceRegion.volume = 0.078822 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.971274 -SourceRegion.volume = 1.154975 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.853121 -SourceRegion.volume = 0.921669 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.104086 -SourceRegion.volume = 1.064746 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.216214 -SourceRegion.volume = 1.476689 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.014893 -SourceRegion.volume = 4.638989 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 54 broadcasting 2162 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.623685 -SourceRegion.volume = 1.138175 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.004606 -SourceRegion.volume = 2.466590 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.619247 -SourceRegion.volume = 1.209579 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.967876 -SourceRegion.volume = 1.643884 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.329840 -SourceRegion.volume = 2.285821 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.364073 -SourceRegion.volume = 1.231504 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.861592 -SourceRegion.volume = 1.228200 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.508953 -SourceRegion.volume = 1.724264 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.070937 -SourceRegion.volume = 1.932858 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.450249 -SourceRegion.volume = 0.709116 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.631683 -SourceRegion.volume = 0.998078 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.331767 -SourceRegion.volume = 0.785022 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.947216 -SourceRegion.volume = 1.020573 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.316651 -SourceRegion.volume = 0.822318 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.205898 -SourceRegion.volume = 0.966153 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.969771 -SourceRegion.volume = 1.937258 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.513068 -SourceRegion.volume = 1.806507 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.286499 -SourceRegion.volume = 0.911237 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.852348 -SourceRegion.volume = 0.974362 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.262096 -SourceRegion.volume = 1.716346 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.533951 -SourceRegion.volume = 0.643975 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.650724 -SourceRegion.volume = 0.334928 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.904051 -SourceRegion.volume = 2.058547 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.217088 -SourceRegion.volume = 1.332210 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.186685 -SourceRegion.volume = 1.317598 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.398059 -SourceRegion.volume = 1.730631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.451104 -SourceRegion.volume = 1.163203 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.005497 -SourceRegion.volume = 1.295912 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.356472 -SourceRegion.volume = 1.420597 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.245980 -SourceRegion.volume = 1.775817 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.267471 -SourceRegion.volume = 0.752509 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.582743 -SourceRegion.volume = 0.719775 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.386200 -SourceRegion.volume = 1.878879 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.570751 -SourceRegion.volume = 0.659050 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.481944 -SourceRegion.volume = 1.176548 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.555433 -SourceRegion.volume = 1.252043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.402149 -SourceRegion.volume = 0.343325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.962910 -SourceRegion.volume = 0.337531 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.178560 -SourceRegion.volume = 0.783166 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.942327 -SourceRegion.volume = 2.565757 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.888557 -SourceRegion.volume = 0.982239 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.647531 -SourceRegion.volume = 1.406481 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.830324 -SourceRegion.volume = 1.241777 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.780587 -SourceRegion.volume = 0.879719 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.571562 -SourceRegion.volume = 0.425419 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.456350 -SourceRegion.volume = 3.628616 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.040549 -SourceRegion.volume = 1.388544 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 55 broadcasting 2185 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.751698 -SourceRegion.volume = 2.280958 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.167825 -SourceRegion.volume = 0.733054 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.380326 -SourceRegion.volume = 0.744717 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.822964 -SourceRegion.volume = 1.202407 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.406022 -SourceRegion.volume = 1.318339 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.792738 -SourceRegion.volume = 0.293671 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.863139 -SourceRegion.volume = 1.881659 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.722087 -SourceRegion.volume = 1.333374 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.250699 -SourceRegion.volume = 1.307154 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.554051 -SourceRegion.volume = 2.208583 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.572807 -SourceRegion.volume = 2.615710 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.811051 -SourceRegion.volume = 1.367979 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.942668 -SourceRegion.volume = 1.069713 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 8.368812 -SourceRegion.volume = 0.521122 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.949052 -SourceRegion.volume = 2.925314 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.358941 -SourceRegion.volume = 0.180872 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.461897 -SourceRegion.volume = 1.112850 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.826836 -SourceRegion.volume = 0.026147 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.927880 -SourceRegion.volume = 0.655816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.357991 -SourceRegion.volume = 1.994221 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.507399 -SourceRegion.volume = 0.788997 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.343054 -SourceRegion.volume = 2.955689 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.889023 -SourceRegion.volume = 2.630358 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.155724 -SourceRegion.volume = 0.624757 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.034395 -SourceRegion.volume = 1.646815 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.882696 -SourceRegion.volume = 0.415200 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.892527 -SourceRegion.volume = 1.258475 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.327079 -SourceRegion.volume = 0.653527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.361955 -SourceRegion.volume = 2.284537 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.518960 -SourceRegion.volume = 2.229620 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.715607 -SourceRegion.volume = 1.680673 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.404890 -SourceRegion.volume = 1.822382 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.185934 -SourceRegion.volume = 0.919943 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.229368 -SourceRegion.volume = 1.214361 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.116951 -SourceRegion.volume = 2.899166 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.183971 -SourceRegion.volume = 1.190262 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.758704 -SourceRegion.volume = 0.534663 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.201933 -SourceRegion.volume = 0.845304 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.807822 -SourceRegion.volume = 2.026795 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.055579 -SourceRegion.volume = 1.780755 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.776761 -SourceRegion.volume = 2.300958 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.242134 -SourceRegion.volume = 2.567530 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 5.609560 -SourceRegion.volume = 1.100829 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.225421 -SourceRegion.volume = 3.944542 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.823954 -SourceRegion.volume = 1.152015 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.578022 -SourceRegion.volume = 1.600110 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.075345 -SourceRegion.volume = 1.292098 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.086693 -SourceRegion.volume = 1.384669 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.081468 -SourceRegion.volume = 0.477974 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.402587 -SourceRegion.volume = 0.617758 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.167878 -SourceRegion.volume = 0.777748 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.418309 -SourceRegion.volume = 1.902696 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.524918 -SourceRegion.volume = 1.509238 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.419000 -SourceRegion.volume = 1.389067 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.567409 -SourceRegion.volume = 1.859742 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.452220 -SourceRegion.volume = 1.376178 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.316984 -SourceRegion.volume = 0.544074 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.515389 -SourceRegion.volume = 1.960600 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.966581 -SourceRegion.volume = 0.003806 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.737028 -SourceRegion.volume = 0.585978 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.900977 -SourceRegion.volume = 0.922521 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.536393 -SourceRegion.volume = 1.037443 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.596227 -SourceRegion.volume = 2.530245 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.144027 -SourceRegion.volume = 0.601991 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.870032 -SourceRegion.volume = 1.366996 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.298862 -SourceRegion.volume = 2.125191 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.763809 -SourceRegion.volume = 1.692653 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.401877 -SourceRegion.volume = 1.680593 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.252810 -SourceRegion.volume = 1.171267 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.776105 -SourceRegion.volume = 1.721063 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.991757 -SourceRegion.volume = 0.365885 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.180755 -SourceRegion.volume = 1.408718 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.512710 -SourceRegion.volume = 1.114534 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.011310 -SourceRegion.volume = 3.185786 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.505859 -SourceRegion.volume = 0.867331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.339305 -SourceRegion.volume = 2.907424 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.562879 -SourceRegion.volume = 4.909015 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.708914 -SourceRegion.volume = 1.427506 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.200749 -SourceRegion.volume = 1.748726 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.461458 -SourceRegion.volume = 0.460591 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.593565 -SourceRegion.volume = 3.609149 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.168488 -SourceRegion.volume = 1.272547 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.356921 -SourceRegion.volume = 1.475823 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.035784 -SourceRegion.volume = 1.963395 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.974955 -SourceRegion.volume = 1.261841 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.837070 -SourceRegion.volume = 1.241437 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.486346 -SourceRegion.volume = 2.156331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.272808 -SourceRegion.volume = 0.990741 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.482210 -SourceRegion.volume = 2.568919 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.715387 -SourceRegion.volume = 0.842519 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.882864 -SourceRegion.volume = 3.373802 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.882195 -SourceRegion.volume = 0.087500 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.460090 -SourceRegion.volume = 0.851931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.492070 -SourceRegion.volume = 2.757222 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.821475 -SourceRegion.volume = 2.116463 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.195215 -SourceRegion.volume = 2.263690 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.028085 -SourceRegion.volume = 1.114601 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.025963 -SourceRegion.volume = 2.374356 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.350750 -SourceRegion.volume = 1.300074 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.132983 -SourceRegion.volume = 1.335793 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.337252 -SourceRegion.volume = 2.567484 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.160116 -SourceRegion.volume = 1.735193 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.493333 -SourceRegion.volume = 1.767848 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.466849 -SourceRegion.volume = 1.326435 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.390706 -SourceRegion.volume = 1.747928 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.093921 -SourceRegion.volume = 2.035936 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.094907 -SourceRegion.volume = 2.471145 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.456538 -SourceRegion.volume = 1.412806 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.875985 -SourceRegion.volume = 2.198508 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.568356 -SourceRegion.volume = 2.617241 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.653223 -SourceRegion.volume = 2.324146 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.937444 -SourceRegion.volume = 2.605052 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.338506 -SourceRegion.volume = 2.024133 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.812024 -SourceRegion.volume = 1.714337 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.516582 -SourceRegion.volume = 1.488585 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.681362 -SourceRegion.volume = 2.185456 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.407109 -SourceRegion.volume = 2.570588 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.011163 -SourceRegion.volume = 2.244443 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.072411 -SourceRegion.volume = 0.245076 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.875563 -SourceRegion.volume = 0.670623 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.696514 -SourceRegion.volume = 0.485345 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.939614 -SourceRegion.volume = 1.576371 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.167941 -SourceRegion.volume = 1.975663 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.308299 -SourceRegion.volume = 2.550192 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.494160 -SourceRegion.volume = 2.590705 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.314648 -SourceRegion.volume = 0.640739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.364716 -SourceRegion.volume = 1.730560 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.541743 -SourceRegion.volume = 2.264600 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.391997 -SourceRegion.volume = 1.005830 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.594642 -SourceRegion.volume = 3.337236 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.536685 -SourceRegion.volume = 0.917333 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.956351 -SourceRegion.volume = 0.834731 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.717141 -SourceRegion.volume = 3.332989 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.664623 -SourceRegion.volume = 1.913761 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.681905 -SourceRegion.volume = 2.266367 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.647028 -SourceRegion.volume = 0.656859 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.387706 -SourceRegion.volume = 0.633246 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.388123 -SourceRegion.volume = 1.231599 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.497474 -SourceRegion.volume = 2.074300 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.805614 -SourceRegion.volume = 1.693780 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.539177 -SourceRegion.volume = 1.138625 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.848665 -SourceRegion.volume = 1.275001 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.573006 -SourceRegion.volume = 1.072621 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.873286 -SourceRegion.volume = 1.652453 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.610935 -SourceRegion.volume = 0.482011 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.657448 -SourceRegion.volume = 1.027282 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.831847 -SourceRegion.volume = 0.421422 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.386864 -SourceRegion.volume = 0.307033 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.181316 -SourceRegion.volume = 0.902966 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 56 broadcasting 3743 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.764832 -SourceRegion.volume = 0.343235 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.446451 -SourceRegion.volume = 0.450975 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.486762 -SourceRegion.volume = 1.095442 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.393455 -SourceRegion.volume = 0.699719 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.571193 -SourceRegion.volume = 0.250112 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.105369 -SourceRegion.volume = 1.054067 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.665931 -SourceRegion.volume = 0.415641 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.437813 -SourceRegion.volume = 0.748761 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.786391 -SourceRegion.volume = 0.696075 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.529523 -SourceRegion.volume = 1.370003 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.002121 -SourceRegion.volume = 1.608440 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.293698 -SourceRegion.volume = 0.055960 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.919677 -SourceRegion.volume = 0.816188 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.393326 -SourceRegion.volume = 0.291652 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.219229 -SourceRegion.volume = 0.774294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.836885 -SourceRegion.volume = 0.256916 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.519502 -SourceRegion.volume = 1.017554 -test1.1 -test1 -SourceRegion_add.volume = 1.363317 -SourceRegion.volume = 0.505318 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.167094 -SourceRegion.volume = 0.493522 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.854359 -SourceRegion.volume = 0.630252 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.523643 -SourceRegion.volume = 0.192512 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.189041 -SourceRegion.volume = 0.293738 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.592894 -SourceRegion.volume = 0.547753 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.569189 -SourceRegion.volume = 0.610778 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.681939 -SourceRegion.volume = 0.809157 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.385310 -SourceRegion.volume = 1.234478 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.956346 -SourceRegion.volume = 1.083757 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.402119 -SourceRegion.volume = 1.141837 -test1 -SourceRegion_add.volume = 1.038333 -SourceRegion.volume = 0.149349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.731231 -SourceRegion.volume = 0.584315 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.110782 -SourceRegion.volume = 1.334749 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.894141 -SourceRegion.volume = 0.638721 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.041175 -SourceRegion.volume = 1.866494 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.169134 -SourceRegion.volume = 0.142198 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.432313 -SourceRegion.volume = 1.493327 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.629011 -SourceRegion.volume = 0.783290 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.429454 -SourceRegion.volume = 0.907659 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.308435 -SourceRegion.volume = 0.864545 -test1.1 -test1 -SourceRegion_add.volume = 0.521182 -SourceRegion.volume = 0.433596 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.550806 -SourceRegion.volume = 0.848180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.051748 -SourceRegion.volume = 0.059301 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.766909 -SourceRegion.volume = 0.873171 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.658141 -SourceRegion.volume = 0.492307 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.520448 -SourceRegion.volume = 1.252811 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.703789 -SourceRegion.volume = 0.245670 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.525695 -SourceRegion.volume = 0.388106 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.304038 -SourceRegion.volume = 0.277454 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.517422 -SourceRegion.volume = 0.297501 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.064203 -SourceRegion.volume = 0.029767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.482052 -SourceRegion.volume = 1.437736 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 89.480745 -SourceRegion.volume = 57.071008 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.121456 -SourceRegion.volume = 0.720535 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.556438 -SourceRegion.volume = 0.331058 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.435834 -SourceRegion.volume = 2.042739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 61.332912 -SourceRegion.volume = 88.539899 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.808097 -SourceRegion.volume = 0.365011 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.140157 -SourceRegion.volume = 0.520830 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.758046 -SourceRegion.volume = 0.154005 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.136498 -SourceRegion.volume = 0.678196 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 14.572132 -SourceRegion.volume = 100.099642 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.601605 -SourceRegion.volume = 1.650328 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.246995 -SourceRegion.volume = 0.983169 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 74.882450 -SourceRegion.volume = 59.257176 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.210926 -SourceRegion.volume = 0.150942 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.548983 -SourceRegion.volume = 0.763236 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 1.960047 -SourceRegion.volume = 0.090996 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.203603 -SourceRegion.volume = 0.673140 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 1.161213 -SourceRegion.volume = 0.424961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.308236 -SourceRegion.volume = 1.082908 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.602555 -SourceRegion.volume = 0.571855 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.498532 -SourceRegion.volume = 0.551929 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 107.937744 -SourceRegion.volume = 15.543452 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.457486 -SourceRegion.volume = 0.927679 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.977482 -SourceRegion.volume = 0.819100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.875556 -SourceRegion.volume = 0.165689 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.533085 -SourceRegion.volume = 0.255695 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.357970 -SourceRegion.volume = 0.570176 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.584596 -SourceRegion.volume = 0.301014 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.656805 -SourceRegion.volume = 1.210899 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.518597 -SourceRegion.volume = 0.386571 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.095103 -SourceRegion.volume = 1.994722 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.050898 -SourceRegion.volume = 0.066992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.488427 -SourceRegion.volume = 0.430272 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.057401 -SourceRegion.volume = 0.595024 -test1.1 -test1 -SourceRegion_add.volume = 44.739589 -SourceRegion.volume = 92.558461 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.803953 -SourceRegion.volume = 1.659617 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.340906 -SourceRegion.volume = 0.940826 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.027032 -SourceRegion.volume = 1.803512 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.671042 -SourceRegion.volume = 0.568419 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.452988 -SourceRegion.volume = 0.865568 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.517995 -SourceRegion.volume = 0.986428 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.513338 -SourceRegion.volume = 1.302018 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.156229 -SourceRegion.volume = 1.439950 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.477780 -SourceRegion.volume = 0.497067 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.714438 -SourceRegion.volume = 1.321942 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.300318 -SourceRegion.volume = 0.003611 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.309094 -SourceRegion.volume = 0.016261 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.942731 -SourceRegion.volume = 0.453827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.066109 -SourceRegion.volume = 1.461613 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.433524 -SourceRegion.volume = 0.528135 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.699187 -SourceRegion.volume = 0.717663 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.685049 -SourceRegion.volume = 1.284823 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.447250 -SourceRegion.volume = 1.506182 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.634084 -SourceRegion.volume = 0.717881 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.688883 -SourceRegion.volume = 0.259960 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.621307 -SourceRegion.volume = 0.992487 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.515353 -SourceRegion.volume = 0.316054 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.724625 -SourceRegion.volume = 1.330349 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.606042 -SourceRegion.volume = 1.970090 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.016683 -SourceRegion.volume = 0.504710 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.544096 -SourceRegion.volume = 0.427299 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.205696 -SourceRegion.volume = 0.226769 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.758983 -SourceRegion.volume = 0.706455 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.986306 -SourceRegion.volume = 0.334497 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 57 broadcasting 732 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.103778 -SourceRegion.volume = 0.696367 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.755271 -SourceRegion.volume = 0.337136 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.009922 -SourceRegion.volume = 1.305728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.388217 -SourceRegion.volume = 1.222363 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.293254 -SourceRegion.volume = 0.817589 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.802906 -SourceRegion.volume = 0.527264 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.690847 -SourceRegion.volume = 0.235387 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.203596 -SourceRegion.volume = 0.218640 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.158880 -SourceRegion.volume = 0.706925 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.632892 -SourceRegion.volume = 0.210760 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.223858 -SourceRegion.volume = 0.478995 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 37.158806 -SourceRegion.volume = 104.811841 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.525059 -SourceRegion.volume = 0.322691 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.631841 -SourceRegion.volume = 0.083667 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.348447 -SourceRegion.volume = 0.062188 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.458943 -SourceRegion.volume = 0.522815 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.919743 -SourceRegion.volume = 0.504292 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.687891 -SourceRegion.volume = 0.971660 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.406982 -SourceRegion.volume = 0.396301 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 108.556410 -SourceRegion.volume = 60.669845 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.614453 -SourceRegion.volume = 0.252596 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.626901 -SourceRegion.volume = 0.369552 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.656495 -SourceRegion.volume = 0.310725 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.031228 -SourceRegion.volume = 0.314951 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 59.403223 -SourceRegion.volume = 73.293911 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.312188 -SourceRegion.volume = 0.516714 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.087140 -SourceRegion.volume = 1.270102 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.377699 -SourceRegion.volume = 0.365873 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.315023 -SourceRegion.volume = 0.623847 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.112132 -SourceRegion.volume = 1.379836 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 69.324276 -SourceRegion.volume = 65.810192 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.307593 -SourceRegion.volume = 0.668805 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.551013 -SourceRegion.volume = 0.531154 -test1 -SourceRegion_add.volume = 10.788561 -SourceRegion.volume = 90.118829 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 51.786800 -SourceRegion.volume = 87.868682 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.530139 -SourceRegion.volume = 0.957131 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 84.410887 -SourceRegion.volume = 63.859058 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.700058 -SourceRegion.volume = 0.731578 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.266602 -SourceRegion.volume = 1.736190 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.407655 -SourceRegion.volume = 1.184325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 61.353164 -SourceRegion.volume = 92.516965 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.290677 -SourceRegion.volume = 1.600597 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.566437 -SourceRegion.volume = 0.188992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.350533 -SourceRegion.volume = 0.873732 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.873257 -SourceRegion.volume = 0.642922 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.874572 -SourceRegion.volume = 0.280337 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 52.840827 -SourceRegion.volume = 94.794393 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 79.271372 -SourceRegion.volume = 48.400962 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.426526 -SourceRegion.volume = 0.646710 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.356389 -SourceRegion.volume = 0.131982 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.453517 -SourceRegion.volume = 0.297310 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.135353 -SourceRegion.volume = 1.567509 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.790959 -SourceRegion.volume = 1.064739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.662766 -SourceRegion.volume = 0.160660 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.977594 -SourceRegion.volume = 0.858922 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.462237 -SourceRegion.volume = 0.145234 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.750955 -SourceRegion.volume = 0.682765 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.303624 -SourceRegion.volume = 0.982392 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.727248 -SourceRegion.volume = 1.201987 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 67.143656 -SourceRegion.volume = 105.085159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.784580 -SourceRegion.volume = 0.807734 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.711660 -SourceRegion.volume = 0.969615 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.849563 -SourceRegion.volume = 0.475338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.086728 -SourceRegion.volume = 0.710463 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.455005 -SourceRegion.volume = 1.137335 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.971247 -SourceRegion.volume = 0.762518 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.360543 -SourceRegion.volume = 1.300305 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.826889 -SourceRegion.volume = 0.476827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 58 broadcasting 4349 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.595739 -SourceRegion.volume = 0.131801 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.972228 -SourceRegion.volume = 2.931541 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.504312 -SourceRegion.volume = 1.779863 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.425613 -SourceRegion.volume = 1.114861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.684836 -SourceRegion.volume = 0.325091 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.274024 -SourceRegion.volume = 0.820837 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.388213 -SourceRegion.volume = 0.743189 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.918301 -SourceRegion.volume = 0.261059 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 1.027592 -SourceRegion.volume = 1.368737 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.503171 -SourceRegion.volume = 0.461218 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.475119 -SourceRegion.volume = 1.316089 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.963513 -SourceRegion.volume = 0.843784 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.432154 -SourceRegion.volume = 0.479129 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.152938 -SourceRegion.volume = 0.520469 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.088841 -SourceRegion.volume = 0.609792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.863047 -SourceRegion.volume = 0.577806 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.271354 -SourceRegion.volume = 0.919446 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.552667 -SourceRegion.volume = 0.979217 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.086659 -SourceRegion.volume = 1.824625 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.788795 -SourceRegion.volume = 2.232211 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.048925 -SourceRegion.volume = 1.259714 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.136342 -SourceRegion.volume = 0.426594 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.050625 -SourceRegion.volume = 0.943962 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.466003 -SourceRegion.volume = 0.506556 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.254382 -SourceRegion.volume = 0.909023 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.752463 -SourceRegion.volume = 0.769664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.491749 -SourceRegion.volume = 0.934929 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.318526 -SourceRegion.volume = 0.724608 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.094809 -SourceRegion.volume = 0.161498 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.090677 -SourceRegion.volume = 0.697724 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.807408 -SourceRegion.volume = 1.827119 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.069470 -SourceRegion.volume = 1.068728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.090001 -SourceRegion.volume = 1.141561 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.988546 -SourceRegion.volume = 0.944763 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.365883 -SourceRegion.volume = 1.982883 -test1 -SourceRegion_add.volume = 0.252822 -SourceRegion.volume = 0.979431 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.451853 -SourceRegion.volume = 0.935558 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.625094 -SourceRegion.volume = 1.308044 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.835538 -SourceRegion.volume = 0.515844 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.459972 -SourceRegion.volume = 0.247806 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.790874 -SourceRegion.volume = 2.110848 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.376238 -SourceRegion.volume = 1.374467 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.757376 -SourceRegion.volume = 0.776453 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.499803 -SourceRegion.volume = 0.447361 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.321592 -SourceRegion.volume = 1.172368 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.803121 -SourceRegion.volume = 0.792637 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.399267 -SourceRegion.volume = 0.339619 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.645144 -SourceRegion.volume = 0.654805 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.304587 -SourceRegion.volume = 0.532680 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.446639 -SourceRegion.volume = 1.306986 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.737318 -SourceRegion.volume = 0.465208 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 0.623848 -SourceRegion.volume = 0.193922 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.522433 -SourceRegion.volume = 1.219292 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.835490 -SourceRegion.volume = 0.516258 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.406010 -SourceRegion.volume = 0.202370 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.435665 -SourceRegion.volume = 0.792407 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.022040 -SourceRegion.volume = 1.702189 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.637573 -SourceRegion.volume = 0.258195 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 1.198460 -SourceRegion.volume = 2.080976 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.294135 -SourceRegion.volume = 0.407075 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test3 -test1 -SourceRegion_add.volume = 1.412176 -SourceRegion.volume = 0.435410 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.110267 -SourceRegion.volume = 1.012068 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.919502 -SourceRegion.volume = 0.295014 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 0.215574 -SourceRegion.volume = 1.894201 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.003711 -SourceRegion.volume = 1.398686 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.732557 -SourceRegion.volume = 0.438702 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion_add.volume = 0.182139 -SourceRegion.volume = 0.292334 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.842981 -SourceRegion.volume = 0.187176 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.717178 -SourceRegion.volume = 1.219810 -test1.1 -test1.2 -test1.3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.726769 -SourceRegion.volume = 2.338078 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.516785 -SourceRegion.volume = 1.133748 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.663486 -SourceRegion.volume = 0.373820 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.328419 -SourceRegion.volume = 1.121829 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.237219 -SourceRegion.volume = 0.848208 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.208775 -SourceRegion.volume = 0.658642 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.759258 -SourceRegion.volume = 0.199594 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 2.391632 -SourceRegion.volume = 1.318798 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.206402 -SourceRegion.volume = 0.783958 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.045386 -SourceRegion.volume = 3.971250 -test1 -SourceRegion_add.volume = 0.308568 -SourceRegion.volume = 0.349755 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.477776 -SourceRegion.volume = 0.308639 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.852567 -SourceRegion.volume = 0.602340 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.633600 -SourceRegion.volume = 1.986557 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.387998 -SourceRegion.volume = 0.478389 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.260232 -SourceRegion.volume = 1.677732 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.054833 -SourceRegion.volume = 1.325003 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.612421 -SourceRegion.volume = 0.568267 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.306676 -SourceRegion.volume = 1.049081 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.133268 -SourceRegion.volume = 0.783558 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.297462 -SourceRegion.volume = 1.231023 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.844250 -SourceRegion.volume = 1.359759 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.580867 -SourceRegion.volume = 1.907865 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.802635 -SourceRegion.volume = 0.289580 -test1 -SourceRegion_add.volume = 0.147135 -SourceRegion.volume = 1.433637 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.650788 -SourceRegion.volume = 0.136251 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.987057 -SourceRegion.volume = 0.663338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.756801 -SourceRegion.volume = 0.133920 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.006492 -SourceRegion.volume = 2.098861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.424149 -SourceRegion.volume = 0.740393 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.582638 -SourceRegion.volume = 0.089534 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.434695 -SourceRegion.volume = 1.680401 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.439506 -SourceRegion.volume = 0.941794 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.220194 -SourceRegion.volume = 1.495615 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.060727 -SourceRegion.volume = 0.357626 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.943248 -SourceRegion.volume = 0.098327 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.986440 -SourceRegion.volume = 0.000274 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.806660 -SourceRegion.volume = 1.080398 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.599354 -SourceRegion.volume = 1.371968 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.293409 -SourceRegion.volume = 0.053490 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.598321 -SourceRegion.volume = 0.143471 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.616299 -SourceRegion.volume = 0.312321 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.037676 -SourceRegion.volume = 1.173934 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.847380 -SourceRegion.volume = 0.171430 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.808876 -SourceRegion.volume = 0.516489 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.074978 -SourceRegion.volume = 0.026897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.657219 -SourceRegion.volume = 1.224600 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.833177 -SourceRegion.volume = 0.863454 -test1 -SourceRegion_add.volume = 2.950703 -SourceRegion.volume = 0.539374 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.442746 -SourceRegion.volume = 1.014637 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.811359 -test1 -SourceRegion_add.volume = 2.055672 -SourceRegion.volume = 0.406708 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.785168 -SourceRegion.volume = 0.142895 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.176094 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.459209 -SourceRegion.volume = 1.017494 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.363825 -SourceRegion.volume = 0.646865 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.941037 -SourceRegion.volume = 0.564664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.452005 -SourceRegion.volume = 1.966311 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.787783 -SourceRegion.volume = 3.294817 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.305044 -SourceRegion.volume = 1.266619 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.442596 -SourceRegion.volume = 0.532047 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.815391 -SourceRegion.volume = 0.108684 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.493207 -SourceRegion.volume = 0.202584 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.807501 -SourceRegion.volume = 0.599564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.427293 -SourceRegion.volume = 0.407006 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.825551 -SourceRegion.volume = 0.376354 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.635674 -SourceRegion.volume = 2.017475 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.282386 -SourceRegion.volume = 1.165591 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.800375 -SourceRegion.volume = 0.648474 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.576492 -SourceRegion.volume = 0.075564 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.698734 -SourceRegion.volume = 1.031593 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.966138 -SourceRegion.volume = 0.992407 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.507385 -SourceRegion.volume = 0.000928 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.627565 -SourceRegion.volume = 0.170077 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.889611 -SourceRegion.volume = 0.886068 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.649140 -SourceRegion.volume = 0.165015 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.428436 -SourceRegion.volume = 1.269675 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.720197 -SourceRegion.volume = 1.176474 -test1.1 -test1 -SourceRegion_add.volume = 1.260556 -SourceRegion.volume = 3.224383 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.308122 -SourceRegion.volume = 0.674813 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.260342 -SourceRegion.volume = 1.955467 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.349395 -SourceRegion.volume = 0.164041 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.516246 -SourceRegion.volume = 0.268084 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.011165 -SourceRegion.volume = 0.352897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.462765 -SourceRegion.volume = 0.243074 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.246659 -SourceRegion.volume = 1.171937 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 59 broadcasting 4438 source regions to other ranks. -test1 -SourceRegion_add.volume = 1.436900 -SourceRegion.volume = 0.320658 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.685837 -SourceRegion.volume = 0.146953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.682095 -SourceRegion.volume = 0.232408 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.865313 -SourceRegion.volume = 0.678608 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.136451 -SourceRegion.volume = 3.835333 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.711718 -SourceRegion.volume = 0.192696 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.711970 -SourceRegion.volume = 0.527737 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.205230 -SourceRegion.volume = 0.394039 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.001599 -SourceRegion.volume = 0.674293 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.763366 -SourceRegion.volume = 0.408331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.341762 -SourceRegion.volume = 0.320131 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.366564 -SourceRegion.volume = 1.108838 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.847177 -SourceRegion.volume = 0.837364 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.430150 -SourceRegion.volume = 0.672639 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.461709 -test1 -SourceRegion_add.volume = 0.933150 -SourceRegion.volume = 0.674399 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 1.220130 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.460682 -SourceRegion.volume = 0.558343 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.038146 -SourceRegion.volume = 0.448232 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.703698 -SourceRegion.volume = 0.813808 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.431952 -SourceRegion.volume = 1.555865 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.448893 -SourceRegion.volume = 0.106563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.545749 -SourceRegion.volume = 0.693079 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.814439 -SourceRegion.volume = 0.364874 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.798581 -SourceRegion.volume = 1.556843 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.085999 -SourceRegion.volume = 0.144022 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.771374 -SourceRegion.volume = 0.800047 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 0.254287 -SourceRegion.volume = 1.288904 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.855702 -SourceRegion.volume = 0.072953 -test1.1 -SourceRegion_add.volume = 0.783681 -SourceRegion.volume = 0.704622 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.677191 -SourceRegion.volume = 0.835367 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.604100 -SourceRegion.volume = 0.667223 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.269634 -SourceRegion.volume = 0.110130 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.706950 -SourceRegion.volume = 0.813932 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.728984 -SourceRegion.volume = 0.374053 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.394099 -SourceRegion.volume = 1.188719 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.251362 -SourceRegion.volume = 1.287241 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.100176 -SourceRegion.volume = 1.460074 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.749420 -SourceRegion.volume = 0.158154 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.758268 -SourceRegion.volume = 0.655944 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.001531 -SourceRegion.volume = 1.829299 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.374494 -SourceRegion.volume = 0.139423 -test1 -SourceRegion_add.volume = 0.733036 -SourceRegion.volume = 0.658444 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.192421 -SourceRegion.volume = 0.840961 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.450152 -SourceRegion.volume = 0.381734 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.873203 -SourceRegion.volume = 0.360907 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.331102 -SourceRegion.volume = 2.267280 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.277479 -SourceRegion.volume = 0.729254 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.962933 -SourceRegion.volume = 0.260903 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.069838 -SourceRegion.volume = 1.164241 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.212602 -SourceRegion.volume = 0.196726 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.216736 -SourceRegion.volume = 1.442897 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.667660 -SourceRegion.volume = 1.476466 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.817770 -SourceRegion.volume = 0.144159 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.414809 -SourceRegion.volume = 0.583632 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.738385 -SourceRegion.volume = 1.180405 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.637100 -SourceRegion.volume = 1.889310 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.292388 -SourceRegion.volume = 0.411886 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.163426 -SourceRegion.volume = 2.387605 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.060190 -SourceRegion.volume = 0.364243 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.320825 -SourceRegion.volume = 0.758400 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.190964 -SourceRegion.volume = 0.385120 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.366486 -SourceRegion.volume = 0.464822 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.544168 -SourceRegion.volume = 0.226292 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.240031 -SourceRegion.volume = 0.790536 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.359606 -SourceRegion.volume = 1.532279 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.984598 -SourceRegion.volume = 0.063453 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.289460 -SourceRegion.volume = 0.988655 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.988777 -SourceRegion.volume = 0.591480 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.299747 -SourceRegion.volume = 0.884570 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.279247 -SourceRegion.volume = 0.919157 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.157182 -SourceRegion.volume = 0.561318 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.357871 -SourceRegion.volume = 0.608792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.398299 -SourceRegion.volume = 0.459000 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.299902 -SourceRegion.volume = 0.780064 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.676283 -SourceRegion.volume = 0.504506 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.973178 -SourceRegion.volume = 0.669470 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.273654 -SourceRegion.volume = 1.554522 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.336609 -SourceRegion.volume = 0.125943 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.605404 -SourceRegion.volume = 0.016573 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.851919 -SourceRegion.volume = 0.314499 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.237922 -SourceRegion.volume = 1.601078 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.403547 -SourceRegion.volume = 1.125427 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.416800 -SourceRegion.volume = 0.737117 -test1 -SourceRegion_add.volume = 0.806273 -SourceRegion.volume = 0.942714 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.135143 -SourceRegion.volume = 0.498870 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.816269 -SourceRegion.volume = 0.482590 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.689440 -SourceRegion.volume = 0.349934 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.322282 -SourceRegion.volume = 0.841243 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.882262 -SourceRegion.volume = 1.080193 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.044780 -SourceRegion.volume = 0.757472 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.134253 -SourceRegion.volume = 0.818035 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.367085 -SourceRegion.volume = 1.177716 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.794814 -SourceRegion.volume = 0.762728 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.179358 -SourceRegion.volume = 1.274417 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.982281 -SourceRegion.volume = 0.013103 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.935710 -SourceRegion.volume = 0.135152 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.908799 -SourceRegion.volume = 0.990493 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.810593 -SourceRegion.volume = 0.349280 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.504865 -SourceRegion.volume = 0.724674 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.552033 -SourceRegion.volume = 0.016579 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.720889 -SourceRegion.volume = 0.106621 -test1 -SourceRegion_add.volume = 0.752390 -SourceRegion.volume = 0.403329 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.327914 -SourceRegion.volume = 1.807858 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.505495 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.538144 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.932012 -SourceRegion.volume = 0.192208 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.526549 -SourceRegion.volume = 0.880628 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.244095 -SourceRegion.volume = 0.748936 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.315966 -SourceRegion.volume = 0.356767 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.402498 -SourceRegion.volume = 0.933025 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.210991 -SourceRegion.volume = 0.893655 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.840846 -SourceRegion.volume = 0.818114 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.684549 -SourceRegion.volume = 0.891818 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.565591 -SourceRegion.volume = 0.481662 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.621048 -SourceRegion.volume = 0.458690 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.335544 -SourceRegion.volume = 1.620397 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.097232 -SourceRegion.volume = 0.685631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.602469 -SourceRegion.volume = 0.279431 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.372609 -SourceRegion.volume = 1.067210 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.783355 -SourceRegion.volume = 0.520057 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.077174 -SourceRegion.volume = 0.937978 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.686661 -SourceRegion.volume = 0.557188 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.111831 -SourceRegion.volume = 1.031142 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.130449 -SourceRegion.volume = 0.856634 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.509222 -SourceRegion.volume = 0.738425 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.737417 -SourceRegion.volume = 0.860026 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.998912 -SourceRegion.volume = 0.604864 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.151095 -SourceRegion.volume = 1.195363 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.264303 -SourceRegion.volume = 0.778931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.979522 -SourceRegion.volume = 0.411788 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.138864 -SourceRegion.volume = 0.233294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.295173 -SourceRegion.volume = 0.264861 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.536406 -SourceRegion.volume = 0.524664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.648116 -SourceRegion.volume = 0.709715 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.759886 -SourceRegion.volume = 0.371043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.986172 -SourceRegion.volume = 0.496257 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.201035 -SourceRegion.volume = 0.621214 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.940224 -SourceRegion.volume = 1.180529 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.855284 -SourceRegion.volume = 0.681248 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.170692 -SourceRegion.volume = 1.069509 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.761478 -SourceRegion.volume = 1.174196 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.676628 -SourceRegion.volume = 0.835156 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.089350 -SourceRegion.volume = 0.697046 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 1.135931 -SourceRegion.volume = 0.143337 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.154775 -SourceRegion.volume = 0.607488 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.269418 -SourceRegion.volume = 0.245519 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.430426 -SourceRegion.volume = 2.571852 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.241470 -SourceRegion.volume = 0.020468 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.223055 -SourceRegion.volume = 1.179163 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.149222 -SourceRegion.volume = 1.068305 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.690206 -SourceRegion.volume = 0.279128 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.602875 -SourceRegion.volume = 0.595002 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.050256 -SourceRegion.volume = 0.724164 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.461500 -SourceRegion.volume = 1.294441 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.977472 -test1 -SourceRegion_add.volume = 0.650563 -SourceRegion.volume = 0.696773 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.430191 -SourceRegion.volume = 0.825130 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.468809 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.317248 -SourceRegion.volume = 1.714465 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.777708 -SourceRegion.volume = 0.937065 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.483781 -SourceRegion.volume = 0.351309 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.294099 -SourceRegion.volume = 0.286331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.294659 -SourceRegion.volume = 0.410401 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.252322 -SourceRegion.volume = 0.225028 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.639741 -SourceRegion.volume = 1.004486 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.333237 -SourceRegion.volume = 1.113838 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.853172 -SourceRegion.volume = 0.963822 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.900015 -SourceRegion.volume = 0.095718 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.784413 -SourceRegion.volume = 0.588514 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.540071 -SourceRegion.volume = 0.526953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.181054 -SourceRegion.volume = 1.346957 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.661634 -SourceRegion.volume = 0.528590 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.653294 -SourceRegion.volume = 0.442282 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.512427 -SourceRegion.volume = 0.388981 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.273919 -SourceRegion.volume = 0.701739 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.960201 -SourceRegion.volume = 0.002202 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.401047 -SourceRegion.volume = 0.962634 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.515372 -SourceRegion.volume = 0.302388 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.264845 -SourceRegion.volume = 1.705342 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.601005 -SourceRegion.volume = 0.188022 -test1.1 -test1 -SourceRegion_add.volume = 37.615391 -SourceRegion.volume = 118.068636 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.530268 -SourceRegion.volume = 0.882664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.328949 -SourceRegion.volume = 0.605407 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.131577 -SourceRegion.volume = 0.970715 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.514419 -SourceRegion.volume = 1.647144 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.197924 -SourceRegion.volume = 0.360125 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.168036 -SourceRegion.volume = 0.746786 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.775691 -SourceRegion.volume = 0.716232 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 28.866138 -SourceRegion.volume = 129.116179 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.351652 -SourceRegion.volume = 1.478480 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 60 broadcasting 46 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.770230 -SourceRegion.volume = 0.528466 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.524428 -SourceRegion.volume = 0.285724 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 90.350614 -SourceRegion.volume = 54.684516 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.400755 -SourceRegion.volume = 0.081688 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 42.554867 -SourceRegion.volume = 109.192980 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 82.797148 -SourceRegion.volume = 81.586789 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 74.257362 -SourceRegion.volume = 67.977661 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 70.697421 -SourceRegion.volume = 60.888179 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 74.443797 -SourceRegion.volume = 55.909342 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 87.883464 -SourceRegion.volume = 73.067331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 68.939895 -SourceRegion.volume = 77.683605 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test1 -SourceRegion_add.volume = 0.884380 -SourceRegion.volume = 0.372173 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.757021 -SourceRegion.volume = 0.678669 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test3 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.770544 -SourceRegion.volume = 0.885902 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.021652 -SourceRegion.volume = 0.290341 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.349449 -SourceRegion.volume = 0.635180 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 78.536032 -SourceRegion.volume = 80.059533 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 72.819980 -SourceRegion.volume = 83.936199 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 69.205174 -SourceRegion.volume = 76.668139 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 85.690269 -SourceRegion.volume = 42.613144 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 54.095500 -SourceRegion.volume = 101.183043 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 140.754380 -SourceRegion.volume = 0.398158 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 66.861115 -SourceRegion.volume = 56.974891 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 111.128424 -SourceRegion.volume = 48.120140 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 51.943500 -SourceRegion.volume = 119.236487 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 61 broadcasting 2376 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.050766 -SourceRegion.volume = 3.116607 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.143456 -SourceRegion.volume = 3.317938 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 3.119592 -SourceRegion.volume = 0.448085 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.551668 -SourceRegion.volume = 0.764324 -test1.1 -test1.2 -test1.3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.006245 -SourceRegion.volume = 4.151865 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.583542 -SourceRegion.volume = 1.012792 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.136673 -SourceRegion.volume = 1.731311 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.164540 -SourceRegion.volume = 1.745793 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.371549 -SourceRegion.volume = 3.535086 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.871884 -SourceRegion.volume = 0.699237 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.964119 -SourceRegion.volume = 1.583173 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.967227 -SourceRegion.volume = 2.896173 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 4.417538 -SourceRegion.volume = 1.351505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.386926 -SourceRegion.volume = 1.031646 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.560597 -SourceRegion.volume = 1.633786 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.881881 -SourceRegion.volume = 1.140294 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.264016 -SourceRegion.volume = 2.147565 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.977662 -SourceRegion.volume = 2.722272 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.272776 -SourceRegion.volume = 2.231196 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.242074 -SourceRegion.volume = 1.086091 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.836920 -SourceRegion.volume = 0.785459 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.789263 -SourceRegion.volume = 1.403747 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.662725 -SourceRegion.volume = 0.977163 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.473496 -SourceRegion.volume = 0.530173 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.128489 -SourceRegion.volume = 1.411372 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.005819 -SourceRegion.volume = 0.685537 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.970552 -SourceRegion.volume = 1.080603 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.437232 -SourceRegion.volume = 1.536331 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.582232 -SourceRegion.volume = 1.129213 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.966036 -SourceRegion.volume = 0.860694 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.241745 -SourceRegion.volume = 2.945693 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.842405 -SourceRegion.volume = 1.457979 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.043087 -SourceRegion.volume = 2.316171 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.753206 -SourceRegion.volume = 2.060421 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.364026 -SourceRegion.volume = 2.546569 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.077554 -SourceRegion.volume = 0.833405 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.035038 -SourceRegion.volume = 1.624793 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.032123 -SourceRegion.volume = 3.789652 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.764428 -SourceRegion.volume = 0.798604 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.739815 -SourceRegion.volume = 0.727120 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.867701 -SourceRegion.volume = 0.062601 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.734571 -SourceRegion.volume = 1.822149 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.083878 -SourceRegion.volume = 2.739303 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.968229 -SourceRegion.volume = 1.938397 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.251188 -SourceRegion.volume = 1.718931 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.776005 -SourceRegion.volume = 2.261320 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.685606 -SourceRegion.volume = 4.272185 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.845376 -SourceRegion.volume = 1.989971 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 5.106063 -SourceRegion.volume = 0.179079 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion_add.volume = 0.372863 -SourceRegion.volume = 1.532040 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.091536 -SourceRegion.volume = 0.910626 -test1.1 -test1 -SourceRegion_add.volume = 1.126494 -SourceRegion.volume = 1.873216 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.973054 -SourceRegion.volume = 2.626337 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.598981 -SourceRegion.volume = 0.990846 -test1.1 -test1.2 -test1.3 -test1.4 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.358075 -SourceRegion.volume = 1.418664 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.070483 -SourceRegion.volume = 2.093079 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.208631 -SourceRegion.volume = 1.215902 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.137961 -SourceRegion.volume = 1.262639 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.633447 -SourceRegion.volume = 1.361766 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.832775 -SourceRegion.volume = 1.695240 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.986410 -SourceRegion.volume = 1.710614 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.450197 -SourceRegion.volume = 2.068927 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.519324 -SourceRegion.volume = 0.328100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.041497 -SourceRegion.volume = 0.981423 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.692243 -SourceRegion.volume = 1.138013 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.787398 -SourceRegion.volume = 0.996133 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.520587 -SourceRegion.volume = 0.502984 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 0.146797 -SourceRegion.volume = 2.808268 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.296652 -SourceRegion.volume = 1.748058 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.109265 -SourceRegion.volume = 0.725196 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.586244 -SourceRegion.volume = 2.678321 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.847603 -SourceRegion.volume = 1.474915 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.775000 -SourceRegion.volume = 1.265966 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.126187 -SourceRegion.volume = 1.493092 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.963177 -SourceRegion.volume = 1.846891 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.163981 -SourceRegion.volume = 2.002556 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.351657 -SourceRegion.volume = 1.819676 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.589933 -SourceRegion.volume = 2.063667 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.330296 -SourceRegion.volume = 2.033523 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.767491 -SourceRegion.volume = 0.290008 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.682850 -SourceRegion.volume = 1.289632 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.323746 -SourceRegion.volume = 2.691455 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.425086 -SourceRegion.volume = 0.598498 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.763813 -SourceRegion.volume = 1.406890 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.568640 -SourceRegion.volume = 3.211411 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.656311 -SourceRegion.volume = 0.043574 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.862372 -SourceRegion.volume = 0.383264 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.067985 -SourceRegion.volume = 0.887418 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.258325 -SourceRegion.volume = 4.075597 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.488436 -SourceRegion.volume = 0.612895 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.126212 -SourceRegion.volume = 1.363253 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.000105 -SourceRegion.volume = 3.507175 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.740336 -SourceRegion.volume = 1.046297 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.874499 -SourceRegion.volume = 1.185347 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.889022 -SourceRegion.volume = 2.680650 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.829798 -SourceRegion.volume = 1.894868 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.032605 -SourceRegion.volume = 1.887530 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.447750 -SourceRegion.volume = 1.927494 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.374286 -SourceRegion.volume = 0.827505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test1 -SourceRegion_add.volume = 0.730683 -SourceRegion.volume = 0.963746 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 0.835000 -SourceRegion.volume = 4.852439 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.004365 -SourceRegion.volume = 1.447921 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.027006 -SourceRegion.volume = 2.288513 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.053816 -SourceRegion.volume = 1.777585 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.953318 -SourceRegion.volume = 1.815298 -test1.1 -test1 -SourceRegion_add.volume = 1.235244 -SourceRegion.volume = 1.015638 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.915051 -SourceRegion.volume = 0.012319 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.621098 -SourceRegion.volume = 1.693459 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.396632 -SourceRegion.volume = 0.877785 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.207017 -SourceRegion.volume = 2.140439 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.489589 -SourceRegion.volume = 0.192967 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.572707 -SourceRegion.volume = 2.253730 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.248363 -SourceRegion.volume = 1.032863 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.828614 -SourceRegion.volume = 3.263711 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.016103 -SourceRegion.volume = 1.114179 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.320005 -SourceRegion.volume = 1.704855 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.546716 -SourceRegion.volume = 1.289641 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.136936 -SourceRegion.volume = 1.651211 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.728662 -SourceRegion.volume = 2.081789 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.391277 -SourceRegion.volume = 1.588162 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.543335 -SourceRegion.volume = 1.936056 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.336923 -SourceRegion.volume = 0.959338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.194987 -SourceRegion.volume = 0.110144 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.866383 -SourceRegion.volume = 1.697038 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.446837 -SourceRegion.volume = 1.502667 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.413928 -SourceRegion.volume = 2.588565 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.909199 -SourceRegion.volume = 1.937889 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.498516 -SourceRegion.volume = 1.604405 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.089242 -SourceRegion.volume = 1.198810 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.246647 -SourceRegion.volume = 0.780058 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.205826 -SourceRegion.volume = 1.651092 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.385991 -SourceRegion.volume = 0.732572 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.162009 -SourceRegion.volume = 0.401752 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.046096 -SourceRegion.volume = 0.763576 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.419740 -SourceRegion.volume = 1.215734 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 2.850579 -SourceRegion.volume = 0.339841 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.955574 -SourceRegion.volume = 1.509213 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.575383 -SourceRegion.volume = 0.224065 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.740364 -SourceRegion.volume = 1.262332 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.651630 -SourceRegion.volume = 1.207910 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.489993 -SourceRegion.volume = 0.879239 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.726520 -SourceRegion.volume = 0.805392 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.223408 -SourceRegion.volume = 0.973397 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.414513 -SourceRegion.volume = 3.103708 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.377438 -SourceRegion.volume = 3.204951 -test1 -SourceRegion_add.volume = 1.330608 -SourceRegion.volume = 0.668505 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.484949 -SourceRegion.volume = 1.346305 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.790512 -SourceRegion.volume = 1.730021 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.182438 -SourceRegion.volume = 1.687977 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.629610 -SourceRegion.volume = 1.222039 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.861496 -SourceRegion.volume = 1.851909 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.591657 -SourceRegion.volume = 2.527736 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.446330 -SourceRegion.volume = 1.422299 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.457679 -SourceRegion.volume = 2.470752 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.214499 -SourceRegion.volume = 1.150755 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.372568 -SourceRegion.volume = 1.114733 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.594299 -SourceRegion.volume = 0.942081 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.904760 -SourceRegion.volume = 0.156500 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.295934 -SourceRegion.volume = 0.644476 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.633920 -SourceRegion.volume = 0.705508 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.146393 -SourceRegion.volume = 0.081871 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.298614 -SourceRegion.volume = 2.302926 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.777069 -SourceRegion.volume = 0.362694 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.291566 -SourceRegion.volume = 1.033580 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.770845 -SourceRegion.volume = 2.360338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.319973 -SourceRegion.volume = 1.533934 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.711312 -SourceRegion.volume = 3.330641 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.355436 -SourceRegion.volume = 0.949749 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.378025 -SourceRegion.volume = 2.151773 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.921940 -SourceRegion.volume = 1.747823 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.584783 -SourceRegion.volume = 1.595384 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.232623 -SourceRegion.volume = 2.130480 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.446058 -SourceRegion.volume = 0.649898 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.638395 -SourceRegion.volume = 1.680156 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.819434 -SourceRegion.volume = 0.726137 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.066589 -SourceRegion.volume = 1.498074 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.254957 -SourceRegion.volume = 2.652068 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.327614 -SourceRegion.volume = 2.236004 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 4.497542 -SourceRegion.volume = 0.073525 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.871644 -SourceRegion.volume = 0.261632 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.403744 -SourceRegion.volume = 1.234518 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.472847 -SourceRegion.volume = 1.905339 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.870909 -SourceRegion.volume = 2.382304 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.555063 -SourceRegion.volume = 3.461854 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.641982 -SourceRegion.volume = 1.722520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.840111 -SourceRegion.volume = 1.813882 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.723766 -SourceRegion.volume = 2.531246 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.729577 -SourceRegion.volume = 2.166265 -test1 -SourceRegion_add.volume = 1.233707 -SourceRegion.volume = 0.855513 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.753522 -SourceRegion.volume = 2.196109 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.758973 -SourceRegion.volume = 0.924563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.588633 -SourceRegion.volume = 0.413428 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.163622 -SourceRegion.volume = 1.926577 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.854830 -SourceRegion.volume = 1.136008 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.275681 -SourceRegion.volume = 2.090477 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.502096 -SourceRegion.volume = 1.736666 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.532113 -SourceRegion.volume = 1.318706 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.193166 -SourceRegion.volume = 3.016889 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.210368 -SourceRegion.volume = 1.187655 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.937376 -SourceRegion.volume = 1.822827 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.364848 -SourceRegion.volume = 1.181121 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.756018 -SourceRegion.volume = 1.394383 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.099492 -SourceRegion.volume = 1.928471 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.596769 -SourceRegion.volume = 0.737442 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.152571 -SourceRegion.volume = 2.958216 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.617107 -SourceRegion.volume = 1.278009 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.823597 -SourceRegion.volume = 1.180793 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.021079 -SourceRegion.volume = 1.428106 -test1.1 -test1.2 -test1.3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.315350 -SourceRegion.volume = 2.301112 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.102205 -SourceRegion.volume = 0.980399 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.662273 -SourceRegion.volume = 2.209415 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.552514 -SourceRegion.volume = 1.269300 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.128982 -SourceRegion.volume = 1.793563 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.893259 -SourceRegion.volume = 1.396263 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.067455 -SourceRegion.volume = 1.430248 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.184981 -SourceRegion.volume = 0.901666 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.718869 -SourceRegion.volume = 2.567764 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.058135 -SourceRegion.volume = 2.451999 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.280039 -SourceRegion.volume = 0.817678 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.773377 -SourceRegion.volume = 3.320800 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.497348 -SourceRegion.volume = 1.166963 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.326563 -SourceRegion.volume = 0.380209 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.910232 -SourceRegion.volume = 3.670419 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.795352 -SourceRegion.volume = 1.245606 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.886592 -SourceRegion.volume = 2.312496 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.628819 -SourceRegion.volume = 2.166020 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.139473 -SourceRegion.volume = 0.388811 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.904488 -SourceRegion.volume = 1.208734 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.665971 -SourceRegion.volume = 1.818212 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.661404 -SourceRegion.volume = 1.155851 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.831169 -SourceRegion.volume = 1.901448 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.100832 -SourceRegion.volume = 3.188526 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.364097 -SourceRegion.volume = 1.237318 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.928673 -SourceRegion.volume = 1.189267 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.725433 -SourceRegion.volume = 0.681363 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.873497 -SourceRegion.volume = 0.762516 -test1 -SourceRegion_add.volume = 1.872648 -SourceRegion.volume = 1.524101 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.108752 -SourceRegion.volume = 0.613805 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.996980 -SourceRegion.volume = 0.205295 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.506924 -SourceRegion.volume = 1.063203 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.421887 -SourceRegion.volume = 1.165027 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.923271 -test1 -SourceRegion_add.volume = 1.757301 -SourceRegion.volume = 1.465806 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.633480 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.325892 -SourceRegion.volume = 2.123253 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -Rank 62 broadcasting 109 source regions to other ranks. -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.386881 -SourceRegion.volume = 1.006069 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.602450 -SourceRegion.volume = 3.729436 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.351055 -SourceRegion.volume = 0.855811 -test1.1 -test1 -SourceRegion_add.volume = 2.079598 -SourceRegion.volume = 0.669906 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.055698 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.560259 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.748786 -SourceRegion.volume = 1.431051 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.214395 -SourceRegion.volume = 0.764329 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 87.350148 -SourceRegion.volume = 58.313607 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 53.414222 -SourceRegion.volume = 96.837631 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.425431 -SourceRegion.volume = 1.351489 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.921430 -SourceRegion.volume = 0.637302 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 93.861408 -SourceRegion.volume = 55.848100 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 59.699999 -SourceRegion.volume = 99.840527 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.806483 -SourceRegion.volume = 0.261766 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 5.346079 -SourceRegion.volume = 118.996237 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 37.632393 -SourceRegion.volume = 144.057042 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 86.195853 -SourceRegion.volume = 53.877577 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.683378 -SourceRegion.volume = 1.199450 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 56.884104 -SourceRegion.volume = 63.716798 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 46.761535 -test1 -SourceRegion_add.volume = 49.448308 -SourceRegion.volume = 114.139075 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 103.528302 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 42.150800 -SourceRegion.volume = 93.725359 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.129207 -SourceRegion.volume = 0.746258 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.296799 -SourceRegion.volume = 0.122145 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.487974 -SourceRegion.volume = 0.850540 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 92.290991 -SourceRegion.volume = 40.269802 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.029513 -SourceRegion.volume = 0.694918 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.043237 -SourceRegion.volume = 0.434299 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 50.519111 -SourceRegion.volume = 120.776790 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.677248 -SourceRegion.volume = 0.750838 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.187248 -SourceRegion.volume = 1.755442 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.249795 -SourceRegion.volume = 0.343820 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.195455 -SourceRegion.volume = 0.701079 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 46.050525 -SourceRegion.volume = 91.307999 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 73.174649 -SourceRegion.volume = 76.596856 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 34.524215 -SourceRegion.volume = 103.523204 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.047709 -SourceRegion.volume = 1.557403 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.660175 -SourceRegion.volume = 0.800430 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 37.329416 -SourceRegion.volume = 92.311426 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.719341 -SourceRegion.volume = 0.091682 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.021922 -SourceRegion.volume = 0.192825 -test1.1 -test1.2 -test1.3 -test1 -SourceRegion_add.volume = 51.985467 -SourceRegion.volume = 81.253841 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 59.653541 -SourceRegion.volume = 106.169338 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -Rank 63 broadcasting 3175 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.757860 -SourceRegion.volume = 1.497526 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.617532 -SourceRegion.volume = 1.580661 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.285960 -SourceRegion.volume = 4.520385 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.971043 -SourceRegion.volume = 0.271702 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.261632 -SourceRegion.volume = 1.562991 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.945719 -SourceRegion.volume = 1.605435 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.001790 -SourceRegion.volume = 1.393778 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.968866 -SourceRegion.volume = 0.004337 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.972194 -SourceRegion.volume = 0.104348 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.821020 -SourceRegion.volume = 0.981636 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.624094 -SourceRegion.volume = 1.153845 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.762231 -SourceRegion.volume = 0.399833 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.045684 -SourceRegion.volume = 0.850081 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.623077 -SourceRegion.volume = 0.698173 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.371372 -SourceRegion.volume = 0.739962 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.366014 -SourceRegion.volume = 0.774149 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.635881 -SourceRegion.volume = 1.161017 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.455527 -SourceRegion.volume = 1.963706 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.554885 -SourceRegion.volume = 0.001423 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.509945 -SourceRegion.volume = 0.952878 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.661043 -SourceRegion.volume = 0.902397 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.273430 -SourceRegion.volume = 0.576692 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.889053 -SourceRegion.volume = 1.078871 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.274098 -SourceRegion.volume = 0.674205 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.420822 -SourceRegion.volume = 0.439000 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.658247 -SourceRegion.volume = 0.748060 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.041794 -SourceRegion.volume = 3.251208 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.494875 -SourceRegion.volume = 1.106778 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.892630 -SourceRegion.volume = 0.441365 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.359117 -SourceRegion.volume = 1.450693 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.406567 -SourceRegion.volume = 1.978118 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.549152 -SourceRegion.volume = 2.285087 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.520870 -SourceRegion.volume = 2.189590 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.213276 -SourceRegion.volume = 3.087907 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.530601 -SourceRegion.volume = 0.368056 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 1.710551 -SourceRegion.volume = 0.166611 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.218398 -SourceRegion.volume = 0.848281 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.274453 -SourceRegion.volume = 1.596915 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.090954 -SourceRegion.volume = 1.016521 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.517763 -SourceRegion.volume = 0.375362 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.637785 -SourceRegion.volume = 0.087082 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.445399 -SourceRegion.volume = 0.361604 -test1 -SourceRegion_add.volume = 0.184710 -SourceRegion.volume = 0.934881 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.476313 -SourceRegion.volume = 2.921743 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.413042 -SourceRegion.volume = 3.489783 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.413315 -SourceRegion.volume = 0.652029 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.343767 -SourceRegion.volume = 0.589203 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.692613 -SourceRegion.volume = 0.694772 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.041893 -SourceRegion.volume = 2.168603 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.176604 -SourceRegion.volume = 0.817643 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.123738 -SourceRegion.volume = 0.924316 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.536938 -SourceRegion.volume = 1.438015 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.193962 -SourceRegion.volume = 1.242122 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.413299 -SourceRegion.volume = 0.672225 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.386315 -SourceRegion.volume = 0.389899 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.653048 -test1 -SourceRegion_add.volume = 0.051785 -SourceRegion.volume = 2.364503 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.015451 -SourceRegion.volume = 0.983721 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -SourceRegion.volume = 0.113960 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.249737 -SourceRegion.volume = 0.523512 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.470855 -SourceRegion.volume = 2.375143 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.453652 -SourceRegion.volume = 0.430013 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.007540 -SourceRegion.volume = 0.142681 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.190894 -SourceRegion.volume = 1.171325 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.722079 -SourceRegion.volume = 1.019215 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.434304 -SourceRegion.volume = 1.414525 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.516533 -SourceRegion.volume = 2.259007 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.433587 -SourceRegion.volume = 1.552945 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.251240 -SourceRegion.volume = 0.368936 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.557610 -SourceRegion.volume = 1.519319 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.724183 -SourceRegion.volume = 1.096733 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.153690 -SourceRegion.volume = 0.158006 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.302314 -SourceRegion.volume = 2.516185 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.797771 -SourceRegion.volume = 3.522394 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.321863 -SourceRegion.volume = 0.474510 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.904447 -SourceRegion.volume = 1.688929 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.717431 -SourceRegion.volume = 0.816774 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.495481 -SourceRegion.volume = 1.303709 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.495447 -SourceRegion.volume = 1.018885 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.094909 -SourceRegion.volume = 0.959866 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.900093 -SourceRegion.volume = 0.318284 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.569370 -SourceRegion.volume = 0.722234 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.580297 -SourceRegion.volume = 2.303424 -test1.1 -test1.2 -test1.3 -test1.4 -test1 -SourceRegion_add.volume = 0.243367 -SourceRegion.volume = 1.559080 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.487511 -SourceRegion.volume = 2.516215 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.186026 -SourceRegion.volume = 0.972108 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.128233 -SourceRegion.volume = 1.649403 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.026889 -SourceRegion.volume = 0.130162 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.546488 -SourceRegion.volume = 2.051669 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.691337 -SourceRegion.volume = 0.474160 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.670737 -SourceRegion.volume = 1.069102 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.977449 -SourceRegion.volume = 0.584753 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.635922 -SourceRegion.volume = 2.506023 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.075694 -SourceRegion.volume = 0.420220 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.851811 -SourceRegion.volume = 1.385797 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.803080 -SourceRegion.volume = 0.799380 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.264828 -SourceRegion.volume = 1.569171 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.703836 -SourceRegion.volume = 0.924218 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.121554 -SourceRegion.volume = 0.302717 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.241850 -SourceRegion.volume = 0.718608 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.112526 -SourceRegion.volume = 0.843146 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.118269 -SourceRegion.volume = 0.873839 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.885991 -SourceRegion.volume = 0.682893 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.236707 -SourceRegion.volume = 0.111206 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.122956 -SourceRegion.volume = 0.567534 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.863538 -SourceRegion.volume = 1.969275 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.930631 -SourceRegion.volume = 2.349240 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.964255 -SourceRegion.volume = 2.290839 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.948329 -SourceRegion.volume = 0.228533 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.241975 -SourceRegion.volume = 0.255956 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.472824 -SourceRegion.volume = 0.894530 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.345933 -SourceRegion.volume = 0.330295 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.028901 -SourceRegion.volume = 2.378145 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.329397 -SourceRegion.volume = 1.256968 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.183794 -SourceRegion.volume = 2.247690 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.310868 -SourceRegion.volume = 2.357826 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.521491 -SourceRegion.volume = 0.902362 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.401905 -SourceRegion.volume = 0.841917 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.346324 -SourceRegion.volume = 2.389098 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.490190 -SourceRegion.volume = 0.531712 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.300665 -SourceRegion.volume = 1.574645 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.859425 -SourceRegion.volume = 1.170643 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.242316 -SourceRegion.volume = 2.256816 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.540504 -SourceRegion.volume = 0.176969 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.298797 -SourceRegion.volume = 2.716607 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.636657 -SourceRegion.volume = 0.989303 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.266771 -SourceRegion.volume = 0.709376 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.347109 -SourceRegion.volume = 0.692138 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.796207 -SourceRegion.volume = 0.405204 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.712852 -SourceRegion.volume = 1.217781 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.390636 -SourceRegion.volume = 3.073202 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.836196 -SourceRegion.volume = 0.409793 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1 -SourceRegion_add.volume = 0.812185 -SourceRegion.volume = 0.181462 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.202643 -SourceRegion.volume = 0.362707 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.069720 -test1 -SourceRegion_add.volume = 1.671936 -SourceRegion.volume = 0.032139 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.6 -test2 -test3 -SourceRegion.volume = 0.554568 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.662244 -SourceRegion.volume = 1.524707 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.701121 -SourceRegion.volume = 0.454953 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.201871 -SourceRegion.volume = 0.685003 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.421545 -SourceRegion.volume = 0.678520 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.746949 -SourceRegion.volume = 0.280340 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.973905 -SourceRegion.volume = 2.183630 -test1.1 -test1 -SourceRegion_add.volume = 2.600425 -SourceRegion.volume = 0.883775 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -test1 -SourceRegion_add.volume = 0.759817 -SourceRegion.volume = 1.552938 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.058212 -SourceRegion.volume = 0.047225 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -SourceRegion_add.volume = 1.654178 -SourceRegion.volume = 2.059160 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.173647 -SourceRegion.volume = 1.495880 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test2 -test3 -test1 -SourceRegion_add.volume = 2.218161 -SourceRegion.volume = 1.661176 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.515949 -SourceRegion.volume = 0.701385 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.186103 -SourceRegion.volume = 0.186517 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.469583 -SourceRegion.volume = 0.930644 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.640264 -SourceRegion.volume = 1.172307 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.013802 -SourceRegion.volume = 3.000473 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.663864 -SourceRegion.volume = 1.833734 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.616874 -SourceRegion.volume = 0.664139 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.555970 -SourceRegion.volume = 2.541713 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.008631 -SourceRegion.volume = 0.988809 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.721892 -SourceRegion.volume = 0.367480 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.947577 -SourceRegion.volume = 2.022651 -test1.1 -test1.2 -test1 -SourceRegion_add.volume = 0.836406 -SourceRegion.volume = 0.710992 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.206894 -SourceRegion.volume = 0.092308 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.326161 -SourceRegion.volume = 1.608543 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.431331 -SourceRegion.volume = 0.332551 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.871114 -SourceRegion.volume = 0.447340 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.724751 -SourceRegion.volume = 0.480044 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.535558 -SourceRegion.volume = 1.772712 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.022630 -SourceRegion.volume = 3.680405 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.335361 -SourceRegion.volume = 1.995734 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.207038 -SourceRegion.volume = 2.028011 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.714372 -SourceRegion.volume = 0.784463 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.451467 -SourceRegion.volume = 1.239030 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.960580 -SourceRegion.volume = 0.341492 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.470916 -SourceRegion.volume = 0.673629 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.299474 -SourceRegion.volume = 0.197202 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 5.905580 -SourceRegion.volume = 0.233591 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.663478 -SourceRegion.volume = 0.065165 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.021863 -SourceRegion.volume = 1.503241 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.439616 -SourceRegion.volume = 1.125576 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 0.013291 -SourceRegion.volume = 1.489723 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 2.132740 -SourceRegion.volume = 1.097207 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 3.454470 -SourceRegion.volume = 1.132376 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -test1 -SourceRegion_add.volume = 1.123504 -SourceRegion.volume = 0.870971 -test1.1 -test1.2 -test1.3 -test1.4 -test1.5 -test1.6 -test2 -test3 -MPI load balancing converged after 60 iterations. Max. imbalance: 0.98% - 1/1 0.81615 0.32005 -Rank 0 broadcasting 3092 source regions to other ranks. -test1 -SourceRegion_add.volume = 0.394214 diff --git a/examples/c5g7_no_mesh/trrm.csv b/examples/c5g7_no_mesh/trrm.csv deleted file mode 100644 index 957004b9979..00000000000 --- a/examples/c5g7_no_mesh/trrm.csv +++ /dev/null @@ -1,34 +0,0 @@ -2.191247088358690753e+00,2.183037810044411664e+00,2.196537817892335820e+00,2.209203382354891332e+00,2.212565219586464238e+00,2.230372587895537606e+00,2.161540316383826710e+00,2.125706584065855331e+00,2.113575789289852569e+00,2.053052737235776082e+00,1.985714021745168756e+00,1.944721971358328805e+00,1.847265372766942804e+00,1.753509485414951774e+00,1.618938801187395526e+00,1.469498630217219937e+00,1.275691229706575225e+00,1.309087567995126156e+00,1.059237775819073857e+00,9.315206572089261838e-01,8.662652066899705350e-01,8.145255201189558480e-01,7.634058138491180978e-01,7.099012990999500339e-01,6.578789430909585123e-01,6.149497863682612531e-01,5.635883174996001443e-01,5.231380364588641418e-01,4.801680053055608077e-01,4.355363441235307609e-01,3.965338907454876161e-01,3.762727863933839068e-01,4.088255908924357529e-01,6.008333958601349556e-01 -2.187389197105248595e+00,2.208179573699970533e+00,2.227432392020127327e+00,2.263762395719545406e+00,2.307080830238117386e+00,2.360343704135994702e+00,2.238821813452127607e+00,2.200960888595021814e+00,2.241200937753564659e+00,2.118887498318929197e+00,2.061121964495550962e+00,2.069471406679956438e+00,1.913026440378744253e+00,1.770990586404497913e+00,1.635048767374265744e+00,1.474391741777388853e+00,1.275124793600274531e+00,1.292167274053269477e+00,1.338881246564022298e+00,1.175419506913667922e+00,1.093743283475196337e+00,1.046651403761669430e+00,1.040969773026356737e+00,9.200309442726944953e-01,8.400625282710910691e-01,8.313238770108476450e-01,7.237670122394486150e-01,6.672604802563635307e-01,6.473191119476825461e-01,5.592451931665299858e-01,4.979832135287125539e-01,4.686176809098941964e-01,5.182607744015403917e-01,5.940114139990008146e-01 -2.197448044421281832e+00,2.243529919060571309e+00,2.313816386474598197e+00,2.433682620828454102e+00,2.443570433626046423e+00,0.000000000000000000e+00,2.380202891088266881e+00,2.326943484128014550e+00,0.000000000000000000e+00,2.234715856406923606e+00,2.168772604205788657e+00,0.000000000000000000e+00,2.052543919159500962e+00,1.908207562494014242e+00,1.703748729719816168e+00,1.495488656762679058e+00,1.281883789059233614e+00,1.288836262699044388e+00,1.329998531897925940e+00,1.184798053959810638e+00,1.178143136625960263e+00,1.118486722771390163e+00,0.000000000000000000e+00,9.462084564905148820e-01,8.678108924969719640e-01,0.000000000000000000e+00,7.493094900755885579e-01,6.785651849684825043e-01,0.000000000000000000e+00,6.002988830744881987e-01,5.372592011234901266e-01,4.733437976731929564e-01,5.051019483401713028e-01,5.857468968889342209e-01 -2.226501444081867565e+00,2.275610560571992735e+00,2.427507037078852736e+00,0.000000000000000000e+00,2.474295458883274179e+00,2.431472577085453946e+00,2.288608740623471416e+00,2.227903381482966072e+00,2.279530524858763396e+00,2.140746938325002624e+00,2.092230890813752353e+00,2.129486393367493680e+00,2.051767376827057454e+00,0.000000000000000000e+00,1.807336646290496285e+00,1.530735934116578267e+00,1.286117680681753361e+00,1.289420014859783636e+00,1.327102619584999532e+00,1.262340380262139128e+00,0.000000000000000000e+00,1.108945290591634825e+00,1.125335624770032350e+00,9.537537807988630822e-01,8.815574770401419791e-01,8.612369101382135739e-01,7.520510404187301656e-01,6.958164315659516319e-01,7.008951312484703600e-01,5.831082251660727467e-01,0.000000000000000000e+00,5.086201699880906757e-01,5.162584336183845268e-01,5.863596636493298986e-01 -2.218926927657777881e+00,2.299886259571966463e+00,2.456697642262575698e+00,2.499626201679899573e+00,2.391304868593149280e+00,2.414406345857414760e+00,2.256082097478225634e+00,2.210072611407509324e+00,2.264741275130429443e+00,2.117606162345963217e+00,2.066527389788194391e+00,2.118273559083696522e+00,1.995037020043149312e+00,1.956578257193890336e+00,1.824584757311602079e+00,1.549257324318271012e+00,1.296851983389701646e+00,1.284264056478538363e+00,1.350075638334157002e+00,1.284011833600698038e+00,1.175600351778952835e+00,1.146427873686699073e+00,1.076326960968510660e+00,9.229509328990849193e-01,8.522690311351067693e-01,8.483606436100050718e-01,7.303029501002877844e-01,6.728675038158405952e-01,6.738398675857021347e-01,6.056533417080822712e-01,5.344562079427526147e-01,5.169634615293259294e-01,5.200538056877984650e-01,5.842034262206571293e-01 -2.231082909635700773e+00,2.375789520600242621e+00,0.000000000000000000e+00,2.458438786682784816e+00,2.412014841102354090e+00,0.000000000000000000e+00,2.324697423526147499e+00,2.307511663947630520e+00,0.000000000000000000e+00,2.182473766572771812e+00,2.137911116740639716e+00,0.000000000000000000e+00,2.019231885261925541e+00,1.930894390490011769e+00,0.000000000000000000e+00,1.593678826297055151e+00,1.295585776596550165e+00,1.288773309667573086e+00,1.420062389396669733e+00,0.000000000000000000e+00,1.281492230616910533e+00,1.145565439380789696e+00,0.000000000000000000e+00,9.828164956678981934e-01,9.001830850385110772e-01,0.000000000000000000e+00,7.762583233259164883e-01,7.121972695606388903e-01,0.000000000000000000e+00,6.120814770120478476e-01,5.727962386254695781e-01,0.000000000000000000e+00,5.465166072409047837e-01,5.853264484567460846e-01 -2.193333023549111083e+00,2.248154547521326041e+00,2.377595699308919563e+00,2.314371329581254688e+00,2.287984815312760212e+00,2.324040661430613497e+00,2.207607448286067253e+00,2.159232752580644288e+00,2.198640966841652666e+00,2.078276734751812960e+00,2.031524074378713518e+00,2.047267737222503659e+00,1.910742935843156243e+00,1.806482349640972984e+00,1.755589205096524497e+00,1.526644376669864522e+00,1.274794099548210546e+00,1.267028030292862928e+00,1.320456608941520615e+00,1.215037435087375384e+00,1.146985769912143738e+00,1.037459726338711974e+00,1.034976970147732933e+00,8.987373823158448793e-01,8.249820480467460193e-01,8.258375693118994443e-01,7.192426221500023420e-01,6.560511018915371473e-01,6.486489125401101452e-01,5.570852795816151337e-01,5.180952257940212302e-01,4.852817228618145906e-01,5.104054005637053137e-01,5.775760074477510608e-01 -2.129910704725793469e+00,2.212607874940346608e+00,2.340039369117613788e+00,2.241920866594564021e+00,2.220408751380578138e+00,2.284707864496888785e+00,2.169216423973474139e+00,2.132189374681973337e+00,2.170021761231772484e+00,2.058093953778662222e+00,1.994521228884661213e+00,2.003175263835319520e+00,1.866062268526274215e+00,1.770803630750291680e+00,1.721859500159762968e+00,1.504073961297410778e+00,1.256448640070237488e+00,1.253639973683003062e+00,1.316231529095601704e+00,1.191121610731709746e+00,1.113922402340774331e+00,1.011256476511537050e+00,1.014965274884199520e+00,8.861928678038175633e-01,8.188278746156557597e-01,8.102892872283671277e-01,7.065157431112425446e-01,6.495695567973099882e-01,6.383150646417524721e-01,5.494553783935032243e-01,5.129562119808761533e-01,4.810674198775791166e-01,5.080881215560474340e-01,5.703773791118308401e-01 -2.111795255516697445e+00,2.243617810087375819e+00,0.000000000000000000e+00,2.277669480100985577e+00,2.264419849023404652e+00,0.000000000000000000e+00,2.212165054535202735e+00,2.186081915001328646e+00,5.905483372858080321e-05,2.092605917932987669e+00,2.022009508341952255e+00,0.000000000000000000e+00,1.900835292429759349e+00,1.802936391864802701e+00,0.000000000000000000e+00,1.526321189694179514e+00,1.239277137432728049e+00,1.239401673874342524e+00,1.353047071096246334e+00,0.000000000000000000e+00,1.181917043748235585e+00,1.062656252233996401e+00,0.000000000000000000e+00,9.348557763215046279e-01,8.611952289018872664e-01,2.022953124983358227e-05,7.519504536433897490e-01,6.819664371659899249e-01,0.000000000000000000e+00,5.886593862297052615e-01,5.408748848410322996e-01,0.000000000000000000e+00,5.285375131154198547e-01,5.690487163194927200e-01 -2.054337302635711460e+00,2.109956609811427519e+00,2.221160439193332170e+00,2.152302058549536934e+00,2.125715797419949649e+00,2.189784304093460143e+00,2.089919993493440042e+00,2.049081344492106105e+00,2.084853756008507197e+00,1.974025286882006958e+00,1.920356495826909038e+00,1.944157521291036028e+00,1.797758364323612135e+00,1.710748110216061324e+00,1.667913594829847357e+00,1.438133114862460982e+00,1.214003965719606448e+00,1.208895867153015669e+00,1.269186375307888470e+00,1.152072564972867363e+00,1.079690642863499139e+00,9.906023805145405259e-01,9.805509088876559476e-01,8.600759773199186942e-01,7.988089990029161314e-01,7.995450583372136766e-01,6.914182264907056119e-01,6.314393157313016314e-01,6.286111064155717187e-01,5.406484458465800058e-01,5.002943853552010989e-01,4.724244966795246303e-01,4.998876111740644390e-01,5.695898496773728059e-01 -1.986670535203628685e+00,2.054476313994880954e+00,2.181267711313287005e+00,2.093717939432175434e+00,2.076418866386740891e+00,2.137815887766437495e+00,2.023504073786457802e+00,1.988202932241510013e+00,2.031861536673257973e+00,1.918217704930249123e+00,1.861207732707200524e+00,1.889397347310102893e+00,1.760428731100624589e+00,1.674757395907804813e+00,1.631159915290137041e+00,1.427622733820306244e+00,1.184265874694650167e+00,1.188183225214553440e+00,1.241403492753595517e+00,1.139997500674297726e+00,1.073477448951509761e+00,9.770130249952052592e-01,9.710713944060891389e-01,8.461797277265681316e-01,7.840855826775391391e-01,7.909003022867525656e-01,6.875396075525891382e-01,6.230322061725841465e-01,6.210724583067812610e-01,5.359661403792689294e-01,4.964839713359483486e-01,4.635816663744574129e-01,4.936267130715821239e-01,5.600230818713256564e-01 -1.939309693786417599e+00,2.070310737595831618e+00,0.000000000000000000e+00,2.137996425965541736e+00,2.124008701925748976e+00,0.000000000000000000e+00,2.053421732392183507e+00,2.007645696129726876e+00,0.000000000000000000e+00,1.934808165714997585e+00,1.888228361905046171e+00,0.000000000000000000e+00,1.793606677942480188e+00,1.717444695424241052e+00,0.000000000000000000e+00,1.433189564518702275e+00,1.163182094994017257e+00,1.162058685579531847e+00,1.291078908518831669e+00,0.000000000000000000e+00,1.165906548003818211e+00,1.036812168136559409e+00,0.000000000000000000e+00,9.006319678719821864e-01,8.315545851665148147e-01,0.000000000000000000e+00,7.344467792665521078e-01,6.589951810821528255e-01,0.000000000000000000e+00,5.760740174273405456e-01,5.391752865374970227e-01,0.000000000000000000e+00,5.212462790892851139e-01,5.506186815162145143e-01 -1.855411671663253159e+00,1.925151171582305087e+00,2.059994779963877143e+00,2.074145071759399439e+00,1.996318762925073598e+00,2.025099761485353422e+00,1.922365085586858591e+00,1.866929533903046279e+00,1.911412953201373499e+00,1.802722909465994228e+00,1.747958456866825383e+00,1.795798749443410891e+00,1.689705802246291855e+00,1.670683409319676738e+00,1.561287362384530031e+00,1.342710607316113691e+00,1.117661686621025163e+00,1.120165507149075479e+00,1.189314519760101607e+00,1.130394475187382675e+00,1.039978121062117955e+00,1.015063874420505829e+00,9.651515136750324908e-01,8.376551677793997452e-01,7.691552452380430172e-01,7.712073971884916279e-01,6.738517709538572875e-01,6.207386070759011165e-01,6.240197265266085314e-01,5.567623176274234531e-01,4.917193538325891344e-01,4.767493869116664063e-01,4.822988480051001448e-01,5.412887395586843953e-01 -1.759677355446763292e+00,1.794400266911236885e+00,1.927442731709765544e+00,0.000000000000000000e+00,1.970076925967498616e+00,1.934066731312273912e+00,1.823765236346551744e+00,1.775843461571870119e+00,1.820760733661625164e+00,1.713947898680572512e+00,1.676175261510312486e+00,1.720482874665544060e+00,1.671521519562934932e+00,0.000000000000000000e+00,1.475303693592278975e+00,1.264723250973249113e+00,1.073674786260244041e+00,1.084570196257446772e+00,1.126572984018279655e+00,1.074320869628573094e+00,0.000000000000000000e+00,9.582878233902966114e-01,9.801649901186169078e-01,8.432084516669698937e-01,7.746239556324118203e-01,7.791484591145405592e-01,6.746971597329420867e-01,6.299099104630623280e-01,6.321212726567230211e-01,5.293584729707453418e-01,0.000000000000000000e+00,4.660478106241895957e-01,4.645523707121523294e-01,5.264805840853342689e-01 -1.638362707092156034e+00,1.656027693404731327e+00,1.714566681161751260e+00,1.813767122596523285e+00,1.825878682035023459e+00,0.000000000000000000e+00,1.768038472854896792e+00,1.731625845129279861e+00,0.000000000000000000e+00,1.660802876962393704e+00,1.624856872510545447e+00,0.000000000000000000e+00,1.572920140337688677e+00,1.488799175897359328e+00,1.322094626762917891e+00,1.175656183793597709e+00,1.008447804702727435e+00,1.035240212795422998e+00,1.083017321169486902e+00,9.951767294784388262e-01,9.987735758771782990e-01,9.547295235348596254e-01,0.000000000000000000e+00,8.323232782346620118e-01,7.618874625432368042e-01,0.000000000000000000e+00,6.738117084778187937e-01,6.143378379202336648e-01,0.000000000000000000e+00,5.464676925427908172e-01,4.867044085272154708e-01,4.276325699416522741e-01,4.595110836909998553e-01,5.269694003763422119e-01 -1.483664026340598685e+00,1.485928533120761896e+00,1.522092150237713160e+00,1.537623262516716105e+00,1.556041610701640376e+00,1.614558200831128332e+00,1.526476443708170816e+00,1.503273037662012035e+00,1.537698072794241311e+00,1.453937895108954548e+00,1.426435615532985146e+00,1.432124755314073017e+00,1.335884866208434607e+00,1.269121945226295178e+00,1.184239450980220321e+00,1.079512015307677153e+00,9.513101919191917499e-01,1.002022867342769130e+00,1.098957994362292245e+00,9.871033287981917370e-01,9.481624800674134379e-01,9.238563433257078739e-01,9.264653612000229854e-01,8.253417223459025287e-01,7.691212520089578675e-01,7.627961299891509173e-01,6.699940225222736911e-01,6.230481150465755347e-01,6.106000443331772720e-01,5.309279637896315851e-01,4.728521005899636864e-01,4.422733235189713619e-01,4.832545113218360555e-01,5.425712034804132111e-01 -1.282520553935648344e+00,1.274279110088654576e+00,1.282977509566893382e+00,1.288526527599304972e+00,1.297523107201326020e+00,1.303491552713452739e+00,1.269274203088366360e+00,1.253099802627585913e+00,1.241140171644295132e+00,1.209007559240716567e+00,1.179121499250447291e+00,1.168270227528867222e+00,1.112980859452735283e+00,1.060683604007594205e+00,1.018624467799976285e+00,9.597859993975932369e-01,8.811332716673750953e-01,1.015260267107674919e+00,9.058664618496887755e-01,8.504807188522480743e-01,8.196446512186682520e-01,7.895318237519060034e-01,7.641755667733742818e-01,7.138243073906862524e-01,6.719145389772235299e-01,6.360130188177237631e-01,5.871768344832307696e-01,5.480041959380100858e-01,5.064811815124733441e-01,4.607759078459137125e-01,4.220548226516234736e-01,4.022034820535829169e-01,4.270859824671134897e-01,5.769625869141823404e-01 -1.316471726324641711e+00,1.301383534945617759e+00,1.289665337316929783e+00,1.298266666694424032e+00,1.296764268005277776e+00,1.291546581491599177e+00,1.272457264381850361e+00,1.255944218212216912e+00,1.242292671548804073e+00,1.216123210090080731e+00,1.197625844798729133e+00,1.162844065888928302e+00,1.124409956134110988e+00,1.080858328084939979e+00,1.034961464676486642e+00,1.005151905755737429e+00,1.017093772127665163e+00,7.960627971164752070e-01,7.885406176650254784e-01,7.747552518443546754e-01,7.509792786642698337e-01,7.314815042731055428e-01,7.041915110973251402e-01,6.622066894889006017e-01,6.215532082833116201e-01,5.871574258241251121e-01,5.490449216910516794e-01,5.088162914769511769e-01,4.713562267179362553e-01,4.306141899096647685e-01,3.971415581329607036e-01,3.769008778899384793e-01,3.931010407500538095e-01,5.093960863763510316e-01 -1.064000717163514631e+00,1.353635313444590205e+00,1.328279601481909822e+00,1.331329438856757807e+00,1.361594510353077325e+00,1.429308119732483950e+00,1.330294767904400377e+00,1.316818957456696415e+00,1.371582830735758929e+00,1.274989094897337694e+00,1.253509551474411676e+00,1.283463093376297381e+00,1.198517382208715842e+00,1.131995127547667401e+00,1.087777227050225060e+00,1.102854610437833616e+00,9.187571502137118484e-01,7.888795811190919549e-01,8.270448219070298812e-01,8.294309544970086545e-01,8.280437807335848666e-01,8.121549731130274230e-01,8.091142709521912391e-01,7.432067637936660143e-01,6.986500819769629889e-01,6.837234221894817887e-01,6.159512398827160506e-01,5.724131501184384074e-01,5.482130112650641651e-01,4.895315891433671407e-01,4.435101904652545834e-01,4.180671729929731351e-01,4.283521525606124869e-01,5.285448660939552346e-01 -9.421384737787534824e-01,1.184315963786022996e+00,1.192872465536471971e+00,1.255727184359869630e+00,1.285778759185480569e+00,0.000000000000000000e+00,1.223674525602471697e+00,1.199961005803297454e+00,0.000000000000000000e+00,1.163683319289239515e+00,1.148357328126751176e+00,0.000000000000000000e+00,1.136557034604824823e+00,1.081672921104091856e+00,9.883293523392095992e-01,9.904779604705001850e-01,8.555337397767853735e-01,7.754537280875926086e-01,8.259473311220250080e-01,8.670392457710104361e-01,8.987430955634241325e-01,8.915483259352598999e-01,0.000000000000000000e+00,8.077076708131013527e-01,7.573129775106630657e-01,0.000000000000000000e+00,6.659242056013290334e-01,6.196656081818328055e-01,0.000000000000000000e+00,5.408548024389592257e-01,4.941927636914571487e-01,4.435656434886283694e-01,4.418652375097458784e-01,5.373899174561270753e-01 -8.734522999348018901e-01,1.100319907181191770e+00,1.179521249852117926e+00,0.000000000000000000e+00,1.193513281325771391e+00,1.278558816378772445e+00,1.153158956415373027e+00,1.131410565886197706e+00,1.199475215507000536e+00,1.089605692635659207e+00,1.084978605196925905e+00,1.163387655988868508e+00,1.040220332453506202e+00,0.000000000000000000e+00,1.005534304570551596e+00,9.438427719449860032e-01,8.230403187448527280e-01,7.501239553212172284e-01,8.299421975647560679e-01,9.033449176669088310e-01,0.000000000000000000e+00,9.003906531591215900e-01,8.588017001858627708e-01,7.721850290035323638e-01,7.231550874856591538e-01,7.143672838398688052e-01,6.430094320797047347e-01,5.952642187947164709e-01,5.845985998481645352e-01,5.427945535352158846e-01,0.000000000000000000e+00,4.715604823444637939e-01,4.492599828513393900e-01,5.343251971930471633e-01 -8.182380184398414524e-01,1.056134489416050926e+00,1.125410795655496621e+00,1.120365813083079809e+00,1.154093347454119067e+00,1.144589595048006281e+00,1.041390506802172267e+00,1.029350425140714176e+00,1.077218591050897123e+00,9.952903185181630752e-01,9.907798976863729790e-01,1.046681607871178921e+00,1.023456150806645759e+00,9.685615643457549107e-01,9.552112556644626329e-01,9.173162004373885958e-01,7.890162996452245725e-01,7.294849098209817972e-01,8.134144503457534370e-01,8.910220582545809176e-01,8.974666219311479010e-01,8.503930232231756703e-01,8.284768009280699674e-01,7.539378819633139051e-01,7.133650409858925956e-01,6.952889585848834875e-01,6.239621768529399759e-01,5.829499829379772846e-01,5.694063024255178185e-01,5.165082371425814278e-01,4.955995942564136447e-01,4.668099084739451010e-01,4.493394293570446840e-01,5.252833864895075644e-01 -7.737874919028429055e-01,1.045877426674022281e+00,0.000000000000000000e+00,1.130834997228184813e+00,1.081801117539766599e+00,0.000000000000000000e+00,1.026833151133299316e+00,1.012850352962841427e+00,0.000000000000000000e+00,9.996841126078755968e-01,9.740378813663748137e-01,0.000000000000000000e+00,9.700409854985876379e-01,9.812112710218202638e-01,0.000000000000000000e+00,9.269560034582287056e-01,7.636337418624420392e-01,7.012665615391588947e-01,8.103641409218265146e-01,0.000000000000000000e+00,8.503518325140456691e-01,8.271461638751318457e-01,0.000000000000000000e+00,7.593181428772638464e-01,7.136020323941065779e-01,0.000000000000000000e+00,6.328498169927920802e-01,5.840718755235967397e-01,0.000000000000000000e+00,5.131946835021108377e-01,4.815967997851228199e-01,0.000000000000000000e+00,4.518946608006484955e-01,5.133015321174996259e-01 -7.240455549067191798e-01,9.282490759804838953e-01,9.482902430086193046e-01,9.575431034638201000e-01,9.283896460223689528e-01,9.808231478946479731e-01,9.004364528676550572e-01,8.874378712687498449e-01,9.480525752302128017e-01,8.679333260488791835e-01,8.557849217734814218e-01,9.052416037891988232e-01,8.372569497238263603e-01,8.413359145941188277e-01,8.258091923290324932e-01,8.243915109529369456e-01,7.139541587439731662e-01,6.609624609933459904e-01,7.397087919388564137e-01,8.016790784074945275e-01,7.733268989074596478e-01,7.557112793636738823e-01,7.599958279587964993e-01,6.889336292274383933e-01,6.563942627349094172e-01,6.471849113105505591e-01,5.826594934631921241e-01,5.407829535242093533e-01,5.237138290815784858e-01,4.729574696243908360e-01,4.402326234529471694e-01,4.316780102245537099e-01,4.183196271784163645e-01,4.879810978447451930e-01 -6.704295797094608211e-01,8.539191734892210839e-01,8.705582833385407948e-01,8.846977400309432582e-01,8.588851315219306892e-01,9.028191150622755234e-01,8.388150892161027050e-01,8.191260527752426412e-01,8.631045976804209152e-01,8.007908974220390164e-01,7.895039527571818816e-01,8.298180348355850278e-01,7.751003244618606125e-01,7.802373987499040542e-01,7.590244073411180903e-01,7.732785934252642823e-01,6.724822387850472039e-01,6.230994908808976662e-01,6.994830449077992229e-01,7.519710380557811380e-01,7.254750407669064982e-01,7.077595245319724393e-01,7.070736255532449333e-01,6.575749951679532579e-01,6.232832616455081798e-01,6.118599207471168144e-01,5.534535398288059627e-01,5.137736212707584293e-01,4.981017566315768530e-01,4.429968732841544354e-01,4.149283457389875140e-01,4.081033869077403953e-01,3.968142876139097996e-01,4.632635738422015148e-01 -6.271281432260689126e-01,8.498774244096176655e-01,0.000000000000000000e+00,8.792758835133264173e-01,8.511752470027588169e-01,0.000000000000000000e+00,8.331477935928555123e-01,8.262708103672868898e-01,2.020095507363041802e-05,8.030672051972632675e-01,7.948706761837915913e-01,0.000000000000000000e+00,7.733351642816427285e-01,7.737406639071410241e-01,0.000000000000000000e+00,7.636936007676156102e-01,6.356221385957802061e-01,5.884322865117922463e-01,6.816912079968121541e-01,0.000000000000000000e+00,7.127271864019693037e-01,6.949820296271701503e-01,0.000000000000000000e+00,6.492956079417456783e-01,6.137872874585588168e-01,1.610354413196360941e-05,5.431135632137641389e-01,5.067601412063421629e-01,0.000000000000000000e+00,4.362016824508225810e-01,4.050461258678976773e-01,0.000000000000000000e+00,3.894826364759194082e-01,4.447430672504455451e-01 -5.756767568245941824e-01,7.309234417545680262e-01,7.563875094737525506e-01,7.599746310102825086e-01,7.336702802356834807e-01,7.847013879435806860e-01,7.222043750897578773e-01,7.124206569994736560e-01,7.532637750757106287e-01,7.013754774682684490e-01,6.882705639874764358e-01,7.323686689385516813e-01,6.733686088612483855e-01,6.779188099541035850e-01,6.744806169031609677e-01,6.780929248625879868e-01,5.900686970388916430e-01,5.464669286269403514e-01,6.178406369235316387e-01,6.667189993957479688e-01,6.372653425158187890e-01,6.220923597427302498e-01,6.294729181414369101e-01,5.814617189721780210e-01,5.558426458582808038e-01,5.451794401602833018e-01,4.921431746693394893e-01,4.568925106066384356e-01,4.446489673362989947e-01,3.962891158823371174e-01,3.675058814750132852e-01,3.629343452793412084e-01,3.536562027099717787e-01,4.157904601115759435e-01 -5.311885997925630543e-01,6.763838090578581097e-01,6.918733791836048086e-01,7.001779053623733429e-01,6.813264878247622391e-01,7.126131716146361095e-01,6.608537340687946626e-01,6.490562856767130295e-01,6.848752028443435558e-01,6.410458905423291887e-01,6.341727927915881136e-01,6.735321466045661731e-01,6.195619523218262037e-01,6.305609696866814051e-01,6.157013559966822980e-01,6.239442364358775972e-01,5.413054689408103304e-01,5.093170004213958268e-01,5.708405170606464241e-01,6.220991779932963928e-01,5.936287151813736118e-01,5.833178724975647267e-01,5.870565534424708742e-01,5.427354166413274061e-01,5.173108359166580517e-01,5.082595650710257651e-01,4.583758095752694106e-01,4.268366971034435742e-01,4.148919339395080175e-01,3.730303857428991510e-01,3.431375070535752081e-01,3.390058041729259175e-01,3.293959132718906613e-01,3.894651137292612364e-01 -4.880893109204306746e-01,6.637586253238343392e-01,0.000000000000000000e+00,7.085161542995268569e-01,6.774178373038094447e-01,0.000000000000000000e+00,6.517056920734776160e-01,6.456391862294733608e-01,0.000000000000000000e+00,6.366990687146554251e-01,6.269791964692927877e-01,0.000000000000000000e+00,6.253090839121397959e-01,6.368464496189781832e-01,0.000000000000000000e+00,6.159524243874878735e-01,5.070734659190005988e-01,4.739770907533142896e-01,5.492490690742655168e-01,0.000000000000000000e+00,5.856158795049488663e-01,5.640522053239396261e-01,0.000000000000000000e+00,5.229673960565481838e-01,4.996662179298075324e-01,0.000000000000000000e+00,4.477871169417994013e-01,4.153332615739425693e-01,0.000000000000000000e+00,3.615211516804351377e-01,3.360611321676330587e-01,0.000000000000000000e+00,3.180585413425819352e-01,3.597888528736741254e-01 -4.437287164228900238e-01,5.721727074097165966e-01,6.089522039667149000e-01,5.924164366565792816e-01,6.092535178703845089e-01,6.203506338544979570e-01,5.657961734234764339e-01,5.568640561697966174e-01,5.921751074050781716e-01,5.432006489403792271e-01,5.410491077301776697e-01,5.872202795833334488e-01,5.611589330122712660e-01,5.370927682905253242e-01,5.520442015689500659e-01,5.365195239323181653e-01,4.652761676581110284e-01,4.347996223523004078e-01,4.890103508987206360e-01,5.422026421323546952e-01,5.432417285869868273e-01,5.176220112739589041e-01,5.151641341465219570e-01,4.677536117346107192e-01,4.443176504664649862e-01,4.388309429996508637e-01,3.974690252130943513e-01,3.692117409012467544e-01,3.652478967413388955e-01,3.290193833644715071e-01,3.159317206846702364e-01,2.982470720712732670e-01,2.854557115812783596e-01,3.292669094475462743e-01 -4.019776563922255463e-01,5.077750671771877888e-01,5.432981295490509899e-01,0.000000000000000000e+00,5.415030589727736210e-01,5.800845779769169264e-01,5.249208908394225048e-01,5.151917449124574500e-01,5.456672634221780838e-01,5.042650085633416657e-01,5.049791856271410584e-01,5.465336626957661981e-01,4.979750117066176207e-01,0.000000000000000000e+00,4.992149742315453720e-01,4.799094025406466235e-01,4.246458641489704311e-01,3.983898371277103667e-01,4.476925287389251773e-01,4.925700654168500003e-01,0.000000000000000000e+00,4.998931882826454509e-01,4.777005780514578803e-01,4.357826438349560183e-01,4.124922359066469646e-01,4.052755620365040001e-01,3.659778391060351521e-01,3.440594758033663769e-01,3.383110387509301042e-01,3.123935041272363766e-01,0.000000000000000000e+00,2.728106558106904167e-01,2.576937895680694313e-01,3.031817943291972295e-01 -3.778813936891481373e-01,4.724560213931874308e-01,4.793720945788496612e-01,5.172322683653809428e-01,5.191821471119544285e-01,0.000000000000000000e+00,4.889018563617613666e-01,4.836280103412842757e-01,0.000000000000000000e+00,4.771366439954088379e-01,4.723003645055394162e-01,0.000000000000000000e+00,4.849299554389744360e-01,4.737310571989788999e-01,4.373971417624507585e-01,4.481338493724968952e-01,4.041287663894579940e-01,3.796209195006247095e-01,4.166843082973617496e-01,4.453775531928228504e-01,4.680170505100515466e-01,4.683302710991176232e-01,0.000000000000000000e+00,4.286450982440978552e-01,4.086985324622310900e-01,0.000000000000000000e+00,3.639498148165104530e-01,3.402048365674239516e-01,0.000000000000000000e+00,2.988146148041820327e-01,2.729254812354990345e-01,2.424353174765424002e-01,2.384883897694446420e-01,2.787415261655875609e-01 -4.144799417489927196e-01,5.215918580475720212e-01,5.131596570952726699e-01,5.206294278375190876e-01,5.297621171338582347e-01,5.549241182230592040e-01,5.193999002714598801e-01,5.138026545937318668e-01,5.375028708531557342e-01,5.043188588273302964e-01,5.022341209627532166e-01,5.246717645274733277e-01,4.888586129196206831e-01,4.736624288879482947e-01,4.630706681670004321e-01,4.827647670653502088e-01,4.288989597969547485e-01,3.951085892958181023e-01,4.308972810017863142e-01,4.443080226899827623e-01,4.501086201392289210e-01,4.461563627282417732e-01,4.485576226902251995e-01,4.175779661238873675e-01,3.945192070490062819e-01,3.892845851231011012e-01,3.534912691512847593e-01,3.299377237198209967e-01,3.171475102156621761e-01,2.846633817947265555e-01,2.607613698014291659e-01,2.366420060628103561e-01,2.340414672059265289e-01,2.686780863966252153e-01 -6.030034616626710475e-01,5.975897837962456105e-01,5.974816228055220835e-01,5.954931732478212503e-01,5.954289533272330015e-01,5.935459024223447289e-01,5.874087395253896338e-01,5.855659752616900748e-01,5.791846329825856010e-01,5.719845030607473291e-01,5.611202023067951572e-01,5.610589309840724459e-01,5.486154934240742298e-01,5.378133527148274418e-01,5.285363846034256685e-01,5.319276983508409717e-01,5.811667041770416375e-01,5.074114584477388279e-01,5.348246987351746862e-01,5.418482247636255966e-01,5.373628776011537544e-01,5.284781045324750126e-01,5.131010200610383043e-01,4.901844926459114071e-01,4.650876929416942751e-01,4.439932476791162985e-01,4.178521224513318533e-01,3.885319407815574499e-01,3.629205463608465854e-01,3.326481634578376534e-01,3.033931515746035035e-01,2.806606132185862079e-01,2.701508109231260946e-01,2.903057835354830862e-01 diff --git a/examples/proxima/download_dagmc_mesh.sh b/examples/proxima/download_dagmc_mesh.sh deleted file mode 100644 index ec3b8746c13..00000000000 --- a/examples/proxima/download_dagmc_mesh.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -wget https://anl.box.com/shared/static/422g0kp72gtbap0l55ffvq9cloxslu87.h5m -mv 422g0kp72gtbap0l55ffvq9cloxslu87.h5m dagmc_surface_mesh.h5m \ No newline at end of file diff --git a/examples/proxima/stellarator.py b/examples/proxima/stellarator.py deleted file mode 100644 index e7380a5b166..00000000000 --- a/examples/proxima/stellarator.py +++ /dev/null @@ -1,185 +0,0 @@ -import numpy as np -import openmc # install with: conda install -c conda-forge openmc -import math - -materials = openmc.Materials() - -# simplified material definitions have been used to keen this example minimal -material_layer_1 = openmc.Material(name='layer_1') -material_layer_1.add_nuclide("Fe56", 1, "ao") -material_layer_1.set_density("g/cm3", 7.) -materials.append(material_layer_1) - -material_layer_2 = openmc.Material(name='layer_2') -material_layer_2.add_nuclide("Li6", 0.9, "ao") -material_layer_2.add_nuclide("Li7", 0.1, "ao") -material_layer_2.set_density("g/cm3", 2.) -materials.append(material_layer_2) - -material_layer_3 = openmc.Material(name='layer_3') -material_layer_3.add_nuclide("Fe56", 1, "ao") -material_layer_3.set_density("g/cm3", 7.) -materials.append(material_layer_3) - -material_magnet = openmc.Material(name='magnet') -material_magnet.add_nuclide("Fe56", 1, "ao") -material_magnet.set_density("g/cm3", 7.) -materials.append(material_magnet) - - -bound_dag_univ = openmc.DAGMCUniverse(filename="dagmc_surface_mesh.h5m").bounded_universe() -geometry = openmc.Geometry(root=bound_dag_univ) - -rmesh = openmc.RegularMesh.from_domain(bound_dag_univ) -rmesh.id = 2 -rmesh.dimension = [200, 200, 200] -rmesh_filter = openmc.MeshFilter(rmesh) -rmesh_tally_h3 = openmc.Tally(name="H3_rmesh_tally") -rmesh_tally_h3.filters = [rmesh_filter] -rmesh_tally_h3.scores = ["H3-production"] - -material_filter_layer_2 = openmc.MaterialFilter(material_layer_2) -material_tally_h3 = openmc.Tally(name="H3_material_tally") -material_tally_h3.filters = [material_filter_layer_2] -material_tally_h3.scores = ["H3-production"] - -material_filter_magnet = openmc.MaterialFilter(material_magnet) -material_tally_magnet_heat = openmc.Tally(name="magnet_heating_material_tally") -material_tally_magnet_heat.filters = [material_filter_magnet] -material_tally_magnet_heat.scores = ["heating"] - -# tallies = openmc.Tallies([material_tally_h3, material_tally_magnet_heat, mesh_tally_h3]) -tallies = openmc.Tallies([material_tally_h3, material_tally_magnet_heat, rmesh_tally_h3]) -# tallies = openmc.Tallies([mesh_tally, material_tally]) - - -# initializes a new source object -my_source = openmc.IndependentSource() - -# the distribution of radius is just a single value at the major radius -radius = openmc.stats.Discrete([1397.626385546529], [1]) - -# the distribution of source z values is just a single value -z_values = openmc.stats.Discrete([0], [1]) - -# the distribution of source azimuthal angles values is a uniform distribution between 0 and 2 Pi -angle = openmc.stats.Uniform(a=0., b=2* 3.14159265359) - -# this makes the ring source using the three distributions and a radius -#my_source.space = openmc.stats.CylindricalIndependent(r=radius, phi=angle, z=z_values, origin=(0.0, 0.0, 0.0)) - -# sets the direction to isotropic -my_source.angle = openmc.stats.Isotropic() -# sets the energy distribution to 100% 14MeV neutrons, this is a simplification -# normally this would be a distribution of energies that can be made using packages like -# fusion_neutron_utils https://github.com/fusion-energy/fusion_neutron_utils -energy = openmc.stats.Discrete([14.06e6], [1]) - -# Let's make a ring of sources -sources = [] -n_sources = 1000 -#radius = 1397.626385546529 -#radius = 1500.0 -radius = 1480.0 -z = 0.0 - -for i in range(n_sources): - theta = 2.0 * math.pi * i / n_sources # angle in radians - x = radius * math.cos(theta) - y = radius * math.sin(theta) - - src = openmc.IndependentSource() - src.space = openmc.stats.Point([x, y, z]) - src.energy = energy - sources.append(src) - -# specifies the simulation computational intensity -settings = openmc.Settings() -settings.batches = 5 # this is set to 2 for testing purposes, this should be increased for an accurate simulation -settings.particles = 100 # this is set to 10 for testing purposes, this should be increased for an accurate simulation -settings.run_mode = "fixed source" -settings.source = sources -settings.photon_transport = True - - -# builds the openmc model -model = openmc.Model( - materials=materials, geometry=geometry, settings=settings, tallies=tallies -) - -#model.export_to_model_xml() - -mesh = openmc.RegularMesh() -mesh.lower_left = geometry.bounding_box.lower_left -mesh.upper_right = geometry.bounding_box.upper_right -print("Lower Left: ({}, {}, {})".format(mesh.lower_left[0], mesh.lower_left[1], mesh.lower_left[2])) -print("Upper Right: ({}, {}, {})".format(mesh.upper_right[0], mesh.upper_right[1], mesh.upper_right[2])) -resolution = 20.0 -# Use the ceiling rather than the floor -n_x = math.ceil((mesh.upper_right[0] - mesh.lower_left[0]) / resolution) -n_y = math.ceil((mesh.upper_right[1] - mesh.lower_left[1]) / resolution) -n_z = math.ceil((mesh.upper_right[2] - mesh.lower_left[2]) / resolution) -mesh.dimension = [n_x, n_y, n_z] -print("Dimensions: ({}, {}, {})".format(n_x, n_y, n_z)) - -tally = openmc.Tally(name='ww_mesh_flux') -tally.filters = [openmc.MeshFilter(mesh)] -tally.scores = ['flux'] -#model.tallies.append(tally) -model.tallies = [tally] - -for mat in model.materials: - mat.temperature = 300.0 - -model.convert_to_multigroup( - method='stochastic_slab', - groups='CASMO-4', - nparticles=100000, - overwrite_mgxs_library=False, - correction=None - #source_energy=14.6e6 -) - - -model.settings.batches = 200 -model.settings.inactive = 100 -model.settings.particles = 30000 -model.settings.random_ray['distance_inactive'] = 500.0 -model.settings.random_ray['distance_active'] = 5000.0 -model.settings.random_ray['volume_estimator'] = 'naive' -model.settings.random_ray['source_shape'] = 'flat' -#model.settings.random_ray['source_shape'] = 'linear' -model.settings.random_ray['volume_normalized_flux_tallies'] = False -settings.photon_transport = False - -wwg = openmc.WeightWindowGenerator( - mesh, - method='fw_cadis', - max_realizations=model.settings.batches -) - -# Disable weight window generation for now -#model.settings.weight_window_generators = [wwg] - - -bbox = geometry.bounding_box -print(bbox) -box_src = openmc.stats.Box(bbox.lower_left, bbox.upper_right) -rr_src = openmc.IndependentSource( - space = box_src, - constraints = {'domains': [geometry.root_universe]} - ) -model.settings.random_ray['ray_source'] = rr_src -model.settings.random_ray['source_region_meshes'] = [(mesh, [model.geometry.root_universe])] - -model.geometry.remove_redundant_surfaces() - -# Random Ray Plot -plot = openmc.Plot() -plot.origin = [0, 0, 0] -plot.width = [(geometry.bounding_box.upper_right[i] - geometry.bounding_box.lower_left[i]) for i in range(3)] -plot.pixels = [300, 300, 300] -plot.type = 'voxel' -model.plots = [plot] - -model.export_to_model_xml() \ No newline at end of file diff --git a/examples/simple_tokamak/simple_tok.py b/examples/simple_tokamak/simple_tok.py deleted file mode 100644 index 7489e58a1c0..00000000000 --- a/examples/simple_tokamak/simple_tok.py +++ /dev/null @@ -1,108 +0,0 @@ -import openmc -import numpy as np - -model = openmc.Model.from_model_xml(path="original_mc_model.xml") - -# Adjust original MC boundaries to fit more tightly for use with random ray -reflective_face_1 = model.geometry.get_all_surfaces()[10000] -reflective_face_2 = model.geometry.get_all_surfaces()[11000] - -vac_zmax = openmc.ZPlane(z0= 1000, boundary_type='vacuum') -vac_zmin = openmc.ZPlane(z0= -1000, boundary_type='vacuum') -vac_ymax = openmc.YPlane(y0= 625, boundary_type='vacuum') -vac_ymin = openmc.YPlane(y0= -625, boundary_type='vacuum') -vac_xmax = openmc.XPlane(x0= 1864.0, boundary_type='vacuum') -vac_xmin = openmc.XPlane(x0= -100.0, boundary_type='vacuum') - -outer_region = ( - -vac_zmax & +vac_zmin & - -vac_ymax & +vac_ymin & - -vac_xmax & +vac_xmin & - +reflective_face_1 & -reflective_face_2 -) - -outer_cell = openmc.Cell(region=outer_region, - fill=model.geometry.root_universe) -outer_universe = openmc.Universe(cells=[outer_cell]) -model.geometry.root_universe = outer_universe -model.geometry.determine_paths() - -# Make coarse mesh and tally for random ray void SR subdivision -mesh_cell_size_cm = 50.0 # cm -coarse_mesh = openmc.RegularMesh() -bbox = model.geometry.bounding_box -ll = np.array(bbox.lower_left) -ur = np.array(bbox.upper_right) -coarse_mesh.lower_left = ll -coarse_mesh.upper_right = ur -dims = np.ceil((ur - ll) / mesh_cell_size_cm).astype(int) -coarse_mesh.dimension = tuple(dims) -coarse_mesh_filter = openmc.MeshFilter(coarse_mesh) -coarse_mesh_tally = openmc.Tally(name="coarse_mesh_tally") -coarse_mesh_tally.filters = [coarse_mesh_filter] -coarse_mesh_tally.scores = ["flux"] -model.tallies.append(coarse_mesh_tally) - - -# Make fine mesh and tally for random ray void SR subdivision -mesh_cell_size_cm = 5.0 # cm -fine_mesh = openmc.RegularMesh() -bbox = model.geometry.bounding_box -ll = np.array(bbox.lower_left) -ur = np.array(bbox.upper_right) -fine_mesh.lower_left = ll -fine_mesh.upper_right = ur -dims = np.ceil((ur - ll) / mesh_cell_size_cm).astype(int) -fine_mesh.dimension = tuple(dims) -fine_mesh_filter = openmc.MeshFilter(fine_mesh) -fine_mesh_tally = openmc.Tally(name="fine_mesh_tally") -fine_mesh_tally.filters = [fine_mesh_filter] -fine_mesh_tally.scores = ["flux"] -model.tallies.append(fine_mesh_tally) - -model.convert_to_multigroup( - method = "stochastic_slab", - nparticles = 10000, - groups='CASMO-8', - correction=None, - overwrite_mgxs_library=True -) - -model.convert_to_random_ray() - -bbox = model.geometry.bounding_box -orig_src = model.settings.source[0] - -rr_src = openmc.IndependentSource() -rr_src.space = openmc.stats.Box(bbox.lower_left, bbox.upper_right) -rr_src.constraints = {'domains': [outer_cell]} - -void_cells = [c for c in model.geometry.get_all_cells().values() if c.fill is None] -material_cells = [ - c for c in model.geometry.get_all_cells().values() - if isinstance(c.fill, openmc.Material) -] - -model.settings.random_ray['ray_source'] = rr_src -model.settings.random_ray["source_region_meshes"] = [(fine_mesh, material_cells), (coarse_mesh, void_cells)] -model.settings.random_ray['volume_estimator'] = 'naive' -model.settings.random_ray["distance_inactive"] = 1500.0 -model.settings.random_ray["distance_active"] = 3000.0 -model.settings.random_ray["sample_method"] = 'prng' -model.settings.particles = 1000000 -model.settings.batches = 10 -model.settings.inactive = 1 - -plot = openmc.VoxelPlot() -box = model.geometry.bounding_box -plot.origin = (0.5*(box.lower_left[0]+box.upper_right[0]), - 0.5*(box.lower_left[1]+box.upper_right[1]), - 0.5*(box.lower_left[2]+box.upper_right[2])) -plot.width = [box.upper_right[0]-box.lower_left[0], - box.upper_right[1]-box.lower_left[1], - box.upper_right[2]-box.lower_left[2]] -plot.pixels = [300, 300, 300] -plot.type = 'voxel' -model.plots = [plot] - -model.export_to_model_xml() \ No newline at end of file diff --git a/temp.cpp b/temp.cpp deleted file mode 100644 index 5ff15097b19..00000000000 --- a/temp.cpp +++ /dev/null @@ -1,495 +0,0 @@ -#include "openmc/geometry.h" - -#include -#include - -#include "openmc/array.h" -#include "openmc/cell.h" -#include "openmc/constants.h" -#include "openmc/error.h" -#include "openmc/lattice.h" -#include "openmc/settings.h" -#include "openmc/simulation.h" -#include "openmc/string_utils.h" -#include "openmc/surface.h" - -namespace openmc { - -//============================================================================== -// Global variables -//============================================================================== - -namespace model { - -int root_universe {-1}; -int n_coord_levels; - -vector overlap_check_count; - -} // namespace model - -//============================================================================== -// Non-member functions -//============================================================================== - -bool check_cell_overlap(GeometryState& p, bool error) -{ - int n_coord = p.n_coord(); - - // Loop through each coordinate level - for (int j = 0; j < n_coord; j++) { - Universe& univ = *model::universes[p.coord(j).universe()]; - - // Loop through each cell on this level - for (auto index_cell : univ.cells_) { - Cell& c = *model::cells[index_cell]; - if (c.contains(p.coord(j).r(), p.coord(j).u(), p.surface())) { - if (index_cell != p.coord(j).cell()) { - if (error) { - fatal_error( - fmt::format("Overlapping cells detected: {}, {} on universe {}", - c.id_, model::cells[p.coord(j).cell()]->id_, univ.id_)); - } - return true; - } -#pragma omp atomic - ++model::overlap_check_count[index_cell]; - } - } - } - - return false; -} - -//============================================================================== - -int cell_instance_at_level(const GeometryState& p, int level) -{ - // throw error if the requested level is too deep for the geometry - if (level > model::n_coord_levels) { - fatal_error(fmt::format("Cell instance at level {} requested, but only {} " - "levels exist in the geometry.", - level, p.n_coord())); - } - - // determine the cell instance - Cell& c {*model::cells[p.coord(level).cell()]}; - - // quick exit if this cell doesn't have distribcell instances - if (c.distribcell_index_ == C_NONE) - return C_NONE; - - // compute the cell's instance - int instance = 0; - for (int i = 0; i < level; i++) { - const auto& c_i {*model::cells[p.coord(i).cell()]}; - if (c_i.type_ == Fill::UNIVERSE) { - instance += c_i.offset_[c.distribcell_index_]; - } else if (c_i.type_ == Fill::LATTICE) { - instance += c_i.offset_[c.distribcell_index_]; - auto& lat {*model::lattices[p.coord(i + 1).lattice()]}; - const auto& i_xyz {p.coord(i + 1).lattice_index()}; - if (lat.are_valid_indices(i_xyz)) { - instance += lat.offset(c.distribcell_index_, i_xyz); - } - } - } - return instance; -} - -//============================================================================== - -bool find_cell_inner( - GeometryState& p, const NeighborList* neighbor_list, bool verbose) -{ - // Find which cell of this universe the particle is in. Use the neighbor list - // to shorten the search if one was provided. - bool found = false; - int32_t i_cell = C_NONE; - if (neighbor_list) { - for (auto it = neighbor_list->cbegin(); it != neighbor_list->cend(); ++it) { - i_cell = *it; - - // Make sure the search cell is in the same universe. - int i_universe = p.lowest_coord().universe(); - if (model::cells[i_cell]->universe_ != i_universe) - continue; - - // Check if this cell contains the particle. - Position r {p.r_local()}; - Direction u {p.u_local()}; - auto surf = p.surface(); - if (model::cells[i_cell]->contains(r, u, surf)) { - p.lowest_coord().cell() = i_cell; - found = true; - break; - } - } - - // If we're attempting a neighbor list search and fail, we - // now know we should return false. This will trigger an - // exhaustive search from neighbor_list_find_cell and make - // the result from that be appended to the neighbor list. - if (!found) { - return found; - } - } - - // Check successively lower coordinate levels until finding material fill - for (;; ++p.n_coord()) { - // If we did not attempt to use neighbor lists, i_cell is still C_NONE. In - // that case, we should now do an exhaustive search to find the right value - // of i_cell. - // - // Alternatively, neighbor list searches could have succeeded, but we found - // that the fill of the neighbor cell was another universe. As such, in the - // code below this conditional, we set i_cell back to C_NONE to indicate - // that. - if (i_cell == C_NONE) { - int i_universe = p.lowest_coord().universe(); - const auto& univ {model::universes[i_universe]}; - found = univ->find_cell(p); - } - - if (!found) { - return found; - } - i_cell = p.lowest_coord().cell(); - - // Announce the cell that the particle is entering. - if (found && verbose) { - auto msg = fmt::format(" Entering cell {}", model::cells[i_cell]->id_); - write_message(msg, 1); - } - - Cell& c {*model::cells[i_cell]}; - if (c.type_ == Fill::MATERIAL) { - // Found a material cell which means this is the lowest coord level. - - p.cell_instance() = 0; - // Find the distribcell instance number. - if (c.distribcell_index_ >= 0) { - p.cell_instance() = cell_instance_at_level(p, p.n_coord() - 1); - } - - // Set the material, temperature and density multiplier. - p.material_last() = p.material(); - p.material() = c.material(p.cell_instance()); - p.sqrtkT_last() = p.sqrtkT(); - p.sqrtkT() = c.sqrtkT(p.cell_instance()); - p.density_mult_last() = p.density_mult(); - p.density_mult() = c.density_mult(p.cell_instance()); - - return true; - - } else if (c.type_ == Fill::UNIVERSE) { - //======================================================================== - //! Found a lower universe, update this coord level then search the next. - - // Set the lower coordinate level universe. - auto& coord {p.coord(p.n_coord())}; - coord.universe() = c.fill_; - - // Set the position and direction. - coord.r() = p.r_local(); - coord.u() = p.u_local(); - - // Apply translation. - coord.r() -= c.translation_; - - // Apply rotation. - if (!c.rotation_.empty()) { - coord.rotate(c.rotation_); - } - - } else if (c.type_ == Fill::LATTICE) { - //======================================================================== - //! Found a lower lattice, update this coord level then search the next. - - Lattice& lat {*model::lattices[c.fill_]}; - - // Set the position and direction. - auto& coord {p.coord(p.n_coord())}; - coord.r() = p.r_local(); - coord.u() = p.u_local(); - - // Apply translation. - coord.r() -= c.translation_; - - // Apply rotation. - if (!c.rotation_.empty()) { - coord.rotate(c.rotation_); - } - - // Determine lattice indices. - auto& i_xyz {coord.lattice_index()}; - lat.get_indices(coord.r(), coord.u(), i_xyz); - - // Get local position in appropriate lattice cell - coord.r() = lat.get_local_position(coord.r(), i_xyz); - - // Set lattice indices. - coord.lattice() = c.fill_; - - // Set the lower coordinate level universe. - if (lat.are_valid_indices(i_xyz)) { - coord.universe() = lat[i_xyz]; - } else { - if (lat.outer_ != NO_OUTER_UNIVERSE) { - coord.universe() = lat.outer_; - } else { - p.mark_as_lost(fmt::format( - "Particle {} left lattice {}, but it has no outer definition.", - p.id(), lat.id_)); - } - } - } - i_cell = C_NONE; // trip non-neighbor cell search at next iteration - found = false; - } - - return found; -} - -//============================================================================== - -bool neighbor_list_find_cell(GeometryState& p, bool verbose) -{ - - // Reset all the deeper coordinate levels. - for (int i = p.n_coord(); i < model::n_coord_levels; i++) { - p.coord(i).reset(); - } - - // Get the cell this particle was in previously. - auto coord_lvl = p.n_coord() - 1; - auto i_cell = p.coord(coord_lvl).cell(); - Cell& c {*model::cells[i_cell]}; - - // Search for the particle in that cell's neighbor list. Return if we - // found the particle. - bool found = find_cell_inner(p, &c.neighbors_, verbose); - if (found) - return found; - - // The particle could not be found in the neighbor list. Try searching all - // cells in this universe, and update the neighbor list if we find a new - // neighboring cell. - found = find_cell_inner(p, nullptr, verbose); - if (found) - c.neighbors_.push_back(p.coord(coord_lvl).cell()); - return found; -} - -bool exhaustive_find_cell(GeometryState& p, bool verbose) -{ - int i_universe = p.lowest_coord().universe(); - if (i_universe == C_NONE) { - p.coord(0).universe() = model::root_universe; - p.n_coord() = 1; - i_universe = model::root_universe; - } - // Reset all the deeper coordinate levels. - for (int i = p.n_coord(); i < model::n_coord_levels; i++) { - p.coord(i).reset(); - } - return find_cell_inner(p, nullptr, verbose); -} - -//============================================================================== - -void cross_lattice(GeometryState& p, const BoundaryInfo& boundary, bool verbose) -{ - auto& coord {p.lowest_coord()}; - auto& lat {*model::lattices[coord.lattice()]}; - - if (verbose) { - write_message( - fmt::format(" Crossing lattice {}. Current position ({},{},{}). r={}", - lat.id_, coord.lattice_index()[0], coord.lattice_index()[1], - coord.lattice_index()[2], p.r()), - 1); - } - - // Set the lattice indices. - coord.lattice_index()[0] += boundary.lattice_translation()[0]; - coord.lattice_index()[1] += boundary.lattice_translation()[1]; - coord.lattice_index()[2] += boundary.lattice_translation()[2]; - - // Set the new coordinate position. - const auto& upper_coord {p.coord(p.n_coord() - 2)}; - const auto& cell {model::cells[upper_coord.cell()]}; - Position r = upper_coord.r(); - r -= cell->translation_; - if (!cell->rotation_.empty()) { - r = r.rotate(cell->rotation_); - } - p.r_local() = lat.get_local_position(r, coord.lattice_index()); - - if (!lat.are_valid_indices(coord.lattice_index())) { - // The particle is outside the lattice. Search for it from the base coords. - p.n_coord() = 1; - bool found = exhaustive_find_cell(p); - - if (!found) { - p.mark_as_lost(fmt::format("Particle {} could not be located after " - "crossing a boundary of lattice {}", - p.id(), lat.id_)); - } - - } else { - // Find cell in next lattice element. - p.lowest_coord().universe() = lat[coord.lattice_index()]; - bool found = exhaustive_find_cell(p); - - if (!found) { - // A particle crossing the corner of a lattice tile may not be found. In - // this case, search for it from the base coords. - p.n_coord() = 1; - bool found = exhaustive_find_cell(p); - if (!found) { - p.mark_as_lost(fmt::format("Particle {} could not be located after " - "crossing a boundary of lattice {}", - p.id(), lat.id_)); - } - } - } -} - -//============================================================================== - -BoundaryInfo distance_to_boundary(GeometryState& p) -{ - BoundaryInfo info; - double d_lat = INFINITY; - double d_surf = INFINITY; - int32_t level_surf_cross; - array level_lat_trans {}; - - // Loop over each coordinate level. - for (int i = 0; i < p.n_coord(); i++) { - const auto& coord {p.coord(i)}; - const Position& r {coord.r()}; - const Direction& u {coord.u()}; - Cell& c {*model::cells[coord.cell()]}; - - // Find the oncoming surface in this cell and the distance to it. - auto surface_distance = c.distance(r, u, p.surface(), &p); - d_surf = surface_distance.first; - level_surf_cross = surface_distance.second; - - // Find the distance to the next lattice tile crossing. - if (coord.lattice() != C_NONE) { - auto& lat {*model::lattices[coord.lattice()]}; - // TODO: refactor so both lattice use the same position argument (which - // also means the lat.type attribute can be removed) - std::pair> lattice_distance; - switch (lat.type_) { - case LatticeType::rect: - lattice_distance = lat.distance(r, u, coord.lattice_index()); - break; - case LatticeType::hex: - auto& cell_above {model::cells[p.coord(i - 1).cell()]}; - Position r_hex {p.coord(i - 1).r()}; - r_hex -= cell_above->translation_; - if (coord.rotated()) { - r_hex = r_hex.rotate(cell_above->rotation_); - } - r_hex.z = coord.r().z; - lattice_distance = lat.distance(r_hex, u, coord.lattice_index()); - break; - } - d_lat = lattice_distance.first; - level_lat_trans = lattice_distance.second; - - if (d_lat < 0) { - p.mark_as_lost(fmt::format("Particle {} had a negative distance " - "to a lattice boundary.", - p.id())); - } - } - - // If the boundary on this coordinate level is coincident with a boundary on - // a higher level then we need to make sure that the higher level boundary - // is selected. This logic must consider floating point precision. - double& d = info.distance(); - if (d_surf < d_lat - FP_COINCIDENT) { - if (d == INFINITY || (d - d_surf) / d >= FP_REL_PRECISION) { - // Update closest distance - d = d_surf; - - // If the cell is not simple, it is possible that both the negative and - // positive half-space were given in the region specification. Thus, we - // have to explicitly check which half-space the particle would be - // traveling into if the surface is crossed - if (c.is_simple() || d == INFTY) { - info.surface() = level_surf_cross; - } else { - Position r_hit = r + d_surf * u; - Surface& surf {*model::surfaces[std::abs(level_surf_cross) - 1]}; - Direction norm = surf.normal(r_hit); - if (u.dot(norm) > 0) { - info.surface() = std::abs(level_surf_cross); - } else { - info.surface() = -std::abs(level_surf_cross); - } - } - - info.lattice_translation()[0] = 0; - info.lattice_translation()[1] = 0; - info.lattice_translation()[2] = 0; - info.coord_level() = i + 1; - } - } else { - if (d == INFINITY || (d - d_lat) / d >= FP_REL_PRECISION) { - d = d_lat; - info.surface() = SURFACE_NONE; - info.lattice_translation() = level_lat_trans; - info.coord_level() = i + 1; - } - } - } - return info; -} - -//============================================================================== -// C API -//============================================================================== - -extern "C" int openmc_find_cell( - const double* xyz, int32_t* index, int32_t* instance) -{ - GeometryState geom_state; - - geom_state.r() = Position {xyz}; - geom_state.u() = {0.0, 0.0, 1.0}; - - if (!exhaustive_find_cell(geom_state)) { - set_errmsg( - fmt::format("Could not find cell at position {}.", geom_state.r())); - return OPENMC_E_GEOMETRY; - } - - *index = geom_state.lowest_coord().cell(); - *instance = geom_state.cell_instance(); - return 0; -} - -extern "C" int openmc_global_bounding_box(double* llc, double* urc) -{ - auto bbox = model::universes.at(model::root_universe)->bounding_box(); - - // set lower left corner values - llc[0] = bbox.xmin; - llc[1] = bbox.ymin; - llc[2] = bbox.zmin; - - // set upper right corner values - urc[0] = bbox.xmax; - urc[1] = bbox.ymax; - urc[2] = bbox.zmax; - - return 0; -} - -} // namespace openmc From 038fa2d5c20eb6a31d5ade4bf949a2dd58fdd31a Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 21 Jul 2026 18:58:38 +0100 Subject: [PATCH 43/48] Reverted unnecessary scratch files + clean up --- CMakeLists.txt | 2 +- include/openmc/cell.h | 1 - include/openmc/random_ray/decomposition_map.h | 2 +- openmc/model/model.py | 14 -------------- openmc/stats/multivariate.py | 14 -------------- src/mcpl_interface.cpp | 2 -- tests/unit_tests/test_stats.py | 1 + 7 files changed, 3 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9aa6a1bc92e..3fe310f99a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,7 +40,7 @@ option(OPENMC_ENABLE_PROFILE "Compile with profiling flags" option(OPENMC_ENABLE_COVERAGE "Compile with coverage analysis flags" OFF) option(OPENMC_USE_DAGMC "Enable support for DAGMC (CAD) geometry" OFF) option(OPENMC_USE_LIBMESH "Enable support for libMesh unstructured mesh tallies" OFF) -option(OPENMC_USE_MPI "Enable MPI" ON) +option(OPENMC_USE_MPI "Enable MPI" OFF) option(OPENMC_USE_UWUW "Enable UWUW" OFF) option(OPENMC_FORCE_VENDORED_LIBS "Explicitly use submodules defined in 'vendor'" OFF) option(OPENMC_ENABLE_STRICT_FP "Enable strict FP flags to improve test portability" OFF) diff --git a/include/openmc/cell.h b/include/openmc/cell.h index 07861663757..b2e591d999d 100644 --- a/include/openmc/cell.h +++ b/include/openmc/cell.h @@ -96,7 +96,6 @@ class Region { //! Get size of surfaces int n_surfaces() const {return expression_.size(); } - //---------------------------------------------------------------------------- // Accessors diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 8909f4c3398..71e3ee495c1 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -92,7 +92,7 @@ class DecompositionMap { vector estimated_rank_load_totals_; double estimated_load_sum_; - // coefficients for load calculation + // Coefficients for load calculation double C1_ = 1.0; double C2_ = 0.1; double C3_ = 0.1; diff --git a/openmc/model/model.py b/openmc/model/model.py index 24e801ee9ce..c437d20337f 100644 --- a/openmc/model/model.py +++ b/openmc/model/model.py @@ -2164,20 +2164,6 @@ def _generate_infinite_medium_mgxs( are defined on the model and the run mode is 'eigenvalue', then a default Watt spectrum source (strength = 0.99) is added. - Note that in all cases, a discrete source that is uniform over all - energy groups is created (strength = 0.01) to ensure that total cross - sections are generated for all energy groups. In the case that the user - has provided a source_energy distribution as an argument, an additional - source (strength = 0.99) is created using that energy distribution. If - the user has not provided a source_energy distribution, but the model - has sources defined, and all of those sources are of IndependentSource - type, then additional sources are created based on the model's existing - sources, keeping their energy distributions but replacing their - spatial/angular distributions, with their combined strength being 0.99. - If the user has not provided a source_energy distribution and no sources - are defined on the model and the run mode is 'eigenvalue', then a - default Watt spectrum source (strength = 0.99) is added. - Parameters ---------- groups : openmc.mgxs.EnergyGroups diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index 0cd6840365a..d4869703779 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -104,20 +104,6 @@ def __init__(self, mu=None, phi=None, reference_uvw=(0., 0., 1.), reference_vwu= self.phi = phi else: self.phi = Uniform(0., 2*pi) - - @property - def reference_vwu(self): - return self._reference_vwu - - @reference_vwu.setter - def reference_vwu(self, vwu): - cv.check_type('reference v direction', vwu, Iterable, Real) - vwu = np.asarray(vwu) - uvw = self.reference_uvw - cv.check_greater_than('reference v direction must not be parallel to reference u direction', np.linalg.norm(np.cross(vwu,uvw)), 1e-6*np.linalg.norm(vwu)) - vwu -= vwu.dot(uvw)*uvw - cv.check_less_than('reference v direction must be orthogonal to reference u direction', np.abs(vwu.dot(uvw)), 1e-6) - self._reference_vwu = vwu/np.linalg.norm(vwu) @property def reference_vwu(self): diff --git a/src/mcpl_interface.cpp b/src/mcpl_interface.cpp index 47ba5c31982..30c41ec5afa 100644 --- a/src/mcpl_interface.cpp +++ b/src/mcpl_interface.cpp @@ -150,8 +150,6 @@ struct McplApi { load_symbol_platform("mcpl_create_outfile")); hdr_set_srcname = reinterpret_cast( load_symbol_platform("mcpl_hdr_set_srcname")); - hdr_add_data = reinterpret_cast( - load_symbol_platform("mcpl_hdr_add_data")); add_particle = reinterpret_cast( load_symbol_platform("mcpl_add_particle")); close_outfile = reinterpret_cast( diff --git a/tests/unit_tests/test_stats.py b/tests/unit_tests/test_stats.py index 0e20e79a9fa..2754cf5d09a 100644 --- a/tests/unit_tests/test_stats.py +++ b/tests/unit_tests/test_stats.py @@ -200,6 +200,7 @@ def test_powerlaw(): assert_sample_mean(weighted_sample, exp_mean) assert np.all(weights != 1.0) + @pytest.mark.flaky(reruns=1) def test_maxwell(): theta = 1.2895e6 From 3ee5629384f2791071280010b05ddd0a1a8f335e Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Tue, 21 Jul 2026 19:12:30 +0100 Subject: [PATCH 44/48] Removed test artifacts --- .../case_1_Reactions/results_true.dat | 2 - .../case_2_Cell_ID/results_true.dat | 2 - .../case_3_Material_ID/inputs_true.dat | 10 --- .../case_3_Material_ID/results_true.dat | 2 - .../case_4_Nuclide_ID/results_true.dat | 2 - .../case_5_Universe_ID/results_true.dat | 2 - .../results_true.dat | 2 - .../results_true.dat | 2 - .../case_8_2threads/inputs_true.dat | 57 ------------------ .../case_8_2threads/results_true.dat | 2 - .../surface_source/surface_source_true.h5 | Bin 106144 -> 86216 bytes .../case-01/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-02/surface_source_true.h5 | Bin 13896 -> 13588 bytes .../case-03/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-04/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-05/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-06/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-07/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-08/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-09/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-10/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-11/surface_source_true.h5 | Bin 5160 -> 6532 bytes .../case-12/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-13/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-14/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-15/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-16/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-17/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-18/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-19/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-20/surface_source_true.h5 | Bin 33344 -> 29296 bytes .../case-21/surface_source_true.h5 | Bin 2144 -> 2144 bytes .../case-a01/surface_source_true.h5 | Bin 6720 -> 7792 bytes 33 files changed, 83 deletions(-) delete mode 100644 tests/regression_tests/collision_track/case_1_Reactions/results_true.dat delete mode 100644 tests/regression_tests/collision_track/case_2_Cell_ID/results_true.dat delete mode 100644 tests/regression_tests/collision_track/case_3_Material_ID/results_true.dat delete mode 100644 tests/regression_tests/collision_track/case_4_Nuclide_ID/results_true.dat delete mode 100644 tests/regression_tests/collision_track/case_5_Universe_ID/results_true.dat delete mode 100644 tests/regression_tests/collision_track/case_6_deposited_energy_threshold/results_true.dat delete mode 100644 tests/regression_tests/collision_track/case_7_all_parameters_used_together/results_true.dat delete mode 100644 tests/regression_tests/collision_track/case_8_2threads/inputs_true.dat delete mode 100644 tests/regression_tests/collision_track/case_8_2threads/results_true.dat diff --git a/tests/regression_tests/collision_track/case_1_Reactions/results_true.dat b/tests/regression_tests/collision_track/case_1_Reactions/results_true.dat deleted file mode 100644 index d4d1d1e5ad4..00000000000 --- a/tests/regression_tests/collision_track/case_1_Reactions/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_2_Cell_ID/results_true.dat b/tests/regression_tests/collision_track/case_2_Cell_ID/results_true.dat deleted file mode 100644 index d4d1d1e5ad4..00000000000 --- a/tests/regression_tests/collision_track/case_2_Cell_ID/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_3_Material_ID/inputs_true.dat b/tests/regression_tests/collision_track/case_3_Material_ID/inputs_true.dat index fe326041724..322e74f4938 100644 --- a/tests/regression_tests/collision_track/case_3_Material_ID/inputs_true.dat +++ b/tests/regression_tests/collision_track/case_3_Material_ID/inputs_true.dat @@ -38,15 +38,9 @@ eigenvalue -<<<<<<< HEAD - 100 - 5 - 1 -======= 80 5 4 ->>>>>>> source/develop -2.0 -2.0 -2.0 2.0 2.0 2.0 @@ -57,11 +51,7 @@ 1 -<<<<<<< HEAD - 300 -======= 100 ->>>>>>> source/develop 1 diff --git a/tests/regression_tests/collision_track/case_3_Material_ID/results_true.dat b/tests/regression_tests/collision_track/case_3_Material_ID/results_true.dat deleted file mode 100644 index d4d1d1e5ad4..00000000000 --- a/tests/regression_tests/collision_track/case_3_Material_ID/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_4_Nuclide_ID/results_true.dat b/tests/regression_tests/collision_track/case_4_Nuclide_ID/results_true.dat deleted file mode 100644 index d4d1d1e5ad4..00000000000 --- a/tests/regression_tests/collision_track/case_4_Nuclide_ID/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_5_Universe_ID/results_true.dat b/tests/regression_tests/collision_track/case_5_Universe_ID/results_true.dat deleted file mode 100644 index d4d1d1e5ad4..00000000000 --- a/tests/regression_tests/collision_track/case_5_Universe_ID/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/results_true.dat b/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/results_true.dat deleted file mode 100644 index d4d1d1e5ad4..00000000000 --- a/tests/regression_tests/collision_track/case_6_deposited_energy_threshold/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_7_all_parameters_used_together/results_true.dat b/tests/regression_tests/collision_track/case_7_all_parameters_used_together/results_true.dat deleted file mode 100644 index d4d1d1e5ad4..00000000000 --- a/tests/regression_tests/collision_track/case_7_all_parameters_used_together/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/collision_track/case_8_2threads/inputs_true.dat b/tests/regression_tests/collision_track/case_8_2threads/inputs_true.dat deleted file mode 100644 index 514932c1a69..00000000000 --- a/tests/regression_tests/collision_track/case_8_2threads/inputs_true.dat +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eigenvalue - 100 - 5 - 1 - - - -2.0 -2.0 -2.0 2.0 2.0 2.0 - - - true - - - - 200 - - 1 - - diff --git a/tests/regression_tests/collision_track/case_8_2threads/results_true.dat b/tests/regression_tests/collision_track/case_8_2threads/results_true.dat deleted file mode 100644 index d4d1d1e5ad4..00000000000 --- a/tests/regression_tests/collision_track/case_8_2threads/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -5.642735E-02 1.494035E-02 diff --git a/tests/regression_tests/surface_source/surface_source_true.h5 b/tests/regression_tests/surface_source/surface_source_true.h5 index 2c2a19038fc1b6d9c7785e8a7f591e9e5c7fd959..02e94c90b990376b5db3595a486feefd236fd37b 100644 GIT binary patch delta 10709 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 Ws}_-J(Z3N5^x{-hV4Fp diff --git a/tests/regression_tests/surface_source_write/case-01/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-01/surface_source_true.h5 index a43646158be4af47fc9ed18b9c2e2246ca57e35e..3a2315acc1d44c93445801716b75b13e94991b32 100644 GIT binary patch delta 1273 zcma*lIc(EV9LI4xLEv(lL&6eEL^({k3>3){0)+~J2P6XhSF#YarW8my({d=~5Gi6{ zjQp046%z{*RhNtzE2fMdGcb7cn1O+>RU(|CKqGw=|NWld@BN?M{FqCA=yf|+nOz$C zkk@7TYkoMtPtWNZKSQ&$^dhfoW?E}nWm5gzXl?lZ*_~dtHhKC|Gwz`RL(~eK0Z|JB z5^fe%Mhos1QHwCPimGlG74h%w5cOr7D9h}BFJ`Q?Q&avEF$r`)PlW_6H?AK>KLHJxKd74vDHDLh&%|!?f8R+VGBu`UY!AR1GoG ztv8O+{xMOXkib7q`>;>^se_Z8J{*U5N5WIYqdR@^H1TJMM}*=q@i5O4f$qGu%l@yf zpA*$V_W6bL5?&x4+1uIO7B3PHb7V}-jg0opvo8JpoG)~LnU2Tk{tABAb&q&->$T%) z?OyFaZeF8(wBeOFeOT8yeZ)xDZQS7WN6ANme`RI&mS(s7-uacAy>)kf`xg1P$%i#g zK4O$6$VVX{AL)Jn4sRd!Bp*LI2=4Os;Y{)NrzE_`@uLOzJ|7>92fTemD3&>XnA5b6 zHoS+#!+JyvVw4^ekHQn;k-&dSJnU!0ql2JAJe(QgXC#~@9@SUGKPMi>3*r%>_>y>J t=VY&IRpL>aBOZm<#3OXmtQo0{@wrp delta 4990 zcmZXXOH7 zsql6)&+B=D*g$;3=?e5>l3nhSM-i8-<)T;6B!)yH6G~)4iA*RlWD*li;&vYTGilCu z$*Le*`Is@$B!*4mN&);#HU)_mx|(G{9u}fU*z`y;J?Lba&^a)nb6`T}kYo~*O=4*Y zCStN!g8s=y?LV5<%`&0>OsGE->Yri~Q%!%`5fe&eLWxW$G1VmQ6NyYHkqIR-p~QVA zalc4pLWxW$kqIU4H;HK?kqIR-p+qK>m}U~wP2x~B?vcq&LG}dcuW?=Lg6s-%qSkfY z5afv9icd04PI^0fWU9CBrFOh^b@4&tuzuIFmfTskTWgps9YIefKMGRW7KoZZR<2_&>uP*3#SxfF*;m)<)x*#`e$sG~yi0#$|xmio@ zJmJn$?#URgL>HgOaKfx5cfN4v+r4!W?0}oK{T(<*ChLMwheFYz(C(lM+8t}jU1YoU zZ8F*E#8XnF@=kSONM2s+I-3@MNEkfs!qiNtOR?QWKbXb#jJoLUMg!K8yF|E4Y_~3G zhpgQgz%-@C-O!8ulq&a!y|_PJOb(+rYspv6bs(b5MuYsp=L;S8G88T>MaSBNee&)`6sV2C-9d|X0g4`3N@T}`v5ae5*w3zOZ3C!N2W`B1Am5n>~B^^qjlAHV^kP<$gMcJ?P@( z8_*szQ8!-0d>uXsdrt)EdEM1q_sMg{wIfL9JY1}yxjOB+bU|}po z#hN8S=st0wev)QVqIvRYq3DP{!CDZ#MjOE*dDtoP=%BPj9?mjP z50zI$>u}Se_voch^vpfhhAZl=idN7^xJDj+hI~e%b@FJTm?aNugFM;@Hp#>G$fJYO z7I`>1evdB7+vMTykVg-vyP^$vd*snaxKAFwPu`d4fIM0#9+HQ3L>_GfdGfFehBFwtnsJ?~t@>(b`SIrlZWfB(LD`svxL zCU@@QQsSlQ8eLvA(`Lx+b{WN2g%K>h8K$dHvH!vNmb8AC2g|nOpGTL2hjOmhzCQ2Y z;%h%%idenA`~g{jxMf5!V~a`Y@k^_WG7s@k>{hu$@a6uSeAtmW;*g^bsif?kkniKA zWUCL#oI`dY4Qyos(rTp4LK2i6NQ%;NQd-v_Rn`oo8{)B2HIli@mM!-v)5r`^>`dMv zgARGNMi0UV zh+Z3iAiCr`jnb;&oc9o2=`To_nckSRbjb^l7&AX1_L2>&=d83^n3;#PQhq?%C^ybY zOMkfUAnnMQ)^|t;TU|}k(!=r=a)p^a$W=-y%7FTJ{k$ty#!z zW_BR`l#cV#(gQW)kgpC&HA_pkJPpx{{|iL7oJ>l~$EUx5R8zJgK}x(uS|Q4FhipOg zY{Xinr7{Jn=bTMQloDx^mR{JCkY;8!AbK{!DQW51n1JZs*CAQXscn~*Zh0Ki#mpMy kCM9q|S~r-d5Pw=)ni+xUWwVmbSC{_Y`QygCfBZk0r~m)} diff --git a/tests/regression_tests/surface_source_write/case-03/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-03/surface_source_true.h5 index 228f5a7d0a462f38a1cb0b4274dd40d4307b5a12..d14771f5a00887c16ca1399a629d0e2448430bda 100644 GIT binary patch delta 1272 zcmZ|LIc(EV9DwnpL14roi=!CI5hM;%E+dMt0HJW3a=G-Cn%k5DDQ8-)l%u4GA!FsY zFrrRbkf^$J%$N<29z8I4^yq~HK@<=f6jCYhg=G~U10@I^#jOmen zUp~(Cuud>Nw3Fl!!9K+qP^3ZOPM+EyedE{O4h~eBJ4}FL{61aEC!x$z%EWCT<;lsR79?Apq2v8`J zhdM$YA*_ewp*b`snHOE({{OYsIdcYn z=I_6Z-@bKRO>>k?F1RM0#?b9s&OB#~!(jyYUmF7=??9hG z(#+Y&TTOyUpskIQncLjp@?&$#PvxOwA^8nVp%Kn$0#16H~Lr zreR`gw%RmIvLbO6A*7kGk!2f6k6P~+$`*Sk3Q-!%| zigkxnYq8H-r0GKaJV>YQ=2NkYOCJB5id|fET)q#>XA+syB#X#fO|pr2(%{;!i6Le+ z$sx^Z8V0-N;F@#{&ZXm-bR6f(;}81y038>)Fd>h~v))&z-^{dg=qexkMrqv?M?*X-TOm$;rVYWpa_p99)Dd zR&sE`Wn_+Zqkp++{>BY+h4l_p%HnY@I#pSVYHLwrEo!Yroh%+5z%8tovwZR4;`dz4 zYOqQhW$`c%vzn|Y&DP?$wP=yWt^#;kttV}=xL<(FZl}w>eh6>I2_nY9^~BV4*fdPq zw5yXeH*I9iMw$yTtBYJWY{Z=IC5^cu6H{~2reRWj7_+)bGp|Vx5wlM(5pxz3Q{%H~ zn0SgXt50i!#jGZ$$hB%CMa6LSlg2+weUb*`oA;p@Z{7eM7aoOy$+RXMkzQ)zAXk0~ zTuvfWHu78(PCRZ8Rtb`;T=U=wQ^ji!_Tt2nbqo`jOxVb>CT6N}iu6*rIKzyWV&*0} z^UqSu+$@XSGR))*a;Xe%P8>^RaBr1{>~a`5eq1cav5E~V`gj}Nlh_IzZq)03 zF?t(^xMd?oJ!YzCajG6ORdKf-Gh^vm*0ffIjh+S^$J6nR2DDO%Be)T*RO0Argf@Y+ z*Bh}claGyXtHjaX1cS^M@@0tmCK#B!w~_K@Xp&*_zw>j=XsQCpr)D%wp<~Z+7*dJM zYO;^WswQcggo>gTxR}gn!kOh&3kIvqQqhXR8Ps&T6~`I!oqpGfXH^Cmk<*4}m9xuK z8^)QrBv3rp#I5@U3U@m+98SK|#LOds;#oUp=E<3dPGF^cT4~}0S`-jj)`SyEdIwsl zJaVN2EjW)n=|Br6DV;E=gmSraydMg^EjT^yFnu5{rBsqk{XD_mrH5i5#l z*D)^!6-)h7F9w<6#VMjrVzUx$aEcKdS=7WsO(VMDVsg40V~)u&kGe6Ylnh}#I4+gP z7kY49MlLo&YVNm&Hv=@d-ed-iN;+|;CzG;5kP5ozv6pJq)Aaibr5sW22gfK^(^ zP(J`eE0OD(v=RAeBh{b7#c63?6EiIt;=LxEgvtlu;v_UTh~>KETlZ-Y%W-(|d;tTK zRZTd&n1sVi(GZ&U$fiFGp(&@7S3_v(qw6a?4bn$sS`*GBFKr}$7_NSDO$}pkza0E# zxN)ohZ#51e?lU-5iRIcEtYwh-*%`EBl67`Hnb3q2%ko(?b;^+iBWTLeWPAkCU4GFb zR?E??xOV;T#Bm6LRq!dTfzfteis&jvKM( sVc>)@rU{3N2R0HlhNdcod^Luq{N=^s7@9JPxZn+!e;(7<8T#J-55UccTL1t6 diff --git a/tests/regression_tests/surface_source_write/case-04/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-04/surface_source_true.h5 index c276af40f4302f4e0feff883bc3c472bc4df7ca1..d2acc69910740026a283af0568d90370f9ff7065 100644 GIT binary patch delta 1271 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 JQSyjJ#UJ$40M-Bi delta 4948 zcmZXYTWC~Q6ozN!WTH_M6HUy`M8{kw8Z|Mu$#r6GlSwir=AM|CYc;mfD7D~&f}s`! zmBvjTQc&=r4+=`7C@5I;L8yX)Pz4KyT57?9q6JGWP21V~UuW%uGcUTnz5ajgv(F^I z+qb{k?|kX_I@{r$p3j*!?0c_WHVTYnhr@0QewNx2B3h#Ror=uN$B8S^fsdA}SNAL8fL~Bx5`)RP81#fOc}K*_ z#8ibdnOg>5}DO`i&i;~B; zkci`3$zz_cfoU|8y!emFi4gKE9;VUKv@{{0UXUuzBw#`e`#nj3-zp-8c$^6JYTA-g z$6AXxS>z|dca3!=UKT$kVMsg=aV5i2EeD@cStiQfr^zUitS-scVy!G5rJyZE7MWC} zT36Oti}lvRC5taoVX#3K4^pwgG}>Ueh*^gXrdx#>)*{ndWLb-BD%AJf&CeX+!olV+ z86dKW$vlx#Tm|Ssf&5NYGQ+Y^N5Rn9W8@joI>7HpbSi$-hVw-!y-qFEMaH{rlqs;4@4lT-+uy!aXqs=ow{VI*&2A zNj*B`A`79?DK<<*r`UBOI>jQ2@N?yqhrX`}hpq!`z6hpffEmJB459<9w-^=?(&APz z-smz}M3ul#$5v+vdRNHh8?>wwYq138QT&{39tc)S!Br2;RZN7J;;SiRLikFD)Q^~% z5H@k46jrO*>U}A!RAzLQ!AfPur84X@j(gvgp;raR&T=g4te7jua)R8|-{r7USrMo} zZxUP0R$wE^L>%H(1=K1v{FM--uwbSV%PKnlpyhSE?5V=C%8zfVFk9uvn<`kjxVO-Y z*_xd6Laj39cP|8H#@Iz(H3aEwae_z&lV?OSndEMVDvQZ+BH2Wu#gh=?u7OI&(a{=g zE=L~gLJb~mqb%}k@v>zsiO*~CvUMUotc8`CHete52a-n{2or~iuKTe~F9{40(F9V>76VPN*e)%; zZ^HZg_t4p-36Y1SJX6rjr-6tUC z9myuqzV_$iOBF$ACdPdR64y*5YhLnXGF{hvx(f#pz@N9 zO&lj;MwlU6RJ!NrB#uwT+`=S|Pu|1SM`Y}Wz|1`9N%)r3cF;?PKf=D0z^RE2zf3NmsptX{&7z4$b#RH!+ zX<7P_8OaQ%2hu4%T1roaUoz=bHXNr?#c}m}t-j{hcWY`%UuUNmYt01ZX`+6@92E6+ zQ2h0x3J9mI4apj8jKEee{5_KRY4oxR^nj}5kDmUHsVo-rAI%jZ5LHU z@V8cXh{_I&Dxm>;XSA;G5;cb=oZX_9(R(gFAJ_Jt?z*{`c=YbK_9e&Rx%_@nRfM%< zB**c5T$c}u${i9_M!4TS{O|qoxwu+KM16yHl>dPM;kY_N|HsHj1NL!I3(!x{KbmkX z`bX|0`DnpCC8`GFG}n(dyfa)s%u)Iu75^;Pk2R>}mF{}wI*r4-LF4GH z1((iY-K2A9x037e{?cuFhka-Dx^tK25&mx3i>iCCyRR}%KD_(n!g9uZc$k_8T4^dWm>6;k+dtxp%~)1@}GiFg_5EHoT9-!<;34 TR{T%IqYi71cxdy)Bbb*zT`c@f delta 4999 zcmZXYO-xi*6vyX-Z$uenR6a%+D&iPv+bSo!RL7{r=~i``$bf z4!{56{q{58mwSB2ZY}P;<@b&~dg!nA7x;W$PvVp2*&+V%_`UHo`5({EGtS>BJCc5i zd_VSRM{28gKD#&T-^548Ma1dIj=9JJBkve#3&fITpSi`L^B~ZP3uj}?sBGrL^hEnN zISBg5`I+;ROCon?E9#QSC6lYqg-a%vLQc<1A(u*SHi)`Za_T8r=S(A)PIbCxI=Kwy zGRS2zmq~6DbDPLzk-M3Puf&jbMoRPDnHff&F%m9tSKVObJ4Ql;{ z)BQ|_P;bae2LR9#ZC%WC*w$gDON5@^hohB{ez6bF@jXRSobqxv zN!*=$OLkG!bCoefKY>#F6s1(4^=@15X1dJQWlZm}^&X}pwvO0Z9)B;9wF=yjA$gS` z`zSNX$ciH6lnGX$$`IY>eabAWj3I$){AhlV$T;z8`~->%@$ouOs_`!E7k86igD-49 zY@%Se1~V&&JZ2>QfIBn9$l?KvsT5;!YB8pgnhw-LR|)-8=_=CRgP2fFq>qvNiquf% zA4a;P7*i|8EJbmOS}OQ6iZKU?bkw=YLLFK}MGM~{w1`qcLp^kz&<~WZBfW75{SGOT z>@**Cle>x>rpy~g^q6{kOg)X!`iQNMke)k&nMW1b?7U_qdK8&sDwFKYGV)T92FlbN zLzN-=D2?_}8dZVEsc1mKacXg!5#6Fmw5V&uFHrL03;W_#Bfg9#Y92X`=FQanCL_9e zi)dcigcdE-LhBRu@lTKrH{t;^sRP zNq3eR(Z}z!TXa$jt-Ea9MS8d$H-B2_)pp$cY0|p7+pg|r`i!m5Fx_M89;SPR9_hgB zUZ(r(>ORulojCbfp_e*QeU|h>7arX?A{~tAOh3yQqB8@Oxpx|!4cSoSJY|}@kul^h zBX1bdvtraopV<(d8DtqlbY_S$uX}JFL!!MP7br8!i0*TdGWtA*=uDht45>JaS;H!m z;@oCL_Zgu+<>ydkh|Y{s=DErkqBEB$qt9%}dOtdQDN{P&CNqloDD#Yw@Of1EDRYC7 z=@>FelnF7SGiK#mQyD|@2JyP5h}Zp-LA>r}4_q07mCw1&$O}cxl2tx|DnmYGe*KwXdxG{TT}RLNM8Ing??eG4t<1vhD<9`LYXy2@}^N`GLwv~ QFcSPYmMi`QKvinOe;dR{8vp~{on{b6IB#44C@-!(U zDjFoBG%2@C>4L(g3ksJmT~P4M?rMct>C$Y6~~NHb#Su%Q@JRnzLz`7 zZN*Ztz)vY?h5VshEU5XuP^k9G-?Oz@KfhZ2Q`#J-I9W^nA$>*28JKg09B-)16EZ}; zpP1h|Z@$l0b%BsWh~X?0@&`0kNMosx39GwE$Z6<{h5UjP-je$J{7x=wtTW5#FaLWM ztY}@aH1f#TCVQoj-=Ma&&YJJ?bz~KJxU0!SUqc=#JYC2djI~0JA%nk;@ln~pnCnHr zl0W9GjpU(hs_!FKdoy{c2Gb)(ephS%-}IK&S-Q3LoZlVWR^R*E$v2FfBG|#_&^(&h zNq$#rZ+DP~y1RZBvpReD^P%l!dL(cyriZ?d>5;3P>(V_VmQahLpx3$3EUIpp?8r-3hyL&7!G-4@K2G4*-gG%1gFU( zgms2Il(Xa!!9GVG>Ur{r;ke|XT_BGH?nUy@FOf$IPmqUknLIN1SIEQcA>Shck32$H zSII-UMjjFD>*S%{Am8BJBoFNtc_eUelZWn;M+)x_c^JLqk-@)99%di;J`vm_j}X>< z@=zX-M+Cb<9%?^%#Bd&xhxUj(61b1aLw`aZDZHoTVLT&`41Se7%mMNPA{Zo(5Y}_@ zP+pKn1p6g1qX63g delta 4948 zcmZXYTWC~Q6ozN!WTH_M6HUy`M8{kw8Z|Mu$#r6GlSwir=AM|CYc;mfD7D~&f}s`! zmBvjTQc&=r4+=`7C@5I;L8yX)Pz4KyT57?9q6JGWP21V~UuW%uGcUTnz5ajgv(F^I z+qb{k?|kX_I@{r$p3j*!?0c_WHVTYnhr@0QewNx2B3h#Ror=uN$B8S^fsdA}SNAL8fL~Bx5`)RP81#fOc}K*_ z#8ibdnOg>5}DO`i&i;~B; zkci`3$zz_cfoU|8y!emFi4gKE9;VUKv@{{0UXUuzBw#`e`#nj3-zp-8c$^6JYTA-g z$6AXxS>z|dca3!=UKT$kVMsg=aV5i2EeD@cStiQfr^zUitS-scVy!G5rJyZE7MWC} zT36Oti}lvRC5taoVX#3K4^pwgG}>Ueh*^gXrdx#>)*{ndWLb-BD%AJf&CeX+!olV+ z86dKW$vlx#Tm|Ssf&5NYGQ+Y^N5Rn9W8@joI>7HpbSi$-hVw-!y-qFEMaH{rlqs;4@4lT-+uy!aXqs=ow{VI*&2A zNj*B`A`79?DK<<*r`UBOI>jQ2@N?yqhrX`}hpq!`z6hpffEmJB459<9w-^=?(&APz z-smz}M3ul#$5v+vdRNHh8?>wwYq138QT&{39tc)S!Br2;RZN7J;;SiRLikFD)Q^~% z5H@k46jrO*>U}A!RAzLQ!AfPur84X@j(gvgp;raR&T=g4te7jua)R8|-{r7USrMo} zZxUP0R$wE^L>%H(1=K1v{FM--uwbSV%PKnlpyhSE?5V=C%8zfVFk9uvn<`kjxVO-Y z*_xd6Laj39cP|8H#@Iz(H3aEwae_z&lV?OSndEMVDvQZ+BH2Wu#gh=?u7OI&(a{=g zE=L~gLJb~mqb%}k@v>zsiO*~CvUMUotc8`CHete52a-n{2or~iuKTe~F9{40(F9V>76VPN*e)%; zZ^HZg_t4p-36Y1SJX6rjr-6tUC z9myuqzV_$iOBF$ACdPdR64y*5YhLnXGF{hvx(f#pz@N9 zO&lj;MwlU6RJ!NrB#uwT+`=S|Pu|1SM`Y}Wz|1?37F6fJc#Kg1h`Nyp&czGh#_O-w`4?2 zEJ#FIGTwNjC*<)429F*+Fz{LCbRbUp=@nb|>F@fdQu4DnW|XRf6PrGki(>Lyxud+S zSSl9yDFv;NZOX-hnw<-UYOnk?U7Pmfi`74=&2Wkn_4pssSA=Z9oGIk^AC*}`hRDvJ zXSeTL&$CsXBV-LtICF*k4owwu7%|*=LQX-SFXSi^cnk7p+4D@gFkc&s@^yT1`?<12 zNJ|qkTU#Rb_EI6gqILK8sx7CF814%C&{xt&0#6sR4r7&&V@TnzW`0!GGUpl*uw>he zwT|(jtk2I8tG$6dRDJ|YkOF?l5Lo{)#}lsr=SRq`+g$Pb8MkUTm^_pb I@`y&nZ^?BCC;$Ke delta 4980 zcmZXYTTE0}6o%)*peQKn3@{)lcZP}zGIGBu*MS-C$X!5C&|<~JCO+5%Q=8DlMBMR# zrZ(}x2Td@d(ZnVuzR<)bnA+5&K4>HtAb~eGdE{ z-~DEN@}=!cmaX#QLiRQ;Svso>{YojGj{$a6Ohc>FeSl*l$|Axnf9j*9f z{C?bqdh6Bbj;Q~FmnxSf!XMq|P-J$&CGJEA)}^a<^eJLPzo5V%b|%-ip(c#U8W9H* zLlw?sZaY*Pm>4y*yJ=QLNX@1YvN?oAGMRN^Ruq$!5K`n?UvoKxEQb(p%zD*K3=VXQ zJkZx}9OzaaoEr;4G?PoQ5JXGC@38^(I8;y^2lY0tosR31bXggF6%y%fOZaVF?Kxq9FtCT4|7oZ_|g=+f+tE zb$;bMq$U$vRS?-C=7>}hafr8>=vNgavY%>kh|(5uEekCUvtTs~H&!iY`aIaLngz2S z2x?fc;(?&ne0Oy+_%j>#U2hH=%z@7wG@64Z8IOPgg- zoP${{=1i+OXfp@xGWdEgG#%zlrwsD;;l8{0zNd0=-$z17H1VP?(+8Ni^Dt|WiJ>|gLWY>Q4nQ?bBwS1o8R448M2;~rI*&3L%SRvWXpe|! z%Zl=%MqAb}5p7uyym)sU^3Y=r;?T8Q4ID%Z!>#OMfrxf1M*&(y$QH*7@I*Js;QIpf z(;j6lL~W!@j}#)U?det_#%M0v(z`faRDrZ|ly54aPUiG-1;%OOtprKonwb#t zsuE3=8I@O|sbNM|aj6O|(zwM-BI!(W4xuK4$uyBnCNGF&G4ULR${^9=LI`+`~u(UPtF5M~i*EFeLYzmyI!P}!P?r9B{FzhQ#B-Vl$_7x_k zh~)8#%6PT=ZET7WHxqS3Lv=nM@GT*7mp_EtIt-HK0Wi3&t9d zR%Z7@171aCcJV$0C35y@AAWw6&)xOm1j@KeL?gPC%i5ETsFgk^UU_c<9GSX?$vAWB?-#-?NC;07lmG$eRJQQ|1@m zjFYM39sSJ^)U)6Qkp?F3iTIc_w4kYS$J;Gv+QjL#7BrO>sV-5|3KC#4N2Hm_TOut? zs@m|1wg!o~(uU_D19@4+Y8$ptChBX)7VXFe1+(p#*}-ImNGFq`4%BE*y-dXLRI6Af zqCM5y36=KLnNF4*uUl18) z;^{_>_RS03XnIUGecg?hX;cPzJ(yr+_4yvCwOcOrKy8bhRZmjA4Sd#Op+~C9VJ@q_sg_p1=hC4Y*9i z_y)8H?@81cCTbBgL<|$Ph*v}m6Sa%nQ`qZ(9DMZ@25bL(c?wOnW#)VeqAhcpNFhJR z7eus6dM2UL8GJ8;hOX7NVr%cB8^pDBKb3@w7Z@oqCX{{5|I`QRpJ?_ xG?^k&NhKDsNW^emyKqlIrOD(J4)l;b&}UOPP~&scB3x(tobvxxq|utM{{gElbWQ*O diff --git a/tests/regression_tests/surface_source_write/case-09/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-09/surface_source_true.h5 index ebce87b36aff8050b2b6b9df2bf4292296045da5..d62363f97fd4cdbacfd65b2dd99605721d60f03f 100644 GIT binary patch delta 1273 zcmb8sH*C~U9DwmF2+RTogk*sL(@hbWZc4y(6Pkesm~KLV3-uD((ZU5W+<5X^GDexQ zAQ5G`F=NIXJ>J0J(W3_jKFdU=WFgW||K}oq_g*Hyl;ZEjrctU6jBos0E{ch-<(=iF z#Zs}rpHk2Y>7raLsOfc~Q0_I;>I<`V%=8vz>*?pyb87Lw_bpAxnb=EazCZnLeHq_EI$O)>uMo0< z7@jWVB#f0pHj%(z#r{!Q!*5?L0!F$_S!;zHfwC^U4u8$D^+Kvf{+_deBlwHEDZkg) zoUea>FWEwRYi`&S!M6M|eKfK?zYcfg>-1S|7pD(rHz&U*Q)fnSEq0H_-b~E&_OW{y z``JAb_y_nV%r17{C4z(O3T;@2$V0J(tRjScSjaJ`N64cC=P3VtXva8oL~xIjhkk-Q zVt6OX!*IwWfq#lT%x?1CA~;PRZCGc>Lpe(xA?$PHp`Is?4jh*}v6RCh+gkhuKTNR|NOTqYdi;c_+9{M}-h~d2_ f590%QB=A3yhdD@oPz0aIqYbN09?B4TghS#d{mBeO delta 5311 zcmZYDKTMQ&9LMqJ{voI+ww{8DZvHGh$#4{N?Y1u!oXlsOdT9Z zioY;0IM9TFqzuG3IGEJIfx)CEb)bn!Ny^|rQwEZf)U@|J-_P&+A^dJ=pT7Kko;&V< zx9Q)1hJN`W{NuK8{loE!hmp{|XJe7Qk@ewl$jd%*y+Z$AUL@3>8(esQ^qPNj3Zpmb ze!KUqaLLKglY*xF|FVzZxPQcC3R)M*a6xM z<>}Q@y;`PM%l)h1mE_Ay&%UNWBeW6#2s0)P=e2A?Z9~4{J!pN zaMQI5|2U8$N7gyA-jNL|-5caBDt2U}BcC}^;z+`gQkBk)@?4uBImSNwW<6u2%#kgQ zY;|OtBjt`%sEjA%^=wyZgH)>6GdombrSj45%!+9$l}~$@{_$9;+_Xw1v}v(4Lw4(# zQOF*ZkC448jhp2@)hZ*9eJb;i{VJI?UyWBYg$usu3&gvN}=Ts^yWp!S~o@sRCf+H6lX>z1l zrEI4>*Cmz2E|JTQTydmDr3b64Die;_JGbf?E7u%pQz_alujjgoUEOe`T_wIpRvnNW zV^=rzjFnrC+*Y}>SMI}@zJP@FOn$YTiKuiyqK?E=@@iz2qtaF*zfqQC#r#|&zflnR zti<-oAWsKlkfn|+Qwi;t)pC_)2#Y%kVKF~KSj@(x+=qP}f!G>G%{;`fVel}S1G1tF zL)gVRN74sn#Zo?nu#~e9ma^fHtQf~3i2RKy`-;pAgt<)B%8I!hgxFk$%?Ai`S$kMk z%;f-txtxYDm&rO=mB_o3eLekk^0$_R|NHE(I{AIZc2?KRfbD$j$a_bsQu2M|_tku# zlJ6s?buuM4Wm+qbh%l{v5T^AVglR25Dl01m=7A$`AtF4w%l})r~S{xaJFxsJvtZcMB)9lD-M!rM+a+`lL@*QfU?U}~2atlU#1j1;~FOrDK zoRbwZJ`7>T=OE1Z)AO=o#;q{pvp8cj?wN*0Sux{75N3P^!i=Xb$jW9sWCk7i0Abi` zFUpExAAm6I(-4L|*(585y&q!39x_u9hP}F3Rt)=N2*ds!!i-m4k`*&^E+<)YnZU|fc8e&@>HbvKD#g=zL*z#8pwmjY@E4I87!j`{;u;r_+%Ze?( z1FJd0jnj8z#Tq|_ zu*S0x*0|vdS=sh_W(dO4&Nz~~E48WcYxC1xsSQK?;jY}2QhRT)3_uv`X^2g;XOf+= zVw(FQJM@j1g6veO{!&&p-=294vHAAQdx*_<#8iDHE1Pf6Jc2OalMu$b@@rW!)_oAB z`5lBcF7J{R}Qx_e|njS+U_g5H@@QVjJ$6;_qZd>4wzn j`}`VWs~#~$-Lj%|L0I)y5LP{Yzjd|$zrOs2FMRwDQPTh6 diff --git a/tests/regression_tests/surface_source_write/case-10/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-10/surface_source_true.h5 index fded9d987e392214edeb3fccd50c3ecc5f8a7728..acaf39cb485cef41a634a2e980fe160b4bcc1316 100644 GIT binary patch delta 1273 zcmZ9{H*C~U7{Kwn90CIZOt%z@sj@;d5WtjxDFG9jfd`mwLVyeP5?W{>K@1rqzlAYk z%7R3cCF6}5Jz7j27(9CPz`)GON$aoA|8^p3TBDiy`}w^D1V zx!6=J@TU~CLjF-I7S#M)C{#M-ubJA6A78ERac!1U9IGb(kiH`1B)-g^63h{@jQnWL z{c~M^o|>ccgjDAX*@qa;0wKRcQ-vHr0(W8UK7Y%li)ypFxHgBEG~Oqd3TZCm-(c2- z%js)Ej-Y<`_f(tdBZjkrKD3qek-%LgXMY=gOuq-)$sJ zP9ZCZV7Cf63UwFjBZjk^^`Y%yeI#%#^3eCPK2mu5gsj5Y&-%#VA0Q92jrH3^aF9Gg zSck|%vB@KXeV9DdBjgdoIZ7VdG4e>@wv&f`oIFx^C&ppoX z56B~eT_z8;n>=DT56MG&L>>v;$K;_uA&(T^Q}QsLkw*r57NW}{IP6V2vevTDxRXrehMn{3XTlQ|zvVh)=ao2ZGV(2HCsRoaUd z6qBKXr74YIsTUSfv5-Qg7Q9eUuvAc?r7877L1+aFg4*uP`~BbiuzRE5GxNUR%3&$K)s6eoQ#Vmz%?feI6JX0@uv$4gpuV3pjbEgcK1A`&T9h*T4Ch*#;u%Cjaw zRFinOvTJuHc302SFJ)r7&vbl4^Bb%?Y?Q^9Zfv*7S~OdW z7He_9TC~cdAsa{3CVPDt7bCuMV{Pr$sU5PY-Gg48){!o2(QPeyWU;gtnqKQjpDa8% z*mgf}`%DfFdmxA$Wa7@noIxh1hzv0?eTIX`Atnp^;4{MH9+6Qdrq5Uq8E0~5KYaW| z!h|aiWP<0+6PaXUIv-||kPnp#BT2<95gjPEi0D9Z7C@x~Wu^c>42L}8y9GF6oh8wQ z5SUqF7gI!ZmaG-RB3xSRD8l!*NfvWO@Y4x$qX=`i$l=&x4D0Y1DMq_U-sfsD1Y4zG zTM5k7oBv1&9z^-(7vGeOtDlhh(l>;y6higVpD2Y;z4X5?MO!B~c}sKEn}4(n!}`sC zr3_Z_at&b~SgAMvkOy;ju+@qOJ4hrFB3^l*RvFM=4uOjW%jFnWLGX@-ck!^V0>df| zzOH~enTKCgpq(Z)UIhJ;N#^Folu7T!vbbS8^LGMGFilF6j33aTt3QQ{mC zogV8|SW31$x7uo)+a6h5tj2dIQ$#$f#&@R!B(DbMW;le3kBQ__yHN3%NIowqrxq$R zCPKxTS}dSY_WZLJXHmogcO3-9OimHe!SSFD7AiRM>tRvGf`xhvt0;L=k1eVw$@QTq zm%Y#WuwNA;7qVi+BOhM*UUqUdz^PKsKiz;vW{lXy?FOv1ngn){&P?>>a6IY1nzG{v?qX6(OJaFM9FB>ug!?g~JA6a|GTGeX!8E@<|_hns<~C@f#6+N6G7l z$7Z>TrG8lG>&fGOSm=bw8Gt}tJvp@j(pBgi#-H>LC1d%se2no#&(v zVonT`1tL0d?h(-$lRN|!Zj}M4_<%?P``jU-)5bLnm6k38)N9{mTh9k(MDfSM#eF$BIhOz@8LZ-{21OV)kpkL>)g5K#{%@l#Wn$AUR(^( zN5sq~LtG_dW|JY_5;3#MF1jYsxIi}kZW4|4?dA0(+URU*I}D<;X@y8B@8%T|9Y@Vm zP8 zG+CU+(WumVIgO){7a#QzWit?%(PfBpM09km6KNokT@)RKsk-xAJc>tC-FcoyGOr{8S#DJ_!q*N4IJC iknE5#k6|;4>|%Bv9rU&577?9C&i997@34xHw4M6+?hyw&eChq`Z1)-419YFj6h$DnU JCLa(E0RVxPKIZ@c delta 545 zcmZoMUZF8TgGobVqgE3$W5(vS%qGmzOiYXnK)}Hu0iqa~8520b42BcjlmD zm9bfZ-GgzGKnU-DAOI@|DVgjm5DgaLg=heZEW{A`3KbE6tML?!W(AoeFma>khYr5^lyIj+F#Ntt(t@qXa~42uS)7R5}bU PttlBT0*V5-W1%ttGbq0H diff --git a/tests/regression_tests/surface_source_write/case-12/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-12/surface_source_true.h5 index 6c6925daba145c5db52a281023dd017f066e0732..4b830d057dee2d3175982058352b5aae3fbb2e45 100644 GIT binary patch delta 1337 zcmY+@OKc2r9KiA2Ru~ctA{nn3B#e5ED#mlid(>;_A4`={udPRIJ?q^f9=B%ym!70t z?14n};?})sdRiCRn@Kp#aTCHEM0_{X$+F2O|M}1C=KK3kvW3Sr0Uzqa$-kZvA5r6;R)zXCQ zgECFXEJ`Et(}h%L2-yiA&P*ZSq4KbuW%P}CdB*lVt&7*y6;&kWC(9rbk8(}>@`JhxsVwY zVbybdC@VNVO0XMv{ZLnuhYx2J$A`9><0F7;k%zv9bA% z5V?)yQG}Hu55*>r66{Unp>8G*AI=u?(6*9C0CyXC=-bJojPwrjFdXs-;q4?3vyptG z$n7GJBCOryq3j`#670R?q3$COAC5~N+J5o~;2t0ky@`C2NJW1I#cl~Fe&4$-9DLK& z;=lUwXYg~O>G|m9AZ5I$|J3>NYwA~i_3QUPhg19A;g9W4Hrr1hIhl>Oy5*ocRi*{w z!#K$J2;m)Ke3*wB|FFoV86QPhM;ITx z%1ECi52KYlLU^ah!#qtMnKO|ht93S_oMQ%*U}xwED1@67P$m<0JR6yV&YEq)n=9X=>bmg+m zEj+WWHe0s!;vcru*=9@2HrH~?&8^yUv#FI!w_db#*0Q?K`99}4zm5BkKA-3LKF>Ml zUeDL_`;WfQUQBp(aYAVS$%6fU-;UEK{44#l6B2w*{4>!>r#~FOFE&yC#ksy${S!!c zV^v@8IGsMB-gkIfXYzmXk1nSYb!=L%CJ7LDh+oKku5pDlq(GG@#PkUWxyv;ZgqRv$ zoM%?jxSC1h$mDV4F(J2SU_Hq~DpEnF2r<*Ajw92A1k<2O5psyhbS8;%Vl$*B-Z_y@ zHFfM{nyQ=?)j=8scV;4(>CMdY1{oCGVojzuGus=?@dk4#D9u3YdEQKxH<<4YvMD%_ z2~7?KS2Lsfn_s~Da8>av>?7AJ%<~2dy}=?5beF|)8W-oFOFpF+&c(z63ZCU)2?duq zSW3b9Y?Kvppj$4JmgnZ-Ygx`@vP#M7ok&Ms6elW{71M%ZPA93eSrC*+i{$xO)e4%h zYd*%U@{TK&+N5l#%a{aIACuKWPG+ND(7XI{3byA&_0rbFYt>u9RP{+tvj%Gkv@M9~ zpGO6iPFa9;RCENr*JpJ5p6Fw^{Eo90&ACSH1;ULBuPrrl2PeZEL)lS_%>t zB2(whtn&u--k`x7G@pFoG61Xo!U-Wjic2U{}vAP#sAT22xp7%(P{|w?cX1S zP~ZNif~cJ*wSNV%zbqjw{pQE)2^webr_ z6-J;Avf8iqMWEKEaWew-8d8^5BUnqpE7fRKAq%-u4WV|8k{YC|B)zu==@6-}aylaE z>{=|OTF9Q--X!wU8Y1dq?SQ^PwOqClF}~tg$&FB1Um0w~m<}5Ac_YSH zOG#>ipi9Q|H9@d}1m~L|u$Ge841uu}zv^y=pqm6AH{;vwi3ckth6Wx^{UciY@Y547 z^j&}Z&woF?`dP=pK=030*>9FydFI#;RlmJo_TH%nm#U&|m%i9_AQF06gpSm6k&aP1(26AvQqa?iTI)8)T2VVh>4Y|wv)cjH7~`5Lll%)Cs{968zeULz+rKqzl0`3SQ$N zg@QXAXiur!fU+5sIn05!lUo}wp6o<_RN+R9w?49OBgShVxw#R746b)o{w4@AnK zCe~4|FqtDYdEIELZRJ2W)~DYQS2@uBv8)Ff{f^k*gW1+P=JsN?wGKmaWzs0u80&CU z#%8Fjbr@o;;{w+h>u{7I);iMq(8pTGFq0)R{TvhPA1VFVx%Q8z`>`eCAC5Z9>E-lY zWe#BbMHK8BK&|zWGXq$Fd2jetQVe8;ETE5xb(E7aEI>a)rVpa2eTH-oqD2|EaMcMW z)>eF5P-ASxQC&>RW$(=-YY+J&NcU0t zl@aVpJHz)QsI|_Jw+qc<@}2EvGAQILCe|aecSAKKHG6hrrhbupyBlMyM~prNf%OPO pj7P-(Z^AX!BQi$ORC~m;qu5A*c6FJ92^8c!9Ze-?Fpm+_;D5%jpD6$U diff --git a/tests/regression_tests/surface_source_write/case-13/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-13/surface_source_true.h5 index 6c6925daba145c5db52a281023dd017f066e0732..f53e2c3a2b0b5d0a55456dd2c6ab1ea3d7ca01af 100644 GIT binary patch delta 1337 zcmY+@OKc2r9KiA2Ru~ct(qt$xNEr1RRXUzK-s3&=kEP0}*Vd!9p7m}Kk6W||?)lEM6&wpk&-`{_d%|EUxeNXlnRoN^3bq}kP zV&GkMLv?MkDw*J;B(y~NqB@yS%lkwk+baKz)y8~%ZM6+(s3XYEKlh5AoigB&0LBvi~?m$Uqgcyq4)xE7#?He%k20SHo`+fB*m0(u8~o zWx9}A6i4*U5K^rbvJ*a>nL@rt`FYnY`iQ@)&ld6-(t3q4N5~$;_lD+1*S+&9_u^;q znw?*H*0+F09epEOorTe=aj$&8%w5Ep5bsNi`Tdg0zGtbBA-rYLJ<}Aj*A%(sLS|5a zRnPIEtl;=4!fxR8LtRN8KAcq?A6g^FM*!C%4}CSqM+xaQynYyKIX*&o>v;Vz*OOl_ zavR8_04qfvicKCx*c-`1-9#QfoXzB+Z6S{U?pE^9w~FwlUIOGw++d&@YPVzfN zZWnnJVC^OkWe<52Vecgmbsu^7a9r}x_LD~d_W*h5P2`(ID*7uZc1t+<$KI{s;M=Yi z|MkzmgJ1GZ&&M_gDdR=`=gwE(Qos8e-+cHroZ9aWe` z;~?WBgm;MXVIF4u!y=bvd=y|EVSFe@86QR1&5RHA7~{i-)57@Bjx#<2xF;ANy2tn^ zA$^iOj8^gp;hiE6^E7#6&O{2V*4c=1ju}vdouLo4jXr!h=jlVcKpz3zi}ayiqK^{N z?et+>rjHO_mOji5`W+&7g*>dQk(aE>HI9!W?Ca#A-XISj&Q0>rI>{q|dy72u+vHI~ i`VM&*cgZ7!caJ>G`{eJ7+yn9>tS;U@ly34Uc8h-=b1uvP delta 4944 zcmZXXeN5F=7{`B?`{ODaDhdktf*`1%D4>ED1@67P$m<0JR6yV&YEq)n=9X=>bmg+m zEj+WWHe0s!;vcru*=9@2HrH~?&8^yUv#FI!w_db#*0Q?K`99}4zm5BkKA-3LKF>Ml zUeDL_`;WfQUQBp(aYAVS$%6fU-;UEK{44#l6B2w*{4>!>r#~FOFE&yC#ksy${S!!c zV^v@8IGsMB-gkIfXYzmXk1nSYb!=L%CJ7LDh+oKku5pDlq(GG@#PkUWxyv;ZgqRv$ zoM%?jxSC1h$mDV4F(J2SU_Hq~DpEnF2r<*Ajw92A1k<2O5psyhbS8;%Vl$*B-Z_y@ zHFfM{nyQ=?)j=8scV;4(>CMdY1{oCGVojzuGus=?@dk4#D9u3YdEQKxH<<4YvMD%_ z2~7?KS2Lsfn_s~Da8>av>?7AJ%<~2dy}=?5beF|)8W-oFOFpF+&c(z63ZCU)2?duq zSW3b9Y?Kvppj$4JmgnZ-Ygx`@vP#M7ok&Ms6elW{71M%ZPA93eSrC*+i{$xO)e4%h zYd*%U@{TK&+N5l#%a{aIACuKWPG+ND(7XI{3byA&_0rbFYt>u9RP{+tvj%Gkv@M9~ zpGO6iPFa9;RCENr*JpJ5p6Fw^{Eo90&ACSH1;ULBuPrrl2PeZEL)lS_%>t zB2(whtn&u--k`x7G@pFoG61Xo!U-Wjic2U{}vAP#sAT22xp7%(P{|w?cX1S zP~ZNif~cJ*wSNV%zbqjw{pQE)2^webr_ z6-J;Avf8iqMWEKEaWew-8d8^5BUnqpE7fRKAq%-u4WV|8k{YC|B)zu==@6-}aylaE z>{=|OTF9Q--X!wU8Y1dq?SQ^PwOqClF}~tg$&FB1Um0w~m<}5Ac_YSH zOG#>ipi9Q|H9@d}1m~L|u$Ge841uu}zv^y=pqm6AH{;vwi3ckth6Wx^{UciY@Y547 z^j&}Z&woF?`dP=pK=030*>9FydFI#;RlmJo_TH%nm#U&|m%i9_AQF06gpSm6k&aP1(26AvQqa?iTI)8)T2VVh>4Y|wv)cjH7~`5Lll%)Cs{968zeULz+rKqzl0`3SQ$N zg@QXAXiur!fU+5sIn05!lUo}wp6o<_RN+R9w?49OBgShVxw#R746b)o{w4@AnK zCe~4|FqtDYdEIELZRJ2W)~DYQS2@uBv8)Ff{f^k*gW1+P=JsN?wGKmaWzs0u80&CU z#%8Fjbr@o;;{w+h>u{7I);iMq(8pTGFq0)R{TvhPA1VFVx%Q8z`>`eCAC5Z9>E-lY zWe#BbMHK8BK&|zWGXq$Fd2jetQVe8;ETE5xb(E7aEI>a)rVpa2eTH-oqD2|EaMcMW z)>eF5P-ASxQC&>RW$(=-YY+J&NcU0t zl@aVpJHz)QsI|_Jw+qc<@}2EvGAQILCe|aecSAKKHG6hrrhbupyBlMyM~prNf%OPO pj7P-(Z^AX!BQi$ORC~m;qu5A*c6FJ92^8c!9Ze-?Fpm+_;D5%jpD6$U diff --git a/tests/regression_tests/surface_source_write/case-14/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-14/surface_source_true.h5 index 6c6925daba145c5db52a281023dd017f066e0732..ec049fec48a990387c41b36f590e7ee85eb667eb 100644 GIT binary patch delta 1337 zcmY+@Ic(EV9DwnpMPQJi283iTVL$>?E>kXZHKttVDuzC2pcKpB%ljhvw=E=1!c5U29J?I-~l1N$h88IetLd(qVNAKrSPPt{4LpQ)MT%|uYXjV z6oYSTSJlo;)+7^rl!TV3T+}8LYGt2DWKYW9W3@3O1J?OLZJd*QUkLsqJw?dRqx!~+ z+=OUb99`o_@oG;LGLLxgPZH9ptL{He7BWzUtgIFKlF*8$PnK0=$>f`*=LH}3L!Hn z!fN37P*!q$lwhyo^+R1v9zL8k93R?Rj*kGYMIQP(j*l|Z>v{b!HgJ4|@HX=LVQwP7 zN#q*IqX;WS9*RvKCD@zELv11tAI=u?(6*9C0CyXC=-bJojPwrjFdXs-;q4?3a~Jtt zBDb47im>*Ohq9MEO0b*BL)}LnJ{*@kwEg4}z&$`7dJFj$k&6BbirpU8eQ(|t4!!Aa z_XmFb8Twjic`>#vNEt61zI44BN&U*Nef{C*aB9Ch{Hfz5l#!2!B;hiE6^E7#6&P0l=*4c=1ju}vbouLo)Jbn0ZF3^W|kv;;rm*_*kOdn;W zJLto>LLVW#EPa@r^gBiFDtTDfBK@q&b&ih`>>K2v-Xsqn&MorLy2vAddz(D;JLFMD i`Yw4G_sAoJcb`1W2jm}!+(YuCtZv>ulpgXZ^@zVHcP`EV delta 4944 zcmZXXeN5F=7{`B?`{ODaDhdktf*`1%D4>ED1@67P$m<0JR6yV&YEq)n=9X=>bmg+m zEj+WWHe0s!;vcru*=9@2HrH~?&8^yUv#FI!w_db#*0Q?K`99}4zm5BkKA-3LKF>Ml zUeDL_`;WfQUQBp(aYAVS$%6fU-;UEK{44#l6B2w*{4>!>r#~FOFE&yC#ksy${S!!c zV^v@8IGsMB-gkIfXYzmXk1nSYb!=L%CJ7LDh+oKku5pDlq(GG@#PkUWxyv;ZgqRv$ zoM%?jxSC1h$mDV4F(J2SU_Hq~DpEnF2r<*Ajw92A1k<2O5psyhbS8;%Vl$*B-Z_y@ zHFfM{nyQ=?)j=8scV;4(>CMdY1{oCGVojzuGus=?@dk4#D9u3YdEQKxH<<4YvMD%_ z2~7?KS2Lsfn_s~Da8>av>?7AJ%<~2dy}=?5beF|)8W-oFOFpF+&c(z63ZCU)2?duq zSW3b9Y?Kvppj$4JmgnZ-Ygx`@vP#M7ok&Ms6elW{71M%ZPA93eSrC*+i{$xO)e4%h zYd*%U@{TK&+N5l#%a{aIACuKWPG+ND(7XI{3byA&_0rbFYt>u9RP{+tvj%Gkv@M9~ zpGO6iPFa9;RCENr*JpJ5p6Fw^{Eo90&ACSH1;ULBuPrrl2PeZEL)lS_%>t zB2(whtn&u--k`x7G@pFoG61Xo!U-Wjic2U{}vAP#sAT22xp7%(P{|w?cX1S zP~ZNif~cJ*wSNV%zbqjw{pQE)2^webr_ z6-J;Avf8iqMWEKEaWew-8d8^5BUnqpE7fRKAq%-u4WV|8k{YC|B)zu==@6-}aylaE z>{=|OTF9Q--X!wU8Y1dq?SQ^PwOqClF}~tg$&FB1Um0w~m<}5Ac_YSH zOG#>ipi9Q|H9@d}1m~L|u$Ge841uu}zv^y=pqm6AH{;vwi3ckth6Wx^{UciY@Y547 z^j&}Z&woF?`dP=pK=030*>9FydFI#;RlmJo_TH%nm#U&|m%i9_AQF06gpSm6k&aP1(26AvQqa?iTI)8)T2VVh>4Y|wv)cjH7~`5Lll%)Cs{968zeULz+rKqzl0`3SQ$N zg@QXAXiur!fU+5sIn05!lUo}wp6o<_RN+R9w?49OBgShVxw#R746b)o{w4@AnK zCe~4|FqtDYdEIELZRJ2W)~DYQS2@uBv8)Ff{f^k*gW1+P=JsN?wGKmaWzs0u80&CU z#%8Fjbr@o;;{w+h>u{7I);iMq(8pTGFq0)R{TvhPA1VFVx%Q8z`>`eCAC5Z9>E-lY zWe#BbMHK8BK&|zWGXq$Fd2jetQVe8;ETE5xb(E7aEI>a)rVpa2eTH-oqD2|EaMcMW z)>eF5P-ASxQC&>RW$(=-YY+J&NcU0t zl@aVpJHz)QsI|_Jw+qc<@}2EvGAQILCe|aecSAKKHG6hrrhbupyBlMyM~prNf%OPO pj7P-(Z^AX!BQi$ORC~m;qu5A*c6FJ92^8c!9Ze-?Fpm+_;D5%jpD6$U diff --git a/tests/regression_tests/surface_source_write/case-15/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-15/surface_source_true.h5 index 5bdb39b2a703fa7cdb17a153a688cb0ea7664f1c..fd5892096c58be336ca5c9fea4b7afc60dd66dbb 100644 GIT binary patch delta 30 mcmaDL@IYY08fM0j&1;!Wm>C%-KVmatdA7(RbF&1y2O|Ki$_gd` delta 30 mcmaDL@IYY08fM0f&1;!Wm>HQSKVmatxuw3WrHw1^ml1Um% z$I8YT85+x5Ql9dZ#~F*1DNkYHL+Lm3%zSV4TR*up{4+k4Ev+3nz4fQ%aX9nG^0wto z;&Xd6THD|Kdwz0W|68$oCb?i`e0shApYC9^(w&V$mv0E&FB?L8 zVdxGqrMM_`zY<*>x;17@E(zW5#FvKdD09loLiZ<09J=H5RF{YDFVZVQ_cH_am7!ZF zyDD_2SkPP@y0hdP zE>FH)etT%2kY`Hqq&(3?o*9#;&Z^@IqEl*GNjy!22&p`dIJlTGE7Buh4lOK>j5Zd?U znNl2-C;C918Iwcu#H;eFd%M3^_jKil@+2S0(^GvcPx^^G1NEo!WS_~ipjneAKP-PZ zv`6HbQhY8?^o2Y#CSS@EeCnqp4o};AC~9`mjD0& delta 4944 zcmZXXZ%EZ=6vw^SKc%Jl@2b~->CJ0i>)JH6tkkr$Zp~X(T56VBEp=H_C@?5cR!~sP zE(HYz1_lO=N%W$?n1O=^?VUk^vc?L0Va%XGV{P;KeJ{^*c8+iIe9rlPzvn#SCI9%{ z_T#tq@AB-M2gmXULv5W8AA}Z%rrGVbkcF?sAt~ygkWgFOV(XibU;6`pN2G+!cz*7D zn6k)k3q-{FqyJs_vgXxHpf0wBkzqkT3gV07s@sCh3sMu`5^kjrjX47M;`u6bwCzvu zo7uYwe0Da0FHoLH%TPUEW6f;<-_Bb}^r zKAo>JN!z&@yxo%lb(lKjmtZ?gzl9?cD;d%y$ap5P$Xt#DBRIC4TRavdI*ZS=XA#q9 zS==--n+sY6851Pj#Z^r%67$5xV{9wX4p*$RI{W_zx9hHOMENk{q4rU|t>_`r* zB9v8xo44!SSj`BA-9%u|q4{7ybu(~BoeJ~FF zkQ8_)x?V4KHuD35OnH$Xsh+5`00EKuP0tmO_DlipvSy3c@Y((~WcKwMGF$KkDF$ir zk{0=e+_JY27np@61#uSfnI1tVipXlNwb&*~oqT33GNbg#<7?q(NL(?<5UzNNXtsOO^T4QkYvs{5qJM*`{@5_Q^WTMk`^= zddx=aq=xlKGGtVc&w|vKan*<*pUSXBj0$evfZ!M%JiGxGhI|ynw-GbTwCc7X^BWPf zOvUWkgk!DZ-X>%k_1q>h>n}$;R-0chN1P$Ef|OVAnV|}p#;OHARB+R>O47bn$=h!# zxnId|wA&AalhytoU{w_C`gj@7LhxVnWQqi zcOug&p6*1ZnGOFE35GNY@<0$<9aPCWvq6wiK|Tvo@8>=vf_w@R{B^Mq7^vHY`%=_> z-|xbGR$<>wibh)8r^P?J@eIbYrXGtJa#N5wL8|s})pbE;_mE|G?B&5jd%4A1LCW^= znJfE<>HB@;=;{WZaH#=mr~X+@H$d%F?^n?XwN+eegxbu$YUFC~eoh7inc7bhN)PA8q_`L?($v`NCb*>QGqRiElCIi=&Ak1*8G9N*Mhg*~Z{dPT z+RiR28W;6Akc4khnuoXDW5ypwG)dc?O4F_i|HUmM+Y|_?I6Oa zBfMRIgeQ$0A%cjb5M=A?>W)HS$gm(E1@Rr@s@sCh3sUnHSKSN}m)>VikgDTQnVIXy zags~D|DVTkl4+NBlJ=cW-hNBlwOx2^%j#AapMBHCvrD>(`HgM}R_OJoyCE>7@M}&k z2=XdOaC%-KVmatdA-OYbF&1y2O|Ki_X;Zj delta 30 mcmaDL@IYY08fM0f&1;!Wm>HQSKVmatxvzODW3vRi2O|Kkf(lFk diff --git a/tests/regression_tests/surface_source_write/case-18/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-18/surface_source_true.h5 index e5a7619c552c4321cdcaa3710363e430fa57516b..436063aee23677c481b9cec5ff8e6c8791d021b7 100644 GIT binary patch delta 30 mcmaDL@IYY08fM0j&1;!Wm>C%-KVmatdA-OYbF&1y2O|Ki_X;Zj delta 30 mcmaDL@IYY08fM0f&1;!Wm>HQSKVmatd7ybJW3vRi2O|KkiwaEu diff --git a/tests/regression_tests/surface_source_write/case-19/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-19/surface_source_true.h5 index db8a49dceeb20ebdc3e0c1b8db765cafed5a4052..eda3e030bda7d7bc798329e59061173d516ec10c 100644 GIT binary patch delta 30 mcmaDL@IYY08fM0j&1;!Wm>C%-KVmatdArCWbF&1y2O|Kj2?{L$ delta 30 mcmaDL@IYY08fM0f&1;!Wm>HQSKVmatd8m0RW3vRi2O|KklnPD& diff --git a/tests/regression_tests/surface_source_write/case-20/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-20/surface_source_true.h5 index 01d2abf61cf8a41876d664d1aa505a967e7559cb..083ce90c8964c549b597eceef343401fe63fd70d 100644 GIT binary patch delta 1270 zcmY+ls^*pfT-a5zzsJ9$HJ0H8cWB@ z#u*tJ%U4pSOnD27+j+}dSol$TX1!sPfuhkYlly6`*C#|PW`dEeRb1x zWjZm@B$=F9R;QEr%srW`?d$(NJ2~s0--?5$l5?u*$@TgF^lcRS)8rdM|I3EZog4ZC z3>4>u{#T;&L%+sIc|quZC%!QBN0?Dv6#73&;?N&sPJMCc|02C4^gpwpxis|aWS52h z1WVe><;ge7Zw%cP@(dJ-Jkgc%jFeZ&6K|4dMs>A3$u;uKsjrnMy-uD5O)5{eS)S$Q z-TmGzyZX~xSlS8ZSu^iZ;>axRh|XSZSrKd z%d@1t!}sL5d>*H4=Jag(N8CXF>C{JXs~rlJ*&S z@}2TKL-(va1I2UlM9<4JQobNh{GvQFs#>1pC3)u5FUynel4n5^2@*6TK$SNcp-v@f-5YsNR$(c}t!-_1p5Ktvm~wz4B!HY1ib*56K@2-C=nK ziqGVUK9^^t{6e1iOL=BgU&)gkk!Mc*wLIxJ@+@e+l_&d7o+a(~^5jS5kB06Cc?ODO M@a{)f)KgDA_0&_(7WK3gQLv?jwzQ=Q0|Nu5 z3=AZt|1dBxFfcGM5W~PgQU(T^FfcGMkd&kh3?yY>ASr1N-|yZ_|34PYC-3|I|C59~ z{rfNH_g{R!p7h;#Gk)q#q0{nqtnhqcwa@1iH$WEP!`=v7JBUvVi?ekW>BugaG{obkvvP<7*5rQ9Q?r$Sf zDOHKibVJ@#Ss)2lNwr&Nx=7|Br8*NjAeBic$s9?r+FNx%KG4mxB!PoceW)|-ki9B1 zkP3+7Rt2OoX(O42_;ru}kW?nEBvT~ihrLxZWS?%Hgd9*QJtCD!6Qo*aCLjTolAu(F zR2m>hRK`h)j!I=SbtGeupzd*wNoA5H870|*9MwIwHL}NKq~^u$+%KDBIbX{ZkUEuRlGqKYY^E1duhkMsG%1zM z^gv!}wFr5o61gdrNjJ#?q*1HzEvcGRx=7|pLbs)QtyL$)QJI6-nHfw;Wzs=1OA@#v zRgrFPhuA4PR` zmfrt=<+x1{J4Gi*N*+jMGYur;Bt;LUvU9bLWDHWKpTfyVWs)TsCE0?MV~@|ReI$EK zMj(6iS(^|$X)~WnWikxOpR@(;21)uescdElVyEajNvc*Vn;9foBS}7%YQKJp0g_dc z#1n7TPqG4$f3)V-yYZ(|Rq3<(NR}aXP{*=Tne>t@L8^6g^qEv9JtT`Hk>^q!)IHrK z3lKZ!!=FoK(nT^4v6DYkCzVMjB&biHBME*Xm7U=oko+C)xU(dIdZ}!ton(fj>V>yz zgB-^jI_@-yzdXh+XEBB&DyUvRl0gVwd>@NlBwrc851W><%9% zDQc3+?(jNDRDWJ$kaH@|YpLwY%|h~5uH%kE?55o!sr^#+*vtsYCd97X%vVxf()SsL z*iE|uv70vCEY%gQhDg>ScEP5;mda!ha!vQFktDy7%4P;gR!I^q-l`vB*YXNUyj7~3 z`aXRm%OtUHrMjh6FUb-~^gD0W1G%kx79nC%-KVmat`LxI)bF&1y2O|KjHVQHT delta 30 mcmaDL@IYY08fM0f&1;!Wm>HQSKVmatd8BzNW3vRi2O|KkoeEC? diff --git a/tests/regression_tests/surface_source_write/case-a01/surface_source_true.h5 b/tests/regression_tests/surface_source_write/case-a01/surface_source_true.h5 index da36fc505eb67f3da0ce48511464b699a4fb16e3..807211e3ac16e7c7c452f6fd43079e2a4cfa71ea 100644 GIT binary patch delta 252 zcmY+-FAM=;7zXg~bH@39{+-WkCYmH%xFCq4@B~q$T@+0c&09p16dO~-i=rrs;srqv zJfe5|?RnnxgkIEJwPQi^)LB>>=Y!>04IR^pXDg$A#nQ_8{YnLS`6NvIwezQElN{(% z`1~Vd8*-&?3bILIorX;4Mt%ljXCZgmviEb4fPK$&@{k!lXi$J0$vBWXJ!x2kT&Puo nEGeQ<84^;v0$I_x3VAcH%&yCM7wa15=|;ZcEZKF=(!Gu^BJ)*K delta 850 zcmexhbHHSR29tx-My)1h#*EEtnN66bnV1+EfPjNR0z@$|GbV6=84M2uC;wrSU`evS zlCfEW-GgzGKnU-DAOI@|DVgjm5DgaLg=heZEW{A`iXq}D7|j7PM+juZ48a7j5m9g> zJ_ Date: Wed, 22 Jul 2026 15:43:44 +0100 Subject: [PATCH 45/48] clang formatting --- .gitignore | 2 - include/openmc/cell.h | 6 +- include/openmc/random_ray/decomposition_map.h | 57 +- include/openmc/random_ray/random_ray.h | 32 +- .../openmc/random_ray/random_ray_simulation.h | 4 +- include/openmc/random_ray/ray_bank.h | 14 +- include/openmc/random_ray/source_region.h | 2 +- include/openmc/timer.h | 1 - src/random_ray/decomposition_map.cpp | 908 ++++++++++-------- src/random_ray/flat_source_domain.cpp | 147 +-- src/random_ray/random_ray.cpp | 201 ++-- src/random_ray/random_ray_simulation.cpp | 315 +++--- src/random_ray/ray_bank.cpp | 377 ++++---- src/random_ray/source_region.cpp | 31 +- 14 files changed, 1168 insertions(+), 929 deletions(-) diff --git a/.gitignore b/.gitignore index 66caeba6abb..32ef7919ab4 100644 --- a/.gitignore +++ b/.gitignore @@ -46,7 +46,6 @@ results_test.dat # HDF5 files *.h5 -*.h5m # Build files src/CMakeCache.txt @@ -71,7 +70,6 @@ scripts/G4EMLOW*/ *.ppm *.voxel *.vti -*.vtk # PyCharm project configuration files .idea diff --git a/include/openmc/cell.h b/include/openmc/cell.h index b2e591d999d..60ea6197dda 100644 --- a/include/openmc/cell.h +++ b/include/openmc/cell.h @@ -94,7 +94,7 @@ class Region { vector surfaces() const; //! Get size of surfaces - int n_surfaces() const {return expression_.size(); } + int n_surfaces() const { return expression_.size(); } //---------------------------------------------------------------------------- // Accessors @@ -232,7 +232,7 @@ class Cell { virtual vector surfaces() const { return vector(); } //! Get the number of surfaces in the cell - virtual int n_surfaces() const {return 0; } + virtual int n_surfaces() const { return 0; } //! Check if the cell region expression is simple virtual bool is_simple() const { return true; } @@ -426,7 +426,7 @@ class CSGCell : public Cell { // Methods vector surfaces() const override { return region_.surfaces(); } - int n_surfaces() const override {return region_.n_surfaces(); } + int n_surfaces() const override { return region_.n_surfaces(); } std::pair distance(Position r, Direction u, int32_t on_surface, GeometryState* p) const override diff --git a/include/openmc/random_ray/decomposition_map.h b/include/openmc/random_ray/decomposition_map.h index 71e3ee495c1..93e2fab1a7a 100644 --- a/include/openmc/random_ray/decomposition_map.h +++ b/include/openmc/random_ray/decomposition_map.h @@ -1,16 +1,16 @@ #ifndef OPENMC_DECOMPOSITION_MAP_H #define OPENMC_DECOMPOSITION_MAP_H -#include "openmc/vector.h" #include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/source_region.h" +#include "openmc/vector.h" namespace openmc { class DecompositionMap; namespace mpi { - extern DecompositionMap decomp_map; +extern DecompositionMap decomp_map; } // namespace mpi class DecompositionMap { @@ -22,39 +22,45 @@ class DecompositionMap { //---------------------------------------------------------------------------- // Methods - // Methods to find rank centres that divide spatial domain up into equal + // Methods to find rank centres that divide spatial domain up into equal // Voronoi volumes void initialize(); void generate_rank_centers(); void calculate_grid_points(int grid_points_total); void initialize_voronoi_centers(); - void calculate_voronoi(vector& position_sum_per_rank, vector& num_points_per_rank); - Position calculate_centroids(const Position position_sum, const int num_points, int rank); + void calculate_voronoi( + vector& position_sum_per_rank, vector& num_points_per_rank); + Position calculate_centroids( + const Position position_sum, const int num_points, int rank); // Methods to create and update subdomain list and exchange source region data - void exchange_sr_info(ParallelMap& - discovered_source_regions); - bool any_discovered_source_regions(ParallelMap& - discovered_source_regions); + void exchange_sr_info( + ParallelMap& + discovered_source_regions); + bool any_discovered_source_regions( + ParallelMap& + discovered_source_regions); void send_sr_data(int receiver, SourceRegion& sr_send); void receive_sr_data(int sender, SourceRegion& sr_recv); // Methods for balancing the load between ranks void balance_load(FlatSourceDomain* domain); - void update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& rank_load_combined, vector& load_ratio); + void update_load(FlatSourceDomain* domain, bool check_all_ranks, + vector& rank_load_combined, vector& load_ratio); void redistribute_source_regions(FlatSourceDomain* domain); // Methods to find owner of source region - int find_owner(SourceRegionKey sr_key, Position r, + int find_owner(SourceRegionKey sr_key, Position r, ParallelMap& - discovered_source_regions); + discovered_source_regions); int find_closest_rank(Position r, bool test_all_ranks); - // Method to calculate the load per rank based on the total number of hits in all source regions - // of a rank - void calculate_rank_load(FlatSourceDomain* domain, double batch_transport_time); + // Method to calculate the load per rank based on the total number of hits in + // all source regions of a rank + void calculate_rank_load( + FlatSourceDomain* domain, double batch_transport_time); double calculate_load_ratio(int rank); - + //---------------------------------------------------------------------------- // Public data members @@ -67,8 +73,11 @@ class DecompositionMap { std::unordered_set my_neighbors_; // Data to estimate rank loads - vector num_base_source_region_RT_; // number of base source region ray trace operations per base source region - vector num_mesh_bin_RT_; // number of mesh bin ray trace operations per base source region + vector + num_base_source_region_RT_; // number of base source region ray trace + // operations per base source region + vector num_mesh_bin_RT_; // number of mesh bin ray trace operations + // per base source region vector ray_tracing_cost_; vector volume_base_sr_; vector measured_rank_load_fractions_; @@ -80,12 +89,12 @@ class DecompositionMap { private: //---------------------------------------------------------------------------- // Private data members - SpatialBox* spatial_box_ = nullptr; + SpatialBox* spatial_box_ = nullptr; // Voronoi cell calculation vector grid_points_; - int grid_points_per_rank_{125}; // default 5x5x5 grid points per rank - vector rank_centers_; // centers of each rank's Voronoi cell + int grid_points_per_rank_ {125}; // default 5x5x5 grid points per rank + vector rank_centers_; // centers of each rank's Voronoi cell // Load calculation vector estimated_rank_load_fractions_; @@ -94,12 +103,12 @@ class DecompositionMap { // Coefficients for load calculation double C1_ = 1.0; - double C2_ = 0.1; - double C3_ = 0.1; + double C2_ = 0.1; + double C3_ = 0.1; // Load optimization double imbalance_tolerance_ = 0.01; // 1% imbalance tolerance - double optimization_history_factor_ = 1.0; + double optimization_history_factor_ = 1.0; // Miscellaneous uint64_t n_base_sr_; diff --git a/include/openmc/random_ray/random_ray.h b/include/openmc/random_ray/random_ray.h index 3ba73aeccc2..5699ff63756 100644 --- a/include/openmc/random_ray/random_ray.h +++ b/include/openmc/random_ray/random_ray.h @@ -21,9 +21,9 @@ struct RayBufferContainer { vector angular_flux; int surface; bool is_active; - uint64_t ray_id; - int n_event; // Number of events (surface crossings) the ray has undergone - + uint64_t ray_id; + int n_event; // Number of events (surface crossings) the ray has undergone + // GeometryState scalar fields int n_coord; int cell_instance; @@ -32,19 +32,20 @@ struct RayBufferContainer { int material_last; double sqrtkT; double sqrtkT_last; - + // GeometryState vector fields (sized to model::n_coord_levels at runtime) // LocalCoord is POD, so we can send it as contiguous bytes vector coord; - + // cell_last_ array vector cell_last; - + #ifdef OPENMC_DAGMC_ENABLED // DAGMC fields - fixed-size array to avoid variable-length vector Direction last_dir; moab::EntityHandle handles[MAX_N_HANDLES]; - int n_handles; // Actual number of valid handles (may be less than MAX_N_HANDLES) + int n_handles; // Actual number of valid handles (may be less than + // MAX_N_HANDLES) #endif }; @@ -55,9 +56,9 @@ struct RayExchangeData { double distance_travelled; int surface; bool is_active; - uint64_t ray_id; - int n_event; // Number of events (surface crossings) the ray has undergone - + uint64_t ray_id; + int n_event; // Number of events (surface crossings) the ray has undergone + // GeometryState scalar fields int n_coord; int cell_instance; @@ -66,12 +67,13 @@ struct RayExchangeData { int material_last; double sqrtkT; double sqrtkT_last; - + #ifdef OPENMC_DAGMC_ENABLED // DAGMC fields - fixed-size array to avoid variable-length vector Direction last_dir; moab::EntityHandle handles[MAX_N_HANDLES]; - int n_handles; // Actual number of valid handles (may be less than MAX_N_HANDLES) + int n_handles; // Actual number of valid handles (may be less than + // MAX_N_HANDLES) #endif }; @@ -107,8 +109,8 @@ class RandomRay : public Particle { SourceRegionHandle& srh, double distance, bool is_active, Position r); void initialize_ray(uint64_t ray_id, FlatSourceDomain* domain); - void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux, - LocalCoord* coord, int* cell_last_data); + void restart_ray(FlatSourceDomain* domain, RayExchangeData& data, + float* angular_flux, LocalCoord* coord, int* cell_last_data); uint64_t transport_history_based_single_ray(); SourceSite sample_prng(); SourceSite sample_halton(); @@ -132,7 +134,7 @@ class RandomRay : public Particle { RayBufferContainer exchange_data_; bool ray_trace_only_ {false}; // If true, only perform geometry operations - int owner_rank_ {C_NONE}; // Rank that owns this ray based on its position + int owner_rank_ {C_NONE}; // Rank that owns this ray based on its position private: //---------------------------------------------------------------------------- diff --git a/include/openmc/random_ray/random_ray_simulation.h b/include/openmc/random_ray/random_ray_simulation.h index 9eb88043737..c338003edef 100644 --- a/include/openmc/random_ray/random_ray_simulation.h +++ b/include/openmc/random_ray/random_ray_simulation.h @@ -5,7 +5,6 @@ #include "openmc/random_ray/linear_source_domain.h" #include "openmc/random_ray/ray_bank.h" - namespace openmc { /* @@ -31,7 +30,8 @@ class RandomRaySimulation { int64_t n_hits, double k_eff, double& avg_miss_rate) const; void print_results_random_ray(uint64_t total_geometric_intersections, double avg_miss_rate, int negroups, int64_t n_source_regions, - int64_t n_external_source_regions, uint64_t avg_num_comms, double max_load_imbalance) const; + int64_t n_external_source_regions, uint64_t avg_num_comms, + double max_load_imbalance) const; void transport_sweep(); void transport_sweep_decomp(RayBank& RB); diff --git a/include/openmc/random_ray/ray_bank.h b/include/openmc/random_ray/ray_bank.h index d4a2965028b..9606adde147 100644 --- a/include/openmc/random_ray/ray_bank.h +++ b/include/openmc/random_ray/ray_bank.h @@ -1,10 +1,10 @@ #ifndef OPENMC_RAY_BANK_H #define OPENMC_RAY_BANK_H -#include "openmc/vector.h" +#include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/random_ray.h" #include "openmc/random_ray/source_region.h" -#include "openmc/random_ray/flat_source_domain.h" +#include "openmc/vector.h" #ifdef OPENMC_MPI #include #endif @@ -25,7 +25,7 @@ class RayBank { void communicate_rays(); void communicate_message_metadata(); void update_my_ray_list(FlatSourceDomain* domain); - bool is_any_ray_alive(); + bool is_any_ray_alive(); //---------------------------------------------------------------------------- // Public data members @@ -37,16 +37,18 @@ class RayBank { int total_receiving_rays_; int negroups_; - // Per-rank send buffers for ray data, including geometry state and angular flux + // Per-rank send buffers for ray data, including geometry state and angular + // flux struct RankSendBuffers { vector ray_data; vector angular_flux; vector coord; vector cell_last; - int count = 0; // Number of rays buffered for this rank + int count = 0; // Number of rays buffered for this rank }; std::unordered_map ray_send_buffer_; - int reserved_buffer_size_ = 32; // Initial reserved size for send buffers, can be tuned based on expected ray counts + int reserved_buffer_size_ = 32; // Initial reserved size for send buffers, can + // be tuned based on expected ray counts // Vector that contains the number of rays to be received from each rank vector num_messages_receiving_; diff --git a/include/openmc/random_ray/source_region.h b/include/openmc/random_ray/source_region.h index e0f60081eae..e5efbf1dd0f 100644 --- a/include/openmc/random_ray/source_region.h +++ b/include/openmc/random_ray/source_region.h @@ -370,7 +370,7 @@ class SourceRegion { // Scalar fields OpenMPMutex lock_; - + // Container with all scalar fields of a source region ScalarSourceRegionFields scalars_; diff --git a/include/openmc/timer.h b/include/openmc/timer.h index 03ac4942412..86e7ffc0b6e 100644 --- a/include/openmc/timer.h +++ b/include/openmc/timer.h @@ -40,7 +40,6 @@ extern Timer time_generate_voronoi_centers; extern Timer time_source_region_exchange; extern Timer time_mpi_imbalance; - } // namespace simulation //============================================================================== diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 8f399a0e5ab..619d3446334 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -1,44 +1,49 @@ #include "openmc/random_ray/decomposition_map.h" +#include "openmc/cell.h" +#include "openmc/constants.h" #include "openmc/message_passing.h" -#include "openmc/vector.h" +#include "openmc/mgxs_interface.h" +#include "openmc/random_lcg.h" #include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/random_ray.h" -#include "openmc/random_lcg.h" -#include "openmc/mgxs_interface.h" -#include "openmc/timer.h" -#include "openmc/cell.h" #include "openmc/simulation.h" -#include "openmc/constants.h" +#include "openmc/timer.h" +#include "openmc/vector.h" #include namespace openmc { namespace mpi { - DecompositionMap decomp_map; +DecompositionMap decomp_map; } // Constructor DecompositionMap::DecompositionMap() {} -void DecompositionMap::initialize(){ +void DecompositionMap::initialize() +{ negroups_ = data::mg.num_energy_groups_; estimated_rank_load_fractions_.resize(mpi::n_procs, 0.0); measured_rank_load_fractions_.resize(mpi::n_procs, 0.0); estimated_rank_load_totals_.resize(mpi::n_procs, 0.0); - target_load_ = 1.0/mpi::n_procs; + target_load_ = 1.0 / mpi::n_procs; rank_weights_.resize(mpi::n_procs, 1.0); spatial_box_ = dynamic_cast( dynamic_cast(RandomRay::ray_source_.get())->space()); - double x_length = spatial_box_->upper_right().x - spatial_box_->lower_left().x; - double y_length = spatial_box_->upper_right().y - spatial_box_->lower_left().y; - double z_length = spatial_box_->upper_right().z - spatial_box_->lower_left().z; + double x_length = + spatial_box_->upper_right().x - spatial_box_->lower_left().x; + double y_length = + spatial_box_->upper_right().y - spatial_box_->lower_left().y; + double z_length = + spatial_box_->upper_right().z - spatial_box_->lower_left().z; - max_domain_length_ = sqrt(x_length*x_length + y_length*y_length + z_length*z_length); + max_domain_length_ = + sqrt(x_length * x_length + y_length * y_length + z_length * z_length); - is_linear_ = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; + is_linear_ = RandomRay::source_shape_ != RandomRaySourceShape::FLAT; // Count the number of source regions in the model n_base_sr_ = 0; @@ -54,12 +59,14 @@ void DecompositionMap::initialize(){ volume_base_sr_.resize(n_base_sr_, 0.0); } -void DecompositionMap::generate_rank_centers(){ +void DecompositionMap::generate_rank_centers() +{ // Calculate grid points that are used for Voronoi cells int grid_points_total = grid_points_per_rank_ * mpi::n_procs; if (mpi::master) - printf("Calculating %d grid points for Voronoi tessellation...\n", grid_points_total); + printf("Calculating %d grid points for Voronoi tessellation...\n", + grid_points_total); calculate_grid_points(grid_points_total); // Initialize points with random positions @@ -67,27 +74,27 @@ void DecompositionMap::generate_rank_centers(){ double err = 1.0; double precision = 1e-3; // corresponding to 0.001 cm position change - int it = 0; + int it = 0; int max_iterations = 100; // Lloyd's algorithm to move Voronoi centers to centroids of their cells // https://en.wikipedia.org/wiki/Lloyd%27s_algorithm - while (err > precision && it < max_iterations) - { + while (err > precision && it < max_iterations) { // Reset error to determine maximum movement below err = 0.0; - vector position_sum_per_rank(mpi::n_procs, Position(0,0,0)); + vector position_sum_per_rank(mpi::n_procs, Position(0, 0, 0)); vector num_points_per_rank(mpi::n_procs, 0); - // Compute Voronoi cells by summing up all position values of mesh grid points - // that are closest to a Voronoi center + // Compute Voronoi cells by summing up all position values of mesh grid + // points that are closest to a Voronoi center calculate_voronoi(position_sum_per_rank, num_points_per_rank); for (int rank = 0; rank < mpi::n_procs; rank++) { // Calculate centroid of the cell - Position centroid = calculate_centroids(position_sum_per_rank[rank], num_points_per_rank[rank], rank); + Position centroid = calculate_centroids( + position_sum_per_rank[rank], num_points_per_rank[rank], rank); // Calculate movement for convergence check double movement = (centroid - rank_centers_[rank]).norm(); @@ -106,250 +113,283 @@ void DecompositionMap::generate_rank_centers(){ if (mpi::master) { if (it == max_iterations) { - warning("Lloyd's algorithm did not converge within the maximum number of iterations."); + warning("Lloyd's algorithm did not converge within the maximum number of " + "iterations."); } else { printf("Lloyd's algorithm converged in %d iterations.\n", it); } } - } // Calculate grid points needed for calculating Voronoi cells -void DecompositionMap::calculate_grid_points(int grid_points_total){ - - // Calculate length along each dimension - vector domain_length(3); - domain_length[0] = spatial_box_->upper_right().x - spatial_box_->lower_left().x; - domain_length[1] = spatial_box_->upper_right().y - spatial_box_->lower_left().y; - domain_length[2] = spatial_box_->upper_right().z - spatial_box_->lower_left().z; - - double volume = domain_length[0] * domain_length[1] * domain_length[2]; - - // For each dimension, determine grid points along that direction based on aspect ratio: - // domain_length / volume^(1/3) = grid_points_dimension / grid_points_total^(1/3). - // Check if any dimension is so distorted that it would only receive minimum of 1 grid - // point and flag that direction to correct total number of grid points. - int excluded_dimension = -1; - vector grid_points_per_dimension(3); - for (int i = 0; i < 3; i++){ - double grid_points_estimate = ((domain_length[i] / cbrt(volume)) * cbrt(grid_points_total)); - - if (grid_points_estimate > 1){ - grid_points_per_dimension[i] = round(grid_points_estimate); - } else { - excluded_dimension = i; - grid_points_per_dimension[i] = 1; - } +void DecompositionMap::calculate_grid_points(int grid_points_total) +{ + + // Calculate length along each dimension + vector domain_length(3); + domain_length[0] = + spatial_box_->upper_right().x - spatial_box_->lower_left().x; + domain_length[1] = + spatial_box_->upper_right().y - spatial_box_->lower_left().y; + domain_length[2] = + spatial_box_->upper_right().z - spatial_box_->lower_left().z; + + double volume = domain_length[0] * domain_length[1] * domain_length[2]; + + // For each dimension, determine grid points along that direction based on + // aspect ratio: domain_length / volume^(1/3) = grid_points_dimension / + // grid_points_total^(1/3). Check if any dimension is so distorted that it + // would only receive minimum of 1 grid point and flag that direction to + // correct total number of grid points. + int excluded_dimension = -1; + vector grid_points_per_dimension(3); + for (int i = 0; i < 3; i++) { + double grid_points_estimate = + ((domain_length[i] / cbrt(volume)) * cbrt(grid_points_total)); + + if (grid_points_estimate > 1) { + grid_points_per_dimension[i] = round(grid_points_estimate); + } else { + excluded_dimension = i; + grid_points_per_dimension[i] = 1; } + } - // If problem is 2D, exclude z direction - if (RandomRay::geom_dim_ == RandomRayGeomDim::TWO_DIM){ - excluded_dimension = 2; - grid_points_per_dimension[2] = 1; - } + // If problem is 2D, exclude z direction + if (RandomRay::geom_dim_ == RandomRayGeomDim::TWO_DIM) { + excluded_dimension = 2; + grid_points_per_dimension[2] = 1; + } - // If one dimension is excluded, recalculate grid points in other two dimensions based on area. - if (excluded_dimension != -1){ - double area = 1.0; - - for (int i = 0; i < 3; i++){ - if (i == excluded_dimension) continue; - area *= domain_length[i]; - } + // If one dimension is excluded, recalculate grid points in other two + // dimensions based on area. + if (excluded_dimension != -1) { + double area = 1.0; - for (int i = 0; i < 3; i++){ - if (i == excluded_dimension) continue; - grid_points_per_dimension[i] = round((domain_length[i] / sqrt(area)) * sqrt(grid_points_total)); - } - } - - // Adjust grid points in each dimension to match actual total number of grid points to the number of grid points requested - double new_total = grid_points_per_dimension[0] * grid_points_per_dimension[1] * grid_points_per_dimension[2]; - double adjustment; - if (excluded_dimension != -1) { - // When one dimension is excluded, use square root for the other two dimensions - adjustment = sqrt(grid_points_total / new_total); - } else { - // When all dimensions are used, use cubic root - adjustment = cbrt(grid_points_total / new_total); + for (int i = 0; i < 3; i++) { + if (i == excluded_dimension) + continue; + area *= domain_length[i]; } - // Multiply adjustment factor - for (int i = 0; i < 3; i++){ - if (i == excluded_dimension) continue; - grid_points_per_dimension[i] = round(grid_points_per_dimension[i] * adjustment); + for (int i = 0; i < 3; i++) { + if (i == excluded_dimension) + continue; + grid_points_per_dimension[i] = + round((domain_length[i] / sqrt(area)) * sqrt(grid_points_total)); } - - // Calculate spacing between grid points in each dimension - vector delta_value(3, 0.0); + } - for (int i = 0; i < 3; i++){ - if (grid_points_per_dimension[i] > 1){ - delta_value[i] = (domain_length[i] - 2*TINY_BIT) / (grid_points_per_dimension[i] - 1); - } + // Adjust grid points in each dimension to match actual total number of grid + // points to the number of grid points requested + double new_total = grid_points_per_dimension[0] * + grid_points_per_dimension[1] * + grid_points_per_dimension[2]; + double adjustment; + if (excluded_dimension != -1) { + // When one dimension is excluded, use square root for the other two + // dimensions + adjustment = sqrt(grid_points_total / new_total); + } else { + // When all dimensions are used, use cubic root + adjustment = cbrt(grid_points_total / new_total); + } + + // Multiply adjustment factor + for (int i = 0; i < 3; i++) { + if (i == excluded_dimension) + continue; + grid_points_per_dimension[i] = + round(grid_points_per_dimension[i] * adjustment); + } + + // Calculate spacing between grid points in each dimension + vector delta_value(3, 0.0); + + for (int i = 0; i < 3; i++) { + if (grid_points_per_dimension[i] > 1) { + delta_value[i] = + (domain_length[i] - 2 * TINY_BIT) / (grid_points_per_dimension[i] - 1); } + } - // Initialize point at center of domain (in case of only 1 grid point in a dimension) - double x = spatial_box_->lower_left().x + domain_length[0] * 0.5; - double y = spatial_box_->lower_left().y + domain_length[1] * 0.5; - double z = spatial_box_->lower_left().z + domain_length[2] * 0.5; + // Initialize point at center of domain (in case of only 1 grid point in a + // dimension) + double x = spatial_box_->lower_left().x + domain_length[0] * 0.5; + double y = spatial_box_->lower_left().y + domain_length[1] * 0.5; + double z = spatial_box_->lower_left().z + domain_length[2] * 0.5; - // Generate all grid points - for (int i = 0; i < grid_points_per_dimension[0]; i++) { - if (grid_points_per_dimension[0] > 1) { - x = spatial_box_->lower_left().x + TINY_BIT + i * delta_value[0]; - } - for (int j = 0; j < grid_points_per_dimension[1]; j++) { - if (grid_points_per_dimension[1] > 1) { - y = spatial_box_->lower_left().y + TINY_BIT + j * delta_value[1]; - } - for (int k = 0; k < grid_points_per_dimension[2]; k++) { - if (grid_points_per_dimension[2] > 1) { - z = spatial_box_->lower_left().z + TINY_BIT + k * delta_value[2]; - } - // Add grid point - grid_points_.push_back({x, y, z}); - } + // Generate all grid points + for (int i = 0; i < grid_points_per_dimension[0]; i++) { + if (grid_points_per_dimension[0] > 1) { + x = spatial_box_->lower_left().x + TINY_BIT + i * delta_value[0]; + } + for (int j = 0; j < grid_points_per_dimension[1]; j++) { + if (grid_points_per_dimension[1] > 1) { + y = spatial_box_->lower_left().y + TINY_BIT + j * delta_value[1]; + } + for (int k = 0; k < grid_points_per_dimension[2]; k++) { + if (grid_points_per_dimension[2] > 1) { + z = spatial_box_->lower_left().z + TINY_BIT + k * delta_value[2]; } + // Add grid point + grid_points_.push_back({x, y, z}); + } } + } - // Check if mesh grid points are inside spatial domain, which can be different from a box. - // If not, erase them. - for (int i = grid_points_.size() - 1; i >= 0; i--){ - Position xi = grid_points_[i]; + // Check if mesh grid points are inside spatial domain, which can be different + // from a box. If not, erase them. + for (int i = grid_points_.size() - 1; i >= 0; i--) { + Position xi = grid_points_[i]; - bool is_inside_domain = RandomRay::ray_source_->satisfies_spatial_constraints(xi); + bool is_inside_domain = + RandomRay::ray_source_->satisfies_spatial_constraints(xi); - if (!is_inside_domain){ - grid_points_.erase(grid_points_.begin() + i); - } + if (!is_inside_domain) { + grid_points_.erase(grid_points_.begin() + i); } + } - if (mpi::master && grid_points_.size() < grid_points_total) { - warning(fmt::format( - "Spatial constraints reduced grid points for Voronoi tesselation from {} to {}.", - grid_points_total, grid_points_.size())); - } + if (mpi::master && grid_points_.size() < grid_points_total) { + warning(fmt::format("Spatial constraints reduced grid points for Voronoi " + "tesselation from {} to {}.", + grid_points_total, grid_points_.size())); + } } -// Places random points in the spatial domain. +// Places random points in the spatial domain. // Each point corresponds to the initial center of a rank. -void DecompositionMap::initialize_voronoi_centers(){ +void DecompositionMap::initialize_voronoi_centers() +{ rank_centers_.resize(mpi::n_procs); uint64_t seed = openmc_get_seed(); int rank_cnt = 0; // Sample random positions to start with - while(rank_cnt < mpi::n_procs){ + while (rank_cnt < mpi::n_procs) { double x = prn(&seed); double y = prn(&seed); double z = 0.0; - if (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM){ + if (RandomRay::geom_dim_ == RandomRayGeomDim::THREE_DIM) { z = prn(&seed); - } else{ + } else { z = 0.5; // Mid-plane in z direction } Position xi {x, y, z}; - // Make a small shift in position to avoid geometry floating point issues at boundaries + // Make a small shift in position to avoid geometry floating point issues at + // boundaries Position shift {FP_COINCIDENT, FP_COINCIDENT, FP_COINCIDENT}; xi = (spatial_box_->lower_left() + shift) + - xi * ((spatial_box_->upper_right() - shift) - (spatial_box_->lower_left() + shift)); + xi * ((spatial_box_->upper_right() - shift) - + (spatial_box_->lower_left() + shift)); - bool is_inside_domain = RandomRay::ray_source_->satisfies_spatial_constraints(xi) ; + bool is_inside_domain = + RandomRay::ray_source_->satisfies_spatial_constraints(xi); - if (is_inside_domain){ + if (is_inside_domain) { rank_centers_[rank_cnt] = xi; rank_cnt++; } - } } // Determine the distance of each mesh grid point to all rank centers. -// Sum up the positions of all mesh grid points that are closest to a given rank center -// for computation of centroid later. Record number of grid points per rank center. -void DecompositionMap::calculate_voronoi(vector& position_sum_per_rank, - vector& num_points_per_rank){ - - // Assign each point to the closest rank center - #pragma omp parallel for schedule(static) - for (int p = 0; p < grid_points_.size(); p++) { - Position point = grid_points_[p]; - int closest_rank = C_NONE; - double min_distance = INFTY; - - // Find closest rank center - for (int rank = 0; rank < mpi::n_procs; rank++) { - double dist = (point - rank_centers_[rank]).norm(); - // Power Voronoi diagram uses squared distances - dist = dist * dist - rank_weights_[rank]; - - if (dist < min_distance) { - min_distance = dist; - closest_rank = rank; - } - } - - if (mpi::master && closest_rank == C_NONE) { - fatal_error("Could not find closest rank for Voronoi cell point " + std::to_string(p) + "."); - } - - // Accumulate point coordinates for the closest rank - #pragma omp atomic - position_sum_per_rank[closest_rank].x += point.x; - #pragma omp atomic - position_sum_per_rank[closest_rank].y += point.y; - #pragma omp atomic - position_sum_per_rank[closest_rank].z += point.z; - - // Record number of mesh grid points for closest rank - #pragma omp atomic - num_points_per_rank[closest_rank]++; - } +// Sum up the positions of all mesh grid points that are closest to a given rank +// center for computation of centroid later. Record number of grid points per +// rank center. +void DecompositionMap::calculate_voronoi( + vector& position_sum_per_rank, vector& num_points_per_rank) +{ + +// Assign each point to the closest rank center +#pragma omp parallel for schedule(static) + for (int p = 0; p < grid_points_.size(); p++) { + Position point = grid_points_[p]; + int closest_rank = C_NONE; + double min_distance = INFTY; + + // Find closest rank center + for (int rank = 0; rank < mpi::n_procs; rank++) { + double dist = (point - rank_centers_[rank]).norm(); + // Power Voronoi diagram uses squared distances + dist = dist * dist - rank_weights_[rank]; + + if (dist < min_distance) { + min_distance = dist; + closest_rank = rank; + } + } + if (mpi::master && closest_rank == C_NONE) { + fatal_error("Could not find closest rank for Voronoi cell point " + + std::to_string(p) + "."); + } + +// Accumulate point coordinates for the closest rank +#pragma omp atomic + position_sum_per_rank[closest_rank].x += point.x; +#pragma omp atomic + position_sum_per_rank[closest_rank].y += point.y; +#pragma omp atomic + position_sum_per_rank[closest_rank].z += point.z; + +// Record number of mesh grid points for closest rank +#pragma omp atomic + num_points_per_rank[closest_rank]++; } +} -Position DecompositionMap::calculate_centroids(const Position position_sum, const int num_points, int rank){ +Position DecompositionMap::calculate_centroids( + const Position position_sum, const int num_points, int rank) +{ // check if any points have been recorded in rank - if (num_points == 0){ - fatal_error("Rank " + std::to_string(rank) + " has no Voronoi cell points. This indicates that the number of grid points for the Voronoi tesselation is too coarse. Requires source code modificaiton to fix."); + if (num_points == 0) { + fatal_error("Rank " + std::to_string(rank) + + " has no Voronoi cell points. This indicates that the number " + "of grid points for the Voronoi tesselation is too coarse. " + "Requires source code modificaiton to fix."); } - - Position centroid = position_sum; + + Position centroid = position_sum; // Divide by number of points double n = static_cast(num_points); centroid.x /= n; centroid.y /= n; centroid.z /= n; - + return centroid; } -bool DecompositionMap::any_discovered_source_regions(ParallelMap& - discovered_source_regions){ +bool DecompositionMap::any_discovered_source_regions( + ParallelMap& + discovered_source_regions) +{ simulation::time_decomposition_handling.start(); int flag = 0; - if(discovered_source_regions.begin() != discovered_source_regions.end()) { + if (discovered_source_regions.begin() != discovered_source_regions.end()) { flag = 1; } - + MPI_Allreduce(MPI_IN_PLACE, &flag, 1, MPI_INT, MPI_MAX, mpi::intracomm); return flag > 0; - + simulation::time_decomposition_handling.start(); } -void DecompositionMap::exchange_sr_info(ParallelMap& - discovered_source_regions){ +void DecompositionMap::exchange_sr_info( + ParallelMap& + discovered_source_regions) +{ // Communicate maps for (int rank = 0; rank < mpi::n_procs; rank++) { @@ -357,22 +397,23 @@ void DecompositionMap::exchange_sr_info(ParallelMap 0.0) { bcast_size++; } } } - MPI_Bcast(&bcast_size, 1, MPI_UINT64_T, rank, mpi::intracomm); + MPI_Bcast(&bcast_size, 1, MPI_UINT64_T, rank, mpi::intracomm); if (bcast_size > 0) { vector local_base_ids(bcast_size); vector local_mesh_bins(bcast_size); - - if(rank == mpi::rank) { + + if (rank == mpi::rank) { // fill in vectors to be sent int i = 0; for (const auto& pair : discovered_source_regions) { @@ -386,50 +427,60 @@ void DecompositionMap::exchange_sr_info(ParallelMap& - discovered_source_regions){ - +int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, + ParallelMap& + discovered_source_regions) +{ + // Check if source region key is in subdomain map auto it = subdomain_map_.find(sr_key); - if (it != subdomain_map_.end()){ + if (it != subdomain_map_.end()) { return it->second; - } + } // Check if already recorded in newly discovered source regions discovered_source_regions.lock(sr_key); bool sr_key_discovered = discovered_source_regions.contains(sr_key); discovered_source_regions.unlock(sr_key); - if (sr_key_discovered){ + if (sr_key_discovered) { return mpi::rank; } - // If not found in either map, check which rank owns source + // If not found in either map, check which rank owns source // region beased on location int closest_rank = find_closest_rank(r, true); return closest_rank; } -int DecompositionMap::find_closest_rank(Position r, bool test_all_ranks) { +int DecompositionMap::find_closest_rank(Position r, bool test_all_ranks) +{ int closest_rank = C_NONE; double min_distance = INFTY; vector test_ranks; - if (test_all_ranks){ + if (test_all_ranks) { test_ranks.resize(mpi::n_procs); - std::iota(test_ranks.begin(), test_ranks.end(), 0); // fill with 0, 1, ..., n_procs-1 + std::iota(test_ranks.begin(), test_ranks.end(), + 0); // fill with 0, 1, ..., n_procs-1 } else { // convert unordered set of neighboring ranks to vector and add self rank - test_ranks = vector(mpi::decomp_map.my_neighbors_.begin(), mpi::decomp_map.my_neighbors_.end()); + test_ranks = vector(mpi::decomp_map.my_neighbors_.begin(), + mpi::decomp_map.my_neighbors_.end()); test_ranks.push_back(mpi::rank); } - + // Find closest rank center for (int rank : test_ranks) { - double dist = (r - rank_centers_[rank]).norm(); - // Distance function corresponding to weighted power Voronoi diagram - dist = dist * dist - rank_weights_[rank]; - if (dist < min_distance) { - min_distance = dist; - closest_rank = rank; - } + double dist = (r - rank_centers_[rank]).norm(); + // Distance function corresponding to weighted power Voronoi diagram + dist = dist * dist - rank_weights_[rank]; + if (dist < min_distance) { + min_distance = dist; + closest_rank = rank; + } } if (mpi::master && closest_rank == C_NONE) { - fatal_error("Could not find closest rank for new source region at position (" - + std::to_string(r.x) + ", " + std::to_string(r.y) + ", " + std::to_string(r.z) + ")."); + fatal_error( + "Could not find closest rank for new source region at position (" + + std::to_string(r.x) + ", " + std::to_string(r.y) + ", " + + std::to_string(r.z) + ")."); } return closest_rank; } -void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain, double batch_transport_time){ +void DecompositionMap::calculate_rank_load( + FlatSourceDomain* domain, double batch_transport_time) +{ - // Reset local volumes of base source regions, which might change when source regions change rank ownership + // Reset local volumes of base source regions, which might change when source + // regions change rank ownership std::fill(volume_base_sr_.begin(), volume_base_sr_.end(), 0.0); // Add volumes of newly discovered source regions vector mesh_bins_per_base_sr_local(n_base_sr_, 0); - for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { + for (const auto& [sr_key, sr] : domain->discovered_source_regions_) { volume_base_sr_[sr_key.base_source_region_id] += sr.scalars_.volume_; } @@ -623,53 +706,70 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain, double batc volume_base_sr_[base_sr] += domain->source_regions_.volume(sr); } - // Calculate ray tracing cost per base source region - #pragma omp parallel for - for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { - if (volume_base_sr_[bsr] > 0.0) { - ray_tracing_cost_[bsr] = (C2_ * static_cast(num_base_source_region_RT_[bsr]) + C3_ * static_cast(num_mesh_bin_RT_[bsr]))/volume_base_sr_[bsr]; - } else { - ray_tracing_cost_[bsr] = 0.0; - } +// Calculate ray tracing cost per base source region +#pragma omp parallel for + for (uint64_t bsr = 0; bsr < n_base_sr_; bsr++) { + if (volume_base_sr_[bsr] > 0.0) { + ray_tracing_cost_[bsr] = + (C2_ * static_cast(num_base_source_region_RT_[bsr]) + + C3_ * static_cast(num_mesh_bin_RT_[bsr])) / + volume_base_sr_[bsr]; + } else { + ray_tracing_cost_[bsr] = 0.0; } - + } + // Accumulate load of known source regions double local_estimated_load = 0.0; - #pragma omp parallel for reduction(+: local_estimated_load) - for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { - SourceRegionKey sr_key = domain->source_regions_.key(sr); - uint64_t base_sr = sr_key.base_source_region_id; +#pragma omp parallel for reduction(+ : local_estimated_load) + for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + SourceRegionKey sr_key = domain->source_regions_.key(sr); + uint64_t base_sr = sr_key.base_source_region_id; - // Calculate volume of unique source region to weight volume-dependent ray tracing cost - double volume_sr = domain->source_regions_.volume_t(sr) + domain->source_regions_.volume(sr); + // Calculate volume of unique source region to weight volume-dependent ray + // tracing cost + double volume_sr = + domain->source_regions_.volume_t(sr) + domain->source_regions_.volume(sr); - // Calculate load of source region - double load_sr = C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; - - // Accumulate to local estimated load - local_estimated_load += load_sr; - } + // Calculate load of source region + double load_sr = + C1_ * (domain->source_regions_.n_hits(sr) / simulation::current_batch) * + negroups_ + + volume_sr * ray_tracing_cost_[base_sr]; + + // Accumulate to local estimated load + local_estimated_load += load_sr; + } // Accumulate load of newly discovered source regions - for (const auto & [sr_key, sr] : domain->discovered_source_regions_) { + for (const auto& [sr_key, sr] : domain->discovered_source_regions_) { uint64_t base_sr = sr_key.base_source_region_id; double volume_sr = sr.scalars_.volume_; - double load_sr = C1_ * (sr.scalars_.n_hits_/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[base_sr]; + double load_sr = + C1_ * (sr.scalars_.n_hits_ / simulation::current_batch) * negroups_ + + volume_sr * ray_tracing_cost_[base_sr]; local_estimated_load += load_sr; } // Communicate estimated load across ranks - MPI_Allgather(&local_estimated_load, 1, MPI_DOUBLE, estimated_rank_load_totals_.data(), 1, MPI_DOUBLE, mpi::intracomm); - estimated_load_sum_ = std::accumulate(estimated_rank_load_totals_.begin(), estimated_rank_load_totals_.end(), 0.0); + MPI_Allgather(&local_estimated_load, 1, MPI_DOUBLE, + estimated_rank_load_totals_.data(), 1, MPI_DOUBLE, mpi::intracomm); + estimated_load_sum_ = std::accumulate(estimated_rank_load_totals_.begin(), + estimated_rank_load_totals_.end(), 0.0); // Communicate measured load across ranks - MPI_Allgather(&batch_transport_time, 1, MPI_DOUBLE, measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, mpi::intracomm); - double measured_load_sum = std::accumulate(measured_rank_load_fractions_.begin(), measured_rank_load_fractions_.end(), 0.0); + MPI_Allgather(&batch_transport_time, 1, MPI_DOUBLE, + measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, mpi::intracomm); + double measured_load_sum = + std::accumulate(measured_rank_load_fractions_.begin(), + measured_rank_load_fractions_.end(), 0.0); // Calculate fractions for (int rank = 0; rank < mpi::n_procs; rank++) { - estimated_rank_load_fractions_[rank] = estimated_rank_load_totals_[rank] / estimated_load_sum_; - measured_rank_load_fractions_[rank] = measured_rank_load_fractions_[rank] / measured_load_sum; + estimated_rank_load_fractions_[rank] = + estimated_rank_load_totals_[rank] / estimated_load_sum_; + measured_rank_load_fractions_[rank] = + measured_rank_load_fractions_[rank] / measured_load_sum; } // Reset ray trace counters @@ -677,7 +777,8 @@ void DecompositionMap::calculate_rank_load(FlatSourceDomain* domain, double batc fill(num_mesh_bin_RT_.begin(), num_mesh_bin_RT_.end(), 0); } -void DecompositionMap::balance_load(FlatSourceDomain* domain){ +void DecompositionMap::balance_load(FlatSourceDomain* domain) +{ // Optimization parameters int max_iterations = 200; @@ -685,8 +786,11 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ double adaptation_factor = 1; double min_adaptation_factor = 0.01; double max_adaptation_factor = 2; - double avg_rank_distance = max_domain_length_/cbrt(mpi::n_procs); // rough estimate of average distance between ranks - double weight_scale = avg_rank_distance * avg_rank_distance * optimization_history_factor_; + double avg_rank_distance = + max_domain_length_ / + cbrt(mpi::n_procs); // rough estimate of average distance between ranks + double weight_scale = + avg_rank_distance * avg_rank_distance * optimization_history_factor_; double beta = 0.6; // momentum damping bool check_all_ranks = true; @@ -697,15 +801,18 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // Combine estimated load with measured load ratios for (int rank = 0; rank < mpi::n_procs; rank++) { load_ratio[rank] = calculate_load_ratio(rank); - combined_rank_load[rank] = load_ratio[rank] * estimated_rank_load_totals_[rank]; + combined_rank_load[rank] = + load_ratio[rank] * estimated_rank_load_totals_[rank]; } - double combined_load_sum = std::accumulate(combined_rank_load.begin(), combined_rank_load.end(), 0.0); + double combined_load_sum = + std::accumulate(combined_rank_load.begin(), combined_rank_load.end(), 0.0); for (int rank = 0; rank < mpi::n_procs; rank++) { - combined_rank_load[rank] = (combined_rank_load[rank]/combined_load_sum); + combined_rank_load[rank] = (combined_rank_load[rank] / combined_load_sum); } - double max_load = *std::max_element(combined_rank_load.begin(), combined_rank_load.end()); + double max_load = + *std::max_element(combined_rank_load.begin(), combined_rank_load.end()); double max_imbalance = (max_load - target_load_) / target_load_; double prev_imbalance = max_imbalance; @@ -716,25 +823,34 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ weight_history.push_back(rank_weights_); // Change weights to equalize load based on combined load estimates - while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations){ + while (max_imbalance > imbalance_tolerance_ && it_outer < max_iterations) { - it_outer ++; + it_outer++; for (int rank = 0; rank < mpi::n_procs; rank++) { - double corr = ((combined_rank_load[rank] - target_load_) / target_load_) * weight_scale; - weight_change[rank] = beta * weight_change[rank] + (1.0 - beta) * corr; // keep some inertia from previous changes to prevent oscillations - double damping = std::clamp(max_imbalance / prev_imbalance, 0.1, 1.0); // dampening factor based on whether we are getting closer to convergence or not, prevents big jumps, if too big a change, more dampening is applied + double corr = ((combined_rank_load[rank] - target_load_) / target_load_) * + weight_scale; + weight_change[rank] = + beta * weight_change[rank] + + (1.0 - beta) * corr; // keep some inertia from previous changes to + // prevent oscillations + double damping = std::clamp(max_imbalance / prev_imbalance, 0.1, + 1.0); // dampening factor based on whether we are getting closer to + // convergence or not, prevents big jumps, if too big a change, + // more dampening is applied rank_weights_[rank] -= adaptation_factor * damping * weight_change[rank]; } - if (simulation::current_batch > 1){ - // Check distances to all ranks only in first batch, otherwise only recorded neighbors + if (simulation::current_batch > 1) { + // Check distances to all ranks only in first batch, otherwise only + // recorded neighbors check_all_ranks = false; } // Calculate new load after weight update update_load(domain, check_all_ranks, combined_rank_load, load_ratio); - double max_load = *std::max_element(combined_rank_load.begin(), combined_rank_load.end()); + double max_load = + *std::max_element(combined_rank_load.begin(), combined_rank_load.end()); max_imbalance = (max_load - target_load_) / target_load_; // Store imbalance history @@ -743,30 +859,34 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ // Adaptive factor if (max_imbalance > prev_imbalance) - adaptation_factor = std::max(adaptation_factor * 0.5, min_adaptation_factor); + adaptation_factor = + std::max(adaptation_factor * 0.5, min_adaptation_factor); else - adaptation_factor = std::min(adaptation_factor * 1.05, max_adaptation_factor); + adaptation_factor = + std::min(adaptation_factor * 1.05, max_adaptation_factor); prev_imbalance = max_imbalance; } - // Check convergence and adjust history optimization factor depending on failure mode to enable better convergence in the following batch - if (it_outer == max_iterations){ - if(mpi::master) { - warning("MPI load balancing has not converged after " - + std::to_string(max_iterations) + " iterations."); + // Check convergence and adjust history optimization factor depending on + // failure mode to enable better convergence in the following batch + if (it_outer == max_iterations) { + if (mpi::master) { + warning("MPI load balancing has not converged after " + + std::to_string(max_iterations) + " iterations."); } // Check if oscillating or simply slow convergence int direction_changes = 0; - + for (int i = 1; i < imbalance_history.size(); i++) { // Calculate change - double change = imbalance_history[i] - imbalance_history[i-1]; - + double change = imbalance_history[i] - imbalance_history[i - 1]; + // Count direction changes if (i > 1) { - double prev_change = imbalance_history[i-1] - imbalance_history[i-2]; + double prev_change = + imbalance_history[i - 1] - imbalance_history[i - 2]; if (change * prev_change < 0) { direction_changes++; } @@ -774,62 +894,79 @@ void DecompositionMap::balance_load(FlatSourceDomain* domain){ } // Check for oscillations - double oscillation_ratio = (double)direction_changes / (imbalance_history.size() - 2); - + double oscillation_ratio = + (double)direction_changes / (imbalance_history.size() - 2); + if (oscillation_ratio > 0.4) { // decrease weight for next batch if oscillating - optimization_history_factor_ = std::max(optimization_history_factor_ * 0.5, min_adaptation_factor); + optimization_history_factor_ = + std::max(optimization_history_factor_ * 0.5, min_adaptation_factor); } else { // increase weight for faster convergence if too slow - optimization_history_factor_ = std::min(optimization_history_factor_ * 1.2, max_adaptation_factor); + optimization_history_factor_ = + std::min(optimization_history_factor_ * 1.2, max_adaptation_factor); } // Check which iteration had the best imbalance and revert to those weights - auto min_it = std::min_element(imbalance_history.begin(), imbalance_history.end()); + auto min_it = + std::min_element(imbalance_history.begin(), imbalance_history.end()); int best_index = std::distance(imbalance_history.begin(), min_it); double best_imbalance = *min_it; rank_weights_ = weight_history[best_index]; - if (mpi::master){ - printf("Best imbalance during optimization was %.2f%% at iteration %d. \n", - best_imbalance*100.0, best_index); + if (mpi::master) { + printf( + "Best imbalance during optimization was %.2f%% at iteration %d. \n", + best_imbalance * 100.0, best_index); } - if (best_index == 0){ - // if no improvement at all, just keep current decomposition and return without redistributing + if (best_index == 0) { + // if no improvement at all, just keep current decomposition and return + // without redistributing return; } } else { optimization_history_factor_ = 1.0; // reset history factor if converged - if (mpi::master){ - printf("MPI load balancing converged after %d iterations. Max. imbalance: %.2f%% \n", it_outer, max_imbalance*100.0); + if (mpi::master) { + printf("MPI load balancing converged after %d iterations. Max. " + "imbalance: %.2f%% \n", + it_outer, max_imbalance * 100.0); } } - // Redistribute source regions according to new weights determined in optimization + // Redistribute source regions according to new weights determined in + // optimization redistribute_source_regions(domain); } -void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_ranks, vector& combined_rank_load, vector& load_ratio){ +void DecompositionMap::update_load(FlatSourceDomain* domain, + bool check_all_ranks, vector& combined_rank_load, + vector& load_ratio) +{ vector load(mpi::n_procs, 0); - // Add up source region hits to respective rank depending of position of centroid of each source region - #pragma omp parallel +// Add up source region hits to respective rank depending of position of +// centroid of each source region +#pragma omp parallel { // number of hits per thread vector thread_load(mpi::n_procs, 0); - #pragma omp for - for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { - Position centroid = domain->source_regions_.centroid(sr); - int owner = find_closest_rank(centroid, check_all_ranks); - double volume_sr = domain->source_regions_.volume_t(sr); - thread_load[owner] += load_ratio[owner] * (C1_ * (domain->source_regions_.n_hits(sr)/simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]); - } +#pragma omp for + for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { + Position centroid = domain->source_regions_.centroid(sr); + int owner = find_closest_rank(centroid, check_all_ranks); + double volume_sr = domain->source_regions_.volume_t(sr); + thread_load[owner] += + load_ratio[owner] * + (C1_ * (domain->source_regions_.n_hits(sr) / simulation::current_batch) * + negroups_ + volume_sr * + ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]); + } - // Combine results from different threads - #pragma omp critical (combining_loads) +// Combine results from different threads +#pragma omp critical(combining_loads) { for (int i = 0; i < mpi::n_procs; i++) { load[i] += thread_load[i]; @@ -838,16 +975,18 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, bool check_all_rank } // Communicate new load estimates across ranks - MPI_Allreduce(MPI_IN_PLACE, load.data(), mpi::n_procs, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + MPI_Allreduce(MPI_IN_PLACE, load.data(), mpi::n_procs, MPI_DOUBLE, MPI_SUM, + mpi::intracomm); double load_sum = std::accumulate(load.begin(), load.end(), 0.0); // Update new combined rank load fractions - for (int rank = 0; rank < mpi::n_procs; rank++){ - combined_rank_load[rank] = load[rank]/load_sum; + for (int rank = 0; rank < mpi::n_procs; rank++) { + combined_rank_load[rank] = load[rank] / load_sum; } } -void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { +void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) +{ // Map of source regions to be sent to other ranks std::unordered_map> sr_send_list; @@ -857,22 +996,25 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { // Local source region container that contains updated list SourceRegionContainer source_regions_new(negroups_, is_linear_); - // Each rank identifies source regions that need to be transferred to new owner and updates subdomain map accordingly + // Each rank identifies source regions that need to be transferred to new + // owner and updates subdomain map accordingly for (int64_t sr = 0; sr < domain->n_source_regions(); sr++) { Position centroid = domain->source_regions_.centroid(sr); int owner = find_closest_rank(centroid, true); // If owner changed, write source region to list of outbound source regions - if (owner != mpi::rank){ + if (owner != mpi::rank) { sr_send_list[owner].push_back(sr); } // If owner did not change, add source region to new local container else { - source_regions_new.push_back(domain->source_regions_.get_source_region_handle(sr)); + source_regions_new.push_back( + domain->source_regions_.get_source_region_handle(sr)); } } - // Each rank informs other ranks about ownership changes to update subdomain map + // Each rank informs other ranks about ownership changes to update subdomain + // map for (int rank = 0; rank < mpi::n_procs; rank++) { // Send size @@ -888,15 +1030,16 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { vector rank_ids(bcast_size); vector base_ids(bcast_size); vector mesh_bins(bcast_size); - + // Current owner prepares communication and fills vectors to be sent - if(rank == mpi::rank) { + if (rank == mpi::rank) { int i = 0; for (auto& pair : sr_send_list) { - int receiver = pair.first; // new owner - vector& sr_indices = pair.second; // vector of source region indices - + int receiver = pair.first; // new owner + vector& sr_indices = + pair.second; // vector of source region indices + // Iterate through all source regions for this key for (int sr_idx : sr_indices) { SourceRegionKey sr_key = domain->source_regions_.key(sr_idx); @@ -911,7 +1054,8 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { // Broadcast source region data MPI_Bcast(rank_ids.data(), bcast_size, MPI_INT, rank, mpi::intracomm); MPI_Bcast(base_ids.data(), bcast_size, MPI_INT64_T, rank, mpi::intracomm); - MPI_Bcast(mesh_bins.data(), bcast_size, MPI_INT64_T, rank, mpi::intracomm); + MPI_Bcast( + mesh_bins.data(), bcast_size, MPI_INT64_T, rank, mpi::intracomm); // Every rank updates subdomain map for (int j = 0; j < bcast_size; j++) { @@ -923,8 +1067,9 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { // Update subdomain_map with new owner subdomain_map_[sr_key] = rank_new; - // If calling rank is new owner, increase count of source regions coming from sending rank (current broadcaster) - if (mpi::rank == rank_new){ + // If calling rank is new owner, increase count of source regions coming + // from sending rank (current broadcaster) + if (mpi::rank == rank_new) { num_sr_receiving[rank] += 1; } } @@ -936,13 +1081,14 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { // Send source region data to new owner for (auto& pair : sr_send_list) { - int receiver = pair.first; // destination rank - vector& sr_indices = pair.second; // vector of source region indices + int receiver = pair.first; // destination rank + vector& sr_indices = pair.second; // vector of source region indices // Iterate through all source regions for this key for (int sr_idx : sr_indices) { SourceRegionKey sr_key = domain->source_regions_.key(sr_idx); - SourceRegionHandle srh = domain->source_regions_.get_source_region_handle(sr_idx); + SourceRegionHandle srh = + domain->source_regions_.get_source_region_handle(sr_idx); SourceRegion sr(srh); send_sr_data(receiver, sr); } @@ -955,8 +1101,9 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { for (int sender = 0; sender < mpi::n_procs; sender++) { if (sender == mpi::rank) { - if (num_sr_receiving[sender] > 0){ - fatal_error("Rank sends source regions to itself. Rank should not receive source regions from itself."); + if (num_sr_receiving[sender] > 0) { + fatal_error("Rank sends source regions to itself. Rank should not " + "receive source regions from itself."); } continue; // skip self } @@ -982,13 +1129,14 @@ void DecompositionMap::redistribute_source_regions(FlatSourceDomain* domain) { domain->convert_source_regions_to_tallies(start_sr_id); } -double DecompositionMap::calculate_load_ratio(int rank){ - if (estimated_rank_load_fractions_[rank] > 0.0){ - return measured_rank_load_fractions_[rank]/estimated_rank_load_fractions_[rank]; +double DecompositionMap::calculate_load_ratio(int rank) +{ + if (estimated_rank_load_fractions_[rank] > 0.0) { + return measured_rank_load_fractions_[rank] / + estimated_rank_load_fractions_[rank]; } else { return 1.0; } } - -}// namespace openmc \ No newline at end of file +} // namespace openmc \ No newline at end of file diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 6aa08404f34..15a5aa38691 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -9,6 +9,7 @@ #include "openmc/mgxs_interface.h" #include "openmc/output.h" #include "openmc/plot.h" +#include "openmc/random_ray/decomposition_map.h" #include "openmc/random_ray/random_ray.h" #include "openmc/simulation.h" #include "openmc/tallies/filter.h" @@ -16,8 +17,6 @@ #include "openmc/tallies/tally_scoring.h" #include "openmc/timer.h" #include "openmc/weight_windows.h" -#include "openmc/message_passing.h" -#include "openmc/random_ray/decomposition_map.h" #include #include @@ -377,8 +376,10 @@ void FlatSourceDomain::compute_k_eff() // Sum up fission rates across all ranks if (mpi::n_procs > 1) { simulation::time_decomposition_handling.start(); - MPI_Allreduce(MPI_IN_PLACE, &fission_rate_old, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); - MPI_Allreduce(MPI_IN_PLACE, &fission_rate_new, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + MPI_Allreduce( + MPI_IN_PLACE, &fission_rate_old, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); + MPI_Allreduce( + MPI_IN_PLACE, &fission_rate_new, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); simulation::time_decomposition_handling.stop(); } @@ -863,7 +864,7 @@ void FlatSourceDomain::output_to_vtk() const bool found = exhaustive_find_cell(p); if (!found) { - voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1,-1}; + voxel_indices_key[z * Ny * Nx + y * Nx + x] = {-1, -1}; voxel_indices[z * Ny * Nx + y * Nx + x] = -1; voxel_positions[z * Ny * Nx + y * Nx + x] = sample; weight_windows[z * Ny * Nx + y * Nx + x] = 0.0; @@ -1034,7 +1035,6 @@ void FlatSourceDomain::output_to_vtk() const } } - // Outputs all basic material, FSR ID, multigroup flux, and // fission source data to .vtk file that can be directly // loaded and displayed by Paraview. Note that .vtk binary @@ -1043,12 +1043,13 @@ void FlatSourceDomain::output_to_vtk() const void FlatSourceDomain::output_to_vtk_decomp() const { - if (mpi::master){ + if (mpi::master) { // Rename .h5 plot filename(s) to .vtk filenames for (int p = 0; p < model::plots.size(); p++) { PlottableInterface* plot = model::plots[p].get(); plot->path_plot() = - plot->path_plot().substr(0, plot->path_plot().find_last_of('.')) + ".vtk"; + plot->path_plot().substr(0, plot->path_plot().find_last_of('.')) + + ".vtk"; } // Print header information @@ -1084,7 +1085,7 @@ void FlatSourceDomain::output_to_vtk_decomp() const double y_delta = width.y / Ny; double z_delta = width.z / Nz; std::string filename = openmc_plot->path_plot(); - + // Tag plots written during the forward solve of an adjoint run if (solve_ == RandomRaySolve::FORWARD_FOR_ADJOINT) { auto dot = filename.find_last_of('.'); @@ -1097,12 +1098,14 @@ void FlatSourceDomain::output_to_vtk_decomp() const openmc_plot->id(), filename, bytes / 1.0e6); if (bytes / 1.0e9 > 1.0) { if (mpi::master) { - warning("Voxel plot specification is very large (>1 GB). Plotting may be " - "slow."); + warning( + "Voxel plot specification is very large (>1 GB). Plotting may be " + "slow."); } } else if (bytes / 1.0e9 > 100.0) { if (mpi::master) { - fatal_error("Voxel plot specification is too large (>100 GB). Exiting."); + fatal_error( + "Voxel plot specification is too large (>100 GB). Exiting."); } } @@ -1149,11 +1152,11 @@ void FlatSourceDomain::output_to_vtk_decomp() const int assigned_rank = 0; // Which rank is responsible auto it = mpi::decomp_map.subdomain_map_.find(sr_key); - if (it != mpi::decomp_map.subdomain_map_.end()){ + if (it != mpi::decomp_map.subdomain_map_.end()) { assigned_rank = it->second; } if (assigned_rank == mpi::rank) { - #pragma omp critical (create_my_voxel_ids) +#pragma omp critical(create_my_voxel_ids) { my_voxel_ids.push_back(z * Ny * Nx + y * Nx + x); } @@ -1223,17 +1226,23 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out_float[voxel_id] = flux; } - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(MPI_IN_PLACE, &num_neg, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(MPI_IN_PLACE, &num_samples, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, + MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce( + MPI_IN_PLACE, &num_neg, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &num_samples, 1, MPI_INT64_T, MPI_SUM, 0, + mpi::intracomm); } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(&num_neg, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(&num_samples, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); + MPI_Reduce( + &num_neg, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce( + &num_samples, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); } - if (mpi::master){ + if (mpi::master) { std::fprintf(plot, "SCALARS flux_group_%d float\n", g); std::fprintf(plot, "LOOKUP_TABLE default\n"); for (float value : vector_out_float) { @@ -1261,13 +1270,15 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out_float[voxel_id] = value; } - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); } - if (mpi::master){ + if (mpi::master) { std::fprintf(plot, "SCALARS FSRs float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); for (float value : vector_out_float) { @@ -1288,13 +1299,15 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out_int[voxel_id] = mat + 1; // To avoid -1 for void (MPI_SUM) } - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_int.data(), vector_size, MPI_INT, MPI_SUM, 0, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, vector_out_int.data(), vector_size, MPI_INT, + MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out_int.data(), nullptr, vector_size, MPI_INT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_int.data(), nullptr, vector_size, MPI_INT, MPI_SUM, + 0, mpi::intracomm); } - if (mpi::master){ + if (mpi::master) { std::fprintf(plot, "SCALARS Materials int\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -1313,13 +1326,15 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out_float[voxel_id] = value; } - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); } - if (mpi::master){ + if (mpi::master) { std::fprintf(plot, "SCALARS rank_subdomains float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -1337,13 +1352,15 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out_float[voxel_id] = value; } - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); } - if (mpi::master){ + if (mpi::master) { std::fprintf(plot, "SCALARS measured_load float\n"); std::fprintf(plot, "LOOKUP_TABLE default\n"); @@ -1365,7 +1382,8 @@ void FlatSourceDomain::output_to_vtk_decomp() const int temp = source_regions_.temperature_idx(fsr); if (mat != MATERIAL_VOID) { for (int g = 0; g < negroups_; g++) { - float flux = evaluate_flux_at_point(voxel_positions[voxel_id], fsr, g); + float flux = + evaluate_flux_at_point(voxel_positions[voxel_id], fsr, g); double sigma_f = sigma_f_[(mat * ntemperature_ + temp) * negroups_ + g] * source_regions_.density_mult(fsr); @@ -1397,18 +1415,20 @@ void FlatSourceDomain::output_to_vtk_decomp() const } } - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); } - if (mpi::master){ + if (mpi::master) { if (settings::run_mode == RunMode::EIGENVALUE) { std::fprintf(plot, "SCALARS total_fission_source float\n"); } else { std::fprintf(plot, "SCALARS external_source float\n"); - } + } std::fprintf(plot, "LOOKUP_TABLE default\n"); for (float value : vector_out_float) { float print_value = convert_to_big_endian(value); @@ -1427,24 +1447,26 @@ void FlatSourceDomain::output_to_vtk_decomp() const vector_out_float[voxel_id] = weight; } - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - } else { - MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); - } + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, vector_out_float.data(), vector_size, + MPI_FLOAT, MPI_SUM, 0, mpi::intracomm); + } else { + MPI_Reduce(vector_out_float.data(), nullptr, vector_size, MPI_FLOAT, + MPI_SUM, 0, mpi::intracomm); + } - if (mpi::master){ - std::fprintf(plot, "SCALARS weight_window_lower float\n"); - std::fprintf(plot, "LOOKUP_TABLE default\n"); + if (mpi::master) { + std::fprintf(plot, "SCALARS weight_window_lower float\n"); + std::fprintf(plot, "LOOKUP_TABLE default\n"); - for (float value : vector_out_float) { - float print_value = convert_to_big_endian(value); - std::fwrite(&print_value, sizeof(float), 1, plot); + for (float value : vector_out_float) { + float print_value = convert_to_big_endian(value); + std::fwrite(&print_value, sizeof(float), 1, plot); + } } } - } - if (mpi::master){ + if (mpi::master) { std::fclose(plot); } } @@ -2297,7 +2319,7 @@ bool FlatSourceDomain::is_geometry_3D() // Get spatial box of ray_source_ SpatialBox* sb = dynamic_cast( dynamic_cast(RandomRay::ray_source_.get())->space()); - + double x_length = sb->upper_right().x - sb->lower_left().x; double y_length = sb->upper_right().y - sb->lower_left().y; double z_length = sb->upper_right().z - sb->lower_left().z; @@ -2310,11 +2332,11 @@ bool FlatSourceDomain::is_geometry_3D() Position sample; sample.x = sb->lower_left().x + x_length * prn(&seed); sample.y = sb->lower_left().y + y_length * prn(&seed); - + SourceRegionKey sr_key_prev {-1, -1}; bool check_key = false; - for (int j = 0; j < num_z_points; j++){ + for (int j = 0; j < num_z_points; j++) { sample.z = sb->lower_left().z + z_length * prn(&seed); Particle p; @@ -2332,8 +2354,9 @@ bool FlatSourceDomain::is_geometry_3D() SourceRegionKey sr_key = lookup_source_region_key(p); // Check if sr_key has changed in z-direction - if (check_key && (sr_key.base_source_region_id != sr_key_prev.base_source_region_id || - sr_key.mesh_bin != sr_key_prev.mesh_bin)) { + if (check_key && + (sr_key.base_source_region_id != sr_key_prev.base_source_region_id || + sr_key.mesh_bin != sr_key_prev.mesh_bin)) { return true; } diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 113331ca98d..21d26e3e5b7 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -1,5 +1,6 @@ #include "openmc/random_ray/random_ray.h" +#include "openmc/cell.h" #include "openmc/constants.h" #include "openmc/geometry.h" #include "openmc/message_passing.h" @@ -9,13 +10,12 @@ #include "openmc/search.h" #include "openmc/settings.h" #include "openmc/simulation.h" -#include "openmc/cell.h" #include #include "openmc/distribution_spatial.h" #include "openmc/random_dist.h" -#include "openmc/source.h" #include "openmc/random_ray/decomposition_map.h" +#include "openmc/source.h" namespace openmc { @@ -240,7 +240,7 @@ double RandomRay::distance_inactive_; double RandomRay::distance_active_; unique_ptr RandomRay::ray_source_; RandomRaySourceShape RandomRay::source_shape_ {RandomRaySourceShape::FLAT}; -RandomRayGeomDim RandomRay::geom_dim_ {RandomRayGeomDim::THREE_DIM}; +RandomRayGeomDim RandomRay::geom_dim_ {RandomRayGeomDim::THREE_DIM}; RandomRaySampleMethod RandomRay::sample_method_ {RandomRaySampleMethod::PRNG}; RandomRay::RandomRay() @@ -295,7 +295,7 @@ void RandomRay::event_advance_ray() double distance = boundary().distance(); if (mpi::n_procs > 1) { - // If domain decomposition is being used, update counter for + // If domain decomposition is being used, update counter for // ray trace operations in source region for load estimation int64_t sr = domain_->lookup_base_source_region_idx(*this); for (int i = 0; i < n_coord(); i++) { @@ -364,7 +364,7 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) { // Lookup base source region index int64_t sr = domain_->lookup_base_source_region_idx(*this); - + // Initialize values needed to buffer ray for domain decomposition double mesh_partial_length = 0.0; double tiny_multiplier = 0.0; @@ -402,13 +402,13 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) double physical_length = reduced_distance * mesh_fractional_lengths_[b]; if (mpi::n_procs > 1) { - mpi::decomp_map.num_mesh_bin_RT_[sr] += 1; + mpi::decomp_map.num_mesh_bin_RT_[sr] += 1; } - // Very flat angles can result in very small physical lengths, - // despite the TINY_BIT adjustment for Position start. If this happens at an - // MPI boundary, this can cause rays to bounce back and forth indefinitely. - // Very small lengths are therefore skipped. + // Very flat angles can result in very small physical lengths, + // despite the TINY_BIT adjustment for Position start. If this happens at + // an MPI boundary, this can cause rays to bounce back and forth + // indefinitely. Very small lengths are therefore skipped. if (physical_length <= TINY_BIT) { start += physical_length * u(); continue; @@ -421,7 +421,7 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) // If ray has left MPI subdomain, stop transport // and calculate position - if(has_left_subdomain()){ + if (has_left_subdomain()) { for (int i = 0; i <= b - 1; i++) { mesh_partial_length += mesh_fractional_lengths_[i]; } @@ -430,22 +430,23 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) // If ray is stopped within mesh of base source region, // need to add TINY_BIT to account for deleted length tiny_multiplier = 1.0; - // Reset last surface crossed to none if ray is stopped + // Reset last surface crossed to none if ray is stopped // within mesh of base source region - surface() = 0; + surface() = 0; } - mesh_partial_length = tiny_multiplier * TINY_BIT + reduced_distance * mesh_partial_length; + mesh_partial_length = + tiny_multiplier * TINY_BIT + reduced_distance * mesh_partial_length; break; } } } // If ray has left my subdomain, buffer ray state - if(has_left_subdomain()) { - Position position_buffer = r() + (offset + mesh_partial_length) * u(); + if (has_left_subdomain()) { + Position position_buffer = r() + (offset + mesh_partial_length) * u(); double distance_buffer = distance_travelled_ + mesh_partial_length; - + #ifdef OPENMC_DAGMC_ENABLED history().rollback_last_intersection(); #endif @@ -459,17 +460,17 @@ void RandomRay::attenuate_flux_inner( { SourceRegionKey sr_key {sr, mesh_bin}; - if (mpi::n_procs > 1){ + if (mpi::n_procs > 1) { // Check which rank owns the source region at the current position Position midpoint = r + u() * (distance / 2.0); - int owner = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), midpoint, - domain_->discovered_source_regions_); + int owner = mpi::decomp_map.find_owner(SourceRegionKey(sr, mesh_bin), + midpoint, domain_->discovered_source_regions_); // If current rank is not the owner return and mark as not local. if (owner != mpi::rank) { - is_local_ = false; - owner_rank_ = owner; - return; + is_local_ = false; + owner_rank_ = owner; + return; } } @@ -858,8 +859,8 @@ void RandomRay::attenuate_flux_linear_source_void( } } -void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, float* angular_flux, - LocalCoord* coord, int* cell_last_data) +void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, + float* angular_flux, LocalCoord* coord, int* cell_last_data) { domain_ = domain; @@ -867,7 +868,7 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo owner_rank_ = mpi::rank; ntemperature_ = domain->ntemperature_; - // Restore particle event counter from the transmitted ray + // Restore particle event counter from the transmitted ray // This preserves the event count across MPI rank boundaries n_event() = data.n_event; @@ -887,44 +888,47 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo sqrtkT() = data.sqrtkT; sqrtkT_last() = data.sqrtkT_last; surface() = data.surface; - + // Restore LocalCoord vector data (coord_) - // The vectors were already sized to model::n_coord_levels in the GeometryState constructor - // LocalCoord is POD so we can just copy the entire structure + // The vectors were already sized to model::n_coord_levels in the + // GeometryState constructor LocalCoord is POD so we can just copy the entire + // structure const int n_coord_max = model::n_coord_levels; for (int i = 0; i < n_coord_max; i++) { this->coord(i) = coord[i]; cell_last(i) = cell_last_data[i]; } - - // Override the position and direction at ALL coordinate levels with the buffered values - // These may have been adjusted when the ray left the previous subdomain - // We need to update all levels to maintain consistency in the coordinate hierarchy + + // Override the position and direction at ALL coordinate levels with the + // buffered values These may have been adjusted when the ray left the previous + // subdomain We need to update all levels to maintain consistency in the + // coordinate hierarchy Position delta_r = data.position - r(); for (int i = 0; i < n_coord(); i++) { this->coord(i).r() += delta_r; } u() = data.direction; - + #ifdef OPENMC_DAGMC_ENABLED // Restore DAGMC fields - // Restore last_dir and rebuild the history by adding entities in reverse order + // Restore last_dir and rebuild the history by adding entities in reverse + // order last_dir() = data.last_dir; for (int i = data.n_handles - 1; i >= 0; i--) { history().add_entity(data.handles[i]); } #endif - + // Set particle type and energy (for random ray, these are not actually used) type() = ParticleType::neutron(); E() = 0.0; - // No need to call exhaustive_find_cell() since we have the full geometry state! - // Just verify we have valid cell information + // No need to call exhaustive_find_cell() since we have the full geometry + // state! Just verify we have valid cell information if (lowest_coord().cell() == C_NONE) { - this->mark_as_lost( - "Received particle " + std::to_string(id()) + " with invalid cell information"); + this->mark_as_lost("Received particle " + std::to_string(id()) + + " with invalid cell information"); } // Set birth cell attribute if not set @@ -932,12 +936,13 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo cell_born() = lowest_coord().cell(); // Set ray's angular flux to value before subdomain change - if (distance_travelled_ > 0.0 || is_active_){ + if (distance_travelled_ > 0.0 || is_active_) { for (int g = 0; g < negroups_; g++) { angular_flux_[g] = angular_flux[g]; } - } - // Initialize ray's starting angular flux to starting location's isotropic source + } + // Initialize ray's starting angular flux to starting location's isotropic + // source else { SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); SourceRegionHandle srh = @@ -949,7 +954,6 @@ void RandomRay::restart_ray(FlatSourceDomain* domain, RayExchangeData& data, flo } } } - } void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) @@ -1001,11 +1005,11 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); - if (mpi::n_procs > 1){ + if (mpi::n_procs > 1) { // Check if ray sampling site belongs to subdomain - owner_rank_ = mpi::decomp_map.find_owner(sr_key, r(), - domain_->discovered_source_regions_); - + owner_rank_ = mpi::decomp_map.find_owner( + sr_key, r(), domain_->discovered_source_regions_); + if (owner_rank_ != mpi::rank) { for (int g = 0; g < negroups_; g++) { angular_flux_[g] = 0.0; @@ -1024,7 +1028,6 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) angular_flux_[g] = srh.source(g); } } - } SourceSite RandomRay::sample_prng() @@ -1077,61 +1080,63 @@ SourceSite RandomRay::sample_halton() return site; } -bool RandomRay::has_left_subdomain() { +bool RandomRay::has_left_subdomain() +{ return !is_local_; } -void RandomRay::pack_ray_for_buffer(double distance_buffer, Position position_buffer) { - exchange_data_.position = position_buffer; - exchange_data_.direction = u(); - exchange_data_.angular_flux = angular_flux_; - exchange_data_.distance_travelled = distance_buffer; - exchange_data_.surface = surface(); - exchange_data_.is_active = is_active_; - exchange_data_.ray_id = id(); - exchange_data_.n_event = n_event(); - - // Pack GeometryState scalar fields - exchange_data_.n_coord = n_coord(); - exchange_data_.cell_instance = cell_instance(); - exchange_data_.n_coord_last = n_coord_last(); - exchange_data_.material = material(); - exchange_data_.material_last = material_last(); - exchange_data_.sqrtkT = sqrtkT(); - exchange_data_.sqrtkT_last = sqrtkT_last(); - - // Pack GeometryState vector fields - // LocalCoord is POD, so we can just copy the entire vector - // We always pack model::n_coord_levels elements to ensure consistent sizes - const int n_coord_max = model::n_coord_levels; - - exchange_data_.coord.resize(n_coord_max); - exchange_data_.cell_last.resize(n_coord_max); - - for (int i = 0; i < n_coord_max; i++) { - exchange_data_.coord[i] = coord(i); - exchange_data_.cell_last[i] = cell_last(i); - } +void RandomRay::pack_ray_for_buffer( + double distance_buffer, Position position_buffer) +{ + exchange_data_.position = position_buffer; + exchange_data_.direction = u(); + exchange_data_.angular_flux = angular_flux_; + exchange_data_.distance_travelled = distance_buffer; + exchange_data_.surface = surface(); + exchange_data_.is_active = is_active_; + exchange_data_.ray_id = id(); + exchange_data_.n_event = n_event(); + + // Pack GeometryState scalar fields + exchange_data_.n_coord = n_coord(); + exchange_data_.cell_instance = cell_instance(); + exchange_data_.n_coord_last = n_coord_last(); + exchange_data_.material = material(); + exchange_data_.material_last = material_last(); + exchange_data_.sqrtkT = sqrtkT(); + exchange_data_.sqrtkT_last = sqrtkT_last(); + + // Pack GeometryState vector fields + // LocalCoord is POD, so we can just copy the entire vector + // We always pack model::n_coord_levels elements to ensure consistent sizes + const int n_coord_max = model::n_coord_levels; + + exchange_data_.coord.resize(n_coord_max); + exchange_data_.cell_last.resize(n_coord_max); + + for (int i = 0; i < n_coord_max; i++) { + exchange_data_.coord[i] = coord(i); + exchange_data_.cell_last[i] = cell_last(i); + } #ifdef OPENMC_DAGMC_ENABLED - // Pack DAGMC fields - // Extract up to MAX_N_HANDLES from the ray history by rolling back - exchange_data_.last_dir = last_dir(); - exchange_data_.n_handles = 0; - - for (int i = 0; i < MAX_N_HANDLES; i++) { - moab::EntityHandle handle; - if (history().get_last_intersection(handle) == moab::MB_SUCCESS) { - exchange_data_.handles[i] = handle; - exchange_data_.n_handles++; - history().rollback_last_intersection(); - } else { - // No more handles in history - break; - } - } + // Pack DAGMC fields + // Extract up to MAX_N_HANDLES from the ray history by rolling back + exchange_data_.last_dir = last_dir(); + exchange_data_.n_handles = 0; + + for (int i = 0; i < MAX_N_HANDLES; i++) { + moab::EntityHandle handle; + if (history().get_last_intersection(handle) == moab::MB_SUCCESS) { + exchange_data_.handles[i] = handle; + exchange_data_.n_handles++; + history().rollback_last_intersection(); + } else { + // No more handles in history + break; + } + } #endif - } SourceSite RandomRay::sample_s2() diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index 783f37f200c..40bb637e1cb 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -1,14 +1,17 @@ #include "openmc/random_ray/random_ray_simulation.h" #include "openmc/capi.h" +#include "openmc/constants.h" #include "openmc/eigenvalue.h" #include "openmc/geometry.h" #include "openmc/message_passing.h" #include "openmc/mgxs_interface.h" #include "openmc/output.h" #include "openmc/plot.h" +#include "openmc/random_ray/decomposition_map.h" #include "openmc/random_ray/flat_source_domain.h" #include "openmc/random_ray/random_ray.h" +#include "openmc/random_ray/ray_bank.h" #include "openmc/simulation.h" #include "openmc/source.h" #include "openmc/tallies/filter.h" @@ -16,9 +19,6 @@ #include "openmc/tallies/tally_scoring.h" #include "openmc/timer.h" #include "openmc/weight_windows.h" -#include "openmc/random_ray/decomposition_map.h" -#include "openmc/random_ray/ray_bank.h" -#include "openmc/constants.h" #include // #include // #include @@ -291,7 +291,7 @@ void openmc_finalize_random_ray() FlatSourceDomain::mesh_domain_map_.clear(); RandomRay::ray_source_.reset(); RandomRay::source_shape_ = RandomRaySourceShape::FLAT; - RandomRay::geom_dim_ = RandomRayGeomDim::THREE_DIM; + RandomRay::geom_dim_ = RandomRayGeomDim::THREE_DIM; RandomRay::sample_method_ = RandomRaySampleMethod::PRNG; } @@ -415,12 +415,12 @@ void RandomRaySimulation::simulate() if (!geometry_setup_complete_) { // Check if problem is 3D - if (!domain_->is_geometry_3D()){ + if (!domain_->is_geometry_3D()) { RandomRay::geom_dim_ = RandomRayGeomDim::TWO_DIM; } // Generate Voronoi cells, each of which corresponds to a rank subdomain - if (mpi::n_procs > 1){ + if (mpi::n_procs > 1) { simulation::time_generate_voronoi_centers.start(); mpi::decomp_map.generate_rank_centers(); simulation::time_generate_voronoi_centers.stop(); @@ -433,15 +433,17 @@ void RandomRaySimulation::simulate() simulation::time_transport.start(); // Transport sweep over all random rays for the iteration - if (mpi::n_procs > 1){ - + if (mpi::n_procs > 1) { + // Create ray bank to store rays RayBank RB; transport_sweep_decomp(RB); - // Check if any new source regions discovered and if so, exchange discovered cell data between ranks - if (mpi::decomp_map.any_discovered_source_regions(domain_->discovered_source_regions_)){ + // Check if any new source regions discovered and if so, exchange + // discovered cell data between ranks + if (mpi::decomp_map.any_discovered_source_regions( + domain_->discovered_source_regions_)) { simulation::time_source_region_exchange.start(); mpi::decomp_map.exchange_sr_info(domain_->discovered_source_regions_); MPI_Barrier(mpi::intracomm); @@ -536,55 +538,72 @@ void RandomRaySimulation::output_simulation_results() int64_t total_n_external_source_regions = domain_->n_external_source_regions_; double max_load_imbalance = 0.0; - if (mpi::n_procs > 1){ + if (mpi::n_procs > 1) { // Average number of ray communications between ranks per batch - avg_num_communication_rounds_ = static_cast(std::round(avg_num_communication_rounds_/settings::n_batches)); + avg_num_communication_rounds_ = static_cast( + std::round(avg_num_communication_rounds_ / settings::n_batches)); // Exchange intersection data - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, &total_geometric_intersections_, 1, MPI_UINT64_T, MPI_SUM, 0, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, &total_geometric_intersections_, 1, MPI_UINT64_T, + MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(&total_geometric_intersections_, nullptr, 1, MPI_UINT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(&total_geometric_intersections_, nullptr, 1, MPI_UINT64_T, + MPI_SUM, 0, mpi::intracomm); } // Exchange source region data - if (mpi::master){ - MPI_Reduce(MPI_IN_PLACE, &total_n_source_regions, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(MPI_IN_PLACE, &total_n_external_source_regions, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + if (mpi::master) { + MPI_Reduce(MPI_IN_PLACE, &total_n_source_regions, 1, MPI_INT64_T, MPI_SUM, + 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &total_n_external_source_regions, 1, MPI_INT64_T, + MPI_SUM, 0, mpi::intracomm); } else { - MPI_Reduce(&total_n_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(&total_n_external_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); - } - - // Determine load imbalance based on measured transport times, every rank needs to know about this for plotting purposes - double time_transport_total = simulation::time_transport.elapsed() - simulation::time_ray_buffering.elapsed(); - MPI_Allgather(&time_transport_total, 1, MPI_DOUBLE, mpi::decomp_map.measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, mpi::intracomm); - double measured_load_sum = std::accumulate(mpi::decomp_map.measured_rank_load_fractions_.begin(), mpi::decomp_map.measured_rank_load_fractions_.end(), 0.0); + MPI_Reduce(&total_n_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, + mpi::intracomm); + MPI_Reduce(&total_n_external_source_regions, nullptr, 1, MPI_INT64_T, + MPI_SUM, 0, mpi::intracomm); + } + + // Determine load imbalance based on measured transport times, every rank + // needs to know about this for plotting purposes + double time_transport_total = simulation::time_transport.elapsed() - + simulation::time_ray_buffering.elapsed(); + MPI_Allgather(&time_transport_total, 1, MPI_DOUBLE, + mpi::decomp_map.measured_rank_load_fractions_.data(), 1, MPI_DOUBLE, + mpi::intracomm); + double measured_load_sum = + std::accumulate(mpi::decomp_map.measured_rank_load_fractions_.begin(), + mpi::decomp_map.measured_rank_load_fractions_.end(), 0.0); for (int rank = 0; rank < mpi::n_procs; rank++) { - mpi::decomp_map.measured_rank_load_fractions_[rank] = mpi::decomp_map.measured_rank_load_fractions_[rank] / measured_load_sum; + mpi::decomp_map.measured_rank_load_fractions_[rank] = + mpi::decomp_map.measured_rank_load_fractions_[rank] / measured_load_sum; } if (mpi::master) { - double max_load_measured = *std::max_element(mpi::decomp_map.measured_rank_load_fractions_.begin(), mpi::decomp_map.measured_rank_load_fractions_.end()); - max_load_imbalance = (max_load_measured - mpi::decomp_map.target_load_) / mpi::decomp_map.target_load_; + double max_load_measured = + *std::max_element(mpi::decomp_map.measured_rank_load_fractions_.begin(), + mpi::decomp_map.measured_rank_load_fractions_.end()); + max_load_imbalance = (max_load_measured - mpi::decomp_map.target_load_) / + mpi::decomp_map.target_load_; } } // Print random ray results if (mpi::master) { print_results_random_ray(total_geometric_intersections_, - avg_miss_rate_ / settings::n_batches, negroups_, - total_n_source_regions, total_n_external_source_regions, avg_num_communication_rounds_, max_load_imbalance); + avg_miss_rate_ / settings::n_batches, negroups_, total_n_source_regions, + total_n_external_source_regions, avg_num_communication_rounds_, + max_load_imbalance); } - + if (model::plots.size() > 0) { - if (mpi::n_procs > 1){ + if (mpi::n_procs > 1) { domain_->output_to_vtk_decomp(); } else { domain_->output_to_vtk(); } } - } // Apply a few sanity checks to catch obvious cases of numerical instability. @@ -595,24 +614,27 @@ void RandomRaySimulation::instability_check( uint64_t n_source_regions = domain_->n_source_regions(); - if (mpi::n_procs > 1){ + if (mpi::n_procs > 1) { // Reduce n_hits and n_source_regions on master rank to compute // global miss rate simulation::time_decomposition_handling.start(); if (mpi::master) { - MPI_Reduce(MPI_IN_PLACE, &n_hits, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce( + MPI_IN_PLACE, &n_hits, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce(MPI_IN_PLACE, &n_source_regions, 1, MPI_INT64_T, MPI_SUM, 0, + mpi::intracomm); } else { MPI_Reduce(&n_hits, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); - MPI_Reduce(&n_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); + MPI_Reduce( + &n_source_regions, nullptr, 1, MPI_INT64_T, MPI_SUM, 0, mpi::intracomm); } simulation::time_decomposition_handling.stop(); } if (mpi::master) { - double percent_missed = ((n_source_regions - n_hits) / - static_cast(n_source_regions)) * - 100.0; + double percent_missed = + ((n_source_regions - n_hits) / static_cast(n_source_regions)) * + 100.0; avg_miss_rate += percent_missed; if (percent_missed > 10.0) { @@ -637,21 +659,27 @@ void RandomRaySimulation::instability_check( // Print random ray simulation results void RandomRaySimulation::print_results_random_ray( uint64_t total_geometric_intersections, double avg_miss_rate, int negroups, - int64_t n_source_regions, int64_t n_external_source_regions, uint64_t avg_num_communication_rounds, double max_load_imbalance) const + int64_t n_source_regions, int64_t n_external_source_regions, + uint64_t avg_num_communication_rounds, double max_load_imbalance) const { using namespace simulation; if (settings::verbosity >= 6) { double total_integrations = total_geometric_intersections * negroups; - - // Transport time varies between ranks, so we need to compute the total transport time as the sum of the max transport time across all ranks, i.e. - // the transport time of the master rank plus the time the master rank spends waiting for slowest other rank to finish. - double time_transport_total = time_transport.elapsed() - time_ray_buffering.elapsed() + time_mpi_imbalance.elapsed(); - + + // Transport time varies between ranks, so we need to compute the total + // transport time as the sum of the max transport time across all ranks, + // i.e. the transport time of the master rank plus the time the master rank + // spends waiting for slowest other rank to finish. + double time_transport_total = time_transport.elapsed() - + time_ray_buffering.elapsed() + + time_mpi_imbalance.elapsed(); + double time_per_integration = time_transport_total / total_integrations; - double time_domain_decomposition = time_decomposition_handling.elapsed() - + time_generate_voronoi_centers.elapsed() + time_load_balance.elapsed() - + time_source_region_exchange.elapsed() - time_transport_total ; + double time_domain_decomposition = + time_decomposition_handling.elapsed() + + time_generate_voronoi_centers.elapsed() + time_load_balance.elapsed() + + time_source_region_exchange.elapsed() - time_transport_total; double misc_time = time_total.elapsed() - time_update_src.elapsed() - time_transport_total - time_tallies.elapsed() - time_bank_sendrecv.elapsed() - time_domain_decomposition; @@ -682,10 +710,12 @@ void RandomRaySimulation::print_results_random_ray( fmt::print(" Avg per Iteration = {:.4e}\n", total_integrations / settings::n_batches); - if (mpi::n_procs > 1){ + if (mpi::n_procs > 1) { fmt::print(" MPI Ranks = {}\n", mpi::n_procs); - fmt::print(" Avg Ray Subdomain Crossings = {}\n", avg_num_communication_rounds); - fmt::print(" Maximum Load Imbalance = {:.2f}%\n", max_load_imbalance*100.0); + fmt::print(" Avg Ray Subdomain Crossings = {}\n", + avg_num_communication_rounds); + fmt::print(" Maximum Load Imbalance = {:.2f}%\n", + max_load_imbalance * 100.0); } std::string estimator; @@ -748,21 +778,26 @@ void RandomRaySimulation::print_results_random_ray( show_time("Total time for initialization", time_initialize.elapsed()); show_time("Reading cross sections", time_read_xs.elapsed(), 1); show_time("Total simulation time", time_total.elapsed()); - if (mpi::n_procs > 1){ - show_time("Transport sweep only (incl. rank wait time)", time_transport_total, 1); + if (mpi::n_procs > 1) { + show_time( + "Transport sweep only (incl. rank wait time)", time_transport_total, 1); } else { show_time("Transport sweep only", time_transport_total, 1); } show_time("Source update only", time_update_src.elapsed(), 1); show_time("Tally conversion only", time_tallies.elapsed(), 1); - if (mpi::n_procs > 1){ - double time_decomp_misc = time_domain_decomposition - time_source_region_exchange.elapsed() - time_generate_voronoi_centers.elapsed() - - time_ray_comms.elapsed() - time_load_balance.elapsed(); + if (mpi::n_procs > 1) { + double time_decomp_misc = + time_domain_decomposition - time_source_region_exchange.elapsed() - + time_generate_voronoi_centers.elapsed() - time_ray_comms.elapsed() - + time_load_balance.elapsed(); show_time("Decomposition handling", time_domain_decomposition, 1); show_time("Ray communication", time_ray_comms.elapsed(), 2); - show_time("Exchanging contested SRs", time_source_region_exchange.elapsed(), 2); + show_time( + "Exchanging contested SRs", time_source_region_exchange.elapsed(), 2); show_time("Load balancing", time_load_balance.elapsed(), 2); - show_time("Generating Voronoi centers", time_generate_voronoi_centers.elapsed(), 2); + show_time("Generating Voronoi centers", + time_generate_voronoi_centers.elapsed(), 2); show_time("Other decomposition routines", time_decomp_misc, 2); } show_time("Other iteration routines", misc_time, 1); @@ -783,112 +818,120 @@ void RandomRaySimulation::print_results_random_ray( } } -void RandomRaySimulation::transport_sweep() { +void RandomRaySimulation::transport_sweep() +{ // Start timer for transport simulation::time_transport.start(); - // Transport sweep over all random rays for the iteration - #pragma omp parallel for schedule(dynamic) \ - reduction(+ : total_geometric_intersections_) - for (int i = 0; i < settings::n_particles; i++) { - RandomRay ray(i, domain_.get()); - total_geometric_intersections_ += ray.transport_history_based_single_ray(); - } +// Transport sweep over all random rays for the iteration +#pragma omp parallel for schedule(dynamic) \ + reduction(+ : total_geometric_intersections_) + for (int i = 0; i < settings::n_particles; i++) { + RandomRay ray(i, domain_.get()); + total_geometric_intersections_ += ray.transport_history_based_single_ray(); + } simulation::time_transport.stop(); - } -void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { +void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) +{ double start_time_transport = simulation::time_transport.elapsed(); double start_time_ray_buffering = simulation::time_ray_buffering.elapsed(); simulation::time_decomposition_handling.start(); - // Create rays and add them to ray bank - #pragma omp parallel for schedule(static) - for (int i = 0; i < simulation::work_per_rank; i++) { - uint64_t id = simulation::work_index[mpi::rank] + i; - RandomRay ray(id, domain_.get()); - - // Add ray to ray bank if it starts in my subdomain - if (!ray.has_left_subdomain()){ - #pragma omp critical (raybank) - { - RB.my_ray_list_.push_back(ray); - } - } - // Put ray straight into buffer if it starts outside my subdomain - else { - #pragma omp critical (raybuffer) - { - RB.buffer_ray_data_to_send(ray, domain_.get()); - } +// Create rays and add them to ray bank +#pragma omp parallel for schedule(static) + for (int i = 0; i < simulation::work_per_rank; i++) { + uint64_t id = simulation::work_index[mpi::rank] + i; + RandomRay ray(id, domain_.get()); + + // Add ray to ray bank if it starts in my subdomain + if (!ray.has_left_subdomain()) { +#pragma omp critical(raybank) + { + RB.my_ray_list_.push_back(ray); } } - - // If no ray is alive at this stage, it means that all of them have been buffered because they were sampled in foregin subdomain. This requires a ray bank update here. - if (!RB.is_any_ray_alive()) { - RB.update(domain_.get()); + // Put ray straight into buffer if it starts outside my subdomain + else { +#pragma omp critical(raybuffer) + { + RB.buffer_ray_data_to_send(ray, domain_.get()); + } } + } - int num_communication_rounds = 0; + // If no ray is alive at this stage, it means that all of them have been + // buffered because they were sampled in foregin subdomain. This requires a + // ray bank update here. + if (!RB.is_any_ray_alive()) { + RB.update(domain_.get()); + } - // Move rays across ranks until they are terminated - while (RB.is_any_ray_alive()) { + int num_communication_rounds = 0; - // Start timer for transport - simulation::time_transport.start(); + // Move rays across ranks until they are terminated + while (RB.is_any_ray_alive()) { - #pragma omp parallel for schedule(dynamic) \ - reduction(+ : total_geometric_intersections_) - for (int i = 0; i < RB.ray_bank_size(); i++) { - RandomRay& ray = RB.my_ray_list_[i]; - total_geometric_intersections_ += ray.transport_history_based_single_ray(); + // Start timer for transport + simulation::time_transport.start(); - // If ray has left my subdomain, buffer ray state - if(ray.has_left_subdomain()){ - #pragma omp critical (raybuffer) - { - simulation::time_ray_buffering.start(); - RB.buffer_ray_data_to_send(ray, domain_.get()); - simulation::time_ray_buffering.stop(); - } - } - } - simulation::time_transport.stop(); +#pragma omp parallel for schedule(dynamic) \ + reduction(+ : total_geometric_intersections_) + for (int i = 0; i < RB.ray_bank_size(); i++) { + RandomRay& ray = RB.my_ray_list_[i]; + total_geometric_intersections_ += + ray.transport_history_based_single_ray(); - // Capture wait time resulting from other transport sweeps - simulation::time_mpi_imbalance.start(); - MPI_Barrier(mpi::intracomm); - simulation::time_mpi_imbalance.stop(); + // If ray has left my subdomain, buffer ray state + if (ray.has_left_subdomain()) { +#pragma omp critical(raybuffer) + { + simulation::time_ray_buffering.start(); + RB.buffer_ray_data_to_send(ray, domain_.get()); + simulation::time_ray_buffering.stop(); + } + } + } + simulation::time_transport.stop(); - // Update ray bank by communicating rays in buffer to new owner ranks and removing terminated ranks - simulation::time_ray_comms.start(); - RB.update(domain_.get()); - MPI_Barrier(mpi::intracomm); - simulation::time_ray_comms.stop(); + // Capture wait time resulting from other transport sweeps + simulation::time_mpi_imbalance.start(); + MPI_Barrier(mpi::intracomm); + simulation::time_mpi_imbalance.stop(); - num_communication_rounds ++; - } + // Update ray bank by communicating rays in buffer to new owner ranks and + // removing terminated ranks + simulation::time_ray_comms.start(); + RB.update(domain_.get()); + MPI_Barrier(mpi::intracomm); + simulation::time_ray_comms.stop(); - // Calculate load per rank based on number of hits in each source region that a rank owns - double batch_ray_buffering_time = simulation::time_ray_buffering.elapsed() - start_time_ray_buffering; - double batch_transport_time = simulation::time_transport.elapsed() - start_time_transport - batch_ray_buffering_time; + num_communication_rounds++; + } - // Calculate rank load fractions for load balancing - if (simulation::current_batch <= ITER_LOAD_BALANCE) { - mpi::decomp_map.calculate_rank_load(domain_.get(), batch_transport_time); - } + // Calculate load per rank based on number of hits in each source region that + // a rank owns + double batch_ray_buffering_time = + simulation::time_ray_buffering.elapsed() - start_time_ray_buffering; + double batch_transport_time = simulation::time_transport.elapsed() - + start_time_transport - batch_ray_buffering_time; - avg_num_communication_rounds_ += num_communication_rounds; + // Calculate rank load fractions for load balancing + if (simulation::current_batch <= ITER_LOAD_BALANCE) { + mpi::decomp_map.calculate_rank_load(domain_.get(), batch_transport_time); + } - // Reset ray bank list for next batch - RB.my_ray_list_.resize(0); + avg_num_communication_rounds_ += num_communication_rounds; - simulation::time_decomposition_handling.stop(); + // Reset ray bank list for next batch + RB.my_ray_list_.resize(0); + + simulation::time_decomposition_handling.stop(); } } // namespace openmc diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 46756f2b3ad..78bcb6d1ee4 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -2,124 +2,128 @@ #include -#include "openmc/random_ray/random_ray.h" -#include "openmc/random_ray/source_region.h" +#include "openmc/geometry.h" #include "openmc/message_passing.h" -#include "openmc/random_ray/decomposition_map.h" #include "openmc/mgxs_interface.h" +#include "openmc/random_ray/decomposition_map.h" +#include "openmc/random_ray/random_ray.h" +#include "openmc/random_ray/source_region.h" #include "openmc/timer.h" -#include "openmc/geometry.h" #include namespace openmc { // Constructor -RayBank::RayBank() { +RayBank::RayBank() +{ negroups_ = data::mg.num_energy_groups_; num_messages_receiving_.resize(mpi::n_procs, 0); num_messages_sending_.resize(mpi::n_procs, 0); } // Buffer ray that has left my subdomain -void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain){ +void RayBank::buffer_ray_data_to_send(RandomRay& ray, FlatSourceDomain* domain) +{ + + // Get rank to send ray to + int rank = ray.owner_rank_; + + if (rank == mpi::rank) { + warning(fmt::format("Ray {} at position ({:.5e}, {:.5e}, {:.5e})" + "is being sent to the same rank {}. This may indicate " + "an error in the decomposition map.", + ray.exchange_data_.ray_id, ray.exchange_data_.position.x, + ray.exchange_data_.position.y, ray.exchange_data_.position.z, rank)); + } - // Get rank to send ray to - int rank = ray.owner_rank_; + // Get or create the send buffer for this rank + auto& buffers = ray_send_buffer_[rank]; - if (rank == mpi::rank){ - warning(fmt::format( - "Ray {} at position ({:.5e}, {:.5e}, {:.5e})" - "is being sent to the same rank {}. This may indicate an error in the decomposition map." - , ray.exchange_data_.ray_id, ray.exchange_data_.position.x, ray.exchange_data_.position.y, ray.exchange_data_.position.z, rank)); - } + // Get the maximum coordinate levels + const int n_coord_max = model::n_coord_levels; + + // Reserve space if this is the first ray for this rank + // This is just a heuristic to reduce reallocations + if (buffers.count == 0) { + buffers.ray_data.reserve(reserved_buffer_size_); + buffers.angular_flux.reserve(reserved_buffer_size_ * negroups_); + buffers.coord.reserve(reserved_buffer_size_ * n_coord_max); + buffers.cell_last.reserve(reserved_buffer_size_ * n_coord_max); + + buffers.ray_data.reserve(32); + buffers.angular_flux.reserve(32 * negroups_); + buffers.coord.reserve(32 * n_coord_max); + buffers.cell_last.reserve(32 * n_coord_max); + } + + // Pack RayExchangeData directly into send buffer + RayBufferContainer& rbc = ray.exchange_data_; + RayExchangeData rd; + + rd.position = rbc.position; + rd.direction = rbc.direction; + rd.distance_travelled = rbc.distance_travelled; + rd.surface = rbc.surface; + rd.is_active = rbc.is_active; + rd.ray_id = rbc.ray_id; + rd.n_event = rbc.n_event; + rd.n_coord = rbc.n_coord; + rd.cell_instance = rbc.cell_instance; + rd.n_coord_last = rbc.n_coord_last; + rd.material = rbc.material; + rd.material_last = rbc.material_last; + rd.sqrtkT = rbc.sqrtkT; + rd.sqrtkT_last = rbc.sqrtkT_last; - // Get or create the send buffer for this rank - auto& buffers = ray_send_buffer_[rank]; - - // Get the maximum coordinate levels - const int n_coord_max = model::n_coord_levels; - - // Reserve space if this is the first ray for this rank - // This is just a heuristic to reduce reallocations - if (buffers.count == 0) { - buffers.ray_data.reserve(reserved_buffer_size_); - buffers.angular_flux.reserve(reserved_buffer_size_ * negroups_); - buffers.coord.reserve(reserved_buffer_size_ * n_coord_max); - buffers.cell_last.reserve(reserved_buffer_size_ * n_coord_max); - - - buffers.ray_data.reserve(32); - buffers.angular_flux.reserve(32 * negroups_); - buffers.coord.reserve(32 * n_coord_max); - buffers.cell_last.reserve(32 * n_coord_max); - } - - // Pack RayExchangeData directly into send buffer - RayBufferContainer& rbc = ray.exchange_data_; - RayExchangeData rd; - - rd.position = rbc.position; - rd.direction = rbc.direction; - rd.distance_travelled = rbc.distance_travelled; - rd.surface = rbc.surface; - rd.is_active = rbc.is_active; - rd.ray_id = rbc.ray_id; - rd.n_event = rbc.n_event; - rd.n_coord = rbc.n_coord; - rd.cell_instance = rbc.cell_instance; - rd.n_coord_last = rbc.n_coord_last; - rd.material = rbc.material; - rd.material_last = rbc.material_last; - rd.sqrtkT = rbc.sqrtkT; - rd.sqrtkT_last = rbc.sqrtkT_last; - #ifdef OPENMC_DAGMC_ENABLED - rd.last_dir = rbc.last_dir; - rd.n_handles = rbc.n_handles; - std::memcpy(rd.handles, rbc.handles, MAX_N_HANDLES * sizeof(moab::EntityHandle)); + rd.last_dir = rbc.last_dir; + rd.n_handles = rbc.n_handles; + std::memcpy( + rd.handles, rbc.handles, MAX_N_HANDLES * sizeof(moab::EntityHandle)); #endif - - buffers.ray_data.push_back(rd); - - // Pack angular flux array directly - buffers.angular_flux.insert(buffers.angular_flux.end(), - rbc.angular_flux.begin(), - rbc.angular_flux.end()); - - // Pack coord and cell_last arrays directly - buffers.coord.insert(buffers.coord.end(), - rbc.coord.begin(), - rbc.coord.end()); - buffers.cell_last.insert(buffers.cell_last.end(), - rbc.cell_last.begin(), - rbc.cell_last.end()); - - buffers.count++; + + buffers.ray_data.push_back(rd); + + // Pack angular flux array directly + buffers.angular_flux.insert(buffers.angular_flux.end(), + rbc.angular_flux.begin(), rbc.angular_flux.end()); + + // Pack coord and cell_last arrays directly + buffers.coord.insert(buffers.coord.end(), rbc.coord.begin(), rbc.coord.end()); + buffers.cell_last.insert( + buffers.cell_last.end(), rbc.cell_last.begin(), rbc.cell_last.end()); + + buffers.count++; } // Update ray bank -void RayBank::update(FlatSourceDomain* domain){ +void RayBank::update(FlatSourceDomain* domain) +{ - // Empty ray list because rays have either died or are in buffer to be sent to other ranks - my_ray_list_.resize(0); + // Empty ray list because rays have either died or are in buffer to be sent to + // other ranks + my_ray_list_.resize(0); - // Communicate number of rays to be sent/received between ranks - communicate_message_metadata(); + // Communicate number of rays to be sent/received between ranks + communicate_message_metadata(); - // Send and receive ray data between MPI ranks - communicate_rays(); + // Send and receive ray data between MPI ranks + communicate_rays(); - // Add received rays to ray list of that rank - update_my_ray_list(domain); + // Add received rays to ray list of that rank + update_my_ray_list(domain); } -int RayBank::ray_bank_size(){ +int RayBank::ray_bank_size() +{ int ray_bank_size = my_ray_list_.size(); return ray_bank_size; } -// Tells each rank how many rays to receive from who and how many rays to send to who -void RayBank::communicate_message_metadata() { +// Tells each rank how many rays to receive from who and how many rays to send +// to who +void RayBank::communicate_message_metadata() +{ // Ensure all values are zero in vector for receiving counts fill(num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); @@ -132,121 +136,119 @@ void RayBank::communicate_message_metadata() { // Exchange message counts with all ranks MPI_Alltoall(num_messages_sending_.data(), 1, MPI_INT, - num_messages_receiving_.data(), 1, MPI_INT, - mpi::intracomm); - - total_receiving_rays_ = accumulate(num_messages_receiving_.begin(), - num_messages_receiving_.end(), 0); + num_messages_receiving_.data(), 1, MPI_INT, mpi::intracomm); + total_receiving_rays_ = accumulate( + num_messages_receiving_.begin(), num_messages_receiving_.end(), 0); } -void RayBank::communicate_rays(){ +void RayBank::communicate_rays() +{ - // Get the maximum coordinate levels - const int n_coord_max = model::n_coord_levels; + // Get the maximum coordinate levels + const int n_coord_max = model::n_coord_levels; - // Allocate receiving buffers - received_ray_data_.resize(total_receiving_rays_); - received_angular_flux_data_.resize(total_receiving_rays_ * negroups_); - received_coord_.resize(total_receiving_rays_ * n_coord_max); - received_cell_last_.resize(total_receiving_rays_ * n_coord_max); + // Allocate receiving buffers + received_ray_data_.resize(total_receiving_rays_); + received_angular_flux_data_.resize(total_receiving_rays_ * negroups_); + received_coord_.resize(total_receiving_rays_ * n_coord_max); + received_cell_last_.resize(total_receiving_rays_ * n_coord_max); + + // Calculate total number of MPI requests needed + // 4 messages per sending rank + 4 messages per receiving rank + int num_send_ranks = ray_send_buffer_.size(); + int num_recv_ranks = 0; + for (int i = 0; i < mpi::n_procs; i++) { + if (num_messages_receiving_[i] > 0) + num_recv_ranks++; + } - // Calculate total number of MPI requests needed - // 4 messages per sending rank + 4 messages per receiving rank - int num_send_ranks = ray_send_buffer_.size(); - int num_recv_ranks = 0; - for (int i = 0; i < mpi::n_procs; i++) { - if (num_messages_receiving_[i] > 0) num_recv_ranks++; - } - - int total_requests = num_send_ranks * 4 + num_recv_ranks * 4; - vector requests(total_requests); - int req_idx = 0; - - // Post all non-blocking receives first to allow for potential overlap - // of communication and packing of send buffers - int recv_offset = 0; - for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { - int num_rays_receiving = num_messages_receiving_[sending_rank]; - if (num_rays_receiving == 0) continue; - - MPI_Irecv(&received_ray_data_[recv_offset], - num_rays_receiving * sizeof(RayExchangeData), - MPI_BYTE, sending_rank, 1, mpi::intracomm, &requests[req_idx++]); - - MPI_Irecv(&received_angular_flux_data_[recv_offset * negroups_], - num_rays_receiving * negroups_, - MPI_FLOAT, sending_rank, 2, mpi::intracomm, &requests[req_idx++]); - - MPI_Irecv(&received_coord_[recv_offset * n_coord_max], - num_rays_receiving * n_coord_max * sizeof(LocalCoord), - MPI_BYTE, sending_rank, 3, mpi::intracomm, &requests[req_idx++]); - - MPI_Irecv(&received_cell_last_[recv_offset * n_coord_max], - num_rays_receiving * n_coord_max, - MPI_INT, sending_rank, 4, mpi::intracomm, &requests[req_idx++]); - - recv_offset += num_rays_receiving; - } + int total_requests = num_send_ranks * 4 + num_recv_ranks * 4; + vector requests(total_requests); + int req_idx = 0; - // Post all non-blocking sends! - for (auto& [receiving_rank, buffers] : ray_send_buffer_) { - int num_rays = buffers.count; - - // Check neighbor list and add if not already known - // Filter out rays that are sampled elsewhere - bool has_transported_rays = false; - for (int i = 0; i < num_rays; i++) { - if (buffers.ray_data[i].distance_travelled > 0.0 || buffers.ray_data[i].is_active) { - has_transported_rays = true; - break; - } - } - if (has_transported_rays) { - mpi::decomp_map.my_neighbors_.insert(receiving_rank); + // Post all non-blocking receives first to allow for potential overlap + // of communication and packing of send buffers + int recv_offset = 0; + for (int sending_rank = 0; sending_rank < mpi::n_procs; sending_rank++) { + int num_rays_receiving = num_messages_receiving_[sending_rank]; + if (num_rays_receiving == 0) + continue; + + MPI_Irecv(&received_ray_data_[recv_offset], + num_rays_receiving * sizeof(RayExchangeData), MPI_BYTE, sending_rank, 1, + mpi::intracomm, &requests[req_idx++]); + + MPI_Irecv(&received_angular_flux_data_[recv_offset * negroups_], + num_rays_receiving * negroups_, MPI_FLOAT, sending_rank, 2, + mpi::intracomm, &requests[req_idx++]); + + MPI_Irecv(&received_coord_[recv_offset * n_coord_max], + num_rays_receiving * n_coord_max * sizeof(LocalCoord), MPI_BYTE, + sending_rank, 3, mpi::intracomm, &requests[req_idx++]); + + MPI_Irecv(&received_cell_last_[recv_offset * n_coord_max], + num_rays_receiving * n_coord_max, MPI_INT, sending_rank, 4, + mpi::intracomm, &requests[req_idx++]); + + recv_offset += num_rays_receiving; + } + + // Post all non-blocking sends! + for (auto& [receiving_rank, buffers] : ray_send_buffer_) { + int num_rays = buffers.count; + + // Check neighbor list and add if not already known + // Filter out rays that are sampled elsewhere + bool has_transported_rays = false; + for (int i = 0; i < num_rays; i++) { + if (buffers.ray_data[i].distance_travelled > 0.0 || + buffers.ray_data[i].is_active) { + has_transported_rays = true; + break; } - - // Send all 4 data arrays - already packed, no intermediate copying! - MPI_Isend(buffers.ray_data.data(), - num_rays * sizeof(RayExchangeData), - MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx++]); - - MPI_Isend(buffers.angular_flux.data(), - num_rays * negroups_, - MPI_FLOAT, receiving_rank, 2, mpi::intracomm, &requests[req_idx++]); - - MPI_Isend(buffers.coord.data(), - num_rays * n_coord_max * sizeof(LocalCoord), - MPI_BYTE, receiving_rank, 3, mpi::intracomm, &requests[req_idx++]); - - MPI_Isend(buffers.cell_last.data(), - num_rays * n_coord_max, - MPI_INT, receiving_rank, 4, mpi::intracomm, &requests[req_idx++]); + } + if (has_transported_rays) { + mpi::decomp_map.my_neighbors_.insert(receiving_rank); } - // Wait for all communication to complete - MPI_Waitall(req_idx, requests.data(), MPI_STATUSES_IGNORE); - - // Clear send buffers - ray_send_buffer_.clear(); + // Send all 4 data arrays - already packed, no intermediate copying! + MPI_Isend(buffers.ray_data.data(), num_rays * sizeof(RayExchangeData), + MPI_BYTE, receiving_rank, 1, mpi::intracomm, &requests[req_idx++]); + + MPI_Isend(buffers.angular_flux.data(), num_rays * negroups_, MPI_FLOAT, + receiving_rank, 2, mpi::intracomm, &requests[req_idx++]); + + MPI_Isend(buffers.coord.data(), num_rays * n_coord_max * sizeof(LocalCoord), + MPI_BYTE, receiving_rank, 3, mpi::intracomm, &requests[req_idx++]); + + MPI_Isend(buffers.cell_last.data(), num_rays * n_coord_max, MPI_INT, + receiving_rank, 4, mpi::intracomm, &requests[req_idx++]); + } + + // Wait for all communication to complete + MPI_Waitall(req_idx, requests.data(), MPI_STATUSES_IGNORE); + + // Clear send buffers + ray_send_buffer_.clear(); } -void RayBank::update_my_ray_list(FlatSourceDomain* domain){ +void RayBank::update_my_ray_list(FlatSourceDomain* domain) +{ my_ray_list_.resize(received_ray_data_.size()); const int n_coord_max = model::n_coord_levels; - // Add re-initialized random ray objects to my_ray_list - #pragma omp parallel for - for (int i = 0; i < received_ray_data_.size(); i++) { +// Add re-initialized random ray objects to my_ray_list +#pragma omp parallel for + for (int i = 0; i < received_ray_data_.size(); i++) { - // Re-initialize rays with received data, including full geometry state - my_ray_list_[i].restart_ray(domain, received_ray_data_[i], - &received_angular_flux_data_[i * negroups_], - &received_coord_[i * n_coord_max], - &received_cell_last_[i * n_coord_max]); - } + // Re-initialize rays with received data, including full geometry state + my_ray_list_[i].restart_ray(domain, received_ray_data_[i], + &received_angular_flux_data_[i * negroups_], + &received_coord_[i * n_coord_max], &received_cell_last_[i * n_coord_max]); + } // Clear received data vectors received_ray_data_.resize(0); @@ -255,17 +257,18 @@ void RayBank::update_my_ray_list(FlatSourceDomain* domain){ received_cell_last_.resize(0); } -bool RayBank::is_any_ray_alive(){ +bool RayBank::is_any_ray_alive() +{ int local_rays_alive = ray_bank_size(); int flag = 0; if (local_rays_alive > 0) { flag = 1; } - + MPI_Allreduce(MPI_IN_PLACE, &flag, 1, MPI_INT, MPI_MAX, mpi::intracomm); - + return flag > 0; } -}// namespace openmc +} // namespace openmc diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index 68d4c1a6fed..6046e278ad2 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -11,18 +11,23 @@ namespace openmc { //============================================================================== SourceRegionHandle::SourceRegionHandle(SourceRegion& sr) : negroups_(sr.scalar_flux_old_.size()), material_(&sr.scalars_.material_), - temperature_idx_(&sr.scalars_.temperature_idx_), density_mult_(&sr.scalars_.density_mult_), + temperature_idx_(&sr.scalars_.temperature_idx_), + density_mult_(&sr.scalars_.density_mult_), is_small_(&sr.scalars_.is_small_), n_hits_(&sr.scalars_.n_hits_), is_linear_(sr.source_gradients_.size() > 0), lock_(&sr.lock_), - volume_(&sr.scalars_.volume_), volume_t_(&sr.scalars_.volume_t_), volume_sq_(&sr.scalars_.volume_sq_), - volume_sq_t_(&sr.scalars_.volume_sq_t_), volume_naive_(&sr.scalars_.volume_naive_), + volume_(&sr.scalars_.volume_), volume_t_(&sr.scalars_.volume_t_), + volume_sq_(&sr.scalars_.volume_sq_), + volume_sq_t_(&sr.scalars_.volume_sq_t_), + volume_naive_(&sr.scalars_.volume_naive_), position_recorded_(&sr.scalars_.position_recorded_), external_source_present_(&sr.scalars_.external_source_present_), position_(&sr.scalars_.position_), centroid_(&sr.scalars_.centroid_), - centroid_iteration_(&sr.scalars_.centroid_iteration_), centroid_t_(&sr.scalars_.centroid_t_), - mom_matrix_(&sr.scalars_.mom_matrix_), mom_matrix_t_(&sr.scalars_.mom_matrix_t_), - volume_task_(&sr.volume_task_), mesh_(&sr.scalars_.mesh_), - parent_sr_(&sr.scalars_.parent_sr_), scalar_flux_old_(sr.scalar_flux_old_.data()), + centroid_iteration_(&sr.scalars_.centroid_iteration_), + centroid_t_(&sr.scalars_.centroid_t_), + mom_matrix_(&sr.scalars_.mom_matrix_), + mom_matrix_t_(&sr.scalars_.mom_matrix_t_), volume_task_(&sr.volume_task_), + mesh_(&sr.scalars_.mesh_), parent_sr_(&sr.scalars_.parent_sr_), + scalar_flux_old_(sr.scalar_flux_old_.data()), scalar_flux_new_(sr.scalar_flux_new_.data()), source_(sr.source_.data()), external_source_(sr.external_source_.data()), scalar_flux_final_(sr.scalar_flux_final_.data()), @@ -112,21 +117,24 @@ SourceRegion::SourceRegion(const SourceRegionHandle& handle) } // combine two source regions from different ranks together -void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) { +void SourceRegion::merge(SourceRegion& sr_add, bool is_linear) +{ // scalar fields scalars_.volume_ += sr_add.scalars_.volume_; scalars_.volume_sq_ += sr_add.scalars_.volume_sq_; scalars_.volume_naive_ += sr_add.scalars_.volume_naive_; scalars_.n_hits_ += sr_add.scalars_.n_hits_; - scalars_.external_source_present_ = std::max(scalars_.external_source_present_, sr_add.scalars_.external_source_present_); + scalars_.external_source_present_ = + std::max(scalars_.external_source_present_, + sr_add.scalars_.external_source_present_); scalars_.centroid_iteration_ += sr_add.scalars_.centroid_iteration_; if (is_linear) { scalars_.mom_matrix_ += sr_add.scalars_.mom_matrix_; } - // vector fields - #pragma omp simd +// vector fields +#pragma omp simd for (int g = 0; g < scalar_flux_new_.size(); g++) { scalar_flux_new_[g] += sr_add.scalar_flux_new_[g]; scalar_flux_final_[g] += sr_add.scalar_flux_final_[g]; @@ -298,7 +306,6 @@ SourceRegionHandle SourceRegionContainer::get_source_region_handle(int64_t sr) handle.centroid_t_ = ¢roid_t(sr); handle.key_ = &key(sr); - if (handle.is_linear_) { handle.mom_matrix_ = &mom_matrix(sr); handle.mom_matrix_t_ = &mom_matrix_t(sr); From f173173d65908e92edbbe50ebcb8cdf893d4c4dd Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 23 Jul 2026 16:11:10 +0100 Subject: [PATCH 46/48] Guard domain decomposition features for compiler --- include/openmc/random_ray/parallel_map.h | 7 +++++- src/random_ray/decomposition_map.cpp | 6 +++-- src/random_ray/flat_source_domain.cpp | 30 ++++++++++++++++++++---- src/random_ray/random_ray.cpp | 8 +++++++ src/random_ray/random_ray_simulation.cpp | 21 +++++++++++++++++ src/random_ray/ray_bank.cpp | 4 ++++ src/random_ray/source_region.cpp | 5 +++- 7 files changed, 72 insertions(+), 9 deletions(-) diff --git a/include/openmc/random_ray/parallel_map.h b/include/openmc/random_ray/parallel_map.h index abc81738ef4..cc77c787ad8 100644 --- a/include/openmc/random_ray/parallel_map.h +++ b/include/openmc/random_ray/parallel_map.h @@ -1,6 +1,7 @@ #ifndef OPENMC_RANDOM_RAY_PARALLEL_HASH_MAP_H #define OPENMC_RANDOM_RAY_PARALLEL_HASH_MAP_H +#include "openmc/error.h" #include "openmc/openmp_interface.h" #include @@ -142,7 +143,11 @@ class ParallelMap { ValueType& operator[](const KeyType& key) { Bucket& bucket = get_bucket(key); - return *bucket.map_[key].get(); + auto it = bucket.map_.find(key); + if (it == bucket.map_.end()) { + fatal_error("ParallelMap::operator[]: key not present in map."); + } + return *it->second; } ValueType* emplace(KeyType key, const ValueType& value) diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 619d3446334..8d89d0290e8 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -12,6 +12,8 @@ #include "openmc/vector.h" #include +#ifdef OPENMC_MPI + namespace openmc { namespace mpi { @@ -489,7 +491,6 @@ void DecompositionMap::exchange_sr_info( // Communicate source region data and merge on receiver side if (mpi::rank == sender) { - SourceRegion& sr = discovered_source_regions[sr_key]; send_sr_data(receiver, sr); @@ -1139,4 +1140,5 @@ double DecompositionMap::calculate_load_ratio(int rank) } } -} // namespace openmc \ No newline at end of file +} // namespace openmc +#endif // OPENMC_MPI diff --git a/src/random_ray/flat_source_domain.cpp b/src/random_ray/flat_source_domain.cpp index 15a5aa38691..f3ef5fec78d 100644 --- a/src/random_ray/flat_source_domain.cpp +++ b/src/random_ray/flat_source_domain.cpp @@ -374,6 +374,7 @@ void FlatSourceDomain::compute_k_eff() } // Sum up fission rates across all ranks +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { simulation::time_decomposition_handling.start(); MPI_Allreduce( @@ -382,6 +383,7 @@ void FlatSourceDomain::compute_k_eff() MPI_IN_PLACE, &fission_rate_new, 1, MPI_DOUBLE, MPI_SUM, mpi::intracomm); simulation::time_decomposition_handling.stop(); } +#endif double k_eff_new = k_eff_ * (fission_rate_new / fission_rate_old); @@ -400,6 +402,7 @@ void FlatSourceDomain::compute_k_eff() } } +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { simulation::time_decomposition_handling.start(); if (mpi::master) { @@ -409,6 +412,7 @@ void FlatSourceDomain::compute_k_eff() } simulation::time_decomposition_handling.stop(); } +#endif // Adds entropy value to shared entropy vector in openmc namespace. simulation::entropy.push_back(H); @@ -613,6 +617,13 @@ double FlatSourceDomain::compute_fixed_source_normalization_factor() const } } +#ifdef OPENMC_MPI + if (mpi::n_procs > 1) { + MPI_Allreduce(MPI_IN_PLACE, &simulation_external_source_strength, 1, + MPI_DOUBLE, MPI_SUM, mpi::intracomm); + } +#endif + // Step 2 is to determine the total user-specified external source strength double user_external_source_strength = 0.0; for (auto& ext_source : model::external_sources) { @@ -750,6 +761,15 @@ void FlatSourceDomain::random_ray_tally() // see what index that score corresponds to. If that score is a flux score, // then we divide it by volume. if (volume_normalized_flux_tallies_) { +#ifdef OPENMC_MPI + if (mpi::n_procs > 1) { + for (auto& volumes : tally_volumes_) { + MPI_Allreduce(MPI_IN_PLACE, volumes.data(), + static_cast(volumes.size()), MPI_DOUBLE, MPI_SUM, + mpi::intracomm); + } + } +#endif for (int i = 0; i < model::tallies.size(); i++) { Tally& tally {*model::tallies[i]}; #pragma omp parallel for @@ -1035,11 +1055,10 @@ void FlatSourceDomain::output_to_vtk() const } } -// Outputs all basic material, FSR ID, multigroup flux, and -// fission source data to .vtk file that can be directly -// loaded and displayed by Paraview. Note that .vtk binary -// files require big endian byte ordering, so endianness -// is checked and flipped if necessary. +// Variant of output_to_vtk() for domain decomposition case. Every rank +// contributes the data of its own subdomain, reduced onto the master rank for +// file output. +#ifdef OPENMC_MPI void FlatSourceDomain::output_to_vtk_decomp() const { @@ -1471,6 +1490,7 @@ void FlatSourceDomain::output_to_vtk_decomp() const } } } +#endif // OPENMC_MPI void FlatSourceDomain::apply_external_source_to_source_region( int src_idx, SourceRegionHandle& srh) diff --git a/src/random_ray/random_ray.cpp b/src/random_ray/random_ray.cpp index 21d26e3e5b7..951d58ffd10 100644 --- a/src/random_ray/random_ray.cpp +++ b/src/random_ray/random_ray.cpp @@ -294,6 +294,7 @@ void RandomRay::event_advance_ray() boundary() = distance_to_boundary(*this); double distance = boundary().distance(); +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { // If domain decomposition is being used, update counter for // ray trace operations in source region for load estimation @@ -303,6 +304,7 @@ void RandomRay::event_advance_ray() mpi::decomp_map.num_base_source_region_RT_[sr] += c.n_surfaces(); } } +#endif if (distance < 0.0) { mark_as_lost("Negative transport distance detected for particle " + @@ -401,9 +403,11 @@ void RandomRay::attenuate_flux(double distance, bool is_active, double offset) for (int b = 0; b < mesh_bins_.size(); b++) { double physical_length = reduced_distance * mesh_fractional_lengths_[b]; +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { mpi::decomp_map.num_mesh_bin_RT_[sr] += 1; } +#endif // Very flat angles can result in very small physical lengths, // despite the TINY_BIT adjustment for Position start. If this happens at @@ -460,6 +464,7 @@ void RandomRay::attenuate_flux_inner( { SourceRegionKey sr_key {sr, mesh_bin}; +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { // Check which rank owns the source region at the current position Position midpoint = r + u() * (distance / 2.0); @@ -473,6 +478,7 @@ void RandomRay::attenuate_flux_inner( return; } } +#endif SourceRegionHandle srh; srh = domain_->get_subdivided_source_region_handle(sr_key, r, u()); @@ -1005,6 +1011,7 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) SourceRegionKey sr_key = domain_->lookup_source_region_key(*this); +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { // Check if ray sampling site belongs to subdomain owner_rank_ = mpi::decomp_map.find_owner( @@ -1019,6 +1026,7 @@ void RandomRay::initialize_ray(uint64_t ray_id, FlatSourceDomain* domain) return; } } +#endif SourceRegionHandle srh = domain_->get_subdivided_source_region_handle(sr_key, r(), u()); diff --git a/src/random_ray/random_ray_simulation.cpp b/src/random_ray/random_ray_simulation.cpp index e6fbfe3d3d4..ed8a7fe0542 100644 --- a/src/random_ray/random_ray_simulation.cpp +++ b/src/random_ray/random_ray_simulation.cpp @@ -388,10 +388,12 @@ void RandomRaySimulation::simulate() // Begin main simulation timer simulation::time_total.start(); +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { // Initialize subdomains for MPI ranks mpi::decomp_map.initialize(); } +#endif // Reset per-solve accumulators, as simulate() may run more than once on the // same object (e.g. forward then adjoint when generating weight windows) @@ -425,11 +427,13 @@ void RandomRaySimulation::simulate() } // Generate Voronoi cells, each of which corresponds to a rank subdomain +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { simulation::time_generate_voronoi_centers.start(); mpi::decomp_map.generate_rank_centers(); simulation::time_generate_voronoi_centers.stop(); } +#endif geometry_setup_complete_ = true; } @@ -438,6 +442,7 @@ void RandomRaySimulation::simulate() simulation::time_transport.start(); // Transport sweep over all random rays for the iteration +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { // Create ray bank to store rays @@ -458,6 +463,9 @@ void RandomRaySimulation::simulate() } else { transport_sweep(); } +#else + transport_sweep(); +#endif // Add any newly discovered source regions to the main source region // container @@ -467,6 +475,7 @@ void RandomRaySimulation::simulate() domain_->normalize_scalar_flux_and_volumes( settings::n_particles * RandomRay::distance_active_); +#ifdef OPENMC_MPI if (mpi::n_procs > 1 && simulation::current_batch <= ITER_LOAD_BALANCE) { // Balance load between MPI ranks by exchanging source regions simulation::time_load_balance.start(); @@ -474,6 +483,7 @@ void RandomRaySimulation::simulate() MPI_Barrier(mpi::intracomm); simulation::time_load_balance.stop(); } +#endif // Add source to scalar flux, compute number of FSR hits int64_t n_hits = domain_->add_source_to_scalar_flux(); @@ -543,6 +553,7 @@ void RandomRaySimulation::output_simulation_results() int64_t total_n_external_source_regions = domain_->n_external_source_regions_; double max_load_imbalance = 0.0; +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { // Average number of ray communications between ranks per batch @@ -593,6 +604,7 @@ void RandomRaySimulation::output_simulation_results() mpi::decomp_map.target_load_; } } +#endif // Print random ray results if (mpi::master) { @@ -603,11 +615,15 @@ void RandomRaySimulation::output_simulation_results() } if (model::plots.size() > 0) { +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { domain_->output_to_vtk_decomp(); } else { domain_->output_to_vtk(); } +#else + domain_->output_to_vtk(); +#endif } } @@ -619,6 +635,7 @@ void RandomRaySimulation::instability_check( uint64_t n_source_regions = domain_->n_source_regions(); +#ifdef OPENMC_MPI if (mpi::n_procs > 1) { // Reduce n_hits and n_source_regions on master rank to compute // global miss rate @@ -635,6 +652,7 @@ void RandomRaySimulation::instability_check( } simulation::time_decomposition_handling.stop(); } +#endif if (mpi::master) { double percent_missed = @@ -840,6 +858,8 @@ void RandomRaySimulation::transport_sweep() simulation::time_transport.stop(); } +// Transport sweep for the domain decompososition case +#ifdef OPENMC_MPI void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) { @@ -938,6 +958,7 @@ void RandomRaySimulation::transport_sweep_decomp(RayBank& RB) simulation::time_decomposition_handling.stop(); } +#endif // OPENMC_MPI } // namespace openmc diff --git a/src/random_ray/ray_bank.cpp b/src/random_ray/ray_bank.cpp index 78bcb6d1ee4..07f8f4f92b5 100644 --- a/src/random_ray/ray_bank.cpp +++ b/src/random_ray/ray_bank.cpp @@ -11,6 +11,8 @@ #include "openmc/timer.h" #include +#ifdef OPENMC_MPI + namespace openmc { // Constructor @@ -272,3 +274,5 @@ bool RayBank::is_any_ray_alive() } } // namespace openmc + +#endif // OPENMC_MPI diff --git a/src/random_ray/source_region.cpp b/src/random_ray/source_region.cpp index 6046e278ad2..a893ce401b1 100644 --- a/src/random_ray/source_region.cpp +++ b/src/random_ray/source_region.cpp @@ -320,6 +320,10 @@ SourceRegionHandle SourceRegionContainer::get_source_region_handle(int64_t sr) void SourceRegionContainer::adjoint_reset() { + // Note: key_ must NOT be reset here. Source region keys are permanent + // identifiers and required under domain decomposition to rebuild + // source_region_map_ during load balancing and to exchange source region data + // between ranks. std::fill(n_hits_.begin(), n_hits_.end(), 0); std::fill(volume_.begin(), volume_.end(), 0.0); std::fill(volume_t_.begin(), volume_t_.end(), 0.0); @@ -333,7 +337,6 @@ void SourceRegionContainer::adjoint_reset() std::fill(centroid_iteration_.begin(), centroid_iteration_.end(), Position {0.0, 0.0, 0.0}); std::fill(centroid_t_.begin(), centroid_t_.end(), Position {0.0, 0.0, 0.0}); - std::fill(key_.begin(), key_.end(), SourceRegionKey {0, 0}); std::fill(mom_matrix_.begin(), mom_matrix_.end(), MomentMatrix {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}); std::fill(mom_matrix_t_.begin(), mom_matrix_t_.end(), From 805f7cecbb58d68a8112c8029f9c44225a6d4fa1 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Thu, 23 Jul 2026 17:33:47 +0100 Subject: [PATCH 47/48] Apply clang-format --- include/openmc/random_ray/source_region.h | 5 +---- src/random_ray/decomposition_map.cpp | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/openmc/random_ray/source_region.h b/include/openmc/random_ray/source_region.h index e5efbf1dd0f..62abe5377aa 100644 --- a/include/openmc/random_ray/source_region.h +++ b/include/openmc/random_ray/source_region.h @@ -493,10 +493,7 @@ class SourceRegionContainer { } SourceRegionKey& key(int64_t sr) { return key_[sr]; } - const SourceRegionKey key(int64_t sr) const - { - return key_[sr]; - } + const SourceRegionKey key(int64_t sr) const { return key_[sr]; } MomentArray& source_gradients(int64_t sr, int g) { diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index 8d89d0290e8..ba08b6d3693 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -474,10 +474,11 @@ void DecompositionMap::exchange_sr_info( if (mpi::rank == sender) { SourceRegion& contested_sr = discovered_source_regions[sr_key]; double volume_sr = contested_sr.scalars_.volume_; - bcast_load = C1_ * - (contested_sr.scalars_.n_hits_ / simulation::current_batch) * - negroups_ + volume_sr * - ray_tracing_cost_[sr_key.base_source_region_id]; + bcast_load = + C1_ * + (contested_sr.scalars_.n_hits_ / simulation::current_batch) * + negroups_ + + volume_sr * ray_tracing_cost_[sr_key.base_source_region_id]; } MPI_Bcast(&bcast_load, 1, MPI_DOUBLE, sender, mpi::intracomm); @@ -623,7 +624,7 @@ void DecompositionMap::receive_sr_data(int sender, SourceRegion& sr_recv) int DecompositionMap::find_owner(SourceRegionKey sr_key, Position r, ParallelMap& - discovered_source_regions) + discovered_source_regions) { // Check if source region key is in subdomain map @@ -961,9 +962,11 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, double volume_sr = domain->source_regions_.volume_t(sr); thread_load[owner] += load_ratio[owner] * - (C1_ * (domain->source_regions_.n_hits(sr) / simulation::current_batch) * - negroups_ + volume_sr * - ray_tracing_cost_[domain->source_regions_.key(sr).base_source_region_id]); + (C1_ * + (domain->source_regions_.n_hits(sr) / simulation::current_batch) * + negroups_ + + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr) + .base_source_region_id]); } // Combine results from different threads From d3b3c768454324f1aebeeebdb8a2697595a4aa23 Mon Sep 17 00:00:00 2001 From: "M.H.G. Kraus" Date: Fri, 24 Jul 2026 10:24:08 +0100 Subject: [PATCH 48/48] Apply clang-format version 18.1.3 --- src/random_ray/decomposition_map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/random_ray/decomposition_map.cpp b/src/random_ray/decomposition_map.cpp index ba08b6d3693..7e208940e48 100644 --- a/src/random_ray/decomposition_map.cpp +++ b/src/random_ray/decomposition_map.cpp @@ -966,7 +966,7 @@ void DecompositionMap::update_load(FlatSourceDomain* domain, (domain->source_regions_.n_hits(sr) / simulation::current_batch) * negroups_ + volume_sr * ray_tracing_cost_[domain->source_regions_.key(sr) - .base_source_region_id]); + .base_source_region_id]); } // Combine results from different threads