From 53434692fab05ee5f4148c9051e520df3cd834a8 Mon Sep 17 00:00:00 2001 From: Brody Bassett Date: Sat, 9 Dec 2017 18:04:02 -0500 Subject: [PATCH 1/7] Removed reversal of energy bins in multigroup mode to agree with energy bin search in source. --- src/input_xml.F90 | 5 ----- src/tallies/tally_filter_energy.F90 | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 71ebe3ae6b..b7bc88e25d 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4172,7 +4172,6 @@ contains integer :: n_libraries logical :: file_exists ! does mgxs.h5 exist? integer(HID_T) :: file_id - real(8), allocatable :: rev_energy_bins(:) character(len=MAX_WORD_LEN), allocatable :: names(:) ! Check if MGXS Library exists @@ -4202,7 +4201,6 @@ contains num_delayed_groups = 0 end if - allocate(rev_energy_bins(num_energy_groups + 1)) allocate(energy_bins(num_energy_groups + 1)) if (attribute_exists(file_id, "group structure")) then @@ -4212,9 +4210,6 @@ contains call fatal_error("'group structure' attribute must exist!") end if - ! First reverse the order of energy_groups - energy_bins = energy_bins(num_energy_groups + 1:1:-1) - allocate(energy_bin_avg(num_energy_groups)) do i = 1, num_energy_groups energy_bin_avg(i) = HALF * (energy_bins(i) + energy_bins(i + 1)) diff --git a/src/tallies/tally_filter_energy.F90 b/src/tallies/tally_filter_energy.F90 index 7f96552800..b2498d4b5a 100644 --- a/src/tallies/tally_filter_energy.F90 +++ b/src/tallies/tally_filter_energy.F90 @@ -75,7 +75,7 @@ contains ! ordering of the library and tallying systems). if (.not. run_CE) then if (n == num_energy_groups + 1) then - if (all(this % bins == energy_bins(num_energy_groups + 1:1:-1))) & + if (all(this % bins == energy_bins)) & then this % matches_transport_groups = .true. end if From a9ec1af39eedd0994da54a7673c71c12c2f31387 Mon Sep 17 00:00:00 2001 From: Brody Bassett Date: Sat, 9 Dec 2017 20:14:03 -0500 Subject: [PATCH 2/7] Updated results for test_mgxs_library_ce_to_mg.py. --- tests/test_mgxs_library_ce_to_mg/results_true.dat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_mgxs_library_ce_to_mg/results_true.dat b/tests/test_mgxs_library_ce_to_mg/results_true.dat index 0fd5b48276..332bf12374 100644 --- a/tests/test_mgxs_library_ce_to_mg/results_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.133362E+00 1.746523E-02 +1.097605E+00 4.580419E-02 From fae2888b26b04258dbb8b3ba812c9c6bf7736147 Mon Sep 17 00:00:00 2001 From: Brody Bassett Date: Mon, 11 Dec 2017 04:10:32 -0500 Subject: [PATCH 3/7] Fixed issue in source.F90 with fixing energy bins. --- src/input_xml.F90 | 5 +++++ src/mgxs_header.F90 | 5 ++++- src/source.F90 | 11 ++++++----- src/tallies/tally_filter_energy.F90 | 4 ++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index b7bc88e25d..1eb1a0aee6 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4201,6 +4201,7 @@ contains num_delayed_groups = 0 end if + allocate(rev_energy_bins(num_energy_groups + 1)) allocate(energy_bins(num_energy_groups + 1)) if (attribute_exists(file_id, "group structure")) then @@ -4210,6 +4211,10 @@ contains call fatal_error("'group structure' attribute must exist!") end if + ! First reverse the order of energy_groups + rev_energy_bins = energy_bins + energy_bins = energy_bins(num_energy_groups + 1:1:-1) + allocate(energy_bin_avg(num_energy_groups)) do i = 1, num_energy_groups energy_bin_avg(i) = HALF * (energy_bins(i) + energy_bins(i + 1)) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index b282397245..46ad181d32 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -221,12 +221,15 @@ module mgxs_header ! Number of delayed groups integer :: num_delayed_groups - ! Energy group structure + ! Energy group structure with decreasing energy real(8), allocatable :: energy_bins(:) ! Midpoint of the energy group structure real(8), allocatable :: energy_bin_avg(:) + ! Energy group structure with increasing energy + real(8), allocatable :: rev_energy_bins(:) + contains !=============================================================================== diff --git a/src/source.F90 b/src/source.F90 index 0689cb4035..5a58a6a855 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -15,7 +15,7 @@ module source use hdf5_interface, only: file_create, file_open, file_close, read_dataset use math use message_passing, only: rank - use mgxs_header, only: energy_bins, num_energy_groups + use mgxs_header, only: rev_energy_bins, num_energy_groups use output, only: write_message use particle_header, only: Particle use random_lcg, only: prn, set_particle_seed, prn_set_stream @@ -129,13 +129,14 @@ contains ! If running in MG, convert site % E to group if (.not. run_CE) then - if (site % E <= energy_bins(1)) then - site % E = real(1, 8) - else if (site % E > energy_bins(num_energy_groups + 1)) then + if (site % E <= rev_energy_bins(1)) then site % E = real(num_energy_groups, 8) + else if (site % E > rev_energy_bins(num_energy_groups + 1)) then + site % E = real(1, 8) else - site % E = real(binary_search(energy_bins, num_energy_groups + 1, & + site % E = real(binary_search(rev_energy_bins, num_energy_groups + 1, & site % E), 8) + site % E = num_energy_groups + 1 - site % E end if end if diff --git a/src/tallies/tally_filter_energy.F90 b/src/tallies/tally_filter_energy.F90 index b2498d4b5a..2a247cf358 100644 --- a/src/tallies/tally_filter_energy.F90 +++ b/src/tallies/tally_filter_energy.F90 @@ -8,7 +8,7 @@ module tally_filter_energy use constants use error use hdf5_interface - use mgxs_header, only: num_energy_groups, energy_bins + use mgxs_header, only: num_energy_groups, rev_energy_bins use particle_header, only: Particle use settings, only: run_CE use string, only: to_str @@ -75,7 +75,7 @@ contains ! ordering of the library and tallying systems). if (.not. run_CE) then if (n == num_energy_groups + 1) then - if (all(this % bins == energy_bins)) & + if (all(this % bins == rev_energy_bins)) & then this % matches_transport_groups = .true. end if From b0fcb11136e439385a7a59a29db11c7265646118 Mon Sep 17 00:00:00 2001 From: Brody Bassett Date: Mon, 11 Dec 2017 04:16:29 -0500 Subject: [PATCH 4/7] Removed whitespace. --- src/mgxs_header.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 46ad181d32..a99939f4c3 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -229,7 +229,7 @@ module mgxs_header ! Energy group structure with increasing energy real(8), allocatable :: rev_energy_bins(:) - + contains !=============================================================================== From 2891fdae468c60c9630df50b104cad3ede99de2a Mon Sep 17 00:00:00 2001 From: Brody Bassett Date: Mon, 11 Dec 2017 04:22:51 -0500 Subject: [PATCH 5/7] Reverted changes to test_mgxs_library_ce_to_mg.py. --- tests/test_mgxs_library_ce_to_mg/results_true.dat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_mgxs_library_ce_to_mg/results_true.dat b/tests/test_mgxs_library_ce_to_mg/results_true.dat index 332bf12374..0fd5b48276 100644 --- a/tests/test_mgxs_library_ce_to_mg/results_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.097605E+00 4.580419E-02 +1.133362E+00 1.746523E-02 From 8e6b61711644effe17af82d58ddb196e748be798 Mon Sep 17 00:00:00 2001 From: Brody Bassett Date: Fri, 15 Dec 2017 02:19:50 -0500 Subject: [PATCH 6/7] Added a check for minimum energy in the source sampling. Set multigroup min and max energies and removed check for these after samping the source. --- src/input_xml.F90 | 5 +++++ src/source.F90 | 12 +++--------- src/source_header.F90 | 11 +++++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 1eb1a0aee6..72aaa6b7b7 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4215,11 +4215,16 @@ contains rev_energy_bins = energy_bins energy_bins = energy_bins(num_energy_groups + 1:1:-1) + ! Get the midpoint of the energy groups allocate(energy_bin_avg(num_energy_groups)) do i = 1, num_energy_groups energy_bin_avg(i) = HALF * (energy_bins(i) + energy_bins(i + 1)) end do + ! Get the minimum and maximum energies + energy_min_neutron = energy_bins(num_energy_groups + 1) + energy_max_neutron = energy_bins(1) + ! Get the datasets present in the library call get_groups(file_id, names) n_libraries = size(names) diff --git a/src/source.F90 b/src/source.F90 index 5a58a6a855..557120e979 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -129,15 +129,9 @@ contains ! If running in MG, convert site % E to group if (.not. run_CE) then - if (site % E <= rev_energy_bins(1)) then - site % E = real(num_energy_groups, 8) - else if (site % E > rev_energy_bins(num_energy_groups + 1)) then - site % E = real(1, 8) - else - site % E = real(binary_search(rev_energy_bins, num_energy_groups + 1, & - site % E), 8) - site % E = num_energy_groups + 1 - site % E - end if + site % E = real(binary_search(rev_energy_bins, num_energy_groups + 1, & + site % E), 8) + site % E = num_energy_groups + 1 - site % E end if ! Set the random number generator back to the tracking stream. diff --git a/src/source_header.F90 b/src/source_header.F90 index a60696996a..fca05d8167 100644 --- a/src/source_header.F90 +++ b/src/source_header.F90 @@ -9,7 +9,7 @@ module source_header use error use geometry, only: find_cell use material_header, only: materials - use nuclide_header, only: energy_max_neutron + use nuclide_header, only: energy_min_neutron, energy_max_neutron use particle_header, only: Particle use string, only: to_lower use xml_interface @@ -275,9 +275,12 @@ contains ! Check for monoenergetic source above maximum neutron energy select type (energy => this % energy) type is (Discrete) - if (any(energy % x >= energy_max_neutron)) then + if (any(energy % x > energy_max_neutron)) then call fatal_error("Source energy above range of energies of at least & &one cross section table") + else if (any(energy % x < energy_min_neutron)) then + call fatal_error("Source energy below range of energies of at least & + &one cross section table") end if end select @@ -285,8 +288,8 @@ contains ! Sample energy spectrum site % E = this % energy % sample() - ! resample if energy is greater than maximum neutron energy - if (site % E < energy_max_neutron) exit + ! Resample if energy falls outside minimum or maximum neutron energy + if (site % E < energy_max_neutron .and. site % E > energy_min_neutron) exit end do ! Set delayed group From 9b867f98635f853c4e5515eea4fa32be8b91d990 Mon Sep 17 00:00:00 2001 From: Brody Bassett Date: Fri, 15 Dec 2017 04:17:40 -0500 Subject: [PATCH 7/7] Removed whitespace. --- src/input_xml.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 72aaa6b7b7..b7c27e3084 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -4224,7 +4224,7 @@ contains ! Get the minimum and maximum energies energy_min_neutron = energy_bins(num_energy_groups + 1) energy_max_neutron = energy_bins(1) - + ! Get the datasets present in the library call get_groups(file_id, names) n_libraries = size(names)