removed new energy deposition scores

This commit is contained in:
samuelshaner 2017-07-13 16:06:05 -04:00
parent 41272a3aa4
commit beb2c40a06
7 changed files with 7 additions and 379 deletions

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -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