From 3ff2410dfa4f6dc4aec210a65ca253029c5c0b6a Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 7 Feb 2019 13:13:43 -0500 Subject: [PATCH 1/3] Fix MG mode delayed nu-fission indexing bug --- include/openmc/xsdata.h | 2 +- src/mgxs.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/openmc/xsdata.h b/include/openmc/xsdata.h index a629d786a..a8aed5d17 100644 --- a/include/openmc/xsdata.h +++ b/include/openmc/xsdata.h @@ -77,7 +77,7 @@ class XsData { // [angle][delayed group] xt::xtensor decay_rate; // delayed_nu_fission has the following dimensions: - // [angle][incoming group][delayed group] + // [angle][delayed group][incoming group] xt::xtensor delayed_nu_fission; // chi_prompt has the following dimensions: // [angle][incoming group][outgoing group] diff --git a/src/mgxs.cpp b/src/mgxs.cpp index 43554f573..08c4f7894 100644 --- a/src/mgxs.cpp +++ b/src/mgxs.cpp @@ -467,7 +467,7 @@ Mgxs::get_xs(int xstype, int gin, int* gout, double* mu, int* dg) val = xs_t->delayed_nu_fission(a, *dg, gin); } else { val = 0.; - for (int d = 0; d < xs_t->delayed_nu_fission.shape()[2]; d++) { + for (int d = 0; d < xs_t->delayed_nu_fission.shape()[1]; d++) { val += xs_t->delayed_nu_fission(a, d, gin); } } From 66e2d1f63c70fa67cef435583a6d4ab360ffcf4a Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 7 Feb 2019 23:48:54 -0500 Subject: [PATCH 2/3] Fix MG mode bugs for inverse-vel and decay tallies --- src/tallies/tally.F90 | 8 ++++---- src/xsdata.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tallies/tally.F90 b/src/tallies/tally.F90 index 20087eab7..ad94000e9 100644 --- a/src/tallies/tally.F90 +++ b/src/tallies/tally.F90 @@ -1349,11 +1349,11 @@ contains if (i_nuclide > 0) then score = score * flux * get_nuclide_xs_c(i_nuclide, & MG_GET_XS_INVERSE_VELOCITY, p_g) / & - get_macro_xs_c(p % material, MG_GET_XS_ABSORPTION, p_g) + get_macro_xs_c(p % material, MG_GET_XS_TOTAL, p_g) else score = score * flux * get_macro_xs_c(p % material, & MG_GET_XS_INVERSE_VELOCITY, p_g) / & - get_macro_xs_c(p % material, MG_GET_XS_ABSORPTION, p_g) + get_macro_xs_c(p % material, MG_GET_XS_TOTAL, p_g) end if else @@ -1843,13 +1843,13 @@ contains if (i_nuclide > 0) then score = score + keff * atom_density * & fission_bank_wgt(n_bank - p % n_bank + k) * & - get_nuclide_xs_c(i_nuclide, MG_GET_XS_DECAY_RATE, p_g, DG=d) * & + get_nuclide_xs_c(i_nuclide, MG_GET_XS_DECAY_RATE, p_g, DG=g) * & get_nuclide_xs_c(i_nuclide, MG_GET_XS_FISSION, p_g) / & get_macro_xs_c(p % material, MG_GET_XS_FISSION, p_g) * flux else score = score + keff * & fission_bank_wgt(n_bank - p % n_bank + k) * & - get_macro_xs_c(p % material, MG_GET_XS_DECAY_RATE, p_g, DG=d) * flux + get_macro_xs_c(p % material, MG_GET_XS_DECAY_RATE, p_g, DG=g) * flux end if ! if the delayed group filter is present, tally to corresponding diff --git a/src/xsdata.cpp b/src/xsdata.cpp index 347793e5b..cee36a938 100644 --- a/src/xsdata.cpp +++ b/src/xsdata.cpp @@ -92,7 +92,7 @@ XsData::from_hdf5(hid_t xsdata_grp, bool fissionable, int scatter_format, fission_from_hdf5(xsdata_grp, n_ang, is_isotropic); } // Get the non-fission-specific data - read_nd_vector(xsdata_grp, "decay_rate", decay_rate); + read_nd_vector(xsdata_grp, "decay rate", decay_rate); read_nd_vector(xsdata_grp, "absorption", absorption, true); read_nd_vector(xsdata_grp, "inverse-velocity", inverse_velocity); From 7578378368f0426a872c7eece0dad7b269a1818d Mon Sep 17 00:00:00 2001 From: Sterling Harper Date: Thu, 7 Feb 2019 23:51:46 -0500 Subject: [PATCH 3/3] Increase MG mode tallies test coverage --- .../mg_tallies/inputs_true.dat | 32 ++++++------- .../mg_tallies/results_true.dat | 2 +- tests/regression_tests/mg_tallies/test.py | 47 ++++++++++++------- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/tests/regression_tests/mg_tallies/inputs_true.dat b/tests/regression_tests/mg_tallies/inputs_true.dat index a9b821c56..b75573b0a 100644 --- a/tests/regression_tests/mg_tallies/inputs_true.dat +++ b/tests/regression_tests/mg_tallies/inputs_true.dat @@ -58,27 +58,27 @@ 5 - total absorption flux fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate flux analog 5 - total absorption flux fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate flux tracklength 6 1 - total absorption flux fission nu-fission scatter nu-scatter + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate flux scatter nu-scatter analog 6 1 - total absorption flux fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate flux collision 6 1 - total absorption flux fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate flux tracklength @@ -87,17 +87,17 @@ 6 3 - total absorption flux fission nu-fission scatter nu-scatter + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate flux scatter nu-scatter analog 6 3 - total absorption flux fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate flux collision 6 3 - total absorption flux fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate flux tracklength @@ -107,31 +107,31 @@ 5 mat_1 - total absorption fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate analog 5 mat_1 - total absorption fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate tracklength 6 1 mat_1 - total absorption fission nu-fission scatter nu-scatter + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate scatter nu-scatter analog 6 1 mat_1 - total absorption fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate collision 6 1 mat_1 - total absorption fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate tracklength @@ -142,19 +142,19 @@ 6 3 mat_1 - total absorption fission nu-fission scatter nu-scatter + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate scatter nu-scatter analog 6 3 mat_1 - total absorption fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate collision 6 3 mat_1 - total absorption fission nu-fission + total absorption fission nu-fission inverse-velocity prompt-nu-fission delayed-nu-fission kappa-fission events decay-rate tracklength diff --git a/tests/regression_tests/mg_tallies/results_true.dat b/tests/regression_tests/mg_tallies/results_true.dat index 78a5883fe..bc2393f73 100644 --- a/tests/regression_tests/mg_tallies/results_true.dat +++ b/tests/regression_tests/mg_tallies/results_true.dat @@ -1 +1 @@ -41ea1f6b17c58a8141921af2f1d044eda93f3a9bca9463ee023af2e9865da613ace90fc8a25b42edde128ed827182ea9df0fe09d9b7887282d0ec092692cf717 \ No newline at end of file +15e00a46742e973d7c3c5defe427e6f76a4f1b661538cf54957712751410218dc64301fe12ccb8dbed3f2d51d19b3e99d2b615a3e98c46f9954894e96667dc23 \ No newline at end of file diff --git a/tests/regression_tests/mg_tallies/test.py b/tests/regression_tests/mg_tallies/test.py index 26d53c230..b0a898710 100644 --- a/tests/regression_tests/mg_tallies/test.py +++ b/tests/regression_tests/mg_tallies/test.py @@ -12,26 +12,37 @@ def create_library(): # Instantiate the energy group data and file object groups = openmc.mgxs.EnergyGroups(group_edges=[0.0, 0.625, 20.0e6]) - mg_cross_sections_file = openmc.MGXSLibrary(groups) + mg_cross_sections_file = openmc.MGXSLibrary(groups, 6) # Make the base, isotropic data - nu = [2.50, 2.50] + nu = np.array([2.50, 2.50]) fiss = np.array([0.002817, 0.097]) - capture = [0.008708, 0.02518] - absorption = np.add(capture, fiss) + capture = np.array([0.008708, 0.02518]) + absorption = capture + fiss scatter = np.array( [[[0.31980, 0.06694], [0.004555, -0.0003972]], [[0.00000, 0.00000], [0.424100, 0.05439000]]]) - total = [0.33588, 0.54628] - chi = [1., 0.] + total = np.array([0.33588, 0.54628]) + chi = np.array([1., 0.]) + decay_rate = np.array([0.013336, 0.032739, 0.12078, 0.30278, 0.84949, + 2.853]) + delayed_yield = np.array([0.00055487, 0.00286407, 0.00273429, 0.0061305, + 0.00251342, 0.00105286]) + inv_vel = 1.0 / np.array([1.4e9, 4.4e5]) - mat_1 = openmc.XSdata('mat_1', groups) + + mat_1 = openmc.XSdata('mat_1', groups, num_delayed_groups=6) mat_1.order = 1 - mat_1.set_nu_fission(np.multiply(nu, fiss)) + mat_1.set_fission(fiss) + mat_1.set_kappa_fission(fiss * 200e6) + mat_1.set_nu_fission(nu * fiss) + mat_1.set_beta(delayed_yield / 2.5) + mat_1.set_decay_rate(decay_rate) mat_1.set_absorption(absorption) mat_1.set_scatter_matrix(scatter) mat_1.set_total(total) mat_1.set_chi(chi) + mat_1.set_inverse_velocity(inv_vel) mg_cross_sections_file.add_xsdata(mat_1) # Write the file @@ -69,14 +80,18 @@ def test_mg_tallies(): nuclides = model.xs_data - scores = {False: ['total', 'absorption', 'flux', 'fission', 'nu-fission'], - True: ['total', 'absorption', 'fission', 'nu-fission']} + scores_with_nuclides = [ + 'total', 'absorption', 'fission', 'nu-fission', 'inverse-velocity', + 'prompt-nu-fission', 'delayed-nu-fission', 'kappa-fission', 'events', + 'decay-rate'] + scores_without_nuclides = scores_with_nuclides + ['flux'] - for do_nuclides in [False, True]: + for do_nuclides, scores in ((False, scores_without_nuclides), + (True, scores_with_nuclides)): t = openmc.Tally() t.filters = [mesh_filter] t.estimator = 'analog' - t.scores = scores[do_nuclides] + t.scores = scores if do_nuclides: t.nuclides = nuclides model.tallies.append(t) @@ -84,7 +99,7 @@ def test_mg_tallies(): t = openmc.Tally() t.filters = [mesh_filter] t.estimator = 'tracklength' - t.scores = scores[do_nuclides] + t.scores = scores if do_nuclides: t.nuclides = nuclides model.tallies.append(t) @@ -102,7 +117,7 @@ def test_mg_tallies(): t = openmc.Tally() t.filters = [mat_filter, e_filter] t.estimator = 'analog' - t.scores = scores[do_nuclides] + ['scatter', 'nu-scatter'] + t.scores = scores + ['scatter', 'nu-scatter'] if do_nuclides: t.nuclides = nuclides model.tallies.append(t) @@ -110,7 +125,7 @@ def test_mg_tallies(): t = openmc.Tally() t.filters = [mat_filter, e_filter] t.estimator = 'collision' - t.scores = scores[do_nuclides] + t.scores = scores if do_nuclides: t.nuclides = nuclides model.tallies.append(t) @@ -118,7 +133,7 @@ def test_mg_tallies(): t = openmc.Tally() t.filters = [mat_filter, e_filter] t.estimator = 'tracklength' - t.scores = scores[do_nuclides] + t.scores = scores if do_nuclides: t.nuclides = nuclides model.tallies.append(t)