diff --git a/src/constants.F90 b/src/constants.F90 index fa792717b0..16d266a5a1 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -318,7 +318,7 @@ module constants EVENT_ABSORB = 2 ! Tally score type - integer, parameter :: N_SCORE_TYPES = 36 + integer, parameter :: N_SCORE_TYPES = 24 integer, parameter :: & SCORE_FLUX = -1, & ! flux SCORE_TOTAL = -2, & ! total reaction rate @@ -341,21 +341,9 @@ module constants SCORE_DELAYED_NU_FISSION = -19, & ! delayed neutron production rate SCORE_PROMPT_NU_FISSION = -20, & ! prompt neutron production rate SCORE_INVERSE_VELOCITY = -21, & ! flux-weighted inverse velocity - SCORE_HEATING = -22, & ! prompt fission Q-value - SCORE_FISS_Q_RECOV = -23, & ! recoverable fission Q-value - SCORE_FISS_Q_PROMPT = -24, & ! prompt fission Q-value - SCORE_FISS_Q_PROMPT_NEUTRONS = -25, & ! fission prompt neutrons Q-value - SCORE_FISS_Q_DELAYED_NEUTRONS = -26, & ! fission delayed neutrons Q-value - SCORE_FISS_Q_FRAGMENTS = -27, & ! fission fragments Q-value - SCORE_FISS_Q_BETAS = -28, & ! fission betas Q-value - SCORE_FISS_Q_PROMPT_PHOTONS = -29, & ! fission prompt photons Q-value - SCORE_FISS_Q_DELAYED_PHOTONS = -30, & ! fission delayed phtons Q-value - SCORE_FISS_Q_NEUTRINOS = -31, & ! fission neutrinos Q-value - SCORE_Q_PHOTONS = -32, & ! photon energy deposition - SCORE_Q_ELECTRONS = -33, & ! electron energy deposition - SCORE_Q_POSITRONS = -34, & ! positron energy deposition - SCORE_Q_ELASTIC = -35, & ! elastic scattering energy deposition - SCORE_DECAY_RATE = -36 ! delayed neutron precursor decay rate + SCORE_FISS_Q_RECOV = -22, & ! recoverable fission Q-value + SCORE_FISS_Q_PROMPT = -23, & ! prompt fission Q-value + SCORE_DECAY_RATE = -24 ! delayed neutron precursor decay rate ! Maximum scattering order supported integer, parameter :: MAX_ANG_ORDER = 10 diff --git a/src/endf.F90 b/src/endf.F90 index f67b231c11..f3c6b70899 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -66,24 +66,6 @@ contains string = "fission-q-prompt" case (SCORE_FISS_Q_RECOV) string = "fission-q-recoverable" - case (SCORE_FISS_Q_FRAGMENTS) - string = "fission-q-fragments" - case (SCORE_FISS_Q_BETAS) - string = "fission-q-betas" - case (SCORE_FISS_Q_PROMPT_PHOTONS) - string = "fission-q-prompt-photons" - case (SCORE_FISS_Q_DELAYED_PHOTONS) - string = "fission-q-delayed-photons" - case (SCORE_FISS_Q_NEUTRINOS) - string = "fission-q-neutrinos" - case (SCORE_Q_ELASTIC) - string = "q-elastic" - case (SCORE_Q_PHOTONS) - string = "q-photons" - case (SCORE_Q_ELECTRONS) - string = "q-electrons" - case (SCORE_Q_POSITRONS) - string = "q-positrons" ! Normal ENDF-based reactions case (TOTAL_XS) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 6f3c9be71a..5273a21807 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3883,32 +3883,6 @@ contains t % score_bins(j) = SCORE_FISS_Q_PROMPT case ('fission-q-recoverable') t % score_bins(j) = SCORE_FISS_Q_RECOV - case ('fission-q-prompt-neutrons') - t % score_bins(j) = SCORE_FISS_Q_PROMPT_NEUTRONS - case ('fission-q-delayed-neutrons') - t % score_bins(j) = SCORE_FISS_Q_DELAYED_NEUTRONS - case ('fission-q-fragments') - t % score_bins(j) = SCORE_FISS_Q_FRAGMENTS - case ('fission-q-betas') - t % score_bins(j) = SCORE_FISS_Q_BETAS - case ('fission-q-prompt-photons') - t % score_bins(j) = SCORE_FISS_Q_PROMPT_PHOTONS - case ('fission-q-delayed-photons') - t % score_bins(j) = SCORE_FISS_Q_DELAYED_PHOTONS - case ('fission-q-neutrinos') - t % score_bins(j) = SCORE_FISS_Q_NEUTRINOS - case ('q-electrons') - t % score_bins(j) = SCORE_Q_ELECTRONS - t % estimator = ESTIMATOR_ANALOG - case ('q-positrons') - t % score_bins(j) = SCORE_Q_POSITRONS - t % estimator = ESTIMATOR_ANALOG - case ('q-elastic') - t % score_bins(j) = SCORE_Q_ELASTIC - t % estimator = ESTIMATOR_ANALOG - case ('heating') - t % score_bins(j) = SCORE_HEATING - t % estimator = ESTIMATOR_ANALOG case ('current') t % score_bins(j) = SCORE_CURRENT t % type = TALLY_SURFACE_CURRENT diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 276517c4fb..ab937809ee 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -92,15 +92,8 @@ module nuclide_header ! array; used at tally-time ! Fission energy release - class(Function1D), allocatable :: fission_q_prompt ! fragments and prompt neutrons, gammas - class(Function1D), allocatable :: fission_q_recov ! fragments, neutrons, gammas, betas - class(Function1D), allocatable :: fission_q_fragments ! fragments - class(Function1D), allocatable :: fission_q_betas ! betas - class(Function1D), allocatable :: fission_q_neutrinos ! neutrinos - class(Function1D), allocatable :: fission_q_delayed_neutrons ! delayed neutrons - class(Function1D), allocatable :: fission_q_prompt_neutrons ! prompt neutrons - class(Function1D), allocatable :: fission_q_delayed_photons ! delayed photons - class(Function1D), allocatable :: fission_q_prompt_photons ! prompt photons + class(Function1D), allocatable :: fission_q_prompt ! fragments and prompt neutrons, gammas + class(Function1D), allocatable :: fission_q_recov ! fragments, neutrons, gammas, betas contains procedure :: clear => nuclide_clear @@ -482,111 +475,6 @@ contains call fatal_error('Unrecognized fission recoverable energy release format.') end if - ! Q-FRAGMENTS - fer_dset = open_dataset(fer_group, 'fragments') - call read_attribute(temp_str, fer_dset, 'type') - if (temp_str == 'Polynomial') then - allocate(Polynomial :: this % fission_q_fragments) - call this % fission_q_fragments % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else if (temp_str == 'Tabulated1D') then - allocate(Tabulated1D :: this % fission_q_fragments) - call this % fission_q_fragments % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else - call fatal_error('Unrecognized fission fragments energy release format.') - end if - - ! Q-BETAS - fer_dset = open_dataset(fer_group, 'betas') - call read_attribute(temp_str, fer_dset, 'type') - if (temp_str == 'Polynomial') then - allocate(Polynomial :: this % fission_q_betas) - call this % fission_q_betas % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else if (temp_str == 'Tabulated1D') then - allocate(Tabulated1D :: this % fission_q_betas) - call this % fission_q_betas % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else - call fatal_error('Unrecognized fission betas energy release format.') - end if - - ! Q-NEUTRINOS - fer_dset = open_dataset(fer_group, 'neutrinos') - call read_attribute(temp_str, fer_dset, 'type') - if (temp_str == 'Polynomial') then - allocate(Polynomial :: this % fission_q_neutrinos) - call this % fission_q_neutrinos % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else if (temp_str == 'Tabulated1D') then - allocate(Tabulated1D :: this % fission_q_neutrinos) - call this % fission_q_neutrinos % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else - call fatal_error('Unrecognized fission neutrinos energy release format.') - end if - - ! Q-DELAYED-NEUTRONS - fer_dset = open_dataset(fer_group, 'delayed_neutrons') - call read_attribute(temp_str, fer_dset, 'type') - if (temp_str == 'Polynomial') then - allocate(Polynomial :: this % fission_q_delayed_neutrons) - call this % fission_q_delayed_neutrons % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else if (temp_str == 'Tabulated1D') then - allocate(Tabulated1D :: this % fission_q_delayed_neutrons) - call this % fission_q_delayed_neutrons % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else - call fatal_error('Unrecognized fission delayed neutron energy release format.') - end if - - ! Q-PROMPT-NEUTRONS - fer_dset = open_dataset(fer_group, 'prompt_neutrons') - call read_attribute(temp_str, fer_dset, 'type') - if (temp_str == 'Polynomial') then - allocate(Polynomial :: this % fission_q_prompt_neutrons) - call this % fission_q_prompt_neutrons % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else if (temp_str == 'Tabulated1D') then - allocate(Tabulated1D :: this % fission_q_prompt_neutrons) - call this % fission_q_prompt_neutrons % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else - call fatal_error('Unrecognized fission energy release format.') - end if - - ! Q-DELAYED-PHOTONS - fer_dset = open_dataset(fer_group, 'delayed_photons') - call read_attribute(temp_str, fer_dset, 'type') - if (temp_str == 'Polynomial') then - allocate(Polynomial :: this % fission_q_delayed_photons) - call this % fission_q_delayed_photons % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else if (temp_str == 'Tabulated1D') then - allocate(Tabulated1D :: this % fission_q_delayed_photons) - call this % fission_q_delayed_photons % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else - call fatal_error('Unrecognized fission delayed photon energy release format.') - end if - - ! Q-PROMPT-PHOTONS - fer_dset = open_dataset(fer_group, 'prompt_photons') - call read_attribute(temp_str, fer_dset, 'type') - if (temp_str == 'Polynomial') then - allocate(Polynomial :: this % fission_q_prompt_photons) - call this % fission_q_prompt_photons % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else if (temp_str == 'Tabulated1D') then - allocate(Tabulated1D :: this % fission_q_prompt_photons) - call this % fission_q_prompt_photons % from_hdf5(fer_dset) - call close_dataset(fer_dset) - else - call fatal_error('Unrecognized fission prompt photon energy release format.') - end if - call close_group(fer_group) end if diff --git a/src/output.F90 b/src/output.F90 index 7acd303fda..828af717d8 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -751,18 +751,6 @@ contains score_names(abs(SCORE_INVERSE_VELOCITY)) = "Flux-Weighted Inverse Velocity" score_names(abs(SCORE_FISS_Q_PROMPT)) = "Prompt fission power" score_names(abs(SCORE_FISS_Q_RECOV)) = "Recoverable fission power" - score_names(abs(SCORE_FISS_Q_PROMPT_NEUTRONS)) = "Prompt neutron power" - score_names(abs(SCORE_FISS_Q_DELAYED_NEUTRONS)) = "Delayed neutron power" - score_names(abs(SCORE_FISS_Q_FRAGMENTS)) = "Fission fragment power" - score_names(abs(SCORE_FISS_Q_BETAS)) = "Fission betas power" - score_names(abs(SCORE_FISS_Q_PROMPT_PHOTONS)) = "Prompt photon power" - score_names(abs(SCORE_FISS_Q_DELAYED_PHOTONS)) = "Delayed photon power" - score_names(abs(SCORE_FISS_Q_NEUTRINOS)) = "Fission neutrino power" - score_names(abs(SCORE_Q_PHOTONS)) = "Photon power" - score_names(abs(SCORE_Q_ELECTRONS)) = "Electron power" - score_names(abs(SCORE_Q_POSITRONS)) = "Positron power" - score_names(abs(SCORE_Q_ELASTIC)) = "Elastic scattering power" - score_names(abs(SCORE_HEATING)) = "Heating power" ! Create filename for tally output filename = trim(path_output) // "tallies.out" diff --git a/src/physics.F90 b/src/physics.F90 index 9a07764152..6923a5386a 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -206,11 +206,6 @@ contains prob = prob + micro_photon_xs(i_element) % incoherent if (prob > cutoff) then call compton_scatter(elm, alpha, alpha_out, mu, .true.) - - ! Create secondary electron - - - p % E = alpha_out*MASS_ELECTRON p % coord(1) % uvw = rotate_angle(p % coord(1) % uvw, mu) p % event_MT = INCOHERENT diff --git a/src/tally.F90 b/src/tally.F90 index e26e18f169..3d7ee2cb80 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1076,10 +1076,7 @@ contains end if end if - case (SCORE_FISS_Q_PROMPT, SCORE_FISS_Q_RECOV, SCORE_FISS_Q_FRAGMENTS, & - SCORE_FISS_Q_PROMPT_NEUTRONS, SCORE_FISS_Q_DELAYED_NEUTRONS, & - SCORE_FISS_Q_PROMPT_PHOTONS, SCORE_FISS_Q_DELAYED_PHOTONS, & - SCORE_FISS_Q_NEUTRINOS, SCORE_FISS_Q_BETAS) + case (SCORE_FISS_Q_PROMPT, SCORE_FISS_Q_RECOV) if (material_xs % absorption == ZERO) cycle SCORE_LOOP @@ -1097,20 +1094,6 @@ contains xs = nuc % fission_q_prompt % evaluate(p % last_E) else if (score_bin == SCORE_FISS_Q_RECOV) then xs = nuc % fission_q_recov % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_FRAGMENTS) then - xs = nuc % fission_q_fragments % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_PROMPT_NEUTRONS) then - xs = nuc % fission_q_prompt_neutrons % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_DELAYED_NEUTRONS) then - xs = nuc % fission_q_delayed_neutrons % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_PROMPT_PHOTONS) then - xs = nuc % fission_q_prompt_photons % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_DELAYED_PHOTONS) then - xs = nuc % fission_q_delayed_photons % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_NEUTRINOS) then - xs = nuc % fission_q_neutrinos % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_BETAS) then - xs = nuc % fission_q_betas % evaluate(p % last_E) end if score = p % absorb_wgt * xs * flux & @@ -1132,20 +1115,6 @@ contains xs = nuc % fission_q_prompt % evaluate(p % last_E) else if (score_bin == SCORE_FISS_Q_RECOV) then xs = nuc % fission_q_recov % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_FRAGMENTS) then - xs = nuc % fission_q_fragments % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_PROMPT_NEUTRONS) then - xs = nuc % fission_q_prompt_neutrons % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_DELAYED_NEUTRONS) then - xs = nuc % fission_q_delayed_neutrons % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_PROMPT_PHOTONS) then - xs = nuc % fission_q_prompt_photons % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_DELAYED_PHOTONS) then - xs = nuc % fission_q_delayed_photons % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_NEUTRINOS) then - xs = nuc % fission_q_neutrinos % evaluate(p % last_E) - else if (score_bin == SCORE_FISS_Q_BETAS) then - xs = nuc % fission_q_betas % evaluate(p % last_E) end if score = p % last_wgt * xs * flux & @@ -1170,20 +1139,6 @@ contains xs = nuc % fission_q_prompt % evaluate(E) else if (score_bin == SCORE_FISS_Q_RECOV) then xs = nuc % fission_q_recov % evaluate(E) - else if (score_bin == SCORE_FISS_Q_FRAGMENTS) then - xs = nuc % fission_q_fragments % evaluate(E) - else if (score_bin == SCORE_FISS_Q_PROMPT_NEUTRONS) then - xs = nuc % fission_q_prompt_neutrons % evaluate(E) - else if (score_bin == SCORE_FISS_Q_DELAYED_NEUTRONS) then - xs = nuc % fission_q_delayed_neutrons % evaluate(E) - else if (score_bin == SCORE_FISS_Q_PROMPT_PHOTONS) then - xs = nuc % fission_q_prompt_photons % evaluate(E) - else if (score_bin == SCORE_FISS_Q_DELAYED_PHOTONS) then - xs = nuc % fission_q_delayed_photons % evaluate(E) - else if (score_bin == SCORE_FISS_Q_NEUTRINOS) then - xs = nuc % fission_q_neutrinos % evaluate(E) - else if (score_bin == SCORE_FISS_Q_BETAS) then - xs = nuc % fission_q_betas % evaluate(E) end if score = micro_xs(i_nuclide) % fission * atom_density * flux * xs @@ -1202,20 +1157,6 @@ contains xs = nuc % fission_q_prompt % evaluate(E) else if (score_bin == SCORE_FISS_Q_RECOV) then xs = nuc % fission_q_recov % evaluate(E) - else if (score_bin == SCORE_FISS_Q_FRAGMENTS) then - xs = nuc % fission_q_fragments % evaluate(E) - else if (score_bin == SCORE_FISS_Q_PROMPT_NEUTRONS) then - xs = nuc % fission_q_prompt_neutrons % evaluate(E) - else if (score_bin == SCORE_FISS_Q_DELAYED_NEUTRONS) then - xs = nuc % fission_q_delayed_neutrons % evaluate(E) - else if (score_bin == SCORE_FISS_Q_PROMPT_PHOTONS) then - xs = nuc % fission_q_prompt_photons % evaluate(E) - else if (score_bin == SCORE_FISS_Q_DELAYED_PHOTONS) then - xs = nuc % fission_q_delayed_photons % evaluate(E) - else if (score_bin == SCORE_FISS_Q_NEUTRINOS) then - xs = nuc % fission_q_neutrinos % evaluate(E) - else if (score_bin == SCORE_FISS_Q_BETAS) then - xs = nuc % fission_q_betas % evaluate(E) end if score = score + micro_xs(i_nuc) % fission * atom_density_ & @@ -1227,134 +1168,6 @@ contains end if end if - case (SCORE_Q_ELECTRONS) - - ! Electron energy deposition - if (p % type == ELECTRON .and. electron_treatment == ELECTRON_LED) then - score = p % last_wgt * p % last_E - end if - - case (SCORE_Q_POSITRONS) - - ! Positron energy deposition - if (p % type == POSITRON .and. electron_treatment == ELECTRON_LED) then - score = p % last_wgt * p % last_E - end if - - case (SCORE_Q_PHOTONS) - - ! Photon energy deposition - if (p % type == PHOTON .and. p % last_E < energy_cutoff(PHOTON)) then - score = p % last_wgt * p % last_E - end if - - case (SCORE_Q_ELASTIC) - - ! Elastic scattering - if (p % event_MT == ELASTIC) then - score = p % last_wgt * (p % last_E - p % E) - end if - - case (SCORE_HEATING) - - ! Elastic scattering - if (p % event_MT == ELASTIC) then - score = p % last_wgt * (p % last_E - p % E) - - ! Photon energy deposition - else if (p % type == PHOTON) then - if(p % last_E < energy_cutoff(PHOTON)) then - score = p % last_wgt * p % last_E - end if - - ! Electron energy deposition - else if (p % type == ELECTRON) then - if(electron_treatment == ELECTRON_LED) then - score = p % last_wgt * p % last_E - end if - - ! Positron energy deposition - else if (p % type == POSITRON) then - if (electron_treatment == ELECTRON_LED) then - score = p % last_wgt * p % last_E - end if - - ! Fission fragments, betas, and gammas (if photon_transport off) - else - - if (material_xs % absorption == ZERO) cycle SCORE_LOOP - - score = ZERO - - if (survival_biasing) then - ! No fission events occur if survival biasing is on -- need to - ! calculate fraction of absorptions that would have resulted in - ! fission scaled by Q-value - associate (nuc => nuclides(p % event_nuclide)) - score = ZERO - - if (micro_xs(p % event_nuclide) % absorption > ZERO .and. & - allocated(nuc % fission_q_betas)) then - - score = score + p % absorb_wgt & - * nuc % fission_q_fragments % evaluate(p % last_E) & - * micro_xs(p % event_nuclide) % fission & - / micro_xs(p % event_nuclide) % absorption * flux - - score = score + p % absorb_wgt & - * nuc % fission_q_betas % evaluate(p % last_E) & - * micro_xs(p % event_nuclide) % fission & - / micro_xs(p % event_nuclide) % absorption * flux - - if (.not. photon_transport) then - score = score + p % absorb_wgt & - * nuc % fission_q_prompt_photons % evaluate(p % last_E) & - * micro_xs(p % event_nuclide) % fission & - / micro_xs(p % event_nuclide) % absorption * flux - - score = score + p % absorb_wgt & - * nuc % fission_q_delayed_photons % evaluate(p % last_E) & - * micro_xs(p % event_nuclide) % fission & - / micro_xs(p % event_nuclide) % absorption * flux - end if - end if - end associate - else - ! Skip any non-absorption events - if (p % event /= EVENT_ABSORB) cycle SCORE_LOOP - ! All fission events will contribute, so again we can use - ! particle's weight entering the collision as the estimate for - ! the fission energy production rate - associate (nuc => nuclides(p % event_nuclide)) - if (micro_xs(p % event_nuclide) % absorption > ZERO .and. & - allocated(nuc % fission_q_betas)) then - - score = score + p % last_wgt & - * nuc % fission_q_fragments % evaluate(p % last_E) & - * micro_xs(p % event_nuclide) % fission & - / micro_xs(p % event_nuclide) % absorption * flux - - score = score + p % last_wgt & - * nuc % fission_q_betas % evaluate(p % last_E) & - * micro_xs(p % event_nuclide) % fission & - / micro_xs(p % event_nuclide) % absorption * flux - - if (.not. photon_transport) then - score = score + p % last_wgt & - * nuc % fission_q_prompt_photons % evaluate(p % last_E) & - * micro_xs(p % event_nuclide) % fission & - / micro_xs(p % event_nuclide) % absorption * flux - - score = score + p % last_wgt & - * nuc % fission_q_delayed_photons % evaluate(p % last_E) & - * micro_xs(p % event_nuclide) % fission & - / micro_xs(p % event_nuclide) % absorption * flux - end if - end if - end associate - end if - end if - case default if (t % estimator == ESTIMATOR_ANALOG) then ! Any other score is assumed to be a MT number. Thus, we just need