From f58c379b53894d9e21e0d897322ab6249c564f9a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 24 Feb 2016 11:01:12 -0600 Subject: [PATCH 1/5] Refactored organization of reaction data --- src/ace.F90 | 185 +++++++++++++-------------- src/ace_header.F90 | 58 --------- src/angleenergy_header.F90 | 29 +++++ src/cross_section.F90 | 221 +++++++++++++++++---------------- src/energy_distribution.F90 | 106 ++++------------ src/nuclide_header.F90 | 44 +++---- src/output.F90 | 1 - src/physics.F90 | 18 +-- src/product_header.F90 | 61 +++++++++ src/reaction_header.F90 | 21 ++++ src/secondary_correlated.F90 | 52 ++++---- src/secondary_header.F90 | 83 ------------- src/secondary_kalbach.F90 | 60 ++++----- src/secondary_nbody.F90 | 70 +++++++++++ src/secondary_uncorrelated.F90 | 2 +- src/summary.F90 | 1 - src/tally.F90 | 41 +++--- src/urr_header.F90 | 20 +++ 18 files changed, 539 insertions(+), 534 deletions(-) delete mode 100644 src/ace_header.F90 create mode 100644 src/angleenergy_header.F90 create mode 100644 src/product_header.F90 create mode 100644 src/reaction_header.F90 delete mode 100644 src/secondary_header.F90 create mode 100644 src/secondary_nbody.F90 create mode 100644 src/urr_header.F90 diff --git a/src/ace.F90 b/src/ace.F90 index fbc1b7ee7c..431a9d4238 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -1,11 +1,11 @@ module ace - use ace_header, only: Reaction + use angleenergy_header, only: AngleEnergy use constants use distribution_univariate, only: Uniform, Equiprobable, Tabular use endf, only: is_fission, is_disappearance use energy_distribution, only: TabularEquiprobable, LevelInelastic, & - ContinuousTabular, MaxwellEnergy, Evaporation, WattEnergy, NBodyPhaseSpace + ContinuousTabular, MaxwellEnergy, Evaporation, WattEnergy use error, only: fatal_error, warning use fission, only: nu_total use global @@ -15,9 +15,9 @@ module ace use output, only: write_message use sab_header use set_header, only: SetChar - use secondary_header, only: AngleEnergy use secondary_correlated, only: CorrelatedAngleEnergy use secondary_kalbach, only: KalbachMann + use secondary_nbody, only: NBodyPhaseSpace use secondary_uncorrelated, only: UncorrelatedAngleEnergy use string, only: to_str, to_lower @@ -746,13 +746,14 @@ contains ! sigma array is not allocated or stored for elastic scattering since it is ! already stored in nuc % elastic associate (rxn => nuc % reactions(1)) - rxn%MT = 2 - rxn%Q_value = ZERO - rxn%multiplicity = 1 - rxn%threshold = 1 - rxn%scatter_in_cm = .true. - allocate(rxn%secondary%distribution(1)) - allocate(UncorrelatedAngleEnergy :: rxn%secondary%distribution(1)%obj) + rxn % MT = 2 + rxn % Q_value = ZERO + allocate(rxn % products(1)) + rxn % products(1) % yield = 1 + rxn % threshold = 1 + rxn % scatter_in_cm = .true. + allocate(rxn % products(1) % distribution(1)) + allocate(UncorrelatedAngleEnergy :: rxn % products(1) % distribution(1) % obj) end associate ! Add contribution of elastic scattering to total cross section @@ -768,45 +769,46 @@ contains do i = 1, NMT associate (rxn => nuc % reactions(i+1)) ! read MT number, Q-value, and neutrons produced - rxn % MT = int(XSS(LMT + i - 1)) - rxn % Q_value = XSS(JXS4 + i - 1) - rxn % multiplicity = abs(nint(XSS(JXS5 + i - 1))) + rxn % MT = int(XSS(LMT + i - 1)) + rxn % Q_value = XSS(JXS4 + i - 1) + allocate(rxn % products(1)) + rxn % products(1) % yield = abs(nint(XSS(JXS5 + i - 1))) rxn % scatter_in_cm = (nint(XSS(JXS5 + i - 1)) < 0) ! Read energy-dependent multiplicities - if (rxn % multiplicity > 100) then + if (rxn % products(1) % yield > 100) then ! Set flag and allocate space for Tab1 to store yield - rxn % multiplicity_with_E = .true. - allocate(rxn % multiplicity_E) + rxn % products(1) % yield_with_E = .true. + allocate(rxn % products(1) % yield_E) - XSS_index = JXS(11) + rxn % multiplicity - 101 + XSS_index = JXS(11) + rxn % products(1) % yield - 101 NR = nint(XSS(XSS_index)) - rxn % multiplicity_E % n_regions = NR + rxn % products(1) % yield_E % n_regions = NR ! allocate space for ENDF interpolation parameters if (NR > 0) then - allocate(rxn % multiplicity_E % nbt(NR)) - allocate(rxn % multiplicity_E % int(NR)) + allocate(rxn % products(1) % yield_E % nbt(NR)) + allocate(rxn % products(1) % yield_E % int(NR)) end if ! read ENDF interpolation parameters XSS_index = XSS_index + 1 if (NR > 0) then - rxn % multiplicity_E % nbt = get_int(NR) - rxn % multiplicity_E % int = get_int(NR) + rxn % products(1) % yield_E % nbt = get_int(NR) + rxn % products(1) % yield_E % int = get_int(NR) end if ! allocate space for yield data XSS_index = XSS_index + 2*NR NE = nint(XSS(XSS_index)) - rxn % multiplicity_E % n_pairs = NE - allocate(rxn % multiplicity_E % x(NE)) - allocate(rxn % multiplicity_E % y(NE)) + rxn % products(1) % yield_E % n_pairs = NE + allocate(rxn % products(1) % yield_E % x(NE)) + allocate(rxn % products(1) % yield_E % y(NE)) ! read yield data XSS_index = XSS_index + 1 - rxn % multiplicity_E % x = get_real(NE) - rxn % multiplicity_E % y = get_real(NE) + rxn % products(1) % yield_E % x = get_real(NE) + rxn % products(1) % yield_E % y = get_real(NE) end if ! read starting energy index @@ -923,8 +925,8 @@ contains ! "one" angular distribution, it is repeated as many times as there are ! energy distributions for this reaction since the ! UncorrelatedAngleEnergy type holds one angle and energy distribution. - do k = 1, size(rxn%secondary%distribution) - select type (aedist => rxn%secondary%distribution(k)%obj) + do k = 1, size(rxn%products(1)%distribution) + select type (aedist => rxn%products(1)%distribution(k)%obj) type is (UncorrelatedAngleEnergy) ! allocate space for incoming energies and locations NE = int(XSS(JXS(9) + LOCB - 1)) @@ -1017,9 +1019,9 @@ contains end do ! Allocate space for distributions and probability of validity - associate (secondary => nuc%reactions(i + 1)%secondary) - allocate(secondary%applicability(n)) - allocate(secondary%distribution(n)) + associate (p => nuc%reactions(i + 1)%products(1)) + allocate(p%applicability(n)) + allocate(p%distribution(n)) LNW = nint(XSS(JXS(10) + i - 1)) n = 0 @@ -1031,10 +1033,10 @@ contains IDAT = nint(XSS(JXS(11) + LNW + 1)) ! Read probability of law validity - call secondary%applicability(n)%from_ace(XSS, JXS(11) + LNW + 2) + call p%applicability(n)%from_ace(XSS, JXS(11) + LNW + 2) ! Read energy law data - call get_energy_dist(secondary%distribution(n)%obj, LAW, & + call get_energy_dist(p%distribution(n)%obj, LAW, & JXS(11), IDAT, nuc%awr, nuc%reactions(i + 1)%Q_value) ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -1046,7 +1048,7 @@ contains ! mark fission reactions so that we avoid the angle sampling. if (any(nuc%reactions(i + 1)%MT == & [N_FISSION, N_F, N_NF, N_2NF, N_3NF])) then - select type (aedist => secondary%distribution(n)%obj) + select type (aedist => p%distribution(n)%obj) type is (UncorrelatedAngleEnergy) aedist%fission = .true. end select @@ -1089,6 +1091,8 @@ contains allocate(KalbachMann :: aedist) elseif (law == 61) then allocate(CorrelatedAngleEnergy :: aedist) + elseif (law == 66) then + allocate(NBodyPhaseSpace :: aedist) else allocate(UncorrelatedAngleEnergy :: aedist) end if @@ -1157,38 +1161,38 @@ contains ! locators NE = nint(XSS(XSS_index)) XSS_index = XSS_index + 1 - allocate(edist%energy_in(NE)) + allocate(edist%energy(NE)) allocate(L(NE)) - edist%energy_in(:) = get_real(NE) + edist%energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(edist%energy_out(NE)) + allocate(edist%distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - edist%energy_out(i)%interpolation = mod(interp, 10) - edist%energy_out(i)%n_discrete = (interp - & - edist%energy_out(i)%interpolation)/10 + edist%distribution(i)%interpolation = mod(interp, 10) + edist%distribution(i)%n_discrete = (interp - & + edist%distribution(i)%interpolation)/10 ! check for discrete lines present - if (edist%energy_out(i)%n_discrete > 0) then + if (edist%distribution(i)%n_discrete > 0) then call fatal_error("Discrete lines in continuous tabular & &distribution not yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(edist%energy_out(i)%e_out(NP)) - allocate(edist%energy_out(i)%p(NP)) - allocate(edist%energy_out(i)%c(NP)) + allocate(edist%distribution(i)%e_out(NP)) + allocate(edist%distribution(i)%p(NP)) + allocate(edist%distribution(i)%c(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - edist%energy_out(i)%e_out(:) = get_real(NP) - edist%energy_out(i)%p(:) = get_real(NP) - edist%energy_out(i)%c(:) = get_real(NP) + edist%distribution(i)%e_out(:) = get_real(NP) + edist%distribution(i)%p(:) = get_real(NP) + edist%distribution(i)%c(:) = get_real(NP) end do deallocate(L) @@ -1223,16 +1227,6 @@ contains edist%u = XSS(XSS_index) end select - case (66) - allocate(NBodyPhaseSpace :: aedist%energy) - select type(edist => aedist%energy) - type is (NBodyPhaseSpace) - edist%n_bodies = int(XSS(XSS_index)) - edist%mass_ratio = XSS(XSS_index + 1) - edist%A = awr - edist%Q = Q_value - end select - end select type is (KalbachMann) @@ -1248,42 +1242,42 @@ contains aedist%n_region = NR ! Read incoming energies for which outgoing energies are tabulated and locators - allocate(aedist%energy_in(NE)) + allocate(aedist%energy(NE)) allocate(L(NE)) XSS_index = XSS_index + 2 + 2*NR - aedist%energy_in(:) = get_real(NE) + aedist%energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(aedist%table(NE)) + allocate(aedist%distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - aedist%table(i)%interpolation = mod(interp, 10) - aedist%table(i)%n_discrete = (interp - aedist%table(i)%interpolation)/10 + aedist%distribution(i)%interpolation = mod(interp, 10) + aedist%distribution(i)%n_discrete = (interp - aedist%distribution(i)%interpolation)/10 ! check for discrete lines present - if (aedist%table(i)%n_discrete > 0) then + if (aedist%distribution(i)%n_discrete > 0) then call fatal_error("Discrete lines in Kalbach-Mann distribution not & &yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(aedist%table(i)%e_out(NP)) - allocate(aedist%table(i)%p(NP)) - allocate(aedist%table(i)%c(NP)) - allocate(aedist%table(i)%r(NP)) - allocate(aedist%table(i)%a(NP)) + allocate(aedist%distribution(i)%e_out(NP)) + allocate(aedist%distribution(i)%p(NP)) + allocate(aedist%distribution(i)%c(NP)) + allocate(aedist%distribution(i)%r(NP)) + allocate(aedist%distribution(i)%a(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - aedist%table(i)%e_out(:) = get_real(NP) - aedist%table(i)%p(:) = get_real(NP) - aedist%table(i)%c(:) = get_real(NP) - aedist%table(i)%r(:) = get_real(NP) - aedist%table(i)%a(:) = get_real(NP) + aedist%distribution(i)%e_out(:) = get_real(NP) + aedist%distribution(i)%p(:) = get_real(NP) + aedist%distribution(i)%c(:) = get_real(NP) + aedist%distribution(i)%r(:) = get_real(NP) + aedist%distribution(i)%a(:) = get_real(NP) end do deallocate(L) @@ -1302,48 +1296,48 @@ contains ! Read incoming energies for which outgoing energies are tabulated and ! locators - allocate(aedist%energy_in(NE)) + allocate(aedist%energy(NE)) allocate(L(NE)) XSS_index = XSS_index + 2 + 2*NR - aedist%energy_in(:) = get_real(NE) + aedist%energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(aedist%table(NE)) + allocate(aedist%distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - aedist%table(i)%interpolation = mod(interp, 10) - aedist%table(i)%n_discrete = (interp - aedist%table(i)%interpolation)/10 + aedist%distribution(i)%interpolation = mod(interp, 10) + aedist%distribution(i)%n_discrete = (interp - aedist%distribution(i)%interpolation)/10 ! check for discrete lines present - if (aedist%table(i)%n_discrete > 0) then + if (aedist%distribution(i)%n_discrete > 0) then call fatal_error("Discrete lines in correlated angle-energy & &distribution not yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(aedist%table(i)%e_out(NP)) - allocate(aedist%table(i)%p(NP)) - allocate(aedist%table(i)%c(NP)) + allocate(aedist%distribution(i)%e_out(NP)) + allocate(aedist%distribution(i)%p(NP)) + allocate(aedist%distribution(i)%c(NP)) allocate(LC(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - aedist%table(i)%e_out(:) = get_real(NP) - aedist%table(i)%p(:) = get_real(NP) - aedist%table(i)%c(:) = get_real(NP) + aedist%distribution(i)%e_out(:) = get_real(NP) + aedist%distribution(i)%p(:) = get_real(NP) + aedist%distribution(i)%c(:) = get_real(NP) LC(:) = get_int(NP) ! allocate angular distributions for each incoming/outgoing energy - allocate(aedist%table(i)%angle(NP)) + allocate(aedist%distribution(i)%angle(NP)) do j = 1, NP if (LC(j) == 0) then ! isotropic - allocate(Uniform :: aedist%table(i)%angle(j)%obj) - select type (adist => aedist%table(i)%angle(j)%obj) + allocate(Uniform :: aedist%distribution(i)%angle(j)%obj) + select type (adist => aedist%distribution(i)%angle(j)%obj) type is (Uniform) adist%a = -ONE adist%b = ONE @@ -1351,14 +1345,14 @@ contains elseif (LC(j) > 0) then ! tabular distribution - allocate(Tabular :: aedist%table(i)%angle(j)%obj) + allocate(Tabular :: aedist%distribution(i)%angle(j)%obj) end if end do ! read angular distributions do j = 1, NP XSS_index = LDIS + abs(LC(j)) - 1 - select type(adist => aedist%table(i)%angle(j)%obj) + select type(adist => aedist%distribution(i)%angle(j)%obj) type is (Tabular) ! determine interpolation and number of points interp = nint(XSS(XSS_index)) @@ -1377,6 +1371,15 @@ contains end do deallocate(L) + + type is (NBodyPhaseSpace) + ! ======================================================================== + ! N-BODY PHASE SPACE DISTRIBUTION + + aedist%n_bodies = int(XSS(XSS_index)) + aedist%mass_ratio = XSS(XSS_index + 1) + aedist%A = awr + aedist%Q = Q_value end select end subroutine get_energy_dist diff --git a/src/ace_header.F90 b/src/ace_header.F90 deleted file mode 100644 index ae5000e5ab..0000000000 --- a/src/ace_header.F90 +++ /dev/null @@ -1,58 +0,0 @@ -module ace_header - - use constants, only: MAX_FILE_LEN, ZERO - use dict_header, only: DictIntInt - use endf_header, only: Tab1 - use secondary_header, only: SecondaryDistribution, AngleEnergyContainer - use stl_vector, only: VectorInt - - implicit none - -!=============================================================================== -! REACTION contains the cross-section and secondary energy and angle -! distributions for a single reaction in a continuous-energy ACE-format table -!=============================================================================== - - type Reaction - integer :: MT ! ENDF MT value - real(8) :: Q_value ! Reaction Q value - integer :: multiplicity ! Number of secondary particles released - type(Tab1), pointer :: multiplicity_E => null() ! Energy-dependent neutron yield - integer :: threshold ! Energy grid index of threshold - logical :: scatter_in_cm ! scattering system in center-of-mass? - logical :: multiplicity_with_E = .false. ! Flag to indicate E-dependent multiplicity - real(8), allocatable :: sigma(:) ! Cross section values - type(SecondaryDistribution) :: secondary - - contains - procedure :: clear => reaction_clear ! Deallocates Reaction - end type Reaction - -!=============================================================================== -! URRDATA contains probability tables for the unresolved resonance range. -!=============================================================================== - - type UrrData - integer :: n_energy ! # of incident neutron energies - integer :: n_prob ! # of probabilities - integer :: interp ! inteprolation (2=lin-lin, 5=log-log) - integer :: inelastic_flag ! inelastic competition flag - integer :: absorption_flag ! other absorption flag - logical :: multiply_smooth ! multiply by smooth cross section? - real(8), allocatable :: energy(:) ! incident energies - real(8), allocatable :: prob(:,:,:) ! actual probabibility tables - end type UrrData - - contains - -!=============================================================================== -! REACTION_CLEAR resets and deallocates data in Reaction. -!=============================================================================== - - subroutine reaction_clear(this) - class(Reaction), intent(inout) :: this ! The Reaction object to clear - - if (associated(this % multiplicity_E)) deallocate(this % multiplicity_E) - end subroutine reaction_clear - -end module ace_header diff --git a/src/angleenergy_header.F90 b/src/angleenergy_header.F90 new file mode 100644 index 0000000000..483bad856c --- /dev/null +++ b/src/angleenergy_header.F90 @@ -0,0 +1,29 @@ +module angleenergy_header + +!=============================================================================== +! ANGLEENERGY (abstract) defines a correlated or uncorrelated angle-energy +! distribution that is a function of incoming energy. Each derived type must +! implement a sample() subroutine that returns an outgoing energy and scattering +! cosine given an incoming energy. +!=============================================================================== + + type, abstract :: AngleEnergy + contains + procedure(angleenergy_sample_), deferred :: sample + end type AngleEnergy + + abstract interface + subroutine angleenergy_sample_(this, E_in, E_out, mu) + import AngleEnergy + class(AngleEnergy), intent(in) :: this + real(8), intent(in) :: E_in + real(8), intent(out) :: E_out + real(8), intent(out) :: mu + end subroutine angleenergy_sample_ + end interface + + type :: AngleEnergyContainer + class(AngleEnergy), allocatable :: obj + end type AngleEnergyContainer + +end module angleenergy_header diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 2f2e7fd7e9..4c529213b2 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -1,6 +1,5 @@ module cross_section - use ace_header, only: Reaction, UrrData use constants use energy_grid, only: grid_method, log_spacing use error, only: fatal_error @@ -363,131 +362,133 @@ contains real(8) :: capture ! (n,gamma) cross section real(8) :: fission ! fission cross section real(8) :: inelastic ! inelastic cross section - type(UrrData), pointer :: urr - type(NuclideCE), pointer :: nuc micro_xs(i_nuclide) % use_ptable = .true. - ! get pointer to probability table - nuc => nuclides(i_nuclide) - urr => nuc % urr_data + associate (nuc => nuclides(i_nuclide), urr => nuclides(i_nuclide) % urr_data) + ! determine energy table + i_energy = 1 + do + if (E < urr % energy(i_energy + 1)) exit + i_energy = i_energy + 1 + end do - ! determine energy table - i_energy = 1 - do - if (E < urr % energy(i_energy + 1)) exit - i_energy = i_energy + 1 - end do + ! determine interpolation factor on table + f = (E - urr % energy(i_energy)) / & + (urr % energy(i_energy + 1) - urr % energy(i_energy)) - ! determine interpolation factor on table - f = (E - urr % energy(i_energy)) / & - (urr % energy(i_energy + 1) - urr % energy(i_energy)) + ! sample probability table using the cumulative distribution - ! sample probability table using the cumulative distribution + ! determine interpolation factor on table + f = (E - urr % energy(i_energy)) / & + (urr % energy(i_energy + 1) - urr % energy(i_energy)) - ! Random numbers for xs calculation are sampled from a separated stream. - ! This guarantees the randomness and, at the same time, makes sure we reuse - ! random number for the same nuclide at different temperatures, therefore - ! preserving correlation of temperature in probability tables. - call prn_set_stream(STREAM_URR_PTABLE) - r = future_prn(int(nuc_zaid_dict % get_key(nuc % zaid), 8)) - call prn_set_stream(STREAM_TRACKING) + ! sample probability table using the cumulative distribution - i_low = 1 - do - if (urr % prob(i_energy, URR_CUM_PROB, i_low) > r) exit - i_low = i_low + 1 - end do - i_up = 1 - do - if (urr % prob(i_energy + 1, URR_CUM_PROB, i_up) > r) exit - i_up = i_up + 1 - end do + ! Random numbers for xs calculation are sampled from a separated stream. + ! This guarantees the randomness and, at the same time, makes sure we reuse + ! random number for the same nuclide at different temperatures, therefore + ! preserving correlation of temperature in probability tables. + call prn_set_stream(STREAM_URR_PTABLE) + r = future_prn(int(nuc_zaid_dict % get_key(nuc % zaid), 8)) + call prn_set_stream(STREAM_TRACKING) - ! determine elastic, fission, and capture cross sections from probability - ! table - if (urr % interp == LINEAR_LINEAR) then - elastic = (ONE - f) * urr % prob(i_energy, URR_ELASTIC, i_low) + & - f * urr % prob(i_energy + 1, URR_ELASTIC, i_up) - fission = (ONE - f) * urr % prob(i_energy, URR_FISSION, i_low) + & - f * urr % prob(i_energy + 1, URR_FISSION, i_up) - capture = (ONE - f) * urr % prob(i_energy, URR_N_GAMMA, i_low) + & - f * urr % prob(i_energy + 1, URR_N_GAMMA, i_up) - elseif (urr % interp == LOG_LOG) then - ! Get logarithmic interpolation factor - f = log(E / urr % energy(i_energy)) / & - log(urr % energy(i_energy + 1) / urr % energy(i_energy)) + i_low = 1 + do + if (urr % prob(i_energy, URR_CUM_PROB, i_low) > r) exit + i_low = i_low + 1 + end do + i_up = 1 + do + if (urr % prob(i_energy + 1, URR_CUM_PROB, i_up) > r) exit + i_up = i_up + 1 + end do - ! Calculate elastic cross section/factor - elastic = ZERO - if (urr % prob(i_energy, URR_ELASTIC, i_low) > ZERO .and. & - urr % prob(i_energy + 1, URR_ELASTIC, i_up) > ZERO) then - elastic = exp((ONE - f) * log(urr % prob(i_energy, URR_ELASTIC, & - i_low)) + f * log(urr % prob(i_energy + 1, URR_ELASTIC, & - i_up))) - end if + ! determine elastic, fission, and capture cross sections from probability + ! table + if (urr % interp == LINEAR_LINEAR) then + elastic = (ONE - f) * urr % prob(i_energy, URR_ELASTIC, i_low) + & + f * urr % prob(i_energy + 1, URR_ELASTIC, i_up) + fission = (ONE - f) * urr % prob(i_energy, URR_FISSION, i_low) + & + f * urr % prob(i_energy + 1, URR_FISSION, i_up) + capture = (ONE - f) * urr % prob(i_energy, URR_N_GAMMA, i_low) + & + f * urr % prob(i_energy + 1, URR_N_GAMMA, i_up) + elseif (urr % interp == LOG_LOG) then + ! Get logarithmic interpolation factor + f = log(E / urr % energy(i_energy)) / & + log(urr % energy(i_energy + 1) / urr % energy(i_energy)) - ! Calculate fission cross section/factor - fission = ZERO - if (urr % prob(i_energy, URR_FISSION, i_low) > ZERO .and. & - urr % prob(i_energy + 1, URR_FISSION, i_up) > ZERO) then - fission = exp((ONE - f) * log(urr % prob(i_energy, URR_FISSION, & - i_low)) + f * log(urr % prob(i_energy + 1, URR_FISSION, & - i_up))) - end if - - ! Calculate capture cross section/factor - capture = ZERO - if (urr % prob(i_energy, URR_N_GAMMA, i_low) > ZERO .and. & - urr % prob(i_energy + 1, URR_N_GAMMA, i_up) > ZERO) then - capture = exp((ONE - f) * log(urr % prob(i_energy, URR_N_GAMMA, & - i_low)) + f * log(urr % prob(i_energy + 1, URR_N_GAMMA, & - i_up))) - end if - end if - - ! Determine treatment of inelastic scattering - inelastic = ZERO - if (urr % inelastic_flag > 0) then - ! Get index on energy grid and interpolation factor - i_energy = micro_xs(i_nuclide) % index_grid - f = micro_xs(i_nuclide) % interp_factor - - ! Determine inelastic scattering cross section - associate (rxn => nuc % reactions(nuc % urr_inelastic)) - if (i_energy >= rxn % threshold) then - inelastic = (ONE - f) * rxn % sigma(i_energy - rxn%threshold + 1) + & - f * rxn % sigma(i_energy - rxn%threshold + 2) + ! Calculate elastic cross section/factor + elastic = ZERO + if (urr % prob(i_energy, URR_ELASTIC, i_low) > ZERO .and. & + urr % prob(i_energy + 1, URR_ELASTIC, i_up) > ZERO) then + elastic = exp((ONE - f) * log(urr % prob(i_energy, URR_ELASTIC, & + i_low)) + f * log(urr % prob(i_energy + 1, URR_ELASTIC, & + i_up))) end if - end associate - end if - ! Multiply by smooth cross-section if needed - if (urr % multiply_smooth) then - elastic = elastic * micro_xs(i_nuclide) % elastic - capture = capture * (micro_xs(i_nuclide) % absorption - & - micro_xs(i_nuclide) % fission) - fission = fission * micro_xs(i_nuclide) % fission - end if + ! Calculate fission cross section/factor + fission = ZERO + if (urr % prob(i_energy, URR_FISSION, i_low) > ZERO .and. & + urr % prob(i_energy + 1, URR_FISSION, i_up) > ZERO) then + fission = exp((ONE - f) * log(urr % prob(i_energy, URR_FISSION, & + i_low)) + f * log(urr % prob(i_energy + 1, URR_FISSION, & + i_up))) + end if - ! Check for negative values - if (elastic < ZERO) elastic = ZERO - if (fission < ZERO) fission = ZERO - if (capture < ZERO) capture = ZERO + ! Calculate capture cross section/factor + capture = ZERO + if (urr % prob(i_energy, URR_N_GAMMA, i_low) > ZERO .and. & + urr % prob(i_energy + 1, URR_N_GAMMA, i_up) > ZERO) then + capture = exp((ONE - f) * log(urr % prob(i_energy, URR_N_GAMMA, & + i_low)) + f * log(urr % prob(i_energy + 1, URR_N_GAMMA, & + i_up))) + end if + end if - ! Set elastic, absorption, fission, and total cross sections. Note that the - ! total cross section is calculated as sum of partials rather than using the - ! table-provided value - micro_xs(i_nuclide) % elastic = elastic - micro_xs(i_nuclide) % absorption = capture + fission - micro_xs(i_nuclide) % fission = fission - micro_xs(i_nuclide) % total = elastic + inelastic + capture + fission + ! Determine treatment of inelastic scattering + inelastic = ZERO + if (urr % inelastic_flag > 0) then + ! Get index on energy grid and interpolation factor + i_energy = micro_xs(i_nuclide) % index_grid + f = micro_xs(i_nuclide) % interp_factor - ! Determine nu-fission cross section - if (nuc % fissionable) then - micro_xs(i_nuclide) % nu_fission = nu_total(nuc, E) * & - micro_xs(i_nuclide) % fission - end if + ! Determine inelastic scattering cross section + associate (rxn => nuc % reactions(nuc % urr_inelastic)) + if (i_energy >= rxn % threshold) then + inelastic = (ONE - f) * rxn % sigma(i_energy - rxn%threshold + 1) + & + f * rxn % sigma(i_energy - rxn%threshold + 2) + end if + end associate + end if + + ! Multiply by smooth cross-section if needed + if (urr % multiply_smooth) then + elastic = elastic * micro_xs(i_nuclide) % elastic + capture = capture * (micro_xs(i_nuclide) % absorption - & + micro_xs(i_nuclide) % fission) + fission = fission * micro_xs(i_nuclide) % fission + end if + + ! Check for negative values + if (elastic < ZERO) elastic = ZERO + if (fission < ZERO) fission = ZERO + if (capture < ZERO) capture = ZERO + + ! Set elastic, absorption, fission, and total cross sections. Note that the + ! total cross section is calculated as sum of partials rather than using the + ! table-provided value + micro_xs(i_nuclide) % elastic = elastic + micro_xs(i_nuclide) % absorption = capture + fission + micro_xs(i_nuclide) % fission = fission + micro_xs(i_nuclide) % total = elastic + inelastic + capture + fission + + ! Determine nu-fission cross section + if (nuc % fissionable) then + micro_xs(i_nuclide) % nu_fission = nu_total(nuc, E) * & + micro_xs(i_nuclide) % fission + end if + end associate end subroutine calculate_urr_xs diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index 8b2cc10c9c..3d35249342 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -83,8 +83,8 @@ module energy_distribution integer :: n_region integer, allocatable :: breakpoints(:) integer, allocatable :: interpolation(:) - real(8), allocatable :: energy_in(:) - type(CTTable), allocatable :: energy_out(:) + real(8), allocatable :: energy(:) + type(CTTable), allocatable :: distribution(:) contains procedure :: sample => continuous_sample end type ContinuousTabular @@ -126,21 +126,6 @@ module energy_distribution procedure :: sample => watt_sample end type WattEnergy -!=============================================================================== -! NBODYPHASESPACE gives the energy distribution for particles emitted from -! neutron and charged-particle reactions. This corresponds to ACE law 66 and -! ENDF File 6, LAW=6. -!=============================================================================== - - type, extends(EnergyDistribution) :: NBodyPhaseSpace - integer :: n_bodies - real(8) :: mass_ratio - real(8) :: A - real(8) :: Q - contains - procedure :: sample => nbody_sample - end type NBodyPhaseSpace - contains function equiprobable_sample(this, E_in) result(E_out) @@ -202,6 +187,7 @@ contains end if end function equiprobable_sample + function level_inelastic_sample(this, E_in) result(E_out) class(LevelInelastic), intent(in) :: this real(8), intent(in) :: E_in @@ -210,6 +196,7 @@ contains E_out = this%mass_ratio*(E_in - this%threshold) end function level_inelastic_sample + function continuous_sample(this, E_in) result(E_out) class(ContinuousTabular), intent(in) :: this real(8), intent(in) :: E_in ! incoming energy @@ -238,17 +225,17 @@ contains ! Find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins - n_energy_in = size(this%energy_in) - if (E_in < this%energy_in(1)) then + n_energy_in = size(this%energy) + if (E_in < this%energy(1)) then i = 1 r = ZERO - elseif (E_in > this%energy_in(n_energy_in)) then + elseif (E_in > this%energy(n_energy_in)) then i = n_energy_in - 1 r = ONE else - i = binary_search(this%energy_in, n_energy_in, E_in) - r = (E_in - this%energy_in(i)) / & - (this%energy_in(i+1) - this%energy_in(i)) + i = binary_search(this%energy, n_energy_in, E_in) + r = (E_in - this%energy(i)) / & + (this%energy(i+1) - this%energy(i)) end if ! Sample between the ith and (i+1)th bin @@ -263,23 +250,23 @@ contains end if ! Interpolation for energy E1 and EK - n_energy_out = size(this%energy_out(i)%e_out) - E_i_1 = this%energy_out(i)%e_out(1) - E_i_K = this%energy_out(i)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i)%e_out) + E_i_1 = this%distribution(i)%e_out(1) + E_i_K = this%distribution(i)%e_out(n_energy_out) - n_energy_out = size(this%energy_out(i+1)%e_out) - E_i1_1 = this%energy_out(i+1)%e_out(1) - E_i1_K = this%energy_out(i+1)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i+1)%e_out) + E_i1_1 = this%distribution(i+1)%e_out(1) + E_i1_K = this%distribution(i+1)%e_out(n_energy_out) E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) ! Determine outgoing energy bin - n_energy_out = size(this%energy_out(l)%e_out) + n_energy_out = size(this%distribution(l)%e_out) r1 = prn() - c_k = this%energy_out(l)%c(1) + c_k = this%distribution(l)%c(1) do k = 1, n_energy_out - 1 - c_k1 = this%energy_out(l)%c(k+1) + c_k1 = this%distribution(l)%c(k+1) if (r1 < c_k1) exit c_k = c_k1 end do @@ -287,9 +274,9 @@ contains ! Check to make sure k is <= NP - 1 k = min(k, n_energy_out - 1) - E_l_k = this%energy_out(l)%e_out(k) - p_l_k = this%energy_out(l)%p(k) - if (this%energy_out(l)%interpolation == HISTOGRAM) then + E_l_k = this%distribution(l)%e_out(k) + p_l_k = this%distribution(l)%p(k) + if (this%distribution(l)%interpolation == HISTOGRAM) then ! Histogram interpolation if (p_l_k > ZERO) then E_out = E_l_k + (r1 - c_k)/p_l_k @@ -297,10 +284,10 @@ contains E_out = E_l_k end if - elseif (this%energy_out(l)%interpolation == LINEAR_LINEAR) then + elseif (this%distribution(l)%interpolation == LINEAR_LINEAR) then ! Linear-linear interpolation - E_l_k1 = this%energy_out(l)%e_out(k+1) - p_l_k1 = this%energy_out(l)%p(k+1) + E_l_k1 = this%distribution(l)%e_out(k+1) + p_l_k1 = this%distribution(l)%p(k+1) frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) if (frac == ZERO) then @@ -321,6 +308,7 @@ contains end if end function continuous_sample + function maxwellenergy_sample(this, E_in) result(E_out) class(MaxwellEnergy), intent(in) :: this real(8), intent(in) :: E_in ! incoming energy @@ -351,7 +339,7 @@ contains ! Get temperature corresponding to incoming energy theta = interpolate_tab1(this%theta, E_in) - y = (E_in - this%U)/theta + y = (E_in - this%u)/theta v = 1 - exp(-y) ! Sample outgoing energy based on evaporation spectrum probability @@ -386,44 +374,4 @@ contains end do end function watt_sample - function nbody_sample(this, E_in) result(E_out) - class(NBodyPhaseSpace), intent(in) :: this - real(8), intent(in) :: E_in ! incoming energy - real(8) :: E_out ! sampled outgoing energy - - real(8) :: Ap ! total mass of particles in neutron masses - real(8) :: E_max ! maximum possible COM energy - real(8) :: x, y, v - real(8) :: r1, r2, r3, r4, r5, r6 - - ! Determine E_max parameter - Ap = this%mass_ratio - E_max = (Ap - ONE)/Ap * (this%A/(this%A + ONE)*E_in + this%Q) - - ! x is essentially a Maxwellian distribution - x = maxwell_spectrum(ONE) - - select case (this%n_bodies) - case (3) - y = maxwell_spectrum(ONE) - case (4) - r1 = prn() - r2 = prn() - r3 = prn() - y = -log(r1*r2*r3) - case (5) - r1 = prn() - r2 = prn() - r3 = prn() - r4 = prn() - r5 = prn() - r6 = prn() - y = -log(r1*r2*r3*r4) - log(r5) * cos(PI/TWO*r6)**2 - end select - - ! Now determine v and E_out - v = x/(x+y) - E_out = E_max * v - end function nbody_sample - end module energy_distribution diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index c6cf583f20..12b4a30764 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -2,13 +2,17 @@ module nuclide_header use, intrinsic :: ISO_FORTRAN_ENV - use ace_header use constants - use endf, only: reaction_name - use error, only: fatal_error + use dict_header, only: DictIntInt + use endf, only: reaction_name, is_fission, is_disappearance + use error, only: fatal_error, warning use list_header, only: ListInt use math, only: evaluate_legendre, find_angle + use product_header, only: AngleEnergyContainer + use reaction_header, only: Reaction + use stl_vector, only: VectorInt use string + use urr_header, only: UrrData use xml_interface implicit none @@ -684,16 +688,8 @@ module nuclide_header class(NuclideCE), intent(inout) :: this ! The Nuclide object to clear - integer :: i ! Loop counter - if (associated(this % urr_data)) deallocate(this % urr_data) - if (allocated(this % reactions)) then - do i = 1, size(this % reactions) - call this % reactions(i) % clear() - end do - end if - call this % reaction_index % clear() end subroutine nuclidece_clear @@ -711,7 +707,6 @@ module nuclide_header integer :: unit_ ! unit to write to integer :: size_xs ! memory used for cross-sections (bytes) integer :: size_urr ! memory used for probability tables (bytes) - type(UrrData), pointer :: urr ! set default unit for writing information if (present(unit)) then @@ -754,19 +749,20 @@ module nuclide_header ! Write information about URR probability tables size_urr = 0 if (this % urr_present) then - urr => this % urr_data - write(unit_,*) ' Unresolved resonance probability table:' - write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) - write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) - write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) - write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) - write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) - write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth - write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) - write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) + associate(urr => this % urr_data) + write(unit_,*) ' Unresolved resonance probability table:' + write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) + write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) + write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) + write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) + write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) + write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth + write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) + write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) - ! Calculate memory used by probability tables and add to total - size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 + ! Calculate memory used by probability tables and add to total + size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 + end associate end if ! Write memory used diff --git a/src/output.F90 b/src/output.F90 index 125fe010bc..70d55b2593 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -2,7 +2,6 @@ module output use, intrinsic :: ISO_FORTRAN_ENV - use ace_header, only: Reaction, UrrData use constants use endf, only: reaction_name use error, only: fatal_error, warning diff --git a/src/physics.F90 b/src/physics.F90 index 6fda4c393c..3192db1797 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -1,6 +1,5 @@ module physics - use ace_header, only: Reaction use constants use cross_section, only: elastic_xs_0K use endf, only: reaction_name @@ -17,6 +16,7 @@ module physics use particle_restart_write, only: write_particle_restart use physics_common use random_lcg, only: prn, advance_prn_seed, prn_set_stream + use reaction_header, only: Reaction use search, only: binary_search use secondary_uncorrelated, only: UncorrelatedAngleEnergy use string, only: to_str @@ -447,9 +447,9 @@ contains vel = sqrt(dot_product(v_n, v_n)) ! Sample scattering angle - select type (dist => rxn%secondary%distribution(1)%obj) + select type (dist => rxn % products(1) % distribution(1) % obj) type is (UncorrelatedAngleEnergy) - mu_cm = dist%angle%sample(E) + mu_cm = dist % angle % sample(E) end select ! Determine direction cosines in CM @@ -1276,7 +1276,7 @@ contains ! sample from prompt neutron energy distribution n_sample = 0 do - call rxn%secondary%sample(p%E, E_out, prob) + call rxn % products(1) % sample(p % E, E_out, prob) ! resample if energy is greater than maximum neutron energy if (E_out < energy_max_neutron) exit @@ -1316,7 +1316,7 @@ contains E_in = p % E ! sample outgoing energy and scattering cosine - call rxn%secondary%sample(E_in, E, mu) + call rxn % products(1) % sample(E_in, E, mu) ! if scattering system is in center-of-mass, transfer cosine of scattering ! angle and outgoing energy from CM to LAB @@ -1345,12 +1345,12 @@ contains p % coord(1) % uvw = rotate_angle(p % coord(1) % uvw, mu) ! change weight of particle based on yield - if (rxn % multiplicity_with_E) then - yield = interpolate_tab1(rxn % multiplicity_E, E_in) + if (rxn % products(1) % yield_with_E) then + yield = interpolate_tab1(rxn % products(1) % yield_E, E_in) p % wgt = yield * p % wgt else - do i = 1, rxn % multiplicity - 1 - call p % create_secondary(p % coord(1) % uvw, NEUTRON, run_CE=.True.) + do i = 1, rxn % products(1) % yield - 1 + call p % create_secondary(p % coord(1) % uvw, NEUTRON, run_CE=.true.) end do end if diff --git a/src/product_header.F90 b/src/product_header.F90 new file mode 100644 index 0000000000..27fec37f7a --- /dev/null +++ b/src/product_header.F90 @@ -0,0 +1,61 @@ +module product_header + + use angleenergy_header, only: AngleEnergyContainer + use constants, only: ZERO + use endf_header, only: Tab1 + use interpolation, only: interpolate_tab1 + use random_lcg, only: prn + +!=============================================================================== +! REACTIONPRODUCT stores a data for a reaction product including its yield and +! angle-energy distributions, each of which has a given probability of occurring +! for a given incoming energy. In general, most products only have one +! angle-energy distribution, but for some cases (e.g., (n,2n) in certain +! nuclides) multiple distinct distributions exist. +!=============================================================================== + + type :: ReactionProduct + integer :: yield ! Number of secondary particles released + logical :: yield_with_E = .false. ! Flag to indicate E-dependent yield + type(Tab1), pointer :: yield_E => null() ! Energy-dependent neutron yield + type(Tab1), allocatable :: applicability(:) + type(AngleEnergyContainer), allocatable :: distribution(:) + contains + procedure :: sample => reactionproduct_sample + end type ReactionProduct + +contains + + subroutine reactionproduct_sample(this, E_in, E_out, mu) + class(ReactionProduct), intent(in) :: this + real(8), intent(in) :: E_in ! incoming energy + real(8), intent(out) :: E_out ! sampled outgoing energy + real(8), intent(out) :: mu ! sampled scattering cosine + + integer :: i ! loop counter + integer :: n ! number of angle-energy distributions + real(8) :: prob ! cumulative probability + real(8) :: c ! sampled cumulative probability + + n = size(this%applicability) + if (n > 1) then + prob = ZERO + c = prn() + do i = 1, n + ! Determine probability that i-th energy distribution is sampled + prob = prob + interpolate_tab1(this%applicability(i), E_in) + + ! If i-th distribution is sampled, sample energy from the distribution + if (c <= prob) then + call this%distribution(i)%obj%sample(E_in, E_out, mu) + exit + end if + end do + else + ! If only one distribution is present, go ahead and sample it + call this%distribution(1)%obj%sample(E_in, E_out, mu) + end if + + end subroutine reactionproduct_sample + +end module product_header diff --git a/src/reaction_header.F90 b/src/reaction_header.F90 new file mode 100644 index 0000000000..160ad63239 --- /dev/null +++ b/src/reaction_header.F90 @@ -0,0 +1,21 @@ +module reaction_header + + use product_header, only: ReactionProduct + + implicit none + +!=============================================================================== +! REACTION contains the cross-section and secondary energy and angle +! distributions for a single reaction in a continuous-energy ACE-format table +!=============================================================================== + + type Reaction + integer :: MT ! ENDF MT value + real(8) :: Q_value ! Reaction Q value + integer :: threshold ! Energy grid index of threshold + logical :: scatter_in_cm ! scattering system in center-of-mass? + real(8), allocatable :: sigma(:) ! Cross section values + type(ReactionProduct), allocatable :: products(:) + end type Reaction + +end module reaction_header diff --git a/src/secondary_correlated.F90 b/src/secondary_correlated.F90 index c0289d55eb..b556d02dc5 100644 --- a/src/secondary_correlated.F90 +++ b/src/secondary_correlated.F90 @@ -1,8 +1,8 @@ module secondary_correlated + use angleenergy_header, only: AngleEnergy use constants, only: ZERO, ONE, TWO, HISTOGRAM, LINEAR_LINEAR use distribution_univariate, only: DistributionContainer - use secondary_header, only: AngleEnergy use random_lcg, only: prn use search, only: binary_search @@ -24,8 +24,8 @@ module secondary_correlated integer :: n_region ! number of interpolation regions integer, allocatable :: breakpoints(:) ! breakpoints of interpolation regions integer, allocatable :: interpolation(:) ! interpolation region codes - real(8), allocatable :: energy_in(:) ! incoming energies - type(AngleEnergyTable), allocatable :: table(:) ! outgoing E/mu distributions + real(8), allocatable :: energy(:) ! incoming energies + type(AngleEnergyTable), allocatable :: distribution(:) ! outgoing E/mu distributions contains procedure :: sample => correlated_sample end type CorrelatedAngleEnergy @@ -61,17 +61,17 @@ contains ! find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins - n_energy_in = size(this%energy_in) - if (E_in < this%energy_in(1)) then + n_energy_in = size(this%energy) + if (E_in < this%energy(1)) then i = 1 r = ZERO - elseif (E_in > this%energy_in(n_energy_in)) then + elseif (E_in > this%energy(n_energy_in)) then i = n_energy_in - 1 r = ONE else - i = binary_search(this%energy_in, n_energy_in, E_in) - r = (E_in - this%energy_in(i)) / & - (this%energy_in(i+1) - this%energy_in(i)) + i = binary_search(this%energy, n_energy_in, E_in) + r = (E_in - this%energy(i)) / & + (this%energy(i+1) - this%energy(i)) end if ! Sample between the ith and (i+1)th bin @@ -82,23 +82,23 @@ contains end if ! interpolation for energy E1 and EK - n_energy_out = size(this%table(i)%e_out) - E_i_1 = this%table(i)%e_out(1) - E_i_K = this%table(i)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i)%e_out) + E_i_1 = this%distribution(i)%e_out(1) + E_i_K = this%distribution(i)%e_out(n_energy_out) - n_energy_out = size(this%table(i+1)%e_out) - E_i1_1 = this%table(i+1)%e_out(1) - E_i1_K = this%table(i+1)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i+1)%e_out) + E_i1_1 = this%distribution(i+1)%e_out(1) + E_i1_K = this%distribution(i+1)%e_out(n_energy_out) E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) ! determine outgoing energy bin - n_energy_out = size(this%table(l)%e_out) + n_energy_out = size(this%distribution(l)%e_out) r1 = prn() - c_k = this%table(l)%c(1) + c_k = this%distribution(l)%c(1) do k = 1, n_energy_out - 1 - c_k1 = this%table(l)%c(k+1) + c_k1 = this%distribution(l)%c(k+1) if (r1 < c_k1) exit c_k = c_k1 end do @@ -106,9 +106,9 @@ contains ! check to make sure k is <= NP - 1 k = min(k, n_energy_out - 1) - E_l_k = this%table(l)%e_out(k) - p_l_k = this%table(l)%p(k) - if (this%table(l)%interpolation == HISTOGRAM) then + E_l_k = this%distribution(l)%e_out(k) + p_l_k = this%distribution(l)%p(k) + if (this%distribution(l)%interpolation == HISTOGRAM) then ! Histogram interpolation if (p_l_k > ZERO) then E_out = E_l_k + (r1 - c_k)/p_l_k @@ -116,10 +116,10 @@ contains E_out = E_l_k end if - elseif (this%table(l)%interpolation == LINEAR_LINEAR) then + elseif (this%distribution(l)%interpolation == LINEAR_LINEAR) then ! Linear-linear interpolation - E_l_k1 = this%table(l)%e_out(k+1) - p_l_k1 = this%table(l)%p(k+1) + E_l_k1 = this%distribution(l)%e_out(k+1) + p_l_k1 = this%distribution(l)%p(k+1) frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) if (frac == ZERO) then @@ -139,9 +139,9 @@ contains ! Find correlated angular distribution for closest outgoing energy bin if (r1 - c_k < c_k1 - r1) then - mu = this%table(l)%angle(k)%obj%sample() + mu = this%distribution(l)%angle(k)%obj%sample() else - mu = this%table(l)%angle(k + 1)%obj%sample() + mu = this%distribution(l)%angle(k + 1)%obj%sample() end if end subroutine correlated_sample diff --git a/src/secondary_header.F90 b/src/secondary_header.F90 deleted file mode 100644 index d9a18b6b15..0000000000 --- a/src/secondary_header.F90 +++ /dev/null @@ -1,83 +0,0 @@ -module secondary_header - - use constants, only: ZERO - use endf_header, only: Tab1 - use interpolation, only: interpolate_tab1 - use random_lcg, only: prn - -!=============================================================================== -! ANGLEENERGY (abstract) defines a correlated or uncorrelated angle-energy -! distribution that is a function of incoming energy. Each derived type must -! implement a sample() subroutine that returns an outgoing energy and scattering -! cosine given an incoming energy. -!=============================================================================== - - type, abstract :: AngleEnergy - contains - procedure(angleenergy_sample_), deferred :: sample - end type AngleEnergy - - abstract interface - subroutine angleenergy_sample_(this, E_in, E_out, mu) - import AngleEnergy - class(AngleEnergy), intent(in) :: this - real(8), intent(in) :: E_in - real(8), intent(out) :: E_out - real(8), intent(out) :: mu - end subroutine angleenergy_sample_ - end interface - - type :: AngleEnergyContainer - class(AngleEnergy), allocatable :: obj - end type AngleEnergyContainer - -!=============================================================================== -! SECONDARYDISTRIBUTION stores multiple angle-energy distributions, each of -! which has a given probability of occurring for a given incoming energy. In -! general, most secondary distributions only have one angle-energy distribution, -! but for some cases (e.g., (n,2n) in certain nuclides) multiple distinct -! distributions exist. -!=============================================================================== - - type :: SecondaryDistribution - type(Tab1), allocatable :: applicability(:) - type(AngleEnergyContainer), allocatable :: distribution(:) - contains - procedure :: sample => secondary_sample - end type SecondaryDistribution - -contains - - subroutine secondary_sample(this, E_in, E_out, mu) - class(SecondaryDistribution), intent(in) :: this - real(8), intent(in) :: E_in ! incoming energy - real(8), intent(out) :: E_out ! sampled outgoing energy - real(8), intent(out) :: mu ! sampled scattering cosine - - integer :: i ! loop counter - integer :: n ! number of angle-energy distributions - real(8) :: prob ! cumulative probability - real(8) :: c ! sampled cumulative probability - - n = size(this%applicability) - if (n > 1) then - prob = ZERO - c = prn() - do i = 1, n - ! Determine probability that i-th energy distribution is sampled - prob = prob + interpolate_tab1(this%applicability(i), E_in) - - ! If i-th distribution is sampled, sample energy from the distribution - if (c <= prob) then - call this%distribution(i)%obj%sample(E_in, E_out, mu) - exit - end if - end do - else - ! If only one distribution is present, go ahead and sample it - call this%distribution(1)%obj%sample(E_in, E_out, mu) - end if - - end subroutine secondary_sample - -end module secondary_header diff --git a/src/secondary_kalbach.F90 b/src/secondary_kalbach.F90 index 5e6949206e..668917d62a 100644 --- a/src/secondary_kalbach.F90 +++ b/src/secondary_kalbach.F90 @@ -1,7 +1,7 @@ module secondary_kalbach + use angleenergy_header, only: AngleEnergy use constants, only: ZERO, ONE, TWO, HISTOGRAM, LINEAR_LINEAR - use secondary_header, only: AngleEnergy use random_lcg, only: prn use search, only: binary_search @@ -25,8 +25,8 @@ module secondary_kalbach integer :: n_region ! number of interpolation regions integer, allocatable :: breakpoints(:) ! breakpoints of interpolation regions integer, allocatable :: interpolation(:) ! interpolation region codes - real(8), allocatable :: energy_in(:) ! incoming energies - type(KalbachMannTable), allocatable :: table(:) ! outgoing E/mu parameters + real(8), allocatable :: energy(:) ! incoming energies + type(KalbachMannTable), allocatable :: distribution(:) ! outgoing E/mu parameters contains procedure :: sample => kalbachmann_sample end type KalbachMann @@ -64,17 +64,17 @@ contains ! find energy bin and calculate interpolation factor -- if the energy is ! outside the range of the tabulated energies, choose the first or last bins - n_energy_in = size(this%energy_in) - if (E_in < this%energy_in(1)) then + n_energy_in = size(this%energy) + if (E_in < this%energy(1)) then i = 1 r = ZERO - elseif (E_in > this%energy_in(n_energy_in)) then + elseif (E_in > this%energy(n_energy_in)) then i = n_energy_in - 1 r = ONE else - i = binary_search(this%energy_in, n_energy_in, E_in) - r = (E_in - this%energy_in(i)) / & - (this%energy_in(i+1) - this%energy_in(i)) + i = binary_search(this%energy, n_energy_in, E_in) + r = (E_in - this%energy(i)) / & + (this%energy(i+1) - this%energy(i)) end if ! Sample between the ith and (i+1)th bin @@ -85,23 +85,23 @@ contains end if ! interpolation for energy E1 and EK - n_energy_out = size(this%table(i)%e_out) - E_i_1 = this%table(i)%e_out(1) - E_i_K = this%table(i)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i)%e_out) + E_i_1 = this%distribution(i)%e_out(1) + E_i_K = this%distribution(i)%e_out(n_energy_out) - n_energy_out = size(this%table(i+1)%e_out) - E_i1_1 = this%table(i+1)%e_out(1) - E_i1_K = this%table(i+1)%e_out(n_energy_out) + n_energy_out = size(this%distribution(i+1)%e_out) + E_i1_1 = this%distribution(i+1)%e_out(1) + E_i1_K = this%distribution(i+1)%e_out(n_energy_out) E_1 = E_i_1 + r*(E_i1_1 - E_i_1) E_K = E_i_K + r*(E_i1_K - E_i_K) ! determine outgoing energy bin - n_energy_out = size(this%table(l)%e_out) + n_energy_out = size(this%distribution(l)%e_out) r1 = prn() - c_k = this%table(l)%c(1) + c_k = this%distribution(l)%c(1) do k = 1, n_energy_out - 1 - c_k1 = this%table(l)%c(k+1) + c_k1 = this%distribution(l)%c(k+1) if (r1 < c_k1) exit c_k = c_k1 end do @@ -109,9 +109,9 @@ contains ! check to make sure k is <= NP - 1 k = min(k, n_energy_out - 1) - E_l_k = this%table(l)%e_out(k) - p_l_k = this%table(l)%p(k) - if (this%table(l)%interpolation == HISTOGRAM) then + E_l_k = this%distribution(l)%e_out(k) + p_l_k = this%distribution(l)%p(k) + if (this%distribution(l)%interpolation == HISTOGRAM) then ! Histogram interpolation if (p_l_k > ZERO) then E_out = E_l_k + (r1 - c_k)/p_l_k @@ -120,13 +120,13 @@ contains end if ! Determine Kalbach-Mann parameters - km_r = this%table(l)%r(k) - km_a = this%table(l)%a(k) + km_r = this%distribution(l)%r(k) + km_a = this%distribution(l)%a(k) - elseif (this%table(l)%interpolation == LINEAR_LINEAR) then + elseif (this%distribution(l)%interpolation == LINEAR_LINEAR) then ! Linear-linear interpolation - E_l_k1 = this%table(l)%e_out(k+1) - p_l_k1 = this%table(l)%p(k+1) + E_l_k1 = this%distribution(l)%e_out(k+1) + p_l_k1 = this%distribution(l)%p(k+1) frac = (p_l_k1 - p_l_k)/(E_l_k1 - E_l_k) if (frac == ZERO) then @@ -137,10 +137,10 @@ contains end if ! Determine Kalbach-Mann parameters - km_r = this%table(l)%r(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & - (this%table(l)%r(k+1) - this%table(l)%r(k)) - km_a = this%table(l)%a(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & - (this%table(l)%a(k+1) - this%table(l)%a(k)) + km_r = this%distribution(l)%r(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & + (this%distribution(l)%r(k+1) - this%distribution(l)%r(k)) + km_a = this%distribution(l)%a(k) + (E_out - E_l_k)/(E_l_k1 - E_l_k) * & + (this%distribution(l)%a(k+1) - this%distribution(l)%a(k)) end if ! Now interpolate between incident energy bins i and i + 1 diff --git a/src/secondary_nbody.F90 b/src/secondary_nbody.F90 new file mode 100644 index 0000000000..71cae6fa2a --- /dev/null +++ b/src/secondary_nbody.F90 @@ -0,0 +1,70 @@ +module secondary_nbody + + use angleenergy_header, only: AngleEnergy + use constants, only: ONE, TWO, PI + use math, only: maxwell_spectrum + use random_lcg, only: prn + +!=============================================================================== +! NBODYPHASESPACE gives the energy distribution for particles emitted from +! neutron and charged-particle reactions. This corresponds to ACE law 66 and +! ENDF File 6, LAW=6. +!=============================================================================== + + type, extends(AngleEnergy) :: NBodyPhaseSpace + integer :: n_bodies + real(8) :: mass_ratio + real(8) :: A + real(8) :: Q + contains + procedure :: sample => nbody_sample + end type NBodyPhaseSpace + +contains + + subroutine nbody_sample(this, E_in, E_out, mu) + class(NBodyPhaseSpace), intent(in) :: this + real(8), intent(in) :: E_in ! incoming energy + real(8), intent(out) :: E_out ! sampled outgoing energy + real(8), intent(out) :: mu ! sampled outgoing energy + + real(8) :: Ap ! total mass of particles in neutron masses + real(8) :: E_max ! maximum possible COM energy + real(8) :: x, y, v + real(8) :: r1, r2, r3, r4, r5, r6 + + ! By definition, the distribution of the angle is isotropic for an N-body + ! phase space distribution + mu = TWO*prn() - ONE + + ! Determine E_max parameter + Ap = this%mass_ratio + E_max = (Ap - ONE)/Ap * (this%A/(this%A + ONE)*E_in + this%Q) + + ! x is essentially a Maxwellian distribution + x = maxwell_spectrum(ONE) + + select case (this%n_bodies) + case (3) + y = maxwell_spectrum(ONE) + case (4) + r1 = prn() + r2 = prn() + r3 = prn() + y = -log(r1*r2*r3) + case (5) + r1 = prn() + r2 = prn() + r3 = prn() + r4 = prn() + r5 = prn() + r6 = prn() + y = -log(r1*r2*r3*r4) - log(r5) * cos(PI/TWO*r6)**2 + end select + + ! Now determine v and E_out + v = x/(x+y) + E_out = E_max * v + end subroutine nbody_sample + +end module secondary_nbody diff --git a/src/secondary_uncorrelated.F90 b/src/secondary_uncorrelated.F90 index 22a56aa127..7bc8fa13d9 100644 --- a/src/secondary_uncorrelated.F90 +++ b/src/secondary_uncorrelated.F90 @@ -1,9 +1,9 @@ module secondary_uncorrelated use angle_distribution, only: AngleDistribution + use angleenergy_header, only: AngleEnergy use constants, only: ONE, TWO use energy_distribution, only: EnergyDistribution - use secondary_header, only: AngleEnergy use random_lcg, only: prn !=============================================================================== diff --git a/src/summary.F90 b/src/summary.F90 index e662aa473b..047eec2a7b 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -1,6 +1,5 @@ module summary - use ace_header, only: Reaction, UrrData use constants use endf, only: reaction_name use geometry_header, only: Cell, Universe, Lattice, RectLattice, & diff --git a/src/tally.F90 b/src/tally.F90 index 5a54d9846e..71444107f4 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1,6 +1,5 @@ module tally - use ace_header, only: Reaction use constants use error, only: fatal_error use geometry_header @@ -245,9 +244,9 @@ contains ! Only analog estimators are available. ! Skip any event where the particle didn't scatter if (p % event /= EVENT_SCATTER) cycle SCORE_LOOP - ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of - ! neutrons exiting a reaction with neutrons in the exit channel + ! For scattering production, we need to use the pre-collision weight + ! times the yield as the estimate for the number of neutrons exiting a + ! reaction with neutrons in the exit channel if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then ! Don't waste time on very common reactions we know have multiplicities @@ -257,15 +256,15 @@ contains m = nuclides(p%event_nuclide)%reaction_index% & get_key(p % event_MT) - ! Get multiplicity and apply to score + ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt + if (rxn % products(1) % yield_with_E) then + ! Then the yield was already incorporated in to p % wgt ! per the scattering routine, score = p % wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + ! Grab the yield from the rxn + score = p % last_wgt * rxn % products(1) % yield end if end associate end if @@ -279,7 +278,7 @@ contains cycle SCORE_LOOP end if ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of + ! weight times the yield as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then @@ -290,15 +289,15 @@ contains m = nuclides(p%event_nuclide)%reaction_index% & get_key(p % event_MT) - ! Get multiplicity and apply to score + ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt + if (rxn % products(1) % yield_with_E) then + ! Then the yield was already incorporated in to p % wgt ! per the scattering routine, score = p % wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + ! Grab the yield from the rxn + score = p % last_wgt * rxn % products(1) % yield end if end associate end if @@ -312,7 +311,7 @@ contains cycle SCORE_LOOP end if ! For scattering production, we need to use the pre-collision - ! weight times the multiplicity as the estimate for the number of + ! weight times the yield as the estimate for the number of ! neutrons exiting a reaction with neutrons in the exit channel if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then @@ -323,15 +322,15 @@ contains m = nuclides(p%event_nuclide)%reaction_index% & get_key(p % event_MT) - ! Get multiplicity and apply to score + ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % multiplicity_with_E) then - ! Then the multiplicity was already incorporated in to p % wgt + if (rxn % products(1) % yield_with_E) then + ! Then the yield was already incorporated in to p % wgt ! per the scattering routine, score = p % wgt else - ! Grab the multiplicity from the rxn - score = p % last_wgt * rxn % multiplicity + ! Grab the yield from the rxn + score = p % last_wgt * rxn % products(1) % yield end if end associate end if diff --git a/src/urr_header.F90 b/src/urr_header.F90 new file mode 100644 index 0000000000..96e182d2e3 --- /dev/null +++ b/src/urr_header.F90 @@ -0,0 +1,20 @@ +module urr_header + + implicit none + +!=============================================================================== +! URRDATA contains probability tables for the unresolved resonance range. +!=============================================================================== + + type UrrData + integer :: n_energy ! # of incident neutron energies + integer :: n_prob ! # of probabilities + integer :: interp ! inteprolation (2=lin-lin, 5=log-log) + integer :: inelastic_flag ! inelastic competition flag + integer :: absorption_flag ! other absorption flag + logical :: multiply_smooth ! multiply by smooth cross section? + real(8), allocatable :: energy(:) ! incident energies + real(8), allocatable :: prob(:,:,:) ! actual probabibility tables + end type UrrData + +end module urr_header From 3dc19e5070d1f413132313a7d884ec2c7724ec2f Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 17 Mar 2016 13:38:27 -0500 Subject: [PATCH 2/5] Refactor prompt/delayed fission neutron yield/distribution data --- src/ace.F90 | 440 ++++++++++++++-------------- src/constants.F90 | 6 + src/cross_section.F90 | 3 +- src/endf_header.F90 | 190 +++++++++++- src/energy_distribution.F90 | 19 +- src/fission.F90 | 161 ---------- src/interpolation.F90 | 205 ------------- src/nuclide_header.F90 | 222 ++++++++------ src/physics.F90 | 122 ++++---- src/product_header.F90 | 17 +- src/tally.F90 | 78 ++--- tests/test_tallies/results_true.dat | 2 +- 12 files changed, 652 insertions(+), 813 deletions(-) delete mode 100644 src/fission.F90 delete mode 100644 src/interpolation.F90 diff --git a/src/ace.F90 b/src/ace.F90 index 431a9d4238..e354f5866f 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -4,15 +4,16 @@ module ace use constants use distribution_univariate, only: Uniform, Equiprobable, Tabular use endf, only: is_fission, is_disappearance + use endf_header, only: Constant1D, Tabulated1D, Polynomial use energy_distribution, only: TabularEquiprobable, LevelInelastic, & ContinuousTabular, MaxwellEnergy, Evaporation, WattEnergy use error, only: fatal_error, warning - use fission, only: nu_total use global use list_header, only: ListInt use material_header, only: Material use nuclide_header use output, only: write_message + use product_header, only: ReactionProduct use sab_header use set_header, only: SetChar use secondary_correlated, only: CorrelatedAngleEnergy @@ -378,8 +379,8 @@ contains if (data_0K) then continue else - call read_nu_data(nuc) call read_reactions(nuc) + call read_nu_data(nuc) call read_energy_dist(nuc) call read_angular_dist(nuc) call read_unr_res(nuc) @@ -512,198 +513,209 @@ contains subroutine read_nu_data(nuc) type(NuclideCE), intent(inout) :: nuc - integer :: i ! loop index - integer :: JXS2 ! location for fission nu data - integer :: JXS24 ! location for delayed neutron data + integer :: i, j ! loop index + integer :: idx ! index in XSS integer :: KNU ! location for nu data integer :: LNU ! type of nu data (polynomial or tabular) - integer :: NC ! number of polynomial coefficients integer :: NR ! number of interpolation regions integer :: NE ! number of energies integer :: NPCR ! number of delayed neutron precursor groups - integer :: LED ! location of energy distribution locators - integer :: LDIS ! location of all energy distributions integer :: LOCC ! location of energy distributions for given MT integer :: LAW integer :: IDAT - integer :: lc ! locator - integer :: length ! length of data to allocate + real(8) :: total_group_probability + type(Tabulated1D) :: yield_delayed + type(Tabulated1D) :: group_probability - JXS2 = JXS(2) - JXS24 = JXS(24) - - if (JXS2 == 0) then - ! ======================================================================= - ! NO PROMPT/TOTAL NU DATA - nuc % nu_t_type = NU_NONE - nuc % nu_p_type = NU_NONE - - elseif (XSS(JXS2) > 0) then - ! ======================================================================= - ! PROMPT OR TOTAL NU DATA - KNU = JXS2 - LNU = int(XSS(KNU)) - if (LNU == 1) then - ! Polynomial data - nuc % nu_t_type = NU_POLYNOMIAL - nuc % nu_p_type = NU_NONE - - ! allocate determine how many coefficients for polynomial - NC = int(XSS(KNU+1)) - length = NC + 1 - elseif (LNU == 2) then - ! Tabular data - nuc % nu_t_type = NU_TABULAR - nuc % nu_p_type = NU_NONE - - ! determine number of interpolation regions and number of energies - NR = int(XSS(KNU+1)) - NE = int(XSS(KNU+2+2*NR)) - length = 2 + 2*NR + 2*NE - end if - - ! allocate space for nu data storage - allocate(nuc % nu_t_data(length)) - - ! read data -- for polynomial, this is the number of coefficients and the - ! coefficients themselves, and for tabular, this is interpolation data - ! and tabular E/nu - XSS_index = KNU + 1 - nuc % nu_t_data = get_real(length) - - elseif (XSS(JXS2) < 0) then - ! ======================================================================= - ! PROMPT AND TOTAL NU DATA -- read prompt data first - KNU = JXS2 + 1 - LNU = int(XSS(KNU)) - if (LNU == 1) then - ! Polynomial data - nuc % nu_p_type = NU_POLYNOMIAL - - ! allocate determine how many coefficients for polynomial - NC = int(XSS(KNU+1)) - length = NC + 1 - elseif (LNU == 2) then - ! Tabular data - nuc % nu_p_type = NU_TABULAR - - ! determine number of interpolation regions and number of energies - NR = int(XSS(KNU+1)) - NE = int(XSS(KNU+2+2*NR)) - length = 2 + 2*NR + 2*NE - end if - - ! allocate space for nu data storage - allocate(nuc % nu_p_data(length)) - - ! read data - XSS_index = KNU + 1 - nuc % nu_p_data = get_real(length) - - ! Now read total nu data - KNU = JXS2 + int(abs(XSS(JXS2))) + 1 - LNU = int(XSS(KNU)) - if (LNU == 1) then - ! Polynomial data - nuc % nu_t_type = NU_POLYNOMIAL - - ! allocate determine how many coefficients for polynomial - NC = int(XSS(KNU+1)) - length = NC + 1 - elseif (LNU == 2) then - ! Tabular data - nuc % nu_t_type = NU_TABULAR - - ! determine number of interpolation regions and number of energies - NR = int(XSS(KNU+1)) - NE = int(XSS(KNU+2+2*NR)) - length = 2 + 2*NR + 2*NE - end if - - ! allocate space for nu data storage - allocate(nuc % nu_t_data(length)) - - ! read data - XSS_index = KNU + 1 - nuc % nu_t_data = get_real(length) + if (JXS(2) == 0) then + ! Nuclide is not fissionable + return end if - if (JXS24 > 0) then - ! ======================================================================= - ! DELAYED NU DATA - - nuc % nu_d_type = NU_TABULAR - KNU = JXS24 - - ! determine size of tabular delayed nu data - NR = int(XSS(KNU+1)) - NE = int(XSS(KNU+2+2*NR)) - length = 2 + 2*NR + 2*NE - - ! allocate space for delayed nu data - allocate(nuc % nu_d_data(length)) - - ! read delayed nu data - XSS_index = KNU + 1 - nuc % nu_d_data = get_real(length) - - ! ======================================================================= - ! DELAYED NEUTRON ENERGY DISTRIBUTION - - ! Allocate space for secondary energy distribution + ! Determine number of delayed neutron precursors + if (JXS(24) > 0) then NPCR = NXS(8) + else + NPCR = 0 + end if + nuc % n_precursor = NPCR - ! Check to make sure nuclide does not have more than the maximum number - ! of delayed groups - if (NPCR > MAX_DELAYED_GROUPS) then - call fatal_error("Encountered nuclide with " // trim(to_str(NPCR)) & - // " delayed groups while the maximum number of delayed groups & - &set in constants.F90 is " // trim(to_str(MAX_DELAYED_GROUPS))) + ! Check to make sure nuclide does not have more than the maximum number + ! of delayed groups + if (NPCR > MAX_DELAYED_GROUPS) then + call fatal_error("Encountered nuclide with " // trim(to_str(NPCR)) & + // " delayed groups while the maximum number of delayed groups is " & + // trim(to_str(MAX_DELAYED_GROUPS))) + end if + + associate (rx => nuc % reactions(nuc % index_fission(1))) + ! Allocate space for prompt/delayed neutron products + allocate(rx % products(1 + NPCR)) + rx % products(:) % particle = NEUTRON + + if (XSS(JXS(2)) > 0) then + ! ======================================================================= + ! PROMPT OR TOTAL NU DATA + + ! If delayed data is present, then prompt data must be present. Otherwise + ! the product represents 'total' neutron emission + if (JXS(24) > 0) then + rx % products(1) % emission_mode = EMISSION_PROMPT + else + rx % products(1) % emission_mode = EMISSION_TOTAL + end if + + KNU = JXS(2) + LNU = nint(XSS(KNU)) + if (LNU == 1) then + ! Polynomial data + allocate(Polynomial :: rx % products(1) % yield) + + ! determine order of polynomial and read coefficients + select type (yield => rx % products(1) % yield) + type is (Polynomial) + call yield % from_ace(XSS, KNU + 1) + end select + + elseif (LNU == 2) then + ! Tabulated data + allocate(Tabulated1D :: rx % products(1) % yield) + + select type(yield => rx % products(1) % yield) + type is (Tabulated1D) + call yield % from_ace(XSS, KNU + 1) + end select + + end if + + elseif (XSS(JXS(2)) < 0) then + ! ======================================================================= + ! PROMPT AND TOTAL NU DATA + + rx % products(1) % emission_mode = EMISSION_PROMPT + + KNU = JXS(2) + 1 + LNU = nint(XSS(KNU)) + if (LNU == 1) then + ! Polynomial data + allocate(Polynomial :: rx % products(1) % yield) + + ! determine order of polynomial and read coefficients + select type (yield => rx % products(1) % yield) + type is (Polynomial) + call yield % from_ace(XSS, KNU + 1) + end select + + elseif (LNU == 2) then + ! Tabulated data + allocate(Tabulated1D :: rx % products(1) % yield) + + select type(yield => rx % products(1) % yield) + type is (Tabulated1D) + call yield % from_ace(XSS, KNU + 1) + end select + end if + + KNU = JXS(2) + nint(abs(XSS(JXS(2)))) + 1 + LNU = nint(XSS(KNU)) + if (LNU == 1) then + ! Polynomial data + allocate(Polynomial :: nuc % total_nu) + + ! determine order of polynomial and read coefficients + select type (yield => nuc % total_nu) + type is (Polynomial) + call yield % from_ace(XSS, KNU + 1) + end select + + elseif (LNU == 2) then + ! Tabulated data + allocate(Tabulated1D :: nuc % total_nu) + + select type(yield => nuc % total_nu) + type is (Tabulated1D) + call yield % from_ace(XSS, KNU + 1) + end select + end if end if - nuc % n_precursor = NPCR - allocate(nuc % nu_d_edist(NPCR)) + if (JXS(24) > 0) then + ! ======================================================================= + ! DELAYED NU DATA - LED = JXS(26) - LDIS = JXS(27) + ! Read total yield of delayed neutrons + call yield_delayed % from_ace(XSS, JXS(24) + 1) - ! Loop over all delayed neutron precursor groups - do i = 1, NPCR - ! find location of energy distribution data - LOCC = nint(XSS(LED + i - 1)) + idx = JXS(25) + total_group_probability = ZERO + do i = 1, NPCR + ! Set emission mode and decay rate + rx % products(1 + i) % emission_mode = EMISSION_DELAYED + rx % products(1 + i) % decay_rate = XSS(idx) - ! Determine law and location of data - LAW = nint(XSS(LDIS + LOCC)) - IDAT = nint(XSS(LDIS + LOCC + 1)) + ! Read probability for this precursor group + call group_probability % from_ace(XSS, idx + 1) - ! read energy distribution data - call get_energy_dist(nuc%nu_d_edist(i)%obj, LAW, LDIS, IDAT, & - ZERO, ZERO) + ! Set yield based on product of group probability and delayed yield + if (all(group_probability % y == group_probability % y(1))) then + allocate(Tabulated1D :: rx % products(1 + i) % yield) + select type (yield => rx % products(1 + i) % yield) + type is (Tabulated1D) + yield = yield_delayed + yield % y(:) = yield % y(:) * group_probability % y(1) + total_group_probability = total_group_probability + group_probability % y(1) + end select + else + call fatal_error("Delayed neutron with energy-dependent group & + &probability not implemented") + end if + + ! Advance position + NR = nint(XSS(idx + 1)) + NE = nint(XSS(idx + 2 + 2*NR)) + idx = idx + 3 + 2*(NR + NE) + + ! ======================================================================= + ! DELAYED NEUTRON ENERGY DISTRIBUTION + + ! Read energy distribution + LOCC = nint(XSS(JXS(26) + i - 1)) + + ! Determine law and location of data + LAW = nint(XSS(JXS(27) + LOCC)) + IDAT = nint(XSS(JXS(27) + LOCC + 1)) + + ! read energy distribution data + associate(p => rx % products(1 + i)) + allocate(p % applicability(1)) + allocate(p % distribution(1)) + call get_energy_dist(p % distribution(1) % obj, LAW, JXS(27), IDAT, & + ZERO, ZERO) + + select type (aedist => p % distribution(1) % obj) + type is (UncorrelatedAngleEnergy) + aedist % fission = .true. + end select + end associate + end do + + ! Renormalize delayed neutron yields to reflect fact that in ACE file, the + ! sum of the group probabilities is not exactly one + do i = 1, NPCR + select type (yield => rx % products(1 + i) % yield) + type is (Tabulated1D) + yield % y(:) = yield % y(:) / total_group_probability + end select + end do + end if + + ! Assign products to other fission reactions + do i = 2, nuc % n_fission + j = nuc % index_fission(i) + allocate(nuc % reactions(j) % products(1 + NPCR)) + nuc % reactions(j) % products(:) = rx % products(:) end do - - ! ======================================================================= - ! DELAYED NEUTRON PRECUSOR YIELDS AND CONSTANTS - - ! determine length of all precursor constants/yields/interp data - length = 0 - lc = JXS(25) - do i = 1, NPCR - NR = int(XSS(lc + length + 1)) - NE = int(XSS(lc + length + 2 + 2*NR)) - length = length + 3 + 2*NR + 2*NE - end do - - ! allocate space for precusor data - allocate(nuc % nu_d_precursor_data(length)) - - ! read delayed neutron precursor data - XSS_index = lc - nuc % nu_d_precursor_data = get_real(length) - - else - nuc % nu_d_type = NU_NONE - nuc % n_precursor = 0 - end if + end associate end subroutine read_nu_data @@ -727,7 +739,7 @@ contains integer :: LOCA ! location of cross-section for given MT integer :: IE ! reaction's starting index on energy grid integer :: NE ! number of energies - integer :: NR ! number of interpolation regions + real(8) :: y type(ListInt) :: MTs LMT = JXS(3) @@ -749,7 +761,12 @@ contains rxn % MT = 2 rxn % Q_value = ZERO allocate(rxn % products(1)) - rxn % products(1) % yield = 1 + rxn % products(1) % particle = NEUTRON + allocate(Constant1D :: rxn % products(1) % yield) + select type(yield => rxn % products(1) % yield) + type is (Constant1D) + yield % y = 1 + end select rxn % threshold = 1 rxn % scatter_in_cm = .true. allocate(rxn % products(1) % distribution(1)) @@ -771,44 +788,33 @@ contains ! read MT number, Q-value, and neutrons produced rxn % MT = int(XSS(LMT + i - 1)) rxn % Q_value = XSS(JXS4 + i - 1) - allocate(rxn % products(1)) - rxn % products(1) % yield = abs(nint(XSS(JXS5 + i - 1))) rxn % scatter_in_cm = (nint(XSS(JXS5 + i - 1)) < 0) - ! Read energy-dependent multiplicities - if (rxn % products(1) % yield > 100) then - ! Set flag and allocate space for Tab1 to store yield - rxn % products(1) % yield_with_E = .true. - allocate(rxn % products(1) % yield_E) + if (.not. is_fission(rxn % MT)) then + allocate(rxn % products(1)) + rxn % products(1) % particle = NEUTRON - XSS_index = JXS(11) + rxn % products(1) % yield - 101 - NR = nint(XSS(XSS_index)) - rxn % products(1) % yield_E % n_regions = NR + y = abs(nint(XSS(JXS5 + i - 1))) + if (y > 100) then + ! Read energy-dependent multiplicities - ! allocate space for ENDF interpolation parameters - if (NR > 0) then - allocate(rxn % products(1) % yield_E % nbt(NR)) - allocate(rxn % products(1) % yield_E % int(NR)) + ! Set flag and allocate space for Tabulated1D to store yield + allocate(Tabulated1D :: rxn % products(1) % yield) + + ! Read yield function + select type (yield => rxn % products(1) % yield) + type is (Tabulated1D) + XSS_index = JXS(11) + int(y) - 101 + call yield % from_ace(XSS, XSS_index) + end select + else + ! Integral yield + allocate(Constant1D :: rxn % products(1) % yield) + select type (yield => rxn % products(1) % yield) + type is (Constant1D) + yield % y = y + end select end if - - ! read ENDF interpolation parameters - XSS_index = XSS_index + 1 - if (NR > 0) then - rxn % products(1) % yield_E % nbt = get_int(NR) - rxn % products(1) % yield_E % int = get_int(NR) - end if - - ! allocate space for yield data - XSS_index = XSS_index + 2*NR - NE = nint(XSS(XSS_index)) - rxn % products(1) % yield_E % n_pairs = NE - allocate(rxn % products(1) % yield_E % x(NE)) - allocate(rxn % products(1) % yield_E % y(NE)) - - ! read yield data - XSS_index = XSS_index + 1 - rxn % products(1) % yield_E % x = get_real(NE) - rxn % products(1) % yield_E % y = get_real(NE) end if ! read starting energy index @@ -1469,7 +1475,6 @@ contains end if end subroutine read_unr_res - !=============================================================================== ! GENERATE_NU_FISSION precalculates the microscopic nu-fission cross section for ! a given nuclide. This is done so that the nu_total function does not need to @@ -1480,20 +1485,11 @@ contains type(NuclideCE), intent(inout) :: nuc integer :: i ! index on nuclide energy grid - real(8) :: E ! energy - real(8) :: nu ! # of neutrons per fission - do i = 1, nuc % n_grid - ! determine energy - E = nuc % energy(i) - - ! determine total nu at given energy - nu = nu_total(nuc, E) - - ! determine nu-fission microscopic cross section - nuc % nu_fission(i) = nu * nuc % fission(i) + do i = 1, size(nuc % energy) + nuc % nu_fission(i) = nuc % nu(nuc % energy(i), EMISSION_TOTAL) * & + nuc % fission(i) end do - end subroutine generate_nu_fission !=============================================================================== diff --git a/src/constants.F90 b/src/constants.F90 index 5d91d2be8f..8863ca18c4 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -223,6 +223,12 @@ module constants NU_POLYNOMIAL = 1, & ! Nu values given by polynomial NU_TABULAR = 2 ! Nu values given by tabular distribution + ! Secondary particle emission type + integer, parameter :: & + EMISSION_PROMPT = 1, & ! Prompt emission of secondary particle + EMISSION_DELAYED = 2, & ! Delayed emission of secondary particle + EMISSION_TOTAL = 3 ! Yield represents total emission (prompt + delayed) + ! Cross section filetypes integer, parameter :: & ASCII = 1, & ! ASCII cross section file diff --git a/src/cross_section.F90 b/src/cross_section.F90 index 4c529213b2..d0509deb8d 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -3,7 +3,6 @@ module cross_section use constants use energy_grid, only: grid_method, log_spacing use error, only: fatal_error - use fission, only: nu_total use global use list_header, only: ListElemInt use material_header, only: Material @@ -485,7 +484,7 @@ contains ! Determine nu-fission cross section if (nuc % fissionable) then - micro_xs(i_nuclide) % nu_fission = nu_total(nuc, E) * & + micro_xs(i_nuclide) % nu_fission = nuc % nu(E, EMISSION_TOTAL) * & micro_xs(i_nuclide) % fission end if end associate diff --git a/src/endf_header.F90 b/src/endf_header.F90 index 7388ea2f54..e9a073f4e6 100644 --- a/src/endf_header.F90 +++ b/src/endf_header.F90 @@ -1,12 +1,51 @@ module endf_header - implicit none + use constants, only: ZERO, HISTOGRAM, LINEAR_LINEAR, LINEAR_LOG, & + LOG_LINEAR, LOG_LOG + use search, only: binary_search + +implicit none + + type, abstract :: Function1D + contains + procedure(function1d_evaluate_), deferred :: evaluate + end type Function1D + + abstract interface + pure function function1d_evaluate_(this, x) result(y) + import Function1D + class(Function1D), intent(in) :: this + real(8), intent(in) :: x + real(8) :: y + end function function1d_evaluate_ + end interface !=============================================================================== -! TAB1 represents a one-dimensional interpolable function +! CONSTANT1D represents a constant one-dimensional function !=============================================================================== - type Tab1 + type, extends(Function1D) :: Constant1D + real(8) :: y + contains + procedure :: evaluate => constant1d_evaluate + end type Constant1D + +!=============================================================================== +! POLYNOMIAL represents a one-dimensional function expressed as a polynomial +!=============================================================================== + + type, extends(Function1D) :: Polynomial + real(8), allocatable :: coef(:) ! coefficients + contains + procedure :: evaluate => polynomial_evaluate + procedure :: from_ace => polynomial_from_ace + end type Polynomial + +!=============================================================================== +! TABULATED1D represents a one-dimensional interpolable function +!=============================================================================== + + type, extends(Function1D) :: Tabulated1D integer :: n_regions = 0 ! # of interpolation regions integer, allocatable :: nbt(:) ! values separating interpolation regions integer, allocatable :: int(:) ! interpolation scheme @@ -14,18 +53,78 @@ module endf_header real(8), allocatable :: x(:) ! values of abscissa real(8), allocatable :: y(:) ! values of ordinate contains - procedure :: from_ace - end type Tab1 + procedure :: from_ace => tabulated1d_from_ace + procedure :: evaluate => tabulated1d_evaluate + end type Tabulated1D contains - subroutine from_ace(this, xss, idx) - class(Tab1), intent(inout) :: this +!=============================================================================== +! Constant1D implementation +!=============================================================================== + + pure function constant1d_evaluate(this, x) result(y) + class(Constant1D), intent(in) :: this + real(8), intent(in) :: x + real(8) :: y + + y = this % y + end function constant1d_evaluate + +!=============================================================================== +! Polynomial implementation +!=============================================================================== + + subroutine polynomial_from_ace(this, xss, idx) + class(Polynomial), intent(inout) :: this + real(8), intent(in) :: xss(:) + integer, intent(in) :: idx + + integer :: nc ! number of coefficients (order - 1) + + ! Clear space + if (allocated(this % coef)) deallocate(this % coef) + + ! Determine number of coefficients + nc = nint(xss(idx)) + + ! Allocate space for and read coefficients + allocate(this % coef(nc)) + this % coef(:) = xss(idx + 1 : idx + nc) + end subroutine polynomial_from_ace + + pure function polynomial_evaluate(this, x) result(y) + class(Polynomial), intent(in) :: this + real(8), intent(in) :: x + real(8) :: y + + integer :: i + + ! Use Horner's rule to evaluate polynomial. Note that coefficients are + ! ordered in increasing powers of x. + y = ZERO + do i = size(this % coef), 1, -1 + y = y*x + this % coef(i) + end do + end function polynomial_evaluate + +!=============================================================================== +! Tabulated1D implementation +!=============================================================================== + + subroutine tabulated1d_from_ace(this, xss, idx) + class(Tabulated1D), intent(inout) :: this real(8), intent(in) :: xss(:) integer, intent(in) :: idx integer :: nr, ne + ! Clear space + if (allocated(this % nbt)) deallocate(this % nbt) + if (allocated(this % int)) deallocate(this % int) + if (allocated(this % x)) deallocate(this % x) + if (allocated(this % y)) deallocate(this % y) + ! Determine number of regions nr = nint(xss(idx)) this%n_regions = nr @@ -47,6 +146,81 @@ contains allocate(this%y(ne)) this%x(:) = xss(idx + 2*nr + 2 : idx + 2*nr + 1 + ne) this%y(:) = xss(idx + 2*nr + 2 + ne : idx + 2*nr + 1 + 2*ne) - end subroutine from_ace + end subroutine tabulated1d_from_ace + + pure function tabulated1d_evaluate(this, x) result(y) + class(Tabulated1D), intent(in) :: this + real(8), intent(in) :: x ! x value to find y at + real(8) :: y ! y(x) + + integer :: i ! bin in which to interpolate + integer :: j ! index for interpolation region + integer :: n_regions ! number of interpolation regions + integer :: n_pairs ! number of tabulated values + integer :: interp ! ENDF interpolation scheme + real(8) :: r ! interpolation factor + real(8) :: x0, x1 ! bounding x values + real(8) :: y0, y1 ! bounding y values + + ! determine number of interpolation regions and pairs + n_regions = this % n_regions + n_pairs = this % n_pairs + + ! find which bin the abscissa is in -- if the abscissa is outside the + ! tabulated range, the first or last point is chosen, i.e. no interpolation + ! is done outside the energy range + if (x < this % x(1)) then + y = this % y(1) + return + elseif (x > this % x(n_pairs)) then + y = this % y(n_pairs) + return + else + i = binary_search(this % x, n_pairs, x) + end if + + ! determine interpolation scheme + if (n_regions == 0) then + interp = LINEAR_LINEAR + elseif (n_regions == 1) then + interp = this % int(1) + elseif (n_regions > 1) then + do j = 1, n_regions + if (i < this % nbt(j)) then + interp = this % int(j) + exit + end if + end do + end if + + ! handle special case of histogram interpolation + if (interp == HISTOGRAM) then + y = this % y(i) + return + end if + + ! determine bounding values + x0 = this % x(i) + x1 = this % x(i + 1) + y0 = this % y(i) + y1 = this % y(i + 1) + + ! determine interpolation factor and interpolated value + select case (interp) + case (LINEAR_LINEAR) + r = (x - x0)/(x1 - x0) + y = y0 + r*(y1 - y0) + case (LINEAR_LOG) + r = log(x/x0)/log(x1/x0) + y = y0 + r*(y1 - y0) + case (LOG_LINEAR) + r = (x - x0)/(x1 - x0) + y = y0*exp(r*log(y1/y0)) + case (LOG_LOG) + r = log(x/x0)/log(x1/x0) + y = y0*exp(r*log(y1/y0)) + end select + + end function tabulated1d_evaluate end module endf_header diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index 3d35249342..3a42bb73db 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -1,8 +1,7 @@ module energy_distribution use constants, only: ZERO, ONE, TWO, PI, HISTOGRAM, LINEAR_LINEAR - use endf_header, only: Tab1 - use interpolation, only: interpolate_tab1 + use endf_header, only: Tabulated1D use math, only: maxwell_spectrum, watt_spectrum use random_lcg, only: prn use search, only: binary_search @@ -95,7 +94,7 @@ module energy_distribution !=============================================================================== type, extends(EnergyDistribution) :: MaxwellEnergy - type(Tab1) :: theta ! incoming-energy-dependent parameter + type(Tabulated1D) :: theta ! incoming-energy-dependent parameter real(8) :: u ! restriction energy contains procedure :: sample => maxwellenergy_sample @@ -107,7 +106,7 @@ module energy_distribution !=============================================================================== type, extends(EnergyDistribution) :: Evaporation - type(Tab1) :: theta + type(Tabulated1D) :: theta real(8) :: u contains procedure :: sample => evaporation_sample @@ -119,8 +118,8 @@ module energy_distribution !=============================================================================== type, extends(EnergyDistribution) :: WattEnergy - type(Tab1) :: a - type(Tab1) :: b + type(Tabulated1D) :: a + type(Tabulated1D) :: b real(8) :: u contains procedure :: sample => watt_sample @@ -317,7 +316,7 @@ contains real(8) :: theta ! Maxwell distribution parameter ! Get temperature corresponding to incoming energy - theta = interpolate_tab1(this%theta, E_in) + theta = this % theta % evaluate(E_in) do ! Sample maxwell fission spectrum @@ -337,7 +336,7 @@ contains real(8) :: x, y, v ! Get temperature corresponding to incoming energy - theta = interpolate_tab1(this%theta, E_in) + theta = this % theta % evaluate(E_in) y = (E_in - this%u)/theta v = 1 - exp(-y) @@ -360,10 +359,10 @@ contains real(8) :: a, b ! Watt spectrum parameters ! Determine Watt parameter 'a' from tabulated function - a = interpolate_tab1(this%a, E_in) + a = this % a % evaluate(E_in) ! Determine Watt parameter 'b' from tabulated function - b = interpolate_tab1(this%b, E_in) + b = this % b % evaluate(E_in) do ! Sample energy-dependent Watt fission spectrum diff --git a/src/fission.F90 b/src/fission.F90 deleted file mode 100644 index 77ee641787..0000000000 --- a/src/fission.F90 +++ /dev/null @@ -1,161 +0,0 @@ -module fission - - use nuclide_header, only: NuclideCE - use constants - use error, only: fatal_error - use interpolation, only: interpolate_tab1 - use search, only: binary_search - - implicit none - -contains - -!=============================================================================== -! NU_TOTAL calculates the total number of neutrons emitted per fission for a -! given nuclide and incoming neutron energy -!=============================================================================== - - pure function nu_total(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of total neutrons emitted per fission - - integer :: i ! loop index - integer :: NC ! number of polynomial coefficients - real(8) :: c ! polynomial coefficient - - if (nuc % nu_t_type == NU_NONE) then - nu = ERROR_REAL - elseif (nuc % nu_t_type == NU_POLYNOMIAL) then - ! determine number of coefficients - NC = int(nuc % nu_t_data(1)) - - ! sum up polynomial in energy - nu = ZERO - do i = 0, NC - 1 - c = nuc % nu_t_data(i+2) - nu = nu + c * E**i - end do - elseif (nuc % nu_t_type == NU_TABULAR) then - ! use ENDF interpolation laws to determine nu - nu = interpolate_tab1(nuc % nu_t_data, E) - end if - - end function nu_total - -!=============================================================================== -! NU_PROMPT calculates the total number of prompt neutrons emitted per fission -! for a given nuclide and incoming neutron energy -!=============================================================================== - - pure function nu_prompt(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of prompt neutrons emitted per fission - - integer :: i ! loop index - integer :: NC ! number of polynomial coefficients - real(8) :: c ! polynomial coefficient - - if (nuc % nu_p_type == NU_NONE) then - ! since no prompt or delayed data is present, this means all neutron - ! emission is prompt -- WARNING: This currently returns zero. The calling - ! routine needs to know this situation is occurring since we don't want - ! to call nu_total unnecessarily if it has already been called. - nu = ZERO - elseif (nuc % nu_p_type == NU_POLYNOMIAL) then - ! determine number of coefficients - NC = int(nuc % nu_p_data(1)) - - ! sum up polynomial in energy - nu = ZERO - do i = 0, NC - 1 - c = nuc % nu_p_data(i+2) - nu = nu + c * E**i - end do - elseif (nuc % nu_p_type == NU_TABULAR) then - ! use ENDF interpolation laws to determine nu - nu = interpolate_tab1(nuc % nu_p_data, E) - end if - - end function nu_prompt - -!=============================================================================== -! NU_DELAYED calculates the total number of delayed neutrons emitted per fission -! for a given nuclide and incoming neutron energy -!=============================================================================== - - pure function nu_delayed(nuc, E) result(nu) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: nu ! number of delayed neutrons emitted per fission - - if (nuc % nu_d_type == NU_NONE) then - ! since no prompt or delayed data is present, this means all neutron - ! emission is prompt -- WARNING: This currently returns zero. The calling - ! routine needs to know this situation is occurring since we don't want - ! to call nu_delayed unnecessarily if it has already been called. - nu = ZERO - elseif (nuc % nu_d_type == NU_TABULAR) then - ! use ENDF interpolation laws to determine nu - nu = interpolate_tab1(nuc % nu_d_data, E) - end if - - end function nu_delayed - -!=============================================================================== -! YIELD_DELAYED calculates the fractional yield of delayed neutrons emitted for -! a given nuclide and incoming neutron energy in a given delayed group. -!=============================================================================== - - pure function yield_delayed(nuc, E, g) result(yield) - type(NuclideCE), intent(in) :: nuc ! nuclide from which to find nu - real(8), intent(in) :: E ! energy of incoming neutron - real(8) :: yield ! delayed neutron precursor yield - integer, intent(in) :: g ! the delayed neutron precursor group - integer :: d ! precursor group - integer :: lc ! index before start of energies/nu values - integer :: NR ! number of interpolation regions - integer :: NE ! number of energies tabulated - - yield = ZERO - - if (g > nuc % n_precursor .or. g < 1) then - ! if the precursor group is outside the range of precursor groups for - ! the input nuclide, return ZERO. - yield = ZERO - else if (nuc % nu_d_type == NU_NONE) then - ! since no prompt or delayed data is present, this means all neutron - ! emission is prompt -- WARNING: This currently returns zero. The calling - ! routine needs to know this situation is occurring since we don't want - ! to call yield_delayed unnecessarily if it has already been called. - yield = ZERO - else if (nuc % nu_d_type == NU_TABULAR) then - - lc = 1 - - ! loop over delayed groups and determine the yield for the desired group - do d = 1, nuc % n_precursor - - ! determine number of interpolation regions and energies - NR = int(nuc % nu_d_precursor_data(lc + 1)) - NE = int(nuc % nu_d_precursor_data(lc + 2 + 2*NR)) - - ! check if this is the desired group - if (d == g) then - - ! determine delayed neutron precursor yield for group g - yield = interpolate_tab1(nuc % nu_d_precursor_data( & - lc+1:lc+2+2*NR+2*NE), E) - - exit - end if - - ! advance pointer - lc = lc + 2 + 2*NR + 2*NE + 1 - end do - end if - - end function yield_delayed - -end module fission diff --git a/src/interpolation.F90 b/src/interpolation.F90 deleted file mode 100644 index 5f87870677..0000000000 --- a/src/interpolation.F90 +++ /dev/null @@ -1,205 +0,0 @@ -module interpolation - - use constants - use endf_header, only: Tab1 - use search, only: binary_search - use string, only: to_str - - implicit none - - interface interpolate_tab1 - module procedure interpolate_tab1_array, interpolate_tab1_object - end interface interpolate_tab1 - -contains - -!=============================================================================== -! INTERPOLATE_TAB1_ARRAY interpolates a function between two points based on -! particular interpolation scheme. The data needs to be organized as a ENDF TAB1 -! type function containing the interpolation regions, break points, and -! tabulated x's and y's. -!=============================================================================== - - pure function interpolate_tab1_array(data, x, loc_start) result(y) - - real(8), intent(in) :: data(:) ! array of data - real(8), intent(in) :: x ! x value to find y at - integer, intent(in), optional :: loc_start ! starting location in data - real(8) :: y ! y(x) - - integer :: i ! bin in which to interpolate - integer :: j ! index for interpolation region - integer :: loc_0 ! starting location - integer :: n_regions ! number of interpolation regions - integer :: n_points ! number of tabulated values - integer :: interp ! ENDF interpolation scheme - integer :: loc_breakpoints ! location of breakpoints in data - integer :: loc_interp ! location of interpolation schemes in data - integer :: loc_x ! location of x's in data - integer :: loc_y ! location of y's in data - real(8) :: r ! interpolation factor - real(8) :: x0, x1 ! bounding x values - real(8) :: y0, y1 ! bounding y values - - ! determine starting location - if (present(loc_start)) then - loc_0 = loc_start - 1 - else - loc_0 = 0 - end if - - ! determine number of interpolation regions - n_regions = int(data(loc_0 + 1)) - - ! set locations for breakpoints and interpolation schemes - loc_breakpoints = loc_0 + 1 - loc_interp = loc_breakpoints + n_regions - - ! determine number of tabulated values - n_points = int(data(loc_interp + n_regions + 1)) - - ! set locations for x's and y's - loc_x = loc_interp + n_regions + 1 - loc_y = loc_x + n_points - - ! find which bin the abscissa is in -- if the abscissa is outside the - ! tabulated range, the first or last point is chosen, i.e. no interpolation - ! is done outside the energy range - if (x < data(loc_x + 1)) then - y = data(loc_y + 1) - return - elseif (x > data(loc_x + n_points)) then - y = data(loc_y + n_points) - return - else - i = binary_search(data(loc_x + 1:loc_x + n_points), n_points, x) - end if - - ! determine interpolation scheme - if (n_regions == 0) then - interp = LINEAR_LINEAR - elseif (n_regions == 1) then - interp = int(data(loc_interp + 1)) - elseif (n_regions > 1) then - do j = 1, n_regions - if (i < data(loc_breakpoints + j)) then - interp = int(data(loc_interp + j)) - exit - end if - end do - end if - - ! handle special case of histogram interpolation - if (interp == HISTOGRAM) then - y = data(loc_y + i) - return - end if - - ! determine bounding values - x0 = data(loc_x + i) - x1 = data(loc_x + i + 1) - y0 = data(loc_y + i) - y1 = data(loc_y + i + 1) - - ! determine interpolation factor and interpolated value - select case (interp) - case (LINEAR_LINEAR) - r = (x - x0)/(x1 - x0) - y = y0 + r*(y1 - y0) - case (LINEAR_LOG) - r = log(x/x0)/log(x1/x0) - y = y0 + r*(y1 - y0) - case (LOG_LINEAR) - r = (x - x0)/(x1 - x0) - y = y0*exp(r*log(y1/y0)) - case (LOG_LOG) - r = log(x/x0)/log(x1/x0) - y = y0*exp(r*log(y1/y0)) - end select - - end function interpolate_tab1_array - -!=============================================================================== -! INTERPOLATE_TAB1_OBJECT interpolates a function between two points based on -! particular interpolation scheme. The data needs to be organized as a ENDF TAB1 -! type function containing the interpolation regions, break points, and -! tabulated x's and y's. -!=============================================================================== - - pure function interpolate_tab1_object(obj, x) result(y) - - type(Tab1), intent(in) :: obj ! ENDF Tab1 interpolable function - real(8), intent(in) :: x ! x value to find y at - real(8) :: y ! y(x) - - integer :: i ! bin in which to interpolate - integer :: j ! index for interpolation region - integer :: n_regions ! number of interpolation regions - integer :: n_pairs ! number of tabulated values - integer :: interp ! ENDF interpolation scheme - real(8) :: r ! interpolation factor - real(8) :: x0, x1 ! bounding x values - real(8) :: y0, y1 ! bounding y values - - ! determine number of interpolation regions and pairs - n_regions = obj % n_regions - n_pairs = obj % n_pairs - - ! find which bin the abscissa is in -- if the abscissa is outside the - ! tabulated range, the first or last point is chosen, i.e. no interpolation - ! is done outside the energy range - if (x < obj % x(1)) then - y = obj % y(1) - return - elseif (x > obj % x(n_pairs)) then - y = obj % y(n_pairs) - return - else - i = binary_search(obj % x, n_pairs, x) - end if - - ! determine interpolation scheme - if (n_regions == 0) then - interp = LINEAR_LINEAR - elseif (n_regions == 1) then - interp = obj % int(1) - elseif (n_regions > 1) then - do j = 1, n_regions - if (i < obj % nbt(j)) then - interp = obj % int(j) - exit - end if - end do - end if - - ! handle special case of histogram interpolation - if (interp == HISTOGRAM) then - y = obj % y(i) - return - end if - - ! determine bounding values - x0 = obj % x(i) - x1 = obj % x(i + 1) - y0 = obj % y(i) - y1 = obj % y(i + 1) - - ! determine interpolation factor and interpolated value - select case (interp) - case (LINEAR_LINEAR) - r = (x - x0)/(x1 - x0) - y = y0 + r*(y1 - y0) - case (LINEAR_LOG) - r = log(x/x0)/log(x1/x0) - y = y0 + r*(y1 - y0) - case (LOG_LINEAR) - r = (x - x0)/(x1 - x0) - y = y0*exp(r*log(y1/y0)) - case (LOG_LOG) - r = log(x/x0)/log(x1/x0) - y = y0*exp(r*log(y1/y0)) - end select - - end function interpolate_tab1_object - -end module interpolation diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 12b4a30764..6634bcc943 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -5,6 +5,7 @@ module nuclide_header use constants use dict_header, only: DictIntInt use endf, only: reaction_name, is_fission, is_disappearance + use endf_header, only: Function1D use error, only: fatal_error, warning use list_header, only: ListInt use math, only: evaluate_legendre, find_angle @@ -71,24 +72,11 @@ module nuclide_header real(8) :: E_max ! upper cutoff energy for res scattering ! Fission information - logical :: has_partial_fission ! nuclide has partial fission reactions? - integer :: n_fission ! # of fission reactions + logical :: has_partial_fission = .false. ! nuclide has partial fission reactions? + integer :: n_fission ! # of fission reactions + integer :: n_precursor = 0 ! # of delayed neutron precursors integer, allocatable :: index_fission(:) ! indices in reactions - - ! Total fission neutron emission - integer :: nu_t_type - real(8), allocatable :: nu_t_data(:) - - ! Prompt fission neutron emission - integer :: nu_p_type - real(8), allocatable :: nu_p_data(:) - - ! Delayed fission neutron emission - integer :: nu_d_type - integer :: n_precursor ! # of delayed neutron precursors - real(8), allocatable :: nu_d_data(:) - real(8), allocatable :: nu_d_precursor_data(:) - type(AngleEnergyContainer), allocatable :: nu_d_edist(:) + class(Function1D), allocatable :: total_nu ! Unresolved resonance data logical :: urr_present @@ -104,6 +92,7 @@ module nuclide_header contains procedure :: clear => nuclidece_clear procedure :: print => nuclidece_print + procedure :: nu => nuclidece_nu end type NuclideCE type, abstract, extends(Nuclide) :: NuclideMG @@ -684,96 +673,157 @@ module nuclide_header ! or NuclideAngle !=============================================================================== - subroutine nuclidece_clear(this) + subroutine nuclidece_clear(this) - class(NuclideCE), intent(inout) :: this ! The Nuclide object to clear + class(NuclideCE), intent(inout) :: this ! The Nuclide object to clear - if (associated(this % urr_data)) deallocate(this % urr_data) + if (associated(this % urr_data)) deallocate(this % urr_data) - call this % reaction_index % clear() + call this % reaction_index % clear() - end subroutine nuclidece_clear + end subroutine nuclidece_clear + + function nuclidece_nu(this, E, emission_mode, group) result(nu) + class(NuclideCE), intent(in) :: this + real(8), intent(in) :: E + integer, intent(in) :: emission_mode + integer, optional, intent(in) :: group + real(8) :: nu + + integer :: i + + if (.not. this % fissionable) then + nu = ZERO + return + end if + + select case (emission_mode) + case (EMISSION_PROMPT) + associate (product => this % reactions(this % index_fission(1)) % products(1)) + nu = product % yield % evaluate(E) + end associate + + case (EMISSION_DELAYED) + if (this % n_precursor > 0) then + if (present(group)) then + ! If delayed group specified, determine yield immediately + associate(p => this % reactions(this % index_fission(1)) % products(1 + group)) + nu = p % yield % evaluate(E) + end associate + + else + nu = ZERO + + associate (rx => this % reactions(this % index_fission(1))) + do i = 2, size(rx % products) + associate (product => rx % products(i)) + ! Skip any non-neutron products + if (product % particle /= NEUTRON) exit + + ! Evaluate yield + if (product % emission_mode == EMISSION_DELAYED) then + nu = nu + product % yield % evaluate(E) + end if + end associate + end do + end associate + end if + else + nu = ZERO + end if + + case (EMISSION_TOTAL) + if (allocated(this % total_nu)) then + nu = this % total_nu % evaluate(E) + else + associate (rx => this % reactions(this % index_fission(1))) + nu = rx % products(1) % yield % evaluate(E) + end associate + end if + end select + + end function nuclidece_nu !=============================================================================== ! NUCLIDE*_PRINT displays information about a continuous-energy neutron ! cross_section table and its reactions and secondary angle/energy distributions !=============================================================================== - subroutine nuclidece_print(this, unit) - class(NuclideCE), intent(in) :: this - integer, intent(in), optional :: unit + subroutine nuclidece_print(this, unit) + class(NuclideCE), intent(in) :: this + integer, intent(in), optional :: unit - integer :: i ! loop index over nuclides - integer :: unit_ ! unit to write to - integer :: size_xs ! memory used for cross-sections (bytes) - integer :: size_urr ! memory used for probability tables (bytes) + integer :: i ! loop index over nuclides + integer :: unit_ ! unit to write to + integer :: size_xs ! memory used for cross-sections (bytes) + integer :: size_urr ! memory used for probability tables (bytes) - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if + ! set default unit for writing information + if (present(unit)) then + unit_ = unit + else + unit_ = OUTPUT_UNIT + end if - ! Initialize totals - size_urr = 0 - size_xs = 0 + ! Initialize totals + size_urr = 0 + size_xs = 0 - ! Basic nuclide information - write(unit_,*) 'Nuclide ' // trim(this % name) - write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(this % awr)) - write(unit_,*) ' kT = ' // trim(to_str(this % kT)) - write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) - write(unit_,*) ' Fissionable = ', this % fissionable - write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) - write(unit_,*) ' # of reactions = ' // trim(to_str(this % n_reaction)) + ! Basic nuclide information + write(unit_,*) 'Nuclide ' // trim(this % name) + write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) + write(unit_,*) ' awr = ' // trim(to_str(this % awr)) + write(unit_,*) ' kT = ' // trim(to_str(this % kT)) + write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) + write(unit_,*) ' Fissionable = ', this % fissionable + write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) + write(unit_,*) ' # of reactions = ' // trim(to_str(this % n_reaction)) - ! Information on each reaction - write(unit_,*) ' Reaction Q-value COM IE' - do i = 1, this % n_reaction - associate (rxn => this % reactions(i)) - write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,I6)') & - reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & - rxn % threshold + ! Information on each reaction + write(unit_,*) ' Reaction Q-value COM IE' + do i = 1, this % n_reaction + associate (rxn => this % reactions(i)) + write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,I6)') & + reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & + rxn % threshold - ! Accumulate data size - size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 - end associate - end do + ! Accumulate data size + size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 + end associate + end do - ! Add memory required for summary reactions (total, absorption, fission, - ! nu-fission) - size_xs = 8 * this % n_grid * 4 + ! Add memory required for summary reactions (total, absorption, fission, + ! nu-fission) + size_xs = 8 * this % n_grid * 4 - ! Write information about URR probability tables - size_urr = 0 - if (this % urr_present) then - associate(urr => this % urr_data) - write(unit_,*) ' Unresolved resonance probability table:' - write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) - write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) - write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) - write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) - write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) - write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth - write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) - write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) + ! Write information about URR probability tables + size_urr = 0 + if (this % urr_present) then + associate(urr => this % urr_data) + write(unit_,*) ' Unresolved resonance probability table:' + write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) + write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) + write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) + write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) + write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) + write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth + write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) + write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) - ! Calculate memory used by probability tables and add to total - size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 - end associate - end if + ! Calculate memory used by probability tables and add to total + size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 + end associate + end if - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' - write(unit_,*) ' Probability Tables = ' // & - trim(to_str(size_urr)) // ' bytes' + ! Write memory used + write(unit_,*) ' Memory Requirements' + write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' + write(unit_,*) ' Probability Tables = ' // & + trim(to_str(size_urr)) // ' bytes' - ! Blank line at end of nuclide - write(unit_,*) - end subroutine nuclidece_print + ! Blank line at end of nuclide + write(unit_,*) + end subroutine nuclidece_print subroutine nuclidemg_print(this, unit_) class(NuclideMG), intent(in) :: this diff --git a/src/physics.F90 b/src/physics.F90 index 3192db1797..d6c4c45b05 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -4,9 +4,7 @@ module physics use cross_section, only: elastic_xs_0K use endf, only: reaction_name use error, only: fatal_error, warning - use fission, only: nu_total, nu_delayed use global - use interpolation, only: interpolate_tab1 use material_header, only: Material use math use mesh, only: get_mesh_indices @@ -1073,8 +1071,6 @@ contains integer :: nu ! actual number of neutrons produced integer :: ijk(3) ! indices in ufs mesh real(8) :: nu_t ! total nu - real(8) :: mu ! fission neutron angular cosine - real(8) :: phi ! fission neutron azimuthal angle real(8) :: weight ! weight adjustment for ufs method logical :: in_mesh ! source site in ufs mesh? type(NuclideCE), pointer :: nuc @@ -1145,25 +1141,12 @@ contains ! Set weight of fission bank site bank_array(i) % wgt = ONE/weight - ! Sample cosine of angle -- fission neutrons are always emitted - ! isotropically. Sometimes in ACE data, fission reactions actually have - ! an angular distribution listed, but for those that do, it's simply just - ! a uniform distribution in mu - mu = TWO * prn() - ONE + ! Sample delayed group and angle/energy for fission reaction + call sample_fission_neutron(nuc, nuc % reactions(i_reaction), & + p % E, bank_array(i)) - ! Sample azimuthal angle uniformly in [0,2*pi) - phi = TWO*PI*prn() - bank_array(i) % uvw(1) = mu - bank_array(i) % uvw(2) = sqrt(ONE - mu*mu) * cos(phi) - bank_array(i) % uvw(3) = sqrt(ONE - mu*mu) * sin(phi) - - ! Sample secondary energy distribution for fission reaction and set energy - ! in fission bank - bank_array(i) % E = sample_fission_energy(nuc, & - nuc % reactions(i_reaction), p) - - ! Set the delayed group of the neutron - bank_array(i) % delayed_group = p % delayed_group + ! Set delayed group on particle too + p % delayed_group = bank_array(i) % delayed_group ! Increment the number of neutrons born delayed if (p % delayed_group > 0) then @@ -1182,35 +1165,41 @@ contains end subroutine create_fission_sites !=============================================================================== -! SAMPLE_FISSION_ENERGY +! SAMPLE_FISSION_NEUTRON !=============================================================================== - function sample_fission_energy(nuc, rxn, p) result(E_out) + subroutine sample_fission_neutron(nuc, rxn, E_in, site) + type(NuclideCE), intent(in) :: nuc + type(Reaction), intent(in) :: rxn + real(8), intent(in) :: E_in + type(Bank), intent(inout) :: site - type(NuclideCE), intent(in) :: nuc - type(Reaction), intent(in) :: rxn - type(Particle), intent(inout) :: p ! Particle causing fission - real(8) :: E_out ! outgoing energy of fission neutron - - integer :: j ! index on nu energy grid / precursor group - integer :: lc ! index before start of energies/nu values - integer :: NR ! number of interpolation regions - integer :: NE ! number of energies tabulated - integer :: n_sample ! number of times resampling + integer :: group ! index on nu energy grid / precursor group + integer :: n_sample ! number of resamples real(8) :: nu_t ! total nu real(8) :: nu_d ! delayed nu real(8) :: beta ! delayed neutron fraction real(8) :: xi ! random number real(8) :: yield ! delayed neutron precursor yield real(8) :: prob ! cumulative probability + real(8) :: mu ! cosine of scattering angle + real(8) :: phi ! azimuthal angle - ! Determine total nu - nu_t = nu_total(nuc, p % E) + ! Sample cosine of angle -- fission neutrons are always emitted + ! isotropically. Sometimes in ACE data, fission reactions actually have + ! an angular distribution listed, but for those that do, it's simply just + ! a uniform distribution in mu + mu = TWO * prn() - ONE - ! Determine delayed nu - nu_d = nu_delayed(nuc, p % E) + ! Sample azimuthal angle uniformly in [0,2*pi) + phi = TWO*PI*prn() + site % uvw(1) = mu + site % uvw(2) = sqrt(ONE - mu*mu) * cos(phi) + site % uvw(3) = sqrt(ONE - mu*mu) * sin(phi) - ! Determine delayed neutron fraction + ! Determine total nu, delayed nu, and delayed neutron fraction + nu_t = nuc % nu(E_in, EMISSION_TOTAL) + nu_d = nuc % nu(E_in, EMISSION_DELAYED) beta = nu_d / nu_t if (prn() < beta) then @@ -1218,51 +1207,41 @@ contains ! DELAYED NEUTRON SAMPLED ! sampled delayed precursor group - xi = prn() - lc = 1 + xi = prn()*nu_d prob = ZERO - do j = 1, nuc % n_precursor - ! determine number of interpolation regions and energies - NR = int(nuc % nu_d_precursor_data(lc + 1)) - NE = int(nuc % nu_d_precursor_data(lc + 2 + 2*NR)) + do group = 1, nuc % n_precursor ! determine delayed neutron precursor yield for group j - yield = interpolate_tab1(nuc % nu_d_precursor_data( & - lc+1:lc+2+2*NR+2*NE), p % E) + yield = rxn % products(1 + group) % yield % evaluate(E_in) ! Check if this group is sampled prob = prob + yield if (xi < prob) exit - - ! advance pointer - lc = lc + 2 + 2*NR + 2*NE + 1 end do ! if the sum of the probabilities is slightly less than one and the ! random number is greater, j will be greater than nuc % ! n_precursor -- check for this condition - j = min(j, nuc % n_precursor) + group = min(group, nuc % n_precursor) ! set the delayed group for the particle born from fission - p % delayed_group = j + site % delayed_group = group - ! sample from energy distribution n_sample = 0 do - select type (aedist => nuc%nu_d_edist(j)%obj) - type is (UncorrelatedAngleEnergy) - E_out = aedist%energy%sample(p%E) - end select + ! sample from energy/angle distribution -- note that mu has already been + ! sampled above and doesn't need to be resampled + call rxn % products(1 + group) % sample(E_in, site % E, mu) ! resample if energy is greater than maximum neutron energy - if (E_out < energy_max_neutron) exit + if (site % E < energy_max_neutron) exit ! check for large number of resamples n_sample = n_sample + 1 if (n_sample == MAX_SAMPLE) then ! call write_particle_restart(p) call fatal_error("Resampled energy distribution maximum number of " & - &// "times for nuclide " // nuc % name) + // "times for nuclide " // nuc % name) end if end do @@ -1271,28 +1250,27 @@ contains ! PROMPT NEUTRON SAMPLED ! set the delayed group for the particle born from fission to 0 - p % delayed_group = 0 + site % delayed_group = 0 ! sample from prompt neutron energy distribution n_sample = 0 do - call rxn % products(1) % sample(p % E, E_out, prob) + call rxn % products(1) % sample(E_in, site % E, mu) ! resample if energy is greater than maximum neutron energy - if (E_out < energy_max_neutron) exit + if (site % E < energy_max_neutron) exit ! check for large number of resamples n_sample = n_sample + 1 if (n_sample == MAX_SAMPLE) then ! call write_particle_restart(p) call fatal_error("Resampled energy distribution maximum number of " & - &// "times for nuclide " // nuc % name) + // "times for nuclide " // nuc % name) end if end do - end if - end function sample_fission_energy + end subroutine sample_fission_neutron !=============================================================================== ! INELASTIC_SCATTER handles all reactions with a single secondary neutron (other @@ -1344,14 +1322,16 @@ contains ! change direction of particle p % coord(1) % uvw = rotate_angle(p % coord(1) % uvw, mu) - ! change weight of particle based on yield - if (rxn % products(1) % yield_with_E) then - yield = interpolate_tab1(rxn % products(1) % yield_E, E_in) - p % wgt = yield * p % wgt - else - do i = 1, rxn % products(1) % yield - 1 + ! evaluate yield + yield = rxn % products(1) % yield % evaluate(E_in) + if (mod(yield, ONE) == ZERO) then + ! If yield is integral, create exactly that many secondary particles + do i = 1, nint(yield) - 1 call p % create_secondary(p % coord(1) % uvw, NEUTRON, run_CE=.true.) end do + else + ! Otherwise, change weight of particle based on yield + p % wgt = yield * p % wgt end if end subroutine inelastic_scatter diff --git a/src/product_header.F90 b/src/product_header.F90 index 27fec37f7a..e20c173b4c 100644 --- a/src/product_header.F90 +++ b/src/product_header.F90 @@ -1,9 +1,9 @@ module product_header use angleenergy_header, only: AngleEnergyContainer - use constants, only: ZERO - use endf_header, only: Tab1 - use interpolation, only: interpolate_tab1 + use constants, only: ZERO, MAX_WORD_LEN, EMISSION_PROMPT, EMISSION_DELAYED, & + EMISSION_TOTAL, NEUTRON, PHOTON + use endf_header, only: Tabulated1D, Function1D, Constant1D, Polynomial use random_lcg, only: prn !=============================================================================== @@ -15,10 +15,11 @@ module product_header !=============================================================================== type :: ReactionProduct - integer :: yield ! Number of secondary particles released - logical :: yield_with_E = .false. ! Flag to indicate E-dependent yield - type(Tab1), pointer :: yield_E => null() ! Energy-dependent neutron yield - type(Tab1), allocatable :: applicability(:) + integer :: particle + integer :: emission_mode ! prompt, delayed, or total emission + real(8) :: decay_rate ! Decay rate for delayed neutron precursors + class(Function1D), pointer :: yield => null() ! Energy-dependent neutron yield + type(Tabulated1D), allocatable :: applicability(:) type(AngleEnergyContainer), allocatable :: distribution(:) contains procedure :: sample => reactionproduct_sample @@ -43,7 +44,7 @@ contains c = prn() do i = 1, n ! Determine probability that i-th energy distribution is sampled - prob = prob + interpolate_tab1(this%applicability(i), E_in) + prob = prob + this % applicability(i) % evaluate(E_in) ! If i-th distribution is sampled, sample energy from the distribution if (c <= prob) then diff --git a/src/tally.F90 b/src/tally.F90 index 71444107f4..1f0d49772b 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1,6 +1,7 @@ module tally use constants + use endf_header, only: Constant1D use error, only: fatal_error use geometry_header use global @@ -14,8 +15,6 @@ module tally use search, only: binary_search use string, only: to_str use tally_header, only: TallyResult, TallyMapItem, TallyMapElement - use fission, only: nu_total, nu_delayed, yield_delayed - use interpolation, only: interpolate_tab1 #ifdef MPI use message_passing @@ -258,14 +257,15 @@ contains ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % products(1) % yield_with_E) then - ! Then the yield was already incorporated in to p % wgt - ! per the scattering routine, + select type (yield => rxn % products(1) % yield) + type is (Constant1D) + ! Grab the yield from the reaction + score = p % last_wgt * yield % y + class default + ! the yield was already incorporated in to p % wgt per the + ! scattering routine score = p % wgt - else - ! Grab the yield from the rxn - score = p % last_wgt * rxn % products(1) % yield - end if + end select end associate end if @@ -291,14 +291,15 @@ contains ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % products(1) % yield_with_E) then - ! Then the yield was already incorporated in to p % wgt - ! per the scattering routine, + select type (yield => rxn % products(1) % yield) + type is (Constant1D) + ! Grab the yield from the reaction + score = p % last_wgt * yield % y + class default + ! the yield was already incorporated in to p % wgt per the + ! scattering routine score = p % wgt - else - ! Grab the yield from the rxn - score = p % last_wgt * rxn % products(1) % yield - end if + end select end associate end if @@ -324,14 +325,15 @@ contains ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - if (rxn % products(1) % yield_with_E) then - ! Then the yield was already incorporated in to p % wgt - ! per the scattering routine, + select type (yield => rxn % products(1) % yield) + type is (Constant1D) + ! Grab the yield from the reaction + score = p % last_wgt * yield % y + class default + ! the yield was already incorporated in to p % wgt per the + ! scattering routine score = p % wgt - else - ! Grab the yield from the rxn - score = p % last_wgt * rxn % products(1) % yield - end if + end select end associate end if @@ -498,12 +500,11 @@ contains d = t % filters(dg_filter) % int_bins(d_bin) ! Compute the yield for this delayed group - yield = yield_delayed(nuclides(p % event_nuclide), E, d) + yield = nuclides(p % event_nuclide) % nu(E, EMISSION_DELAYED, d) ! Compute the score and tally to bin score = p % absorb_wgt * yield * micro_xs(p % event_nuclide) & - % fission * nu_delayed(nuclides(p % event_nuclide), E) / & - micro_xs(p % event_nuclide) % absorption + % fission / micro_xs(p % event_nuclide) % absorption call score_fission_delayed_dg(t, d_bin, score, score_index) end do cycle SCORE_LOOP @@ -511,9 +512,9 @@ contains ! If the delayed group filter is not present, compute the score ! by multiplying the absorbed weight by the fraction of the ! delayed-nu-fission xs to the absorption xs - score = p % absorb_wgt * micro_xs(p % event_nuclide) & - % fission * nu_delayed(nuclides(p % event_nuclide), E) / & - micro_xs(p % event_nuclide) % absorption + score = p % absorb_wgt * micro_xs(p % event_nuclide) % fission & + * nuclides(p % event_nuclide) % nu(E, EMISSION_DELAYED) & + / micro_xs(p % event_nuclide) % absorption end if end if else @@ -563,11 +564,11 @@ contains d = t % filters(dg_filter) % int_bins(d_bin) ! Compute the yield for this delayed group - yield = yield_delayed(nuclides(i_nuclide), E, d) + yield = nuclides(i_nuclide) % nu(E, EMISSION_DELAYED, d) ! Compute the score and tally to bin - score = micro_xs(i_nuclide) % fission * yield & - * nu_delayed(nuclides(i_nuclide), E) * atom_density * flux + score = micro_xs(i_nuclide) % fission * yield * & + atom_density * flux call score_fission_delayed_dg(t, d_bin, score, score_index) end do cycle SCORE_LOOP @@ -575,8 +576,8 @@ contains ! If the delayed group filter is not present, compute the score ! by multiplying the delayed-nu-fission macro xs by the flux - score = micro_xs(i_nuclide) % fission * & - nu_delayed(nuclides(i_nuclide), E) * atom_density * flux + score = micro_xs(i_nuclide) % fission * nuclides(i_nuclide) % & + nu(E, EMISSION_DELAYED) * atom_density * flux end if ! Tally is on total nuclides @@ -601,11 +602,10 @@ contains d = t % filters(dg_filter) % int_bins(d_bin) ! Get the yield for the desired nuclide and delayed group - yield = yield_delayed(nuclides(i_nuc), E, d) + yield = nuclides(i_nuc) % nu(E, EMISSION_DELAYED, d) ! Compute the score and tally to bin - score = micro_xs(i_nuc) % fission * yield & - * nu_delayed(nuclides(i_nuc), E) * atom_density_ * flux + score = micro_xs(i_nuc) % fission * yield * atom_density_ * flux call score_fission_delayed_dg(t, d_bin, score, score_index) end do end do @@ -624,8 +624,8 @@ contains i_nuc = materials(p % material) % nuclide(l) ! Accumulate the contribution from each nuclide - score = score + micro_xs(i_nuc) % fission & - * nu_delayed(nuclides(i_nuc), E) * atom_density_ * flux + score = score + micro_xs(i_nuc) % fission * nuclides(i_nuc) % & + nu(E, EMISSION_DELAYED) * atom_density_ * flux end do end if end if diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index 4ee2177b89..4fab6c5617 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -80bb207ab79131ff264a205703fcc798e3353dbead81e39dadf262979d6d6ad786123588e330c8d0bccddbcb7b7ce9af8447c73a317174019977d2392edf31f6 \ No newline at end of file +f1b2b43197e1bbb305000d5a84c228361afb876d23ed866cdb073fe7410335c87fb16066c031d0e4397225321632566c00f48eac6187d59bdeab9a8c60986c3c \ No newline at end of file From 9304b3806120305dac6aa59133db233a070528f5 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 18 Mar 2016 07:45:49 -0500 Subject: [PATCH 3/5] Update MGXS tests since pandas 0.18.0 changed output slightly --- .../results_true.dat | 62 +- .../results_true.dat | 4 +- .../results_true.dat | 140 +- .../results_true.dat | 2520 ++++++++--------- 4 files changed, 1363 insertions(+), 1363 deletions(-) diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index 8b8556ffaa..4382153729 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -2,48 +2,48 @@ 0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. 0 1 1 total 0.076425 0.003691 material group in group out nuclide mean std. dev. 0 1 1 1 total 0.345643 0.021487 material group out nuclide mean std. dev. -0 1 1 total 1 0.055333 material group in nuclide mean std. dev. +0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0 0 material group in group out nuclide mean std. dev. +0 2 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 2 1 1 total 0.241262 0.00841 material group out nuclide mean std. dev. -0 2 1 total 0 0 material group in nuclide mean std. dev. +0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0 0 material group in group out nuclide mean std. dev. +0 3 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 3 1 1 total 0.393462 0.033646 material group out nuclide mean std. dev. -0 3 1 total 0 0 material group in nuclide mean std. dev. +0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0 0 material group in group out nuclide mean std. dev. +0 4 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 4 1 1 total 0.371473 0.071226 material group out nuclide mean std. dev. -0 4 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in nuclide mean std. dev. -0 5 1 total 0 0 material group in group out nuclide mean std. dev. -0 5 1 1 total 0 0 material group out nuclide mean std. dev. -0 5 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in nuclide mean std. dev. -0 6 1 total 0 0 material group in group out nuclide mean std. dev. -0 6 1 1 total 0 0 material group out nuclide mean std. dev. -0 6 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in nuclide mean std. dev. -0 7 1 total 0 0 material group in group out nuclide mean std. dev. -0 7 1 1 total 0 0 material group out nuclide mean std. dev. -0 7 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. -0 8 1 total 0 0 material group in group out nuclide mean std. dev. -0 8 1 1 total 0 0 material group out nuclide mean std. dev. -0 8 1 total 0 0 material group in nuclide mean std. dev. +0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 5 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 6 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 7 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in group out nuclide mean std. dev. +0 8 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0 0 material group in group out nuclide mean std. dev. +0 9 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 9 1 1 total 0.600536 0.748875 material group out nuclide mean std. dev. -0 9 1 total 0 0 material group in nuclide mean std. dev. +0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0 0 material group in group out nuclide mean std. dev. +0 10 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 10 1 1 total 0.235515 0.613974 material group out nuclide mean std. dev. -0 10 1 total 0 0 material group in nuclide mean std. dev. +0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0 0 material group in group out nuclide mean std. dev. +0 11 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 11 1 1 total 0.491857 0.715554 material group out nuclide mean std. dev. -0 11 1 total 0 0 material group in nuclide mean std. dev. +0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0 0 material group in group out nuclide mean std. dev. +0 12 1 total 0.0 0.0 material group in group out nuclide mean std. dev. 0 12 1 1 total 0.723265 0.808231 material group out nuclide mean std. dev. -0 12 1 total 0 0 \ No newline at end of file +0 12 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index 99c373f998..0d5c7c7b44 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,5 @@ avg(distribcell) group in nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 avg(distribcell) group in group out nuclide mean std. dev. 0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.695166 0.510606 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0 0 \ No newline at end of file +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 29b94f44f6..b6cef05dc7 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -7,115 +7,115 @@ 2 1 1 2 total 0.001559 0.000510 1 1 2 1 total 0.000000 0.000000 0 1 2 2 total 0.422051 0.021617 material group out nuclide mean std. dev. -1 1 1 total 1 0.055333 -0 1 2 total 0 0.000000 material group in nuclide mean std. dev. +1 1 1 total 1.0 0.055333 +0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. -1 2 1 total 0 0 -0 2 2 total 0 0 material group in group out nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 2 1 1 total 0.237254 0.008184 2 2 1 2 total 0.000000 0.000000 1 2 2 1 total 0.000000 0.000000 0 2 2 2 total 0.285930 0.048796 material group out nuclide mean std. dev. -1 2 1 total 0 0 -0 2 2 total 0 0 material group in nuclide mean std. dev. +1 2 1 total 0.0 0.0 +0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. -1 3 1 total 0 0 -0 3 2 total 0 0 material group in group out nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 3 1 1 total 0.259937 0.026115 2 3 1 2 total 0.026187 0.001665 1 3 2 1 total 0.000000 0.000000 0 3 2 2 total 1.359521 0.258505 material group out nuclide mean std. dev. -1 3 1 total 0 0 -0 3 2 total 0 0 material group in nuclide mean std. dev. +1 3 1 total 0.0 0.0 +0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. -1 4 1 total 0 0 -0 4 2 total 0 0 material group in group out nuclide mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 4 1 1 total 0.217930 0.058565 2 4 1 2 total 0.023662 0.003083 1 4 2 1 total 0.000000 0.000000 0 4 2 2 total 1.215074 0.381025 material group out nuclide mean std. dev. -1 4 1 total 0 0 -0 4 2 total 0 0 material group in nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in group out nuclide mean std. dev. -3 5 1 1 total 0 0 -2 5 1 2 total 0 0 -1 5 2 1 total 0 0 -0 5 2 2 total 0 0 material group out nuclide mean std. dev. -1 5 1 total 0 0 -0 5 2 total 0 0 material group in nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in group out nuclide mean std. dev. -3 6 1 1 total 0 0 -2 6 1 2 total 0 0 -1 6 2 1 total 0 0 -0 6 2 2 total 0 0 material group out nuclide mean std. dev. -1 6 1 total 0 0 -0 6 2 total 0 0 material group in nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in group out nuclide mean std. dev. -3 7 1 1 total 0 0 -2 7 1 2 total 0 0 -1 7 2 1 total 0 0 -0 7 2 2 total 0 0 material group out nuclide mean std. dev. -1 7 1 total 0 0 -0 7 2 total 0 0 material group in nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in group out nuclide mean std. dev. -3 8 1 1 total 0 0 -2 8 1 2 total 0 0 -1 8 2 1 total 0 0 -0 8 2 2 total 0 0 material group out nuclide mean std. dev. -1 8 1 total 0 0 -0 8 2 total 0 0 material group in nuclide mean std. dev. +1 4 1 total 0.0 0.0 +0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 5 1 1 total 0.0 0.0 +2 5 1 2 total 0.0 0.0 +1 5 2 1 total 0.0 0.0 +0 5 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +1 5 1 total 0.0 0.0 +0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 6 1 1 total 0.0 0.0 +2 6 1 2 total 0.0 0.0 +1 6 2 1 total 0.0 0.0 +0 6 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +1 6 1 total 0.0 0.0 +0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 7 1 1 total 0.0 0.0 +2 7 1 2 total 0.0 0.0 +1 7 2 1 total 0.0 0.0 +0 7 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +1 7 1 total 0.0 0.0 +0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in group out nuclide mean std. dev. +3 8 1 1 total 0.0 0.0 +2 8 1 2 total 0.0 0.0 +1 8 2 1 total 0.0 0.0 +0 8 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +1 8 1 total 0.0 0.0 +0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in group out nuclide mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 9 1 1 total 0.600536 0.748875 2 9 1 2 total 0.000000 0.000000 1 9 2 1 total 0.000000 0.000000 0 9 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 9 1 total 0 0 -0 9 2 total 0 0 material group in nuclide mean std. dev. +1 9 1 total 0.0 0.0 +0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in group out nuclide mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 10 1 1 total 0.235515 0.613974 2 10 1 2 total 0.000000 0.000000 1 10 2 1 total 0.000000 0.000000 0 10 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. -1 10 1 total 0 0 -0 10 2 total 0 0 material group in nuclide mean std. dev. +1 10 1 total 0.0 0.0 +0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. -1 11 1 total 0 0 -0 11 2 total 0 0 material group in group out nuclide mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 11 1 1 total 0.154449 0.597686 2 11 1 2 total 0.031875 0.045078 1 11 2 1 total 0.000000 0.000000 0 11 2 2 total 0.903085 1.532144 material group out nuclide mean std. dev. -1 11 1 total 0 0 -0 11 2 total 0 0 material group in nuclide mean std. dev. +1 11 1 total 0.0 0.0 +0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 material group in group out nuclide mean std. dev. +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 material group in group out nuclide mean std. dev. 3 12 1 1 total 0.186052 0.257633 2 12 1 2 total 0.027240 0.029555 1 12 2 1 total 0.000000 0.000000 0 12 2 2 total 1.357118 2.089846 material group out nuclide mean std. dev. -1 12 1 total 0 0 -0 12 2 total 0 0 \ No newline at end of file +1 12 1 total 0.0 0.0 +0 12 2 total 0.0 0.0 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 6c34647ebe..943df1d80c 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -271,74 +271,74 @@ 31 1 2 2 Eu-153 0.000000 0.000000 32 1 2 2 Gd-155 0.000000 0.000000 33 1 2 2 O-16 0.196946 0.014729 material group out nuclide mean std. dev. -34 1 1 U-234 0 0.000000 -35 1 1 U-235 1 0.066362 -36 1 1 U-236 0 0.000000 -37 1 1 U-238 1 0.093082 -38 1 1 Np-237 0 0.000000 -39 1 1 Pu-238 0 0.000000 -40 1 1 Pu-239 1 0.104567 -41 1 1 Pu-240 0 0.000000 -42 1 1 Pu-241 1 0.263696 -43 1 1 Pu-242 0 0.000000 -44 1 1 Am-241 0 0.000000 -45 1 1 Am-242m 0 0.000000 -46 1 1 Am-243 0 0.000000 -47 1 1 Cm-242 0 0.000000 -48 1 1 Cm-243 0 0.000000 -49 1 1 Cm-244 0 0.000000 -50 1 1 Cm-245 0 0.000000 -51 1 1 Mo-95 0 0.000000 -52 1 1 Tc-99 0 0.000000 -53 1 1 Ru-101 0 0.000000 -54 1 1 Ru-103 0 0.000000 -55 1 1 Ag-109 0 0.000000 -56 1 1 Xe-135 0 0.000000 -57 1 1 Cs-133 0 0.000000 -58 1 1 Nd-143 0 0.000000 -59 1 1 Nd-145 0 0.000000 -60 1 1 Sm-147 0 0.000000 -61 1 1 Sm-149 0 0.000000 -62 1 1 Sm-150 0 0.000000 -63 1 1 Sm-151 0 0.000000 -64 1 1 Sm-152 0 0.000000 -65 1 1 Eu-153 0 0.000000 -66 1 1 Gd-155 0 0.000000 -67 1 1 O-16 0 0.000000 -0 1 2 U-234 0 0.000000 -1 1 2 U-235 0 0.000000 -2 1 2 U-236 0 0.000000 -3 1 2 U-238 0 0.000000 -4 1 2 Np-237 0 0.000000 -5 1 2 Pu-238 0 0.000000 -6 1 2 Pu-239 0 0.000000 -7 1 2 Pu-240 0 0.000000 -8 1 2 Pu-241 0 0.000000 -9 1 2 Pu-242 0 0.000000 -10 1 2 Am-241 0 0.000000 -11 1 2 Am-242m 0 0.000000 -12 1 2 Am-243 0 0.000000 -13 1 2 Cm-242 0 0.000000 -14 1 2 Cm-243 0 0.000000 -15 1 2 Cm-244 0 0.000000 -16 1 2 Cm-245 0 0.000000 -17 1 2 Mo-95 0 0.000000 -18 1 2 Tc-99 0 0.000000 -19 1 2 Ru-101 0 0.000000 -20 1 2 Ru-103 0 0.000000 -21 1 2 Ag-109 0 0.000000 -22 1 2 Xe-135 0 0.000000 -23 1 2 Cs-133 0 0.000000 -24 1 2 Nd-143 0 0.000000 -25 1 2 Nd-145 0 0.000000 -26 1 2 Sm-147 0 0.000000 -27 1 2 Sm-149 0 0.000000 -28 1 2 Sm-150 0 0.000000 -29 1 2 Sm-151 0 0.000000 -30 1 2 Sm-152 0 0.000000 -31 1 2 Eu-153 0 0.000000 -32 1 2 Gd-155 0 0.000000 -33 1 2 O-16 0 0.000000 material group in nuclide mean std. dev. +34 1 1 U-234 0.0 0.000000 +35 1 1 U-235 1.0 0.066362 +36 1 1 U-236 0.0 0.000000 +37 1 1 U-238 1.0 0.093082 +38 1 1 Np-237 0.0 0.000000 +39 1 1 Pu-238 0.0 0.000000 +40 1 1 Pu-239 1.0 0.104567 +41 1 1 Pu-240 0.0 0.000000 +42 1 1 Pu-241 1.0 0.263696 +43 1 1 Pu-242 0.0 0.000000 +44 1 1 Am-241 0.0 0.000000 +45 1 1 Am-242m 0.0 0.000000 +46 1 1 Am-243 0.0 0.000000 +47 1 1 Cm-242 0.0 0.000000 +48 1 1 Cm-243 0.0 0.000000 +49 1 1 Cm-244 0.0 0.000000 +50 1 1 Cm-245 0.0 0.000000 +51 1 1 Mo-95 0.0 0.000000 +52 1 1 Tc-99 0.0 0.000000 +53 1 1 Ru-101 0.0 0.000000 +54 1 1 Ru-103 0.0 0.000000 +55 1 1 Ag-109 0.0 0.000000 +56 1 1 Xe-135 0.0 0.000000 +57 1 1 Cs-133 0.0 0.000000 +58 1 1 Nd-143 0.0 0.000000 +59 1 1 Nd-145 0.0 0.000000 +60 1 1 Sm-147 0.0 0.000000 +61 1 1 Sm-149 0.0 0.000000 +62 1 1 Sm-150 0.0 0.000000 +63 1 1 Sm-151 0.0 0.000000 +64 1 1 Sm-152 0.0 0.000000 +65 1 1 Eu-153 0.0 0.000000 +66 1 1 Gd-155 0.0 0.000000 +67 1 1 O-16 0.0 0.000000 +0 1 2 U-234 0.0 0.000000 +1 1 2 U-235 0.0 0.000000 +2 1 2 U-236 0.0 0.000000 +3 1 2 U-238 0.0 0.000000 +4 1 2 Np-237 0.0 0.000000 +5 1 2 Pu-238 0.0 0.000000 +6 1 2 Pu-239 0.0 0.000000 +7 1 2 Pu-240 0.0 0.000000 +8 1 2 Pu-241 0.0 0.000000 +9 1 2 Pu-242 0.0 0.000000 +10 1 2 Am-241 0.0 0.000000 +11 1 2 Am-242m 0.0 0.000000 +12 1 2 Am-243 0.0 0.000000 +13 1 2 Cm-242 0.0 0.000000 +14 1 2 Cm-243 0.0 0.000000 +15 1 2 Cm-244 0.0 0.000000 +16 1 2 Cm-245 0.0 0.000000 +17 1 2 Mo-95 0.0 0.000000 +18 1 2 Tc-99 0.0 0.000000 +19 1 2 Ru-101 0.0 0.000000 +20 1 2 Ru-103 0.0 0.000000 +21 1 2 Ag-109 0.0 0.000000 +22 1 2 Xe-135 0.0 0.000000 +23 1 2 Cs-133 0.0 0.000000 +24 1 2 Nd-143 0.0 0.000000 +25 1 2 Nd-145 0.0 0.000000 +26 1 2 Sm-147 0.0 0.000000 +27 1 2 Sm-149 0.0 0.000000 +28 1 2 Sm-150 0.0 0.000000 +29 1 2 Sm-151 0.0 0.000000 +30 1 2 Sm-152 0.0 0.000000 +31 1 2 Eu-153 0.0 0.000000 +32 1 2 Gd-155 0.0 0.000000 +33 1 2 O-16 0.0 0.000000 material group in nuclide mean std. dev. 5 2 1 Zr-90 0.104734 0.008915 6 2 1 Zr-91 0.036155 0.003735 7 2 1 Zr-92 0.042422 0.003029 @@ -349,16 +349,16 @@ 2 2 2 Zr-92 0.041633 0.016323 3 2 2 Zr-94 0.060818 0.021483 4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0 0 -6 2 1 Zr-91 0 0 -7 2 1 Zr-92 0 0 -8 2 1 Zr-94 0 0 -9 2 1 Zr-96 0 0 -0 2 2 Zr-90 0 0 -1 2 2 Zr-91 0 0 -2 2 2 Zr-92 0 0 -3 2 2 Zr-94 0 0 -4 2 2 Zr-96 0 0 material group in group out nuclide mean std. dev. +5 2 1 Zr-90 0.0 0.0 +6 2 1 Zr-91 0.0 0.0 +7 2 1 Zr-92 0.0 0.0 +8 2 1 Zr-94 0.0 0.0 +9 2 1 Zr-96 0.0 0.0 +0 2 2 Zr-90 0.0 0.0 +1 2 2 Zr-91 0.0 0.0 +2 2 2 Zr-92 0.0 0.0 +3 2 2 Zr-94 0.0 0.0 +4 2 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. 15 2 1 1 Zr-90 0.104734 0.008915 16 2 1 1 Zr-91 0.036155 0.003735 17 2 1 1 Zr-92 0.042422 0.003029 @@ -379,16 +379,16 @@ 2 2 2 2 Zr-92 0.041633 0.016323 3 2 2 2 Zr-94 0.060818 0.021483 4 2 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -5 2 1 Zr-90 0 0 -6 2 1 Zr-91 0 0 -7 2 1 Zr-92 0 0 -8 2 1 Zr-94 0 0 -9 2 1 Zr-96 0 0 -0 2 2 Zr-90 0 0 -1 2 2 Zr-91 0 0 -2 2 2 Zr-92 0 0 -3 2 2 Zr-94 0 0 -4 2 2 Zr-96 0 0 material group in nuclide mean std. dev. +5 2 1 Zr-90 0.0 0.0 +6 2 1 Zr-91 0.0 0.0 +7 2 1 Zr-92 0.0 0.0 +8 2 1 Zr-94 0.0 0.0 +9 2 1 Zr-96 0.0 0.0 +0 2 2 Zr-90 0.0 0.0 +1 2 2 Zr-91 0.0 0.0 +2 2 2 Zr-92 0.0 0.0 +3 2 2 Zr-94 0.0 0.0 +4 2 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. 4 3 1 H-1 0.207103 0.023028 5 3 1 O-16 0.079282 0.005197 6 3 1 B-10 0.000521 0.000244 @@ -397,14 +397,14 @@ 1 3 2 O-16 0.085363 0.014001 2 3 2 B-10 0.049249 0.008232 3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. -4 3 1 H-1 0 0 -5 3 1 O-16 0 0 -6 3 1 B-10 0 0 -7 3 1 B-11 0 0 -0 3 2 H-1 0 0 -1 3 2 O-16 0 0 -2 3 2 B-10 0 0 -3 3 2 B-11 0 0 material group in group out nuclide mean std. dev. +4 3 1 H-1 0.0 0.0 +5 3 1 O-16 0.0 0.0 +6 3 1 B-10 0.0 0.0 +7 3 1 B-11 0.0 0.0 +0 3 2 H-1 0.0 0.0 +1 3 2 O-16 0.0 0.0 +2 3 2 B-10 0.0 0.0 +3 3 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. 12 3 1 1 H-1 0.181306 0.022102 13 3 1 1 O-16 0.078631 0.005044 14 3 1 1 B-10 0.000000 0.000000 @@ -421,14 +421,14 @@ 1 3 2 2 O-16 0.085363 0.014001 2 3 2 2 B-10 0.000000 0.000000 3 3 2 2 B-11 0.000195 0.001527 material group out nuclide mean std. dev. -4 3 1 H-1 0 0 -5 3 1 O-16 0 0 -6 3 1 B-10 0 0 -7 3 1 B-11 0 0 -0 3 2 H-1 0 0 -1 3 2 O-16 0 0 -2 3 2 B-10 0 0 -3 3 2 B-11 0 0 material group in nuclide mean std. dev. +4 3 1 H-1 0.0 0.0 +5 3 1 O-16 0.0 0.0 +6 3 1 B-10 0.0 0.0 +7 3 1 B-11 0.0 0.0 +0 3 2 H-1 0.0 0.0 +1 3 2 O-16 0.0 0.0 +2 3 2 B-10 0.0 0.0 +3 3 2 B-11 0.0 0.0 material group in nuclide mean std. dev. 4 4 1 H-1 0.175242 0.053715 5 4 1 O-16 0.066545 0.010083 6 4 1 B-10 0.000570 0.000352 @@ -437,14 +437,14 @@ 1 4 2 O-16 0.085141 0.028073 2 4 2 B-10 0.025923 0.007276 3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. -4 4 1 H-1 0 0 -5 4 1 O-16 0 0 -6 4 1 B-10 0 0 -7 4 1 B-11 0 0 -0 4 2 H-1 0 0 -1 4 2 O-16 0 0 -2 4 2 B-10 0 0 -3 4 2 B-11 0 0 material group in group out nuclide mean std. dev. +4 4 1 H-1 0.0 0.0 +5 4 1 O-16 0.0 0.0 +6 4 1 B-10 0.0 0.0 +7 4 1 B-11 0.0 0.0 +0 4 2 H-1 0.0 0.0 +1 4 2 O-16 0.0 0.0 +2 4 2 B-10 0.0 0.0 +3 4 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. 12 4 1 1 H-1 0.151295 0.051491 13 4 1 1 O-16 0.066545 0.010083 14 4 1 1 B-10 0.000000 0.000000 @@ -461,914 +461,914 @@ 1 4 2 2 O-16 0.085141 0.028073 2 4 2 2 B-10 0.000000 0.000000 3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. -4 4 1 H-1 0 0 -5 4 1 O-16 0 0 -6 4 1 B-10 0 0 -7 4 1 B-11 0 0 -0 4 2 H-1 0 0 -1 4 2 O-16 0 0 -2 4 2 B-10 0 0 -3 4 2 B-11 0 0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in group out nuclide mean std. dev. -81 5 1 1 Fe-54 0 0 -82 5 1 1 Fe-56 0 0 -83 5 1 1 Fe-57 0 0 -84 5 1 1 Fe-58 0 0 -85 5 1 1 Ni-58 0 0 -86 5 1 1 Ni-60 0 0 -87 5 1 1 Ni-61 0 0 -88 5 1 1 Ni-62 0 0 -89 5 1 1 Ni-64 0 0 -90 5 1 1 Mn-55 0 0 -91 5 1 1 Mo-92 0 0 -92 5 1 1 Mo-94 0 0 -93 5 1 1 Mo-95 0 0 -94 5 1 1 Mo-96 0 0 -95 5 1 1 Mo-97 0 0 -96 5 1 1 Mo-98 0 0 -97 5 1 1 Mo-100 0 0 -98 5 1 1 Si-28 0 0 -99 5 1 1 Si-29 0 0 -100 5 1 1 Si-30 0 0 -101 5 1 1 Cr-50 0 0 -102 5 1 1 Cr-52 0 0 -103 5 1 1 Cr-53 0 0 -104 5 1 1 Cr-54 0 0 -105 5 1 1 C-Nat 0 0 -106 5 1 1 Cu-63 0 0 -107 5 1 1 Cu-65 0 0 -54 5 1 2 Fe-54 0 0 -55 5 1 2 Fe-56 0 0 -56 5 1 2 Fe-57 0 0 -57 5 1 2 Fe-58 0 0 -58 5 1 2 Ni-58 0 0 -59 5 1 2 Ni-60 0 0 -60 5 1 2 Ni-61 0 0 -61 5 1 2 Ni-62 0 0 -62 5 1 2 Ni-64 0 0 -63 5 1 2 Mn-55 0 0 -64 5 1 2 Mo-92 0 0 -65 5 1 2 Mo-94 0 0 -66 5 1 2 Mo-95 0 0 -67 5 1 2 Mo-96 0 0 -68 5 1 2 Mo-97 0 0 -69 5 1 2 Mo-98 0 0 -70 5 1 2 Mo-100 0 0 -71 5 1 2 Si-28 0 0 -72 5 1 2 Si-29 0 0 -73 5 1 2 Si-30 0 0 -74 5 1 2 Cr-50 0 0 -75 5 1 2 Cr-52 0 0 -76 5 1 2 Cr-53 0 0 -77 5 1 2 Cr-54 0 0 -78 5 1 2 C-Nat 0 0 -79 5 1 2 Cu-63 0 0 -80 5 1 2 Cu-65 0 0 -27 5 2 1 Fe-54 0 0 -28 5 2 1 Fe-56 0 0 -29 5 2 1 Fe-57 0 0 -30 5 2 1 Fe-58 0 0 -31 5 2 1 Ni-58 0 0 -32 5 2 1 Ni-60 0 0 -33 5 2 1 Ni-61 0 0 -34 5 2 1 Ni-62 0 0 -35 5 2 1 Ni-64 0 0 -36 5 2 1 Mn-55 0 0 -37 5 2 1 Mo-92 0 0 -38 5 2 1 Mo-94 0 0 -39 5 2 1 Mo-95 0 0 -40 5 2 1 Mo-96 0 0 -41 5 2 1 Mo-97 0 0 -42 5 2 1 Mo-98 0 0 -43 5 2 1 Mo-100 0 0 -44 5 2 1 Si-28 0 0 -45 5 2 1 Si-29 0 0 -46 5 2 1 Si-30 0 0 -47 5 2 1 Cr-50 0 0 -48 5 2 1 Cr-52 0 0 -49 5 2 1 Cr-53 0 0 -50 5 2 1 Cr-54 0 0 -51 5 2 1 C-Nat 0 0 -52 5 2 1 Cu-63 0 0 -53 5 2 1 Cu-65 0 0 -0 5 2 2 Fe-54 0 0 -1 5 2 2 Fe-56 0 0 -2 5 2 2 Fe-57 0 0 -3 5 2 2 Fe-58 0 0 -4 5 2 2 Ni-58 0 0 -5 5 2 2 Ni-60 0 0 -6 5 2 2 Ni-61 0 0 -7 5 2 2 Ni-62 0 0 -8 5 2 2 Ni-64 0 0 -9 5 2 2 Mn-55 0 0 -10 5 2 2 Mo-92 0 0 -11 5 2 2 Mo-94 0 0 -12 5 2 2 Mo-95 0 0 -13 5 2 2 Mo-96 0 0 -14 5 2 2 Mo-97 0 0 -15 5 2 2 Mo-98 0 0 -16 5 2 2 Mo-100 0 0 -17 5 2 2 Si-28 0 0 -18 5 2 2 Si-29 0 0 -19 5 2 2 Si-30 0 0 -20 5 2 2 Cr-50 0 0 -21 5 2 2 Cr-52 0 0 -22 5 2 2 Cr-53 0 0 -23 5 2 2 Cr-54 0 0 -24 5 2 2 C-Nat 0 0 -25 5 2 2 Cu-63 0 0 -26 5 2 2 Cu-65 0 0 material group out nuclide mean std. dev. -27 5 1 Fe-54 0 0 -28 5 1 Fe-56 0 0 -29 5 1 Fe-57 0 0 -30 5 1 Fe-58 0 0 -31 5 1 Ni-58 0 0 -32 5 1 Ni-60 0 0 -33 5 1 Ni-61 0 0 -34 5 1 Ni-62 0 0 -35 5 1 Ni-64 0 0 -36 5 1 Mn-55 0 0 -37 5 1 Mo-92 0 0 -38 5 1 Mo-94 0 0 -39 5 1 Mo-95 0 0 -40 5 1 Mo-96 0 0 -41 5 1 Mo-97 0 0 -42 5 1 Mo-98 0 0 -43 5 1 Mo-100 0 0 -44 5 1 Si-28 0 0 -45 5 1 Si-29 0 0 -46 5 1 Si-30 0 0 -47 5 1 Cr-50 0 0 -48 5 1 Cr-52 0 0 -49 5 1 Cr-53 0 0 -50 5 1 Cr-54 0 0 -51 5 1 C-Nat 0 0 -52 5 1 Cu-63 0 0 -53 5 1 Cu-65 0 0 -0 5 2 Fe-54 0 0 -1 5 2 Fe-56 0 0 -2 5 2 Fe-57 0 0 -3 5 2 Fe-58 0 0 -4 5 2 Ni-58 0 0 -5 5 2 Ni-60 0 0 -6 5 2 Ni-61 0 0 -7 5 2 Ni-62 0 0 -8 5 2 Ni-64 0 0 -9 5 2 Mn-55 0 0 -10 5 2 Mo-92 0 0 -11 5 2 Mo-94 0 0 -12 5 2 Mo-95 0 0 -13 5 2 Mo-96 0 0 -14 5 2 Mo-97 0 0 -15 5 2 Mo-98 0 0 -16 5 2 Mo-100 0 0 -17 5 2 Si-28 0 0 -18 5 2 Si-29 0 0 -19 5 2 Si-30 0 0 -20 5 2 Cr-50 0 0 -21 5 2 Cr-52 0 0 -22 5 2 Cr-53 0 0 -23 5 2 Cr-54 0 0 -24 5 2 C-Nat 0 0 -25 5 2 Cu-63 0 0 -26 5 2 Cu-65 0 0 material group in nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 6 1 1 H-1 0 0 -64 6 1 1 O-16 0 0 -65 6 1 1 B-10 0 0 -66 6 1 1 B-11 0 0 -67 6 1 1 Fe-54 0 0 -68 6 1 1 Fe-56 0 0 -69 6 1 1 Fe-57 0 0 -70 6 1 1 Fe-58 0 0 -71 6 1 1 Ni-58 0 0 -72 6 1 1 Ni-60 0 0 -73 6 1 1 Ni-61 0 0 -74 6 1 1 Ni-62 0 0 -75 6 1 1 Ni-64 0 0 -76 6 1 1 Mn-55 0 0 -77 6 1 1 Si-28 0 0 -78 6 1 1 Si-29 0 0 -79 6 1 1 Si-30 0 0 -80 6 1 1 Cr-50 0 0 -81 6 1 1 Cr-52 0 0 -82 6 1 1 Cr-53 0 0 -83 6 1 1 Cr-54 0 0 -42 6 1 2 H-1 0 0 -43 6 1 2 O-16 0 0 -44 6 1 2 B-10 0 0 -45 6 1 2 B-11 0 0 -46 6 1 2 Fe-54 0 0 -47 6 1 2 Fe-56 0 0 -48 6 1 2 Fe-57 0 0 -49 6 1 2 Fe-58 0 0 -50 6 1 2 Ni-58 0 0 -51 6 1 2 Ni-60 0 0 -52 6 1 2 Ni-61 0 0 -53 6 1 2 Ni-62 0 0 -54 6 1 2 Ni-64 0 0 -55 6 1 2 Mn-55 0 0 -56 6 1 2 Si-28 0 0 -57 6 1 2 Si-29 0 0 -58 6 1 2 Si-30 0 0 -59 6 1 2 Cr-50 0 0 -60 6 1 2 Cr-52 0 0 -61 6 1 2 Cr-53 0 0 -62 6 1 2 Cr-54 0 0 -21 6 2 1 H-1 0 0 -22 6 2 1 O-16 0 0 -23 6 2 1 B-10 0 0 -24 6 2 1 B-11 0 0 -25 6 2 1 Fe-54 0 0 -26 6 2 1 Fe-56 0 0 -27 6 2 1 Fe-57 0 0 -28 6 2 1 Fe-58 0 0 -29 6 2 1 Ni-58 0 0 -30 6 2 1 Ni-60 0 0 -31 6 2 1 Ni-61 0 0 -32 6 2 1 Ni-62 0 0 -33 6 2 1 Ni-64 0 0 -34 6 2 1 Mn-55 0 0 -35 6 2 1 Si-28 0 0 -36 6 2 1 Si-29 0 0 -37 6 2 1 Si-30 0 0 -38 6 2 1 Cr-50 0 0 -39 6 2 1 Cr-52 0 0 -40 6 2 1 Cr-53 0 0 -41 6 2 1 Cr-54 0 0 -0 6 2 2 H-1 0 0 -1 6 2 2 O-16 0 0 -2 6 2 2 B-10 0 0 -3 6 2 2 B-11 0 0 -4 6 2 2 Fe-54 0 0 -5 6 2 2 Fe-56 0 0 -6 6 2 2 Fe-57 0 0 -7 6 2 2 Fe-58 0 0 -8 6 2 2 Ni-58 0 0 -9 6 2 2 Ni-60 0 0 -10 6 2 2 Ni-61 0 0 -11 6 2 2 Ni-62 0 0 -12 6 2 2 Ni-64 0 0 -13 6 2 2 Mn-55 0 0 -14 6 2 2 Si-28 0 0 -15 6 2 2 Si-29 0 0 -16 6 2 2 Si-30 0 0 -17 6 2 2 Cr-50 0 0 -18 6 2 2 Cr-52 0 0 -19 6 2 2 Cr-53 0 0 -20 6 2 2 Cr-54 0 0 material group out nuclide mean std. dev. -21 6 1 H-1 0 0 -22 6 1 O-16 0 0 -23 6 1 B-10 0 0 -24 6 1 B-11 0 0 -25 6 1 Fe-54 0 0 -26 6 1 Fe-56 0 0 -27 6 1 Fe-57 0 0 -28 6 1 Fe-58 0 0 -29 6 1 Ni-58 0 0 -30 6 1 Ni-60 0 0 -31 6 1 Ni-61 0 0 -32 6 1 Ni-62 0 0 -33 6 1 Ni-64 0 0 -34 6 1 Mn-55 0 0 -35 6 1 Si-28 0 0 -36 6 1 Si-29 0 0 -37 6 1 Si-30 0 0 -38 6 1 Cr-50 0 0 -39 6 1 Cr-52 0 0 -40 6 1 Cr-53 0 0 -41 6 1 Cr-54 0 0 -0 6 2 H-1 0 0 -1 6 2 O-16 0 0 -2 6 2 B-10 0 0 -3 6 2 B-11 0 0 -4 6 2 Fe-54 0 0 -5 6 2 Fe-56 0 0 -6 6 2 Fe-57 0 0 -7 6 2 Fe-58 0 0 -8 6 2 Ni-58 0 0 -9 6 2 Ni-60 0 0 -10 6 2 Ni-61 0 0 -11 6 2 Ni-62 0 0 -12 6 2 Ni-64 0 0 -13 6 2 Mn-55 0 0 -14 6 2 Si-28 0 0 -15 6 2 Si-29 0 0 -16 6 2 Si-30 0 0 -17 6 2 Cr-50 0 0 -18 6 2 Cr-52 0 0 -19 6 2 Cr-53 0 0 -20 6 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 7 1 1 H-1 0 0 -64 7 1 1 O-16 0 0 -65 7 1 1 B-10 0 0 -66 7 1 1 B-11 0 0 -67 7 1 1 Fe-54 0 0 -68 7 1 1 Fe-56 0 0 -69 7 1 1 Fe-57 0 0 -70 7 1 1 Fe-58 0 0 -71 7 1 1 Ni-58 0 0 -72 7 1 1 Ni-60 0 0 -73 7 1 1 Ni-61 0 0 -74 7 1 1 Ni-62 0 0 -75 7 1 1 Ni-64 0 0 -76 7 1 1 Mn-55 0 0 -77 7 1 1 Si-28 0 0 -78 7 1 1 Si-29 0 0 -79 7 1 1 Si-30 0 0 -80 7 1 1 Cr-50 0 0 -81 7 1 1 Cr-52 0 0 -82 7 1 1 Cr-53 0 0 -83 7 1 1 Cr-54 0 0 -42 7 1 2 H-1 0 0 -43 7 1 2 O-16 0 0 -44 7 1 2 B-10 0 0 -45 7 1 2 B-11 0 0 -46 7 1 2 Fe-54 0 0 -47 7 1 2 Fe-56 0 0 -48 7 1 2 Fe-57 0 0 -49 7 1 2 Fe-58 0 0 -50 7 1 2 Ni-58 0 0 -51 7 1 2 Ni-60 0 0 -52 7 1 2 Ni-61 0 0 -53 7 1 2 Ni-62 0 0 -54 7 1 2 Ni-64 0 0 -55 7 1 2 Mn-55 0 0 -56 7 1 2 Si-28 0 0 -57 7 1 2 Si-29 0 0 -58 7 1 2 Si-30 0 0 -59 7 1 2 Cr-50 0 0 -60 7 1 2 Cr-52 0 0 -61 7 1 2 Cr-53 0 0 -62 7 1 2 Cr-54 0 0 -21 7 2 1 H-1 0 0 -22 7 2 1 O-16 0 0 -23 7 2 1 B-10 0 0 -24 7 2 1 B-11 0 0 -25 7 2 1 Fe-54 0 0 -26 7 2 1 Fe-56 0 0 -27 7 2 1 Fe-57 0 0 -28 7 2 1 Fe-58 0 0 -29 7 2 1 Ni-58 0 0 -30 7 2 1 Ni-60 0 0 -31 7 2 1 Ni-61 0 0 -32 7 2 1 Ni-62 0 0 -33 7 2 1 Ni-64 0 0 -34 7 2 1 Mn-55 0 0 -35 7 2 1 Si-28 0 0 -36 7 2 1 Si-29 0 0 -37 7 2 1 Si-30 0 0 -38 7 2 1 Cr-50 0 0 -39 7 2 1 Cr-52 0 0 -40 7 2 1 Cr-53 0 0 -41 7 2 1 Cr-54 0 0 -0 7 2 2 H-1 0 0 -1 7 2 2 O-16 0 0 -2 7 2 2 B-10 0 0 -3 7 2 2 B-11 0 0 -4 7 2 2 Fe-54 0 0 -5 7 2 2 Fe-56 0 0 -6 7 2 2 Fe-57 0 0 -7 7 2 2 Fe-58 0 0 -8 7 2 2 Ni-58 0 0 -9 7 2 2 Ni-60 0 0 -10 7 2 2 Ni-61 0 0 -11 7 2 2 Ni-62 0 0 -12 7 2 2 Ni-64 0 0 -13 7 2 2 Mn-55 0 0 -14 7 2 2 Si-28 0 0 -15 7 2 2 Si-29 0 0 -16 7 2 2 Si-30 0 0 -17 7 2 2 Cr-50 0 0 -18 7 2 2 Cr-52 0 0 -19 7 2 2 Cr-53 0 0 -20 7 2 2 Cr-54 0 0 material group out nuclide mean std. dev. -21 7 1 H-1 0 0 -22 7 1 O-16 0 0 -23 7 1 B-10 0 0 -24 7 1 B-11 0 0 -25 7 1 Fe-54 0 0 -26 7 1 Fe-56 0 0 -27 7 1 Fe-57 0 0 -28 7 1 Fe-58 0 0 -29 7 1 Ni-58 0 0 -30 7 1 Ni-60 0 0 -31 7 1 Ni-61 0 0 -32 7 1 Ni-62 0 0 -33 7 1 Ni-64 0 0 -34 7 1 Mn-55 0 0 -35 7 1 Si-28 0 0 -36 7 1 Si-29 0 0 -37 7 1 Si-30 0 0 -38 7 1 Cr-50 0 0 -39 7 1 Cr-52 0 0 -40 7 1 Cr-53 0 0 -41 7 1 Cr-54 0 0 -0 7 2 H-1 0 0 -1 7 2 O-16 0 0 -2 7 2 B-10 0 0 -3 7 2 B-11 0 0 -4 7 2 Fe-54 0 0 -5 7 2 Fe-56 0 0 -6 7 2 Fe-57 0 0 -7 7 2 Fe-58 0 0 -8 7 2 Ni-58 0 0 -9 7 2 Ni-60 0 0 -10 7 2 Ni-61 0 0 -11 7 2 Ni-62 0 0 -12 7 2 Ni-64 0 0 -13 7 2 Mn-55 0 0 -14 7 2 Si-28 0 0 -15 7 2 Si-29 0 0 -16 7 2 Si-30 0 0 -17 7 2 Cr-50 0 0 -18 7 2 Cr-52 0 0 -19 7 2 Cr-53 0 0 -20 7 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in group out nuclide mean std. dev. -63 8 1 1 H-1 0 0 -64 8 1 1 O-16 0 0 -65 8 1 1 B-10 0 0 -66 8 1 1 B-11 0 0 -67 8 1 1 Fe-54 0 0 -68 8 1 1 Fe-56 0 0 -69 8 1 1 Fe-57 0 0 -70 8 1 1 Fe-58 0 0 -71 8 1 1 Ni-58 0 0 -72 8 1 1 Ni-60 0 0 -73 8 1 1 Ni-61 0 0 -74 8 1 1 Ni-62 0 0 -75 8 1 1 Ni-64 0 0 -76 8 1 1 Mn-55 0 0 -77 8 1 1 Si-28 0 0 -78 8 1 1 Si-29 0 0 -79 8 1 1 Si-30 0 0 -80 8 1 1 Cr-50 0 0 -81 8 1 1 Cr-52 0 0 -82 8 1 1 Cr-53 0 0 -83 8 1 1 Cr-54 0 0 -42 8 1 2 H-1 0 0 -43 8 1 2 O-16 0 0 -44 8 1 2 B-10 0 0 -45 8 1 2 B-11 0 0 -46 8 1 2 Fe-54 0 0 -47 8 1 2 Fe-56 0 0 -48 8 1 2 Fe-57 0 0 -49 8 1 2 Fe-58 0 0 -50 8 1 2 Ni-58 0 0 -51 8 1 2 Ni-60 0 0 -52 8 1 2 Ni-61 0 0 -53 8 1 2 Ni-62 0 0 -54 8 1 2 Ni-64 0 0 -55 8 1 2 Mn-55 0 0 -56 8 1 2 Si-28 0 0 -57 8 1 2 Si-29 0 0 -58 8 1 2 Si-30 0 0 -59 8 1 2 Cr-50 0 0 -60 8 1 2 Cr-52 0 0 -61 8 1 2 Cr-53 0 0 -62 8 1 2 Cr-54 0 0 -21 8 2 1 H-1 0 0 -22 8 2 1 O-16 0 0 -23 8 2 1 B-10 0 0 -24 8 2 1 B-11 0 0 -25 8 2 1 Fe-54 0 0 -26 8 2 1 Fe-56 0 0 -27 8 2 1 Fe-57 0 0 -28 8 2 1 Fe-58 0 0 -29 8 2 1 Ni-58 0 0 -30 8 2 1 Ni-60 0 0 -31 8 2 1 Ni-61 0 0 -32 8 2 1 Ni-62 0 0 -33 8 2 1 Ni-64 0 0 -34 8 2 1 Mn-55 0 0 -35 8 2 1 Si-28 0 0 -36 8 2 1 Si-29 0 0 -37 8 2 1 Si-30 0 0 -38 8 2 1 Cr-50 0 0 -39 8 2 1 Cr-52 0 0 -40 8 2 1 Cr-53 0 0 -41 8 2 1 Cr-54 0 0 -0 8 2 2 H-1 0 0 -1 8 2 2 O-16 0 0 -2 8 2 2 B-10 0 0 -3 8 2 2 B-11 0 0 -4 8 2 2 Fe-54 0 0 -5 8 2 2 Fe-56 0 0 -6 8 2 2 Fe-57 0 0 -7 8 2 2 Fe-58 0 0 -8 8 2 2 Ni-58 0 0 -9 8 2 2 Ni-60 0 0 -10 8 2 2 Ni-61 0 0 -11 8 2 2 Ni-62 0 0 -12 8 2 2 Ni-64 0 0 -13 8 2 2 Mn-55 0 0 -14 8 2 2 Si-28 0 0 -15 8 2 2 Si-29 0 0 -16 8 2 2 Si-30 0 0 -17 8 2 2 Cr-50 0 0 -18 8 2 2 Cr-52 0 0 -19 8 2 2 Cr-53 0 0 -20 8 2 2 Cr-54 0 0 material group out nuclide mean std. dev. -21 8 1 H-1 0 0 -22 8 1 O-16 0 0 -23 8 1 B-10 0 0 -24 8 1 B-11 0 0 -25 8 1 Fe-54 0 0 -26 8 1 Fe-56 0 0 -27 8 1 Fe-57 0 0 -28 8 1 Fe-58 0 0 -29 8 1 Ni-58 0 0 -30 8 1 Ni-60 0 0 -31 8 1 Ni-61 0 0 -32 8 1 Ni-62 0 0 -33 8 1 Ni-64 0 0 -34 8 1 Mn-55 0 0 -35 8 1 Si-28 0 0 -36 8 1 Si-29 0 0 -37 8 1 Si-30 0 0 -38 8 1 Cr-50 0 0 -39 8 1 Cr-52 0 0 -40 8 1 Cr-53 0 0 -41 8 1 Cr-54 0 0 -0 8 2 H-1 0 0 -1 8 2 O-16 0 0 -2 8 2 B-10 0 0 -3 8 2 B-11 0 0 -4 8 2 Fe-54 0 0 -5 8 2 Fe-56 0 0 -6 8 2 Fe-57 0 0 -7 8 2 Fe-58 0 0 -8 8 2 Ni-58 0 0 -9 8 2 Ni-60 0 0 -10 8 2 Ni-61 0 0 -11 8 2 Ni-62 0 0 -12 8 2 Ni-64 0 0 -13 8 2 Mn-55 0 0 -14 8 2 Si-28 0 0 -15 8 2 Si-29 0 0 -16 8 2 Si-30 0 0 -17 8 2 Cr-50 0 0 -18 8 2 Cr-52 0 0 -19 8 2 Cr-53 0 0 -20 8 2 Cr-54 0 0 material group in nuclide mean std. dev. +4 4 1 H-1 0.0 0.0 +5 4 1 O-16 0.0 0.0 +6 4 1 B-10 0.0 0.0 +7 4 1 B-11 0.0 0.0 +0 4 2 H-1 0.0 0.0 +1 4 2 O-16 0.0 0.0 +2 4 2 B-10 0.0 0.0 +3 4 2 B-11 0.0 0.0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in group out nuclide mean std. dev. +81 5 1 1 Fe-54 0.0 0.0 +82 5 1 1 Fe-56 0.0 0.0 +83 5 1 1 Fe-57 0.0 0.0 +84 5 1 1 Fe-58 0.0 0.0 +85 5 1 1 Ni-58 0.0 0.0 +86 5 1 1 Ni-60 0.0 0.0 +87 5 1 1 Ni-61 0.0 0.0 +88 5 1 1 Ni-62 0.0 0.0 +89 5 1 1 Ni-64 0.0 0.0 +90 5 1 1 Mn-55 0.0 0.0 +91 5 1 1 Mo-92 0.0 0.0 +92 5 1 1 Mo-94 0.0 0.0 +93 5 1 1 Mo-95 0.0 0.0 +94 5 1 1 Mo-96 0.0 0.0 +95 5 1 1 Mo-97 0.0 0.0 +96 5 1 1 Mo-98 0.0 0.0 +97 5 1 1 Mo-100 0.0 0.0 +98 5 1 1 Si-28 0.0 0.0 +99 5 1 1 Si-29 0.0 0.0 +100 5 1 1 Si-30 0.0 0.0 +101 5 1 1 Cr-50 0.0 0.0 +102 5 1 1 Cr-52 0.0 0.0 +103 5 1 1 Cr-53 0.0 0.0 +104 5 1 1 Cr-54 0.0 0.0 +105 5 1 1 C-Nat 0.0 0.0 +106 5 1 1 Cu-63 0.0 0.0 +107 5 1 1 Cu-65 0.0 0.0 +54 5 1 2 Fe-54 0.0 0.0 +55 5 1 2 Fe-56 0.0 0.0 +56 5 1 2 Fe-57 0.0 0.0 +57 5 1 2 Fe-58 0.0 0.0 +58 5 1 2 Ni-58 0.0 0.0 +59 5 1 2 Ni-60 0.0 0.0 +60 5 1 2 Ni-61 0.0 0.0 +61 5 1 2 Ni-62 0.0 0.0 +62 5 1 2 Ni-64 0.0 0.0 +63 5 1 2 Mn-55 0.0 0.0 +64 5 1 2 Mo-92 0.0 0.0 +65 5 1 2 Mo-94 0.0 0.0 +66 5 1 2 Mo-95 0.0 0.0 +67 5 1 2 Mo-96 0.0 0.0 +68 5 1 2 Mo-97 0.0 0.0 +69 5 1 2 Mo-98 0.0 0.0 +70 5 1 2 Mo-100 0.0 0.0 +71 5 1 2 Si-28 0.0 0.0 +72 5 1 2 Si-29 0.0 0.0 +73 5 1 2 Si-30 0.0 0.0 +74 5 1 2 Cr-50 0.0 0.0 +75 5 1 2 Cr-52 0.0 0.0 +76 5 1 2 Cr-53 0.0 0.0 +77 5 1 2 Cr-54 0.0 0.0 +78 5 1 2 C-Nat 0.0 0.0 +79 5 1 2 Cu-63 0.0 0.0 +80 5 1 2 Cu-65 0.0 0.0 +27 5 2 1 Fe-54 0.0 0.0 +28 5 2 1 Fe-56 0.0 0.0 +29 5 2 1 Fe-57 0.0 0.0 +30 5 2 1 Fe-58 0.0 0.0 +31 5 2 1 Ni-58 0.0 0.0 +32 5 2 1 Ni-60 0.0 0.0 +33 5 2 1 Ni-61 0.0 0.0 +34 5 2 1 Ni-62 0.0 0.0 +35 5 2 1 Ni-64 0.0 0.0 +36 5 2 1 Mn-55 0.0 0.0 +37 5 2 1 Mo-92 0.0 0.0 +38 5 2 1 Mo-94 0.0 0.0 +39 5 2 1 Mo-95 0.0 0.0 +40 5 2 1 Mo-96 0.0 0.0 +41 5 2 1 Mo-97 0.0 0.0 +42 5 2 1 Mo-98 0.0 0.0 +43 5 2 1 Mo-100 0.0 0.0 +44 5 2 1 Si-28 0.0 0.0 +45 5 2 1 Si-29 0.0 0.0 +46 5 2 1 Si-30 0.0 0.0 +47 5 2 1 Cr-50 0.0 0.0 +48 5 2 1 Cr-52 0.0 0.0 +49 5 2 1 Cr-53 0.0 0.0 +50 5 2 1 Cr-54 0.0 0.0 +51 5 2 1 C-Nat 0.0 0.0 +52 5 2 1 Cu-63 0.0 0.0 +53 5 2 1 Cu-65 0.0 0.0 +0 5 2 2 Fe-54 0.0 0.0 +1 5 2 2 Fe-56 0.0 0.0 +2 5 2 2 Fe-57 0.0 0.0 +3 5 2 2 Fe-58 0.0 0.0 +4 5 2 2 Ni-58 0.0 0.0 +5 5 2 2 Ni-60 0.0 0.0 +6 5 2 2 Ni-61 0.0 0.0 +7 5 2 2 Ni-62 0.0 0.0 +8 5 2 2 Ni-64 0.0 0.0 +9 5 2 2 Mn-55 0.0 0.0 +10 5 2 2 Mo-92 0.0 0.0 +11 5 2 2 Mo-94 0.0 0.0 +12 5 2 2 Mo-95 0.0 0.0 +13 5 2 2 Mo-96 0.0 0.0 +14 5 2 2 Mo-97 0.0 0.0 +15 5 2 2 Mo-98 0.0 0.0 +16 5 2 2 Mo-100 0.0 0.0 +17 5 2 2 Si-28 0.0 0.0 +18 5 2 2 Si-29 0.0 0.0 +19 5 2 2 Si-30 0.0 0.0 +20 5 2 2 Cr-50 0.0 0.0 +21 5 2 2 Cr-52 0.0 0.0 +22 5 2 2 Cr-53 0.0 0.0 +23 5 2 2 Cr-54 0.0 0.0 +24 5 2 2 C-Nat 0.0 0.0 +25 5 2 2 Cu-63 0.0 0.0 +26 5 2 2 Cu-65 0.0 0.0 material group out nuclide mean std. dev. +27 5 1 Fe-54 0.0 0.0 +28 5 1 Fe-56 0.0 0.0 +29 5 1 Fe-57 0.0 0.0 +30 5 1 Fe-58 0.0 0.0 +31 5 1 Ni-58 0.0 0.0 +32 5 1 Ni-60 0.0 0.0 +33 5 1 Ni-61 0.0 0.0 +34 5 1 Ni-62 0.0 0.0 +35 5 1 Ni-64 0.0 0.0 +36 5 1 Mn-55 0.0 0.0 +37 5 1 Mo-92 0.0 0.0 +38 5 1 Mo-94 0.0 0.0 +39 5 1 Mo-95 0.0 0.0 +40 5 1 Mo-96 0.0 0.0 +41 5 1 Mo-97 0.0 0.0 +42 5 1 Mo-98 0.0 0.0 +43 5 1 Mo-100 0.0 0.0 +44 5 1 Si-28 0.0 0.0 +45 5 1 Si-29 0.0 0.0 +46 5 1 Si-30 0.0 0.0 +47 5 1 Cr-50 0.0 0.0 +48 5 1 Cr-52 0.0 0.0 +49 5 1 Cr-53 0.0 0.0 +50 5 1 Cr-54 0.0 0.0 +51 5 1 C-Nat 0.0 0.0 +52 5 1 Cu-63 0.0 0.0 +53 5 1 Cu-65 0.0 0.0 +0 5 2 Fe-54 0.0 0.0 +1 5 2 Fe-56 0.0 0.0 +2 5 2 Fe-57 0.0 0.0 +3 5 2 Fe-58 0.0 0.0 +4 5 2 Ni-58 0.0 0.0 +5 5 2 Ni-60 0.0 0.0 +6 5 2 Ni-61 0.0 0.0 +7 5 2 Ni-62 0.0 0.0 +8 5 2 Ni-64 0.0 0.0 +9 5 2 Mn-55 0.0 0.0 +10 5 2 Mo-92 0.0 0.0 +11 5 2 Mo-94 0.0 0.0 +12 5 2 Mo-95 0.0 0.0 +13 5 2 Mo-96 0.0 0.0 +14 5 2 Mo-97 0.0 0.0 +15 5 2 Mo-98 0.0 0.0 +16 5 2 Mo-100 0.0 0.0 +17 5 2 Si-28 0.0 0.0 +18 5 2 Si-29 0.0 0.0 +19 5 2 Si-30 0.0 0.0 +20 5 2 Cr-50 0.0 0.0 +21 5 2 Cr-52 0.0 0.0 +22 5 2 Cr-53 0.0 0.0 +23 5 2 Cr-54 0.0 0.0 +24 5 2 C-Nat 0.0 0.0 +25 5 2 Cu-63 0.0 0.0 +26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 6 1 1 H-1 0.0 0.0 +64 6 1 1 O-16 0.0 0.0 +65 6 1 1 B-10 0.0 0.0 +66 6 1 1 B-11 0.0 0.0 +67 6 1 1 Fe-54 0.0 0.0 +68 6 1 1 Fe-56 0.0 0.0 +69 6 1 1 Fe-57 0.0 0.0 +70 6 1 1 Fe-58 0.0 0.0 +71 6 1 1 Ni-58 0.0 0.0 +72 6 1 1 Ni-60 0.0 0.0 +73 6 1 1 Ni-61 0.0 0.0 +74 6 1 1 Ni-62 0.0 0.0 +75 6 1 1 Ni-64 0.0 0.0 +76 6 1 1 Mn-55 0.0 0.0 +77 6 1 1 Si-28 0.0 0.0 +78 6 1 1 Si-29 0.0 0.0 +79 6 1 1 Si-30 0.0 0.0 +80 6 1 1 Cr-50 0.0 0.0 +81 6 1 1 Cr-52 0.0 0.0 +82 6 1 1 Cr-53 0.0 0.0 +83 6 1 1 Cr-54 0.0 0.0 +42 6 1 2 H-1 0.0 0.0 +43 6 1 2 O-16 0.0 0.0 +44 6 1 2 B-10 0.0 0.0 +45 6 1 2 B-11 0.0 0.0 +46 6 1 2 Fe-54 0.0 0.0 +47 6 1 2 Fe-56 0.0 0.0 +48 6 1 2 Fe-57 0.0 0.0 +49 6 1 2 Fe-58 0.0 0.0 +50 6 1 2 Ni-58 0.0 0.0 +51 6 1 2 Ni-60 0.0 0.0 +52 6 1 2 Ni-61 0.0 0.0 +53 6 1 2 Ni-62 0.0 0.0 +54 6 1 2 Ni-64 0.0 0.0 +55 6 1 2 Mn-55 0.0 0.0 +56 6 1 2 Si-28 0.0 0.0 +57 6 1 2 Si-29 0.0 0.0 +58 6 1 2 Si-30 0.0 0.0 +59 6 1 2 Cr-50 0.0 0.0 +60 6 1 2 Cr-52 0.0 0.0 +61 6 1 2 Cr-53 0.0 0.0 +62 6 1 2 Cr-54 0.0 0.0 +21 6 2 1 H-1 0.0 0.0 +22 6 2 1 O-16 0.0 0.0 +23 6 2 1 B-10 0.0 0.0 +24 6 2 1 B-11 0.0 0.0 +25 6 2 1 Fe-54 0.0 0.0 +26 6 2 1 Fe-56 0.0 0.0 +27 6 2 1 Fe-57 0.0 0.0 +28 6 2 1 Fe-58 0.0 0.0 +29 6 2 1 Ni-58 0.0 0.0 +30 6 2 1 Ni-60 0.0 0.0 +31 6 2 1 Ni-61 0.0 0.0 +32 6 2 1 Ni-62 0.0 0.0 +33 6 2 1 Ni-64 0.0 0.0 +34 6 2 1 Mn-55 0.0 0.0 +35 6 2 1 Si-28 0.0 0.0 +36 6 2 1 Si-29 0.0 0.0 +37 6 2 1 Si-30 0.0 0.0 +38 6 2 1 Cr-50 0.0 0.0 +39 6 2 1 Cr-52 0.0 0.0 +40 6 2 1 Cr-53 0.0 0.0 +41 6 2 1 Cr-54 0.0 0.0 +0 6 2 2 H-1 0.0 0.0 +1 6 2 2 O-16 0.0 0.0 +2 6 2 2 B-10 0.0 0.0 +3 6 2 2 B-11 0.0 0.0 +4 6 2 2 Fe-54 0.0 0.0 +5 6 2 2 Fe-56 0.0 0.0 +6 6 2 2 Fe-57 0.0 0.0 +7 6 2 2 Fe-58 0.0 0.0 +8 6 2 2 Ni-58 0.0 0.0 +9 6 2 2 Ni-60 0.0 0.0 +10 6 2 2 Ni-61 0.0 0.0 +11 6 2 2 Ni-62 0.0 0.0 +12 6 2 2 Ni-64 0.0 0.0 +13 6 2 2 Mn-55 0.0 0.0 +14 6 2 2 Si-28 0.0 0.0 +15 6 2 2 Si-29 0.0 0.0 +16 6 2 2 Si-30 0.0 0.0 +17 6 2 2 Cr-50 0.0 0.0 +18 6 2 2 Cr-52 0.0 0.0 +19 6 2 2 Cr-53 0.0 0.0 +20 6 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. +21 6 1 H-1 0.0 0.0 +22 6 1 O-16 0.0 0.0 +23 6 1 B-10 0.0 0.0 +24 6 1 B-11 0.0 0.0 +25 6 1 Fe-54 0.0 0.0 +26 6 1 Fe-56 0.0 0.0 +27 6 1 Fe-57 0.0 0.0 +28 6 1 Fe-58 0.0 0.0 +29 6 1 Ni-58 0.0 0.0 +30 6 1 Ni-60 0.0 0.0 +31 6 1 Ni-61 0.0 0.0 +32 6 1 Ni-62 0.0 0.0 +33 6 1 Ni-64 0.0 0.0 +34 6 1 Mn-55 0.0 0.0 +35 6 1 Si-28 0.0 0.0 +36 6 1 Si-29 0.0 0.0 +37 6 1 Si-30 0.0 0.0 +38 6 1 Cr-50 0.0 0.0 +39 6 1 Cr-52 0.0 0.0 +40 6 1 Cr-53 0.0 0.0 +41 6 1 Cr-54 0.0 0.0 +0 6 2 H-1 0.0 0.0 +1 6 2 O-16 0.0 0.0 +2 6 2 B-10 0.0 0.0 +3 6 2 B-11 0.0 0.0 +4 6 2 Fe-54 0.0 0.0 +5 6 2 Fe-56 0.0 0.0 +6 6 2 Fe-57 0.0 0.0 +7 6 2 Fe-58 0.0 0.0 +8 6 2 Ni-58 0.0 0.0 +9 6 2 Ni-60 0.0 0.0 +10 6 2 Ni-61 0.0 0.0 +11 6 2 Ni-62 0.0 0.0 +12 6 2 Ni-64 0.0 0.0 +13 6 2 Mn-55 0.0 0.0 +14 6 2 Si-28 0.0 0.0 +15 6 2 Si-29 0.0 0.0 +16 6 2 Si-30 0.0 0.0 +17 6 2 Cr-50 0.0 0.0 +18 6 2 Cr-52 0.0 0.0 +19 6 2 Cr-53 0.0 0.0 +20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 7 1 1 H-1 0.0 0.0 +64 7 1 1 O-16 0.0 0.0 +65 7 1 1 B-10 0.0 0.0 +66 7 1 1 B-11 0.0 0.0 +67 7 1 1 Fe-54 0.0 0.0 +68 7 1 1 Fe-56 0.0 0.0 +69 7 1 1 Fe-57 0.0 0.0 +70 7 1 1 Fe-58 0.0 0.0 +71 7 1 1 Ni-58 0.0 0.0 +72 7 1 1 Ni-60 0.0 0.0 +73 7 1 1 Ni-61 0.0 0.0 +74 7 1 1 Ni-62 0.0 0.0 +75 7 1 1 Ni-64 0.0 0.0 +76 7 1 1 Mn-55 0.0 0.0 +77 7 1 1 Si-28 0.0 0.0 +78 7 1 1 Si-29 0.0 0.0 +79 7 1 1 Si-30 0.0 0.0 +80 7 1 1 Cr-50 0.0 0.0 +81 7 1 1 Cr-52 0.0 0.0 +82 7 1 1 Cr-53 0.0 0.0 +83 7 1 1 Cr-54 0.0 0.0 +42 7 1 2 H-1 0.0 0.0 +43 7 1 2 O-16 0.0 0.0 +44 7 1 2 B-10 0.0 0.0 +45 7 1 2 B-11 0.0 0.0 +46 7 1 2 Fe-54 0.0 0.0 +47 7 1 2 Fe-56 0.0 0.0 +48 7 1 2 Fe-57 0.0 0.0 +49 7 1 2 Fe-58 0.0 0.0 +50 7 1 2 Ni-58 0.0 0.0 +51 7 1 2 Ni-60 0.0 0.0 +52 7 1 2 Ni-61 0.0 0.0 +53 7 1 2 Ni-62 0.0 0.0 +54 7 1 2 Ni-64 0.0 0.0 +55 7 1 2 Mn-55 0.0 0.0 +56 7 1 2 Si-28 0.0 0.0 +57 7 1 2 Si-29 0.0 0.0 +58 7 1 2 Si-30 0.0 0.0 +59 7 1 2 Cr-50 0.0 0.0 +60 7 1 2 Cr-52 0.0 0.0 +61 7 1 2 Cr-53 0.0 0.0 +62 7 1 2 Cr-54 0.0 0.0 +21 7 2 1 H-1 0.0 0.0 +22 7 2 1 O-16 0.0 0.0 +23 7 2 1 B-10 0.0 0.0 +24 7 2 1 B-11 0.0 0.0 +25 7 2 1 Fe-54 0.0 0.0 +26 7 2 1 Fe-56 0.0 0.0 +27 7 2 1 Fe-57 0.0 0.0 +28 7 2 1 Fe-58 0.0 0.0 +29 7 2 1 Ni-58 0.0 0.0 +30 7 2 1 Ni-60 0.0 0.0 +31 7 2 1 Ni-61 0.0 0.0 +32 7 2 1 Ni-62 0.0 0.0 +33 7 2 1 Ni-64 0.0 0.0 +34 7 2 1 Mn-55 0.0 0.0 +35 7 2 1 Si-28 0.0 0.0 +36 7 2 1 Si-29 0.0 0.0 +37 7 2 1 Si-30 0.0 0.0 +38 7 2 1 Cr-50 0.0 0.0 +39 7 2 1 Cr-52 0.0 0.0 +40 7 2 1 Cr-53 0.0 0.0 +41 7 2 1 Cr-54 0.0 0.0 +0 7 2 2 H-1 0.0 0.0 +1 7 2 2 O-16 0.0 0.0 +2 7 2 2 B-10 0.0 0.0 +3 7 2 2 B-11 0.0 0.0 +4 7 2 2 Fe-54 0.0 0.0 +5 7 2 2 Fe-56 0.0 0.0 +6 7 2 2 Fe-57 0.0 0.0 +7 7 2 2 Fe-58 0.0 0.0 +8 7 2 2 Ni-58 0.0 0.0 +9 7 2 2 Ni-60 0.0 0.0 +10 7 2 2 Ni-61 0.0 0.0 +11 7 2 2 Ni-62 0.0 0.0 +12 7 2 2 Ni-64 0.0 0.0 +13 7 2 2 Mn-55 0.0 0.0 +14 7 2 2 Si-28 0.0 0.0 +15 7 2 2 Si-29 0.0 0.0 +16 7 2 2 Si-30 0.0 0.0 +17 7 2 2 Cr-50 0.0 0.0 +18 7 2 2 Cr-52 0.0 0.0 +19 7 2 2 Cr-53 0.0 0.0 +20 7 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. +21 7 1 H-1 0.0 0.0 +22 7 1 O-16 0.0 0.0 +23 7 1 B-10 0.0 0.0 +24 7 1 B-11 0.0 0.0 +25 7 1 Fe-54 0.0 0.0 +26 7 1 Fe-56 0.0 0.0 +27 7 1 Fe-57 0.0 0.0 +28 7 1 Fe-58 0.0 0.0 +29 7 1 Ni-58 0.0 0.0 +30 7 1 Ni-60 0.0 0.0 +31 7 1 Ni-61 0.0 0.0 +32 7 1 Ni-62 0.0 0.0 +33 7 1 Ni-64 0.0 0.0 +34 7 1 Mn-55 0.0 0.0 +35 7 1 Si-28 0.0 0.0 +36 7 1 Si-29 0.0 0.0 +37 7 1 Si-30 0.0 0.0 +38 7 1 Cr-50 0.0 0.0 +39 7 1 Cr-52 0.0 0.0 +40 7 1 Cr-53 0.0 0.0 +41 7 1 Cr-54 0.0 0.0 +0 7 2 H-1 0.0 0.0 +1 7 2 O-16 0.0 0.0 +2 7 2 B-10 0.0 0.0 +3 7 2 B-11 0.0 0.0 +4 7 2 Fe-54 0.0 0.0 +5 7 2 Fe-56 0.0 0.0 +6 7 2 Fe-57 0.0 0.0 +7 7 2 Fe-58 0.0 0.0 +8 7 2 Ni-58 0.0 0.0 +9 7 2 Ni-60 0.0 0.0 +10 7 2 Ni-61 0.0 0.0 +11 7 2 Ni-62 0.0 0.0 +12 7 2 Ni-64 0.0 0.0 +13 7 2 Mn-55 0.0 0.0 +14 7 2 Si-28 0.0 0.0 +15 7 2 Si-29 0.0 0.0 +16 7 2 Si-30 0.0 0.0 +17 7 2 Cr-50 0.0 0.0 +18 7 2 Cr-52 0.0 0.0 +19 7 2 Cr-53 0.0 0.0 +20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. +63 8 1 1 H-1 0.0 0.0 +64 8 1 1 O-16 0.0 0.0 +65 8 1 1 B-10 0.0 0.0 +66 8 1 1 B-11 0.0 0.0 +67 8 1 1 Fe-54 0.0 0.0 +68 8 1 1 Fe-56 0.0 0.0 +69 8 1 1 Fe-57 0.0 0.0 +70 8 1 1 Fe-58 0.0 0.0 +71 8 1 1 Ni-58 0.0 0.0 +72 8 1 1 Ni-60 0.0 0.0 +73 8 1 1 Ni-61 0.0 0.0 +74 8 1 1 Ni-62 0.0 0.0 +75 8 1 1 Ni-64 0.0 0.0 +76 8 1 1 Mn-55 0.0 0.0 +77 8 1 1 Si-28 0.0 0.0 +78 8 1 1 Si-29 0.0 0.0 +79 8 1 1 Si-30 0.0 0.0 +80 8 1 1 Cr-50 0.0 0.0 +81 8 1 1 Cr-52 0.0 0.0 +82 8 1 1 Cr-53 0.0 0.0 +83 8 1 1 Cr-54 0.0 0.0 +42 8 1 2 H-1 0.0 0.0 +43 8 1 2 O-16 0.0 0.0 +44 8 1 2 B-10 0.0 0.0 +45 8 1 2 B-11 0.0 0.0 +46 8 1 2 Fe-54 0.0 0.0 +47 8 1 2 Fe-56 0.0 0.0 +48 8 1 2 Fe-57 0.0 0.0 +49 8 1 2 Fe-58 0.0 0.0 +50 8 1 2 Ni-58 0.0 0.0 +51 8 1 2 Ni-60 0.0 0.0 +52 8 1 2 Ni-61 0.0 0.0 +53 8 1 2 Ni-62 0.0 0.0 +54 8 1 2 Ni-64 0.0 0.0 +55 8 1 2 Mn-55 0.0 0.0 +56 8 1 2 Si-28 0.0 0.0 +57 8 1 2 Si-29 0.0 0.0 +58 8 1 2 Si-30 0.0 0.0 +59 8 1 2 Cr-50 0.0 0.0 +60 8 1 2 Cr-52 0.0 0.0 +61 8 1 2 Cr-53 0.0 0.0 +62 8 1 2 Cr-54 0.0 0.0 +21 8 2 1 H-1 0.0 0.0 +22 8 2 1 O-16 0.0 0.0 +23 8 2 1 B-10 0.0 0.0 +24 8 2 1 B-11 0.0 0.0 +25 8 2 1 Fe-54 0.0 0.0 +26 8 2 1 Fe-56 0.0 0.0 +27 8 2 1 Fe-57 0.0 0.0 +28 8 2 1 Fe-58 0.0 0.0 +29 8 2 1 Ni-58 0.0 0.0 +30 8 2 1 Ni-60 0.0 0.0 +31 8 2 1 Ni-61 0.0 0.0 +32 8 2 1 Ni-62 0.0 0.0 +33 8 2 1 Ni-64 0.0 0.0 +34 8 2 1 Mn-55 0.0 0.0 +35 8 2 1 Si-28 0.0 0.0 +36 8 2 1 Si-29 0.0 0.0 +37 8 2 1 Si-30 0.0 0.0 +38 8 2 1 Cr-50 0.0 0.0 +39 8 2 1 Cr-52 0.0 0.0 +40 8 2 1 Cr-53 0.0 0.0 +41 8 2 1 Cr-54 0.0 0.0 +0 8 2 2 H-1 0.0 0.0 +1 8 2 2 O-16 0.0 0.0 +2 8 2 2 B-10 0.0 0.0 +3 8 2 2 B-11 0.0 0.0 +4 8 2 2 Fe-54 0.0 0.0 +5 8 2 2 Fe-56 0.0 0.0 +6 8 2 2 Fe-57 0.0 0.0 +7 8 2 2 Fe-58 0.0 0.0 +8 8 2 2 Ni-58 0.0 0.0 +9 8 2 2 Ni-60 0.0 0.0 +10 8 2 2 Ni-61 0.0 0.0 +11 8 2 2 Ni-62 0.0 0.0 +12 8 2 2 Ni-64 0.0 0.0 +13 8 2 2 Mn-55 0.0 0.0 +14 8 2 2 Si-28 0.0 0.0 +15 8 2 2 Si-29 0.0 0.0 +16 8 2 2 Si-30 0.0 0.0 +17 8 2 2 Cr-50 0.0 0.0 +18 8 2 2 Cr-52 0.0 0.0 +19 8 2 2 Cr-53 0.0 0.0 +20 8 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. +21 8 1 H-1 0.0 0.0 +22 8 1 O-16 0.0 0.0 +23 8 1 B-10 0.0 0.0 +24 8 1 B-11 0.0 0.0 +25 8 1 Fe-54 0.0 0.0 +26 8 1 Fe-56 0.0 0.0 +27 8 1 Fe-57 0.0 0.0 +28 8 1 Fe-58 0.0 0.0 +29 8 1 Ni-58 0.0 0.0 +30 8 1 Ni-60 0.0 0.0 +31 8 1 Ni-61 0.0 0.0 +32 8 1 Ni-62 0.0 0.0 +33 8 1 Ni-64 0.0 0.0 +34 8 1 Mn-55 0.0 0.0 +35 8 1 Si-28 0.0 0.0 +36 8 1 Si-29 0.0 0.0 +37 8 1 Si-30 0.0 0.0 +38 8 1 Cr-50 0.0 0.0 +39 8 1 Cr-52 0.0 0.0 +40 8 1 Cr-53 0.0 0.0 +41 8 1 Cr-54 0.0 0.0 +0 8 2 H-1 0.0 0.0 +1 8 2 O-16 0.0 0.0 +2 8 2 B-10 0.0 0.0 +3 8 2 B-11 0.0 0.0 +4 8 2 Fe-54 0.0 0.0 +5 8 2 Fe-56 0.0 0.0 +6 8 2 Fe-57 0.0 0.0 +7 8 2 Fe-58 0.0 0.0 +8 8 2 Ni-58 0.0 0.0 +9 8 2 Ni-60 0.0 0.0 +10 8 2 Ni-61 0.0 0.0 +11 8 2 Ni-62 0.0 0.0 +12 8 2 Ni-64 0.0 0.0 +13 8 2 Mn-55 0.0 0.0 +14 8 2 Si-28 0.0 0.0 +15 8 2 Si-29 0.0 0.0 +16 8 2 Si-30 0.0 0.0 +17 8 2 Cr-50 0.0 0.0 +18 8 2 Cr-52 0.0 0.0 +19 8 2 Cr-53 0.0 0.0 +20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 21 9 1 H-1 0.150655 0.480993 22 9 1 O-16 0.116221 0.114089 23 9 1 B-10 0.000000 0.000000 @@ -1411,48 +1411,48 @@ 18 9 2 Cr-52 0.000000 0.000000 19 9 2 Cr-53 0.000000 0.000000 20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in group out nuclide mean std. dev. +21 9 1 H-1 0.0 0.0 +22 9 1 O-16 0.0 0.0 +23 9 1 B-10 0.0 0.0 +24 9 1 B-11 0.0 0.0 +25 9 1 Fe-54 0.0 0.0 +26 9 1 Fe-56 0.0 0.0 +27 9 1 Fe-57 0.0 0.0 +28 9 1 Fe-58 0.0 0.0 +29 9 1 Ni-58 0.0 0.0 +30 9 1 Ni-60 0.0 0.0 +31 9 1 Ni-61 0.0 0.0 +32 9 1 Ni-62 0.0 0.0 +33 9 1 Ni-64 0.0 0.0 +34 9 1 Mn-55 0.0 0.0 +35 9 1 Si-28 0.0 0.0 +36 9 1 Si-29 0.0 0.0 +37 9 1 Si-30 0.0 0.0 +38 9 1 Cr-50 0.0 0.0 +39 9 1 Cr-52 0.0 0.0 +40 9 1 Cr-53 0.0 0.0 +41 9 1 Cr-54 0.0 0.0 +0 9 2 H-1 0.0 0.0 +1 9 2 O-16 0.0 0.0 +2 9 2 B-10 0.0 0.0 +3 9 2 B-11 0.0 0.0 +4 9 2 Fe-54 0.0 0.0 +5 9 2 Fe-56 0.0 0.0 +6 9 2 Fe-57 0.0 0.0 +7 9 2 Fe-58 0.0 0.0 +8 9 2 Ni-58 0.0 0.0 +9 9 2 Ni-60 0.0 0.0 +10 9 2 Ni-61 0.0 0.0 +11 9 2 Ni-62 0.0 0.0 +12 9 2 Ni-64 0.0 0.0 +13 9 2 Mn-55 0.0 0.0 +14 9 2 Si-28 0.0 0.0 +15 9 2 Si-29 0.0 0.0 +16 9 2 Si-30 0.0 0.0 +17 9 2 Cr-50 0.0 0.0 +18 9 2 Cr-52 0.0 0.0 +19 9 2 Cr-53 0.0 0.0 +20 9 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. 63 9 1 1 H-1 0.150655 0.480993 64 9 1 1 O-16 0.116221 0.114089 65 9 1 1 B-10 0.000000 0.000000 @@ -1537,48 +1537,48 @@ 18 9 2 2 Cr-52 0.000000 0.000000 19 9 2 2 Cr-53 0.000000 0.000000 20 9 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 9 1 H-1 0 0 -22 9 1 O-16 0 0 -23 9 1 B-10 0 0 -24 9 1 B-11 0 0 -25 9 1 Fe-54 0 0 -26 9 1 Fe-56 0 0 -27 9 1 Fe-57 0 0 -28 9 1 Fe-58 0 0 -29 9 1 Ni-58 0 0 -30 9 1 Ni-60 0 0 -31 9 1 Ni-61 0 0 -32 9 1 Ni-62 0 0 -33 9 1 Ni-64 0 0 -34 9 1 Mn-55 0 0 -35 9 1 Si-28 0 0 -36 9 1 Si-29 0 0 -37 9 1 Si-30 0 0 -38 9 1 Cr-50 0 0 -39 9 1 Cr-52 0 0 -40 9 1 Cr-53 0 0 -41 9 1 Cr-54 0 0 -0 9 2 H-1 0 0 -1 9 2 O-16 0 0 -2 9 2 B-10 0 0 -3 9 2 B-11 0 0 -4 9 2 Fe-54 0 0 -5 9 2 Fe-56 0 0 -6 9 2 Fe-57 0 0 -7 9 2 Fe-58 0 0 -8 9 2 Ni-58 0 0 -9 9 2 Ni-60 0 0 -10 9 2 Ni-61 0 0 -11 9 2 Ni-62 0 0 -12 9 2 Ni-64 0 0 -13 9 2 Mn-55 0 0 -14 9 2 Si-28 0 0 -15 9 2 Si-29 0 0 -16 9 2 Si-30 0 0 -17 9 2 Cr-50 0 0 -18 9 2 Cr-52 0 0 -19 9 2 Cr-53 0 0 -20 9 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 9 1 H-1 0.0 0.0 +22 9 1 O-16 0.0 0.0 +23 9 1 B-10 0.0 0.0 +24 9 1 B-11 0.0 0.0 +25 9 1 Fe-54 0.0 0.0 +26 9 1 Fe-56 0.0 0.0 +27 9 1 Fe-57 0.0 0.0 +28 9 1 Fe-58 0.0 0.0 +29 9 1 Ni-58 0.0 0.0 +30 9 1 Ni-60 0.0 0.0 +31 9 1 Ni-61 0.0 0.0 +32 9 1 Ni-62 0.0 0.0 +33 9 1 Ni-64 0.0 0.0 +34 9 1 Mn-55 0.0 0.0 +35 9 1 Si-28 0.0 0.0 +36 9 1 Si-29 0.0 0.0 +37 9 1 Si-30 0.0 0.0 +38 9 1 Cr-50 0.0 0.0 +39 9 1 Cr-52 0.0 0.0 +40 9 1 Cr-53 0.0 0.0 +41 9 1 Cr-54 0.0 0.0 +0 9 2 H-1 0.0 0.0 +1 9 2 O-16 0.0 0.0 +2 9 2 B-10 0.0 0.0 +3 9 2 B-11 0.0 0.0 +4 9 2 Fe-54 0.0 0.0 +5 9 2 Fe-56 0.0 0.0 +6 9 2 Fe-57 0.0 0.0 +7 9 2 Fe-58 0.0 0.0 +8 9 2 Ni-58 0.0 0.0 +9 9 2 Ni-60 0.0 0.0 +10 9 2 Ni-61 0.0 0.0 +11 9 2 Ni-62 0.0 0.0 +12 9 2 Ni-64 0.0 0.0 +13 9 2 Mn-55 0.0 0.0 +14 9 2 Si-28 0.0 0.0 +15 9 2 Si-29 0.0 0.0 +16 9 2 Si-30 0.0 0.0 +17 9 2 Cr-50 0.0 0.0 +18 9 2 Cr-52 0.0 0.0 +19 9 2 Cr-53 0.0 0.0 +20 9 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 21 10 1 H-1 0.123944 0.541390 22 10 1 O-16 0.000000 0.000000 23 10 1 B-10 0.000000 0.000000 @@ -1621,48 +1621,48 @@ 18 10 2 Cr-52 0.000000 0.000000 19 10 2 Cr-53 0.000000 0.000000 20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in group out nuclide mean std. dev. +21 10 1 H-1 0.0 0.0 +22 10 1 O-16 0.0 0.0 +23 10 1 B-10 0.0 0.0 +24 10 1 B-11 0.0 0.0 +25 10 1 Fe-54 0.0 0.0 +26 10 1 Fe-56 0.0 0.0 +27 10 1 Fe-57 0.0 0.0 +28 10 1 Fe-58 0.0 0.0 +29 10 1 Ni-58 0.0 0.0 +30 10 1 Ni-60 0.0 0.0 +31 10 1 Ni-61 0.0 0.0 +32 10 1 Ni-62 0.0 0.0 +33 10 1 Ni-64 0.0 0.0 +34 10 1 Mn-55 0.0 0.0 +35 10 1 Si-28 0.0 0.0 +36 10 1 Si-29 0.0 0.0 +37 10 1 Si-30 0.0 0.0 +38 10 1 Cr-50 0.0 0.0 +39 10 1 Cr-52 0.0 0.0 +40 10 1 Cr-53 0.0 0.0 +41 10 1 Cr-54 0.0 0.0 +0 10 2 H-1 0.0 0.0 +1 10 2 O-16 0.0 0.0 +2 10 2 B-10 0.0 0.0 +3 10 2 B-11 0.0 0.0 +4 10 2 Fe-54 0.0 0.0 +5 10 2 Fe-56 0.0 0.0 +6 10 2 Fe-57 0.0 0.0 +7 10 2 Fe-58 0.0 0.0 +8 10 2 Ni-58 0.0 0.0 +9 10 2 Ni-60 0.0 0.0 +10 10 2 Ni-61 0.0 0.0 +11 10 2 Ni-62 0.0 0.0 +12 10 2 Ni-64 0.0 0.0 +13 10 2 Mn-55 0.0 0.0 +14 10 2 Si-28 0.0 0.0 +15 10 2 Si-29 0.0 0.0 +16 10 2 Si-30 0.0 0.0 +17 10 2 Cr-50 0.0 0.0 +18 10 2 Cr-52 0.0 0.0 +19 10 2 Cr-53 0.0 0.0 +20 10 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. 63 10 1 1 H-1 0.123944 0.541390 64 10 1 1 O-16 0.000000 0.000000 65 10 1 1 B-10 0.000000 0.000000 @@ -1747,48 +1747,48 @@ 18 10 2 2 Cr-52 0.000000 0.000000 19 10 2 2 Cr-53 0.000000 0.000000 20 10 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 10 1 H-1 0 0 -22 10 1 O-16 0 0 -23 10 1 B-10 0 0 -24 10 1 B-11 0 0 -25 10 1 Fe-54 0 0 -26 10 1 Fe-56 0 0 -27 10 1 Fe-57 0 0 -28 10 1 Fe-58 0 0 -29 10 1 Ni-58 0 0 -30 10 1 Ni-60 0 0 -31 10 1 Ni-61 0 0 -32 10 1 Ni-62 0 0 -33 10 1 Ni-64 0 0 -34 10 1 Mn-55 0 0 -35 10 1 Si-28 0 0 -36 10 1 Si-29 0 0 -37 10 1 Si-30 0 0 -38 10 1 Cr-50 0 0 -39 10 1 Cr-52 0 0 -40 10 1 Cr-53 0 0 -41 10 1 Cr-54 0 0 -0 10 2 H-1 0 0 -1 10 2 O-16 0 0 -2 10 2 B-10 0 0 -3 10 2 B-11 0 0 -4 10 2 Fe-54 0 0 -5 10 2 Fe-56 0 0 -6 10 2 Fe-57 0 0 -7 10 2 Fe-58 0 0 -8 10 2 Ni-58 0 0 -9 10 2 Ni-60 0 0 -10 10 2 Ni-61 0 0 -11 10 2 Ni-62 0 0 -12 10 2 Ni-64 0 0 -13 10 2 Mn-55 0 0 -14 10 2 Si-28 0 0 -15 10 2 Si-29 0 0 -16 10 2 Si-30 0 0 -17 10 2 Cr-50 0 0 -18 10 2 Cr-52 0 0 -19 10 2 Cr-53 0 0 -20 10 2 Cr-54 0 0 material group in nuclide mean std. dev. +21 10 1 H-1 0.0 0.0 +22 10 1 O-16 0.0 0.0 +23 10 1 B-10 0.0 0.0 +24 10 1 B-11 0.0 0.0 +25 10 1 Fe-54 0.0 0.0 +26 10 1 Fe-56 0.0 0.0 +27 10 1 Fe-57 0.0 0.0 +28 10 1 Fe-58 0.0 0.0 +29 10 1 Ni-58 0.0 0.0 +30 10 1 Ni-60 0.0 0.0 +31 10 1 Ni-61 0.0 0.0 +32 10 1 Ni-62 0.0 0.0 +33 10 1 Ni-64 0.0 0.0 +34 10 1 Mn-55 0.0 0.0 +35 10 1 Si-28 0.0 0.0 +36 10 1 Si-29 0.0 0.0 +37 10 1 Si-30 0.0 0.0 +38 10 1 Cr-50 0.0 0.0 +39 10 1 Cr-52 0.0 0.0 +40 10 1 Cr-53 0.0 0.0 +41 10 1 Cr-54 0.0 0.0 +0 10 2 H-1 0.0 0.0 +1 10 2 O-16 0.0 0.0 +2 10 2 B-10 0.0 0.0 +3 10 2 B-11 0.0 0.0 +4 10 2 Fe-54 0.0 0.0 +5 10 2 Fe-56 0.0 0.0 +6 10 2 Fe-57 0.0 0.0 +7 10 2 Fe-58 0.0 0.0 +8 10 2 Ni-58 0.0 0.0 +9 10 2 Ni-60 0.0 0.0 +10 10 2 Ni-61 0.0 0.0 +11 10 2 Ni-62 0.0 0.0 +12 10 2 Ni-64 0.0 0.0 +13 10 2 Mn-55 0.0 0.0 +14 10 2 Si-28 0.0 0.0 +15 10 2 Si-29 0.0 0.0 +16 10 2 Si-30 0.0 0.0 +17 10 2 Cr-50 0.0 0.0 +18 10 2 Cr-52 0.0 0.0 +19 10 2 Cr-53 0.0 0.0 +20 10 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. 9 11 1 H-1 0.131470 0.476035 10 11 1 O-16 0.028684 0.043000 11 11 1 B-10 0.000000 0.000000 @@ -1807,24 +1807,24 @@ 6 11 2 Zr-92 0.084226 0.103161 7 11 2 Zr-94 0.092039 0.125985 8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 11 1 H-1 0 0 -10 11 1 O-16 0 0 -11 11 1 B-10 0 0 -12 11 1 B-11 0 0 -13 11 1 Zr-90 0 0 -14 11 1 Zr-91 0 0 -15 11 1 Zr-92 0 0 -16 11 1 Zr-94 0 0 -17 11 1 Zr-96 0 0 -0 11 2 H-1 0 0 -1 11 2 O-16 0 0 -2 11 2 B-10 0 0 -3 11 2 B-11 0 0 -4 11 2 Zr-90 0 0 -5 11 2 Zr-91 0 0 -6 11 2 Zr-92 0 0 -7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in group out nuclide mean std. dev. +9 11 1 H-1 0.0 0.0 +10 11 1 O-16 0.0 0.0 +11 11 1 B-10 0.0 0.0 +12 11 1 B-11 0.0 0.0 +13 11 1 Zr-90 0.0 0.0 +14 11 1 Zr-91 0.0 0.0 +15 11 1 Zr-92 0.0 0.0 +16 11 1 Zr-94 0.0 0.0 +17 11 1 Zr-96 0.0 0.0 +0 11 2 H-1 0.0 0.0 +1 11 2 O-16 0.0 0.0 +2 11 2 B-10 0.0 0.0 +3 11 2 B-11 0.0 0.0 +4 11 2 Zr-90 0.0 0.0 +5 11 2 Zr-91 0.0 0.0 +6 11 2 Zr-92 0.0 0.0 +7 11 2 Zr-94 0.0 0.0 +8 11 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. 27 11 1 1 H-1 0.099594 0.442578 28 11 1 1 O-16 0.028684 0.043000 29 11 1 1 B-10 0.000000 0.000000 @@ -1861,24 +1861,24 @@ 6 11 2 2 Zr-92 0.084226 0.103161 7 11 2 2 Zr-94 0.092039 0.125985 8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 11 1 H-1 0 0 -10 11 1 O-16 0 0 -11 11 1 B-10 0 0 -12 11 1 B-11 0 0 -13 11 1 Zr-90 0 0 -14 11 1 Zr-91 0 0 -15 11 1 Zr-92 0 0 -16 11 1 Zr-94 0 0 -17 11 1 Zr-96 0 0 -0 11 2 H-1 0 0 -1 11 2 O-16 0 0 -2 11 2 B-10 0 0 -3 11 2 B-11 0 0 -4 11 2 Zr-90 0 0 -5 11 2 Zr-91 0 0 -6 11 2 Zr-92 0 0 -7 11 2 Zr-94 0 0 -8 11 2 Zr-96 0 0 material group in nuclide mean std. dev. +9 11 1 H-1 0.0 0.0 +10 11 1 O-16 0.0 0.0 +11 11 1 B-10 0.0 0.0 +12 11 1 B-11 0.0 0.0 +13 11 1 Zr-90 0.0 0.0 +14 11 1 Zr-91 0.0 0.0 +15 11 1 Zr-92 0.0 0.0 +16 11 1 Zr-94 0.0 0.0 +17 11 1 Zr-96 0.0 0.0 +0 11 2 H-1 0.0 0.0 +1 11 2 O-16 0.0 0.0 +2 11 2 B-10 0.0 0.0 +3 11 2 B-11 0.0 0.0 +4 11 2 Zr-90 0.0 0.0 +5 11 2 Zr-91 0.0 0.0 +6 11 2 Zr-92 0.0 0.0 +7 11 2 Zr-94 0.0 0.0 +8 11 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. 9 12 1 H-1 0.098944 0.178543 10 12 1 O-16 0.013270 0.020403 11 12 1 B-10 0.000000 0.000000 @@ -1897,24 +1897,24 @@ 6 12 2 Zr-92 0.000000 0.000000 7 12 2 Zr-94 0.000000 0.000000 8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 material group in group out nuclide mean std. dev. +9 12 1 H-1 0.0 0.0 +10 12 1 O-16 0.0 0.0 +11 12 1 B-10 0.0 0.0 +12 12 1 B-11 0.0 0.0 +13 12 1 Zr-90 0.0 0.0 +14 12 1 Zr-91 0.0 0.0 +15 12 1 Zr-92 0.0 0.0 +16 12 1 Zr-94 0.0 0.0 +17 12 1 Zr-96 0.0 0.0 +0 12 2 H-1 0.0 0.0 +1 12 2 O-16 0.0 0.0 +2 12 2 B-10 0.0 0.0 +3 12 2 B-11 0.0 0.0 +4 12 2 Zr-90 0.0 0.0 +5 12 2 Zr-91 0.0 0.0 +6 12 2 Zr-92 0.0 0.0 +7 12 2 Zr-94 0.0 0.0 +8 12 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. 27 12 1 1 H-1 0.071704 0.167588 28 12 1 1 O-16 0.013270 0.020403 29 12 1 1 B-10 0.000000 0.000000 @@ -1951,21 +1951,21 @@ 6 12 2 2 Zr-92 0.000000 0.000000 7 12 2 2 Zr-94 0.000000 0.000000 8 12 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 12 1 H-1 0 0 -10 12 1 O-16 0 0 -11 12 1 B-10 0 0 -12 12 1 B-11 0 0 -13 12 1 Zr-90 0 0 -14 12 1 Zr-91 0 0 -15 12 1 Zr-92 0 0 -16 12 1 Zr-94 0 0 -17 12 1 Zr-96 0 0 -0 12 2 H-1 0 0 -1 12 2 O-16 0 0 -2 12 2 B-10 0 0 -3 12 2 B-11 0 0 -4 12 2 Zr-90 0 0 -5 12 2 Zr-91 0 0 -6 12 2 Zr-92 0 0 -7 12 2 Zr-94 0 0 -8 12 2 Zr-96 0 0 \ No newline at end of file +9 12 1 H-1 0.0 0.0 +10 12 1 O-16 0.0 0.0 +11 12 1 B-10 0.0 0.0 +12 12 1 B-11 0.0 0.0 +13 12 1 Zr-90 0.0 0.0 +14 12 1 Zr-91 0.0 0.0 +15 12 1 Zr-92 0.0 0.0 +16 12 1 Zr-94 0.0 0.0 +17 12 1 Zr-96 0.0 0.0 +0 12 2 H-1 0.0 0.0 +1 12 2 O-16 0.0 0.0 +2 12 2 B-10 0.0 0.0 +3 12 2 B-11 0.0 0.0 +4 12 2 Zr-90 0.0 0.0 +5 12 2 Zr-91 0.0 0.0 +6 12 2 Zr-92 0.0 0.0 +7 12 2 Zr-94 0.0 0.0 +8 12 2 Zr-96 0.0 0.0 \ No newline at end of file From d735633519e5135d922cc8bb34d1b34ffec2a88e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 21 Mar 2016 10:45:09 -0500 Subject: [PATCH 4/5] Remove duplicate statements in calculate_urr_xs --- src/cross_section.F90 | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/cross_section.F90 b/src/cross_section.F90 index d0509deb8d..b2813bef0c 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -378,12 +378,6 @@ contains ! sample probability table using the cumulative distribution - ! determine interpolation factor on table - f = (E - urr % energy(i_energy)) / & - (urr % energy(i_energy + 1) - urr % energy(i_energy)) - - ! sample probability table using the cumulative distribution - ! Random numbers for xs calculation are sampled from a separated stream. ! This guarantees the randomness and, at the same time, makes sure we reuse ! random number for the same nuclide at different temperatures, therefore From c70f0a587823123caf1dd716897c2bbd10404197 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 21 Mar 2016 10:12:34 -0500 Subject: [PATCH 5/5] Fix spacing around % in ace module --- src/ace.F90 | 246 ++++++++++++++++++++++++++-------------------------- 1 file changed, 123 insertions(+), 123 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index e354f5866f..1d5f5f45b2 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -226,10 +226,10 @@ contains ! Show which nuclide results in lowest energy for neutron transport do i = 1, n_nuclides_total - if (nuclides(i)%energy(nuclides(i)%n_grid) == energy_max_neutron) then + if (nuclides(i) % energy(nuclides(i) % n_grid) == energy_max_neutron) then call write_message("Maximum neutron transport energy: " // & trim(to_str(energy_max_neutron)) // " MeV for " // & - trim(adjustl(nuclides(i)%name)), 6) + trim(adjustl(nuclides(i) % name)), 6) exit end if end do @@ -931,42 +931,42 @@ contains ! "one" angular distribution, it is repeated as many times as there are ! energy distributions for this reaction since the ! UncorrelatedAngleEnergy type holds one angle and energy distribution. - do k = 1, size(rxn%products(1)%distribution) - select type (aedist => rxn%products(1)%distribution(k)%obj) + do k = 1, size(rxn % products(1) % distribution) + select type (aedist => rxn % products(1) % distribution(k) % obj) type is (UncorrelatedAngleEnergy) ! allocate space for incoming energies and locations NE = int(XSS(JXS(9) + LOCB - 1)) - allocate(aedist%angle%energy(NE)) - allocate(aedist%angle%distribution(NE)) + allocate(aedist % angle % energy(NE)) + allocate(aedist % angle % distribution(NE)) allocate(LC(NE)) ! read incoming energy grid and location of nucs XSS_index = JXS(9) + LOCB - aedist%angle%energy(:) = get_real(NE) + aedist % angle % energy(:) = get_real(NE) LC(:) = get_int(NE) ! determine dize of data block do j = 1, NE if (LC(j) == 0) then ! isotropic - allocate(Uniform :: aedist%angle%distribution(j)%obj) - select type (adist => aedist%angle%distribution(j)%obj) + allocate(Uniform :: aedist % angle % distribution(j) % obj) + select type (adist => aedist % angle % distribution(j) % obj) type is (Uniform) - adist%a = -ONE - adist%b = ONE + adist % a = -ONE + adist % b = ONE end select elseif (LC(j) > 0) then ! 32 equiprobable bins - allocate(Equiprobable :: aedist%angle%distribution(j)%obj) - select type (adist => aedist%angle%distribution(j)%obj) + allocate(Equiprobable :: aedist % angle % distribution(j) % obj) + select type (adist => aedist % angle % distribution(j) % obj) type is (Equiprobable) - allocate(adist%x(33)) + allocate(adist % x(33)) end select elseif (LC(j) < 0) then ! tabular distribution - allocate(Tabular :: aedist%angle%distribution(j)%obj) + allocate(Tabular :: aedist % angle % distribution(j) % obj) end if end do @@ -975,9 +975,9 @@ contains ! on-the-fly do j = 1, NE XSS_index = JXS(9) + abs(LC(j)) - 1 - select type(adist => aedist%angle%distribution(j)%obj) + select type(adist => aedist % angle % distribution(j) % obj) type is (Equiprobable) - adist%x(:) = get_real(33) + adist % x(:) = get_real(33) type is (Tabular) ! determine interpolation and number of points interp = nint(XSS(XSS_index)) @@ -985,10 +985,10 @@ contains ! Get probability density data XSS_index = XSS_index + 2 - allocate(adist%x(NP), adist%p(NP), adist%c(NP)) - adist%x(:) = get_real(NP) - adist%p(:) = get_real(NP) - adist%c(:) = get_real(NP) + allocate(adist % x(NP), adist % p(NP), adist % c(NP)) + adist % x(:) = get_real(NP) + adist % p(:) = get_real(NP) + adist % c(:) = get_real(NP) end select end do deallocate(LC) @@ -1025,9 +1025,9 @@ contains end do ! Allocate space for distributions and probability of validity - associate (p => nuc%reactions(i + 1)%products(1)) - allocate(p%applicability(n)) - allocate(p%distribution(n)) + associate (p => nuc % reactions(i + 1) % products(1)) + allocate(p % applicability(n)) + allocate(p % distribution(n)) LNW = nint(XSS(JXS(10) + i - 1)) n = 0 @@ -1039,11 +1039,11 @@ contains IDAT = nint(XSS(JXS(11) + LNW + 1)) ! Read probability of law validity - call p%applicability(n)%from_ace(XSS, JXS(11) + LNW + 2) + call p % applicability(n) % from_ace(XSS, JXS(11) + LNW + 2) ! Read energy law data - call get_energy_dist(p%distribution(n)%obj, LAW, & - JXS(11), IDAT, nuc%awr, nuc%reactions(i + 1)%Q_value) + call get_energy_dist(p % distribution(n) % obj, LAW, & + JXS(11), IDAT, nuc % awr, nuc % reactions(i + 1) % Q_value) ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< ! Before the secondary distribution refactor, when the angle/energy @@ -1052,11 +1052,11 @@ contains ! distribution even when no angle distribution exists in the ACE file ! (isotropic is assumed). To preserve the RNG stream, we explicitly ! mark fission reactions so that we avoid the angle sampling. - if (any(nuc%reactions(i + 1)%MT == & + if (any(nuc % reactions(i + 1) % MT == & [N_FISSION, N_F, N_NF, N_2NF, N_3NF])) then - select type (aedist => p%distribution(n)%obj) + select type (aedist => p % distribution(n) % obj) type is (UncorrelatedAngleEnergy) - aedist%fission = .true. + aedist % fission = .true. end select end if ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -1110,8 +1110,8 @@ contains select case (law) case (1) - allocate(TabularEquiprobable :: aedist%energy) - select type (edist => aedist%energy) + allocate(TabularEquiprobable :: aedist % energy) + select type (edist => aedist % energy) type is (TabularEquiprobable) NR = nint(XSS(XSS_index)) NE = nint(XSS(XSS_index + 1 + 2*NR)) @@ -1119,33 +1119,33 @@ contains call fatal_error("Multiple interpolation regions not yet supported & &for tabular equiprobable energy distributions.") end if - edist%n_region = NR + edist % n_region = NR ! Read incoming energies for which outgoing energies are tabulated - allocate(edist%energy_in(NE)) + allocate(edist % energy_in(NE)) XSS_index = XSS_index + 2 + 2*NR - edist%energy_in(:) = get_real(NE) + edist % energy_in(:) = get_real(NE) ! Read outgoing energy tables NP = nint(XSS(XSS_index)) - allocate(edist%energy_out(NP, NE)) + allocate(edist % energy_out(NP, NE)) XSS_index = XSS_index + 1 do i = 1, NE - edist%energy_out(:, i) = get_real(NP) + edist % energy_out(:, i) = get_real(NP) end do end select case (3) - allocate(LevelInelastic :: aedist%energy) - select type (edist => aedist%energy) + allocate(LevelInelastic :: aedist % energy) + select type (edist => aedist % energy) type is (LevelInelastic) - edist%threshold = XSS(XSS_index) - edist%mass_ratio = XSS(XSS_index + 1) + edist % threshold = XSS(XSS_index) + edist % mass_ratio = XSS(XSS_index + 1) end select case (4) - allocate(ContinuousTabular :: aedist%energy) - select type (edist => aedist%energy) + allocate(ContinuousTabular :: aedist % energy) + select type (edist => aedist % energy) type is (ContinuousTabular) NR = nint(XSS(XSS_index)) XSS_index = XSS_index + 1 @@ -1153,84 +1153,84 @@ contains call fatal_error("Multiple interpolation regions not yet supported & &for continuous tabular energy distributions.") end if - edist%n_region = NR + edist % n_region = NR ! Read breakpoints and interpolation parameters if (NR > 0) then - allocate(edist%breakpoints(NR)) - allocate(edist%interpolation(NR)) - edist%breakpoints(:) = get_int(NR) - edist%interpolation(:) = get_int(NR) + allocate(edist % breakpoints(NR)) + allocate(edist % interpolation(NR)) + edist % breakpoints(:) = get_int(NR) + edist % interpolation(:) = get_int(NR) end if ! Read incoming energies for which outgoing energies are tabulated and ! locators NE = nint(XSS(XSS_index)) XSS_index = XSS_index + 1 - allocate(edist%energy(NE)) + allocate(edist % energy(NE)) allocate(L(NE)) - edist%energy(:) = get_real(NE) + edist % energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(edist%distribution(NE)) + allocate(edist % distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - edist%distribution(i)%interpolation = mod(interp, 10) - edist%distribution(i)%n_discrete = (interp - & - edist%distribution(i)%interpolation)/10 + edist % distribution(i) % interpolation = mod(interp, 10) + edist % distribution(i) % n_discrete = (interp - & + edist % distribution(i) % interpolation)/10 ! check for discrete lines present - if (edist%distribution(i)%n_discrete > 0) then + if (edist % distribution(i) % n_discrete > 0) then call fatal_error("Discrete lines in continuous tabular & &distribution not yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(edist%distribution(i)%e_out(NP)) - allocate(edist%distribution(i)%p(NP)) - allocate(edist%distribution(i)%c(NP)) + allocate(edist % distribution(i) % e_out(NP)) + allocate(edist % distribution(i) % p(NP)) + allocate(edist % distribution(i) % c(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - edist%distribution(i)%e_out(:) = get_real(NP) - edist%distribution(i)%p(:) = get_real(NP) - edist%distribution(i)%c(:) = get_real(NP) + edist % distribution(i) % e_out(:) = get_real(NP) + edist % distribution(i) % p(:) = get_real(NP) + edist % distribution(i) % c(:) = get_real(NP) end do deallocate(L) end select case (7) - allocate(MaxwellEnergy :: aedist%energy) - select type (edist => aedist%energy) + allocate(MaxwellEnergy :: aedist % energy) + select type (edist => aedist % energy) type is (MaxwellEnergy) - call edist%theta%from_ace(XSS, XSS_index) - edist%u = XSS(XSS_index + 2 + 2*edist%theta%n_regions + & - 2*edist%theta%n_pairs) + call edist % theta % from_ace(XSS, XSS_index) + edist % u = XSS(XSS_index + 2 + 2*edist % theta % n_regions + & + 2*edist % theta % n_pairs) end select case (9) - allocate(Evaporation :: aedist%energy) - select type(edist => aedist%energy) + allocate(Evaporation :: aedist % energy) + select type(edist => aedist % energy) type is (Evaporation) - call edist%theta%from_ace(XSS, XSS_index) - edist%u = XSS(XSS_index + 2 + 2*edist%theta%n_regions + & - 2*edist%theta%n_pairs) + call edist % theta % from_ace(XSS, XSS_index) + edist % u = XSS(XSS_index + 2 + 2*edist % theta % n_regions + & + 2*edist % theta % n_pairs) end select case (11) - allocate(WattEnergy :: aedist%energy) - select type(edist => aedist%energy) + allocate(WattEnergy :: aedist % energy) + select type(edist => aedist % energy) type is (WattEnergy) - call edist%a%from_ace(XSS, XSS_index) - XSS_index = XSS_index + 2 + 2*edist%a%n_regions + 2*edist%a%n_pairs - call edist%b%from_ace(XSS, XSS_index) - XSS_index = XSS_index + 2 + 2*edist%b%n_regions + 2*edist%b%n_pairs - edist%u = XSS(XSS_index) + call edist % a % from_ace(XSS, XSS_index) + XSS_index = XSS_index + 2 + 2*edist % a % n_regions + 2*edist % a % n_pairs + call edist % b % from_ace(XSS, XSS_index) + XSS_index = XSS_index + 2 + 2*edist % b % n_regions + 2*edist % b % n_pairs + edist % u = XSS(XSS_index) end select end select @@ -1245,45 +1245,45 @@ contains call fatal_error("Multiple interpolation regions not yet supported & &for Kalbach-Mann energy distributions.") end if - aedist%n_region = NR + aedist % n_region = NR ! Read incoming energies for which outgoing energies are tabulated and locators - allocate(aedist%energy(NE)) + allocate(aedist % energy(NE)) allocate(L(NE)) XSS_index = XSS_index + 2 + 2*NR - aedist%energy(:) = get_real(NE) + aedist % energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(aedist%distribution(NE)) + allocate(aedist % distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - aedist%distribution(i)%interpolation = mod(interp, 10) - aedist%distribution(i)%n_discrete = (interp - aedist%distribution(i)%interpolation)/10 + aedist % distribution(i) % interpolation = mod(interp, 10) + aedist % distribution(i) % n_discrete = (interp - aedist % distribution(i) % interpolation)/10 ! check for discrete lines present - if (aedist%distribution(i)%n_discrete > 0) then + if (aedist % distribution(i) % n_discrete > 0) then call fatal_error("Discrete lines in Kalbach-Mann distribution not & &yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(aedist%distribution(i)%e_out(NP)) - allocate(aedist%distribution(i)%p(NP)) - allocate(aedist%distribution(i)%c(NP)) - allocate(aedist%distribution(i)%r(NP)) - allocate(aedist%distribution(i)%a(NP)) + allocate(aedist % distribution(i) % e_out(NP)) + allocate(aedist % distribution(i) % p(NP)) + allocate(aedist % distribution(i) % c(NP)) + allocate(aedist % distribution(i) % r(NP)) + allocate(aedist % distribution(i) % a(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - aedist%distribution(i)%e_out(:) = get_real(NP) - aedist%distribution(i)%p(:) = get_real(NP) - aedist%distribution(i)%c(:) = get_real(NP) - aedist%distribution(i)%r(:) = get_real(NP) - aedist%distribution(i)%a(:) = get_real(NP) + aedist % distribution(i) % e_out(:) = get_real(NP) + aedist % distribution(i) % p(:) = get_real(NP) + aedist % distribution(i) % c(:) = get_real(NP) + aedist % distribution(i) % r(:) = get_real(NP) + aedist % distribution(i) % a(:) = get_real(NP) end do deallocate(L) @@ -1298,67 +1298,67 @@ contains call fatal_error("Multiple interpolation regions not yet supported & &for correlated angle-energy distributions.") end if - aedist%n_region = NR + aedist % n_region = NR ! Read incoming energies for which outgoing energies are tabulated and ! locators - allocate(aedist%energy(NE)) + allocate(aedist % energy(NE)) allocate(L(NE)) XSS_index = XSS_index + 2 + 2*NR - aedist%energy(:) = get_real(NE) + aedist % energy(:) = get_real(NE) L(:) = get_int(NE) ! Read outgoing energy tables - allocate(aedist%distribution(NE)) + allocate(aedist % distribution(NE)) do i = 1, NE ! Determine interpolation and number of discrete points XSS_index = LDIS + L(i) - 1 interp = nint(XSS(XSS_index)) - aedist%distribution(i)%interpolation = mod(interp, 10) - aedist%distribution(i)%n_discrete = (interp - aedist%distribution(i)%interpolation)/10 + aedist % distribution(i) % interpolation = mod(interp, 10) + aedist % distribution(i) % n_discrete = (interp - aedist % distribution(i) % interpolation)/10 ! check for discrete lines present - if (aedist%distribution(i)%n_discrete > 0) then + if (aedist % distribution(i) % n_discrete > 0) then call fatal_error("Discrete lines in correlated angle-energy & &distribution not yet supported") end if ! Determine number of points and allocate space NP = nint(XSS(XSS_index + 1)) - allocate(aedist%distribution(i)%e_out(NP)) - allocate(aedist%distribution(i)%p(NP)) - allocate(aedist%distribution(i)%c(NP)) + allocate(aedist % distribution(i) % e_out(NP)) + allocate(aedist % distribution(i) % p(NP)) + allocate(aedist % distribution(i) % c(NP)) allocate(LC(NP)) ! Read tabular PDF for outgoing energy XSS_index = XSS_index + 2 - aedist%distribution(i)%e_out(:) = get_real(NP) - aedist%distribution(i)%p(:) = get_real(NP) - aedist%distribution(i)%c(:) = get_real(NP) + aedist % distribution(i) % e_out(:) = get_real(NP) + aedist % distribution(i) % p(:) = get_real(NP) + aedist % distribution(i) % c(:) = get_real(NP) LC(:) = get_int(NP) ! allocate angular distributions for each incoming/outgoing energy - allocate(aedist%distribution(i)%angle(NP)) + allocate(aedist % distribution(i) % angle(NP)) do j = 1, NP if (LC(j) == 0) then ! isotropic - allocate(Uniform :: aedist%distribution(i)%angle(j)%obj) - select type (adist => aedist%distribution(i)%angle(j)%obj) + allocate(Uniform :: aedist % distribution(i) % angle(j) % obj) + select type (adist => aedist % distribution(i) % angle(j) % obj) type is (Uniform) - adist%a = -ONE - adist%b = ONE + adist % a = -ONE + adist % b = ONE end select elseif (LC(j) > 0) then ! tabular distribution - allocate(Tabular :: aedist%distribution(i)%angle(j)%obj) + allocate(Tabular :: aedist % distribution(i) % angle(j) % obj) end if end do ! read angular distributions do j = 1, NP XSS_index = LDIS + abs(LC(j)) - 1 - select type(adist => aedist%distribution(i)%angle(j)%obj) + select type(adist => aedist % distribution(i) % angle(j) % obj) type is (Tabular) ! determine interpolation and number of points interp = nint(XSS(XSS_index)) @@ -1366,10 +1366,10 @@ contains ! Get probability density data XSS_index = XSS_index + 2 - allocate(adist%x(NP), adist%p(NP), adist%c(NP)) - adist%x(:) = get_real(NP) - adist%p(:) = get_real(NP) - adist%c(:) = get_real(NP) + allocate(adist % x(NP), adist % p(NP), adist % c(NP)) + adist % x(:) = get_real(NP) + adist % p(:) = get_real(NP) + adist % c(:) = get_real(NP) end select end do deallocate(LC) @@ -1382,10 +1382,10 @@ contains ! ======================================================================== ! N-BODY PHASE SPACE DISTRIBUTION - aedist%n_bodies = int(XSS(XSS_index)) - aedist%mass_ratio = XSS(XSS_index + 1) - aedist%A = awr - aedist%Q = Q_value + aedist % n_bodies = int(XSS(XSS_index)) + aedist % mass_ratio = XSS(XSS_index + 1) + aedist % A = awr + aedist % Q = Q_value end select end subroutine get_energy_dist