From ed5480173a5bdc54215510775ec2dc9fc2e433a4 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 26 Aug 2014 01:15:01 -0400 Subject: [PATCH] Expand list of reaction MTs that are checked. --- src/ace.F90 | 23 ++++++++-------- src/constants.F90 | 70 +++++++++++++++-------------------------------- src/endf.F90 | 26 ++++++++++++++++-- 3 files changed, 57 insertions(+), 62 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index cc274d6790..9c088693de 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -3,7 +3,7 @@ module ace use ace_header, only: Nuclide, Reaction, SAlphaBeta, XsListing, & DistEnergy use constants - use endf, only: reaction_name, is_fission + use endf, only: reaction_name, is_fission, is_disappearance use error, only: fatal_error, warning use fission, only: nu_total use global @@ -696,25 +696,24 @@ contains IE = rxn % threshold NE = size(rxn % sigma) - ! Skip redundant reactions -- this includes total inelastic level - ! scattering, gas production cross sections (MT=200+), and (n,p), (n,d), - ! etc. reactions leaving the nucleus in an excited state + ! Skip total inelastic level scattering, gas production cross sections + ! (MT=200+), etc. if (rxn % MT == N_LEVEL) cycle - if (rxn % MT > 200 .and. rxn % MT < 600) cycle + if (rxn % MT > N_5N2P .and. rxn % MT < N_P0) cycle ! Skip level cross sections if total is available - if (rxn % MT >= 600 .and. rxn % MT < 650 .and. MTs % contains(N_P)) cycle - if (rxn % MT >= 650 .and. rxn % MT < 700 .and. MTs % contains(N_D)) cycle - if (rxn % MT >= 700 .and. rxn % MT < 750 .and. MTs % contains(N_T)) cycle - if (rxn % MT >= 750 .and. rxn % MT < 800 .and. MTs % contains(N_3HE)) cycle - if (rxn % MT >= 800 .and. rxn % MT < 850 .and. MTs % contains(N_A)) cycle + if (rxn % MT >= N_P0 .and. rxn % MT <= N_PC .and. MTs % contains(N_P)) cycle + if (rxn % MT >= N_D0 .and. rxn % MT <= N_DC .and. MTs % contains(N_D)) cycle + if (rxn % MT >= N_T0 .and. rxn % MT <= N_TC .and. MTs % contains(N_T)) cycle + if (rxn % MT >= N_3HE0 .and. rxn % MT <= N_3HEC .and. MTs % contains(N_3HE)) cycle + if (rxn % MT >= N_A0 .and. rxn % MT <= N_AC .and. MTs % contains(N_A)) cycle + if (rxn % MT >= N_2N0 .and. rxn % MT <= N_2NC .and. MTs % contains(N_2N)) cycle ! Add contribution to total cross section nuc % total(IE:IE+NE-1) = nuc % total(IE:IE+NE-1) + rxn % sigma ! Add contribution to absorption cross section - if ((rxn % MT >= N_GAMMA .and. rxn % MT <= N_DA) .or. & - (rxn % MT >= 600 .and. rxn % MT < 850)) then + if (is_disappearance(rxn % MT)) then nuc % absorption(IE:IE+NE-1) = nuc % absorption(IE:IE+NE-1) + rxn % sigma end if diff --git a/src/constants.F90 b/src/constants.F90 index 94edd9d2a2..75814049db 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -166,54 +166,28 @@ module constants ! Reaction types integer, parameter :: & - TOTAL_XS = 1, & - ELASTIC = 2, & - N_LEVEL = 4, & - MISC = 5, & - N_2ND = 11, & - N_2N = 16, & - N_3N = 17, & - N_FISSION = 18, & - N_F = 19, & - N_NF = 20, & - N_2NF = 21, & - N_NA = 22, & - N_N3A = 23, & - N_2NA = 24, & - N_3NA = 25, & - N_NP = 28, & - N_N2A = 29, & - N_2N2A = 30, & - N_ND = 32, & - N_NT = 33, & - N_N3HE = 34, & - N_ND2A = 35, & - N_NT2A = 36, & - N_4N = 37, & - N_3NF = 38, & - N_2NP = 41, & - N_3NP = 42, & - N_N2P = 44, & - N_NPA = 45, & - N_N1 = 51, & - N_N40 = 90, & - N_NC = 91, & - N_DISAPPEAR = 101, & - N_GAMMA = 102, & - N_P = 103, & - N_D = 104, & - N_T = 105, & - N_3HE = 106, & - N_A = 107, & - N_2A = 108, & - N_3A = 109, & - N_2P = 111, & - N_PA = 112, & - N_T2A = 113, & - N_D2A = 114, & - N_PD = 115, & - N_PT = 116, & - N_DA = 117 + TOTAL_XS = 1, ELASTIC = 2, N_LEVEL = 4, MISC = 5, N_2ND = 11, & + N_2N = 16, N_3N = 17, N_FISSION = 18, N_F = 19, N_NF = 20, & + N_2NF = 21, N_NA = 22, N_N3A = 23, N_2NA = 24, N_3NA = 25, & + N_NP = 28, N_N2A = 29, N_2N2A = 30, N_ND = 32, N_NT = 33, & + N_N3HE = 34, N_ND2A = 35, N_NT2A = 36, N_4N = 37, N_3NF = 38, & + N_2NP = 41, N_3NP = 42, N_N2P = 44, N_NPA = 45, N_N1 = 51, & + N_N40 = 90, N_NC = 91, N_DISAPPEAR = 101, N_GAMMA = 102, N_P = 103, & + N_D = 104, N_T = 105, N_3HE = 106, N_A = 107, N_2A = 108, & + N_3A = 109, N_2P = 111, N_PA = 112, N_T2A = 113, N_D2A = 114, & + N_PD = 115, N_PT = 116, N_DA = 117, N_5N = 152, N_6N = 153, & + N_2NT = 154, N_TA = 155, N_4NP = 156, N_3ND = 157, N_NDA = 158, & + N_2NPA = 159, N_7N = 160, N_8N = 161, N_5NP = 162, N_6NP = 163, & + N_7NP = 164, N_4NA = 165, N_5NA = 166, N_6NA = 167, N_7NA = 168, & + N_4ND = 169, N_5ND = 170, N_6ND = 171, N_3NT = 172, N_4NT = 173, & + N_5NT = 174, N_6NT = 175, N_2N3HE = 176, N_3N3HE = 177, N_4N3HE = 178, & + N_3N2P = 179, N_3N3A = 180, N_3NPA = 181, N_DT = 182, N_NPD = 183, & + N_NPT = 184, N_NDT = 185, N_NP3HE = 186, N_ND3HE = 187, N_NT3HE = 188, & + N_NTA = 189, N_2N2P = 190, N_P3HE = 191, N_D3HE = 192, N_3HEA = 193, & + N_4N2P = 194, N_4N2A = 195, N_4NPA = 196, N_3P = 197, N_N3P = 198, & + N_3N2PA = 199, N_5N2P = 200, N_P0 = 600, N_PC = 649, N_D0 = 650, & + N_DC = 699, N_T0 = 700, N_TC = 749, N_3HE0 = 750, N_3HEC = 799, & + N_A0 = 800, N_AC = 849, N_2N0 = 875, N_2NC = 891 ! ACE table types integer, parameter :: & diff --git a/src/endf.F90 b/src/endf.F90 index 163246ff58..924e125575 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -159,7 +159,7 @@ contains integer, intent(in) :: MT logical :: fission_event - if (MT == N_FISSION .or. MT == N_F .or. MT == N_NF .or. MT == N_2NF & + if (MT == N_FISSION .or. MT == N_F .or. MT == N_NF .or. MT == N_2NF & .or. MT == N_3NF) then fission_event = .true. else @@ -168,6 +168,28 @@ contains end function is_fission +!=============================================================================== +! IS_DISAPPEARANCE determines if a given MT number is that of a disappearance +! reaction, i.e. a reaction with no neutron in the exit channel +!=============================================================================== + + function is_disappearance(MT) result(dis) + + integer, intent(in) :: MT + logical :: dis + + if (MT >= N_GAMMA .and. MT <= N_DA) then + dis = .true. + elseif (MT >= N_P0 .and. MT <= N_AC) then + dis = .true. + elseif (any(MT == [N_TA, N_DT, N_P3HE, N_D3HE, N_3HEA, N_3P])) then + dis = .true. + else + dis = .false. + end if + + end function is_disappearance + !=============================================================================== ! IS_SCATTER determines if a given MT number is that of a scattering event !=============================================================================== @@ -178,7 +200,7 @@ contains logical :: scatter_event if (MT < 100) then - if (MT == N_FISSION .or. MT == N_F .or. MT == N_NF .or. MT == N_2NF & + if (MT == N_FISSION .or. MT == N_F .or. MT == N_NF .or. MT == N_2NF & .or. MT == N_3NF) then scatter_event = .false. else