From 8e6b61711644effe17af82d58ddb196e748be798 Mon Sep 17 00:00:00 2001 From: Brody Bassett Date: Fri, 15 Dec 2017 02:19:50 -0500 Subject: [PATCH] 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