mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
added comments to delayed-nu-fission tally
This commit is contained in:
parent
0b7ee32a88
commit
133bbb510b
2 changed files with 56 additions and 15 deletions
|
|
@ -132,25 +132,28 @@ contains
|
|||
! 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 unnecessarily if it has already been called.
|
||||
! to call yield_delayed unnecessarily if it has already been called.
|
||||
yield = ZERO
|
||||
else if (nuc % nu_d_type == NU_TABULAR) then
|
||||
|
||||
lc = 1
|
||||
|
||||
! determine the yield for this group
|
||||
! 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))
|
||||
|
||||
! determine delayed neutron precursor yield for group d
|
||||
yield = interpolate_tab1(nuc % nu_d_precursor_data( &
|
||||
lc+1:lc+2+2*NR+2*NE), E)
|
||||
! check if this is the desired group
|
||||
if (d == g) then
|
||||
|
||||
! Check if this group is the requested group
|
||||
if (d == g) exit
|
||||
! 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
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ contains
|
|||
integer :: score_index ! scoring bin index
|
||||
integer :: d ! delayed neutron index
|
||||
integer :: d_bin ! delayed group bin index
|
||||
integer :: n_bins ! number of delayed group bins
|
||||
integer :: i_filter ! filter index
|
||||
integer :: dg_filter ! index of delayed group filter
|
||||
real(8) :: yield ! delayed neutron yield
|
||||
|
|
@ -408,11 +407,6 @@ contains
|
|||
|
||||
! Set the delayedgroup filter index and the number of delayed group bins
|
||||
dg_filter = t % find_filter(FILTER_DELAYEDGROUP)
|
||||
n_bins = 0
|
||||
|
||||
if (dg_filter > 0) then
|
||||
n_bins = t % filters(dg_filter) % n_bins
|
||||
end if
|
||||
|
||||
if (t % estimator == ESTIMATOR_ANALOG) then
|
||||
if (survival_biasing .or. p % fission) then
|
||||
|
|
@ -429,7 +423,7 @@ contains
|
|||
if (survival_biasing) then
|
||||
! No fission events occur if survival biasing is on -- need to
|
||||
! calculate fraction of absorptions that would have resulted in
|
||||
! nu-fission
|
||||
! delayed-nu-fission
|
||||
if (micro_xs(p % event_nuclide) % absorption > ZERO) then
|
||||
|
||||
! Get the event nuclide
|
||||
|
|
@ -440,9 +434,15 @@ contains
|
|||
|
||||
! Loop over all delayed group bins and tally to them
|
||||
! individually
|
||||
do d_bin = 1, n_bins
|
||||
do d_bin = 1, t % filters(dg_filter) % n_bins
|
||||
|
||||
! Get the delayed group for this bin
|
||||
d = t % filters(dg_filter) % int_bins(d_bin)
|
||||
|
||||
! Compute the yield for this delayed group
|
||||
yield = yield_delayed(nuc, p % E, d)
|
||||
|
||||
! Compute the score and tally to bin
|
||||
score = p % absorb_wgt * yield * micro_xs(p % event_nuclide) &
|
||||
% fission * nu_delayed(nuc, p % E) / &
|
||||
micro_xs(p % event_nuclide) % absorption
|
||||
|
|
@ -450,6 +450,9 @@ contains
|
|||
end do
|
||||
cycle SCORE_LOOP
|
||||
else
|
||||
! 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(nuc, p % E) / &
|
||||
micro_xs(p % event_nuclide) % absorption
|
||||
|
|
@ -472,13 +475,21 @@ contains
|
|||
|
||||
! Loop over all delayed group bins and tally to them individually
|
||||
do d_bin = 1, t % filters(dg_filter) % n_bins
|
||||
|
||||
! Get the delayed group for this bin
|
||||
d = t % filters(dg_filter) % int_bins(d_bin)
|
||||
|
||||
! Compute the score and tally to bin
|
||||
score = keff * p % wgt_bank / p % n_bank * p % n_delayed_bank(d)
|
||||
call score_fission_delayed_dg(t, d_bin, score, score_index)
|
||||
end do
|
||||
cycle SCORE_LOOP
|
||||
else
|
||||
|
||||
score = ZERO
|
||||
|
||||
! Loop over all delayed groups and accumulate the contribution
|
||||
! from each group
|
||||
do d = 1, nuclides(p % event_nuclide) % n_precursor
|
||||
score = score + keff * p % wgt_bank / p % n_bank * &
|
||||
p % n_delayed_bank(d)
|
||||
|
|
@ -498,14 +509,23 @@ contains
|
|||
|
||||
! Loop over all delayed group bins and tally to them individually
|
||||
do d_bin = 1, t % filters(dg_filter) % n_bins
|
||||
|
||||
! Get the delayed group for this bin
|
||||
d = t % filters(dg_filter) % int_bins(d_bin)
|
||||
|
||||
! Compute the yield for this delayed group
|
||||
yield = yield_delayed(nuc, p % E, d)
|
||||
|
||||
! Compute the score and tally to bin
|
||||
score = micro_xs(i_nuclide) % fission * yield &
|
||||
* nu_delayed(nuc, p % E) * atom_density * flux
|
||||
call score_fission_delayed_dg(t, d_bin, score, score_index)
|
||||
end do
|
||||
cycle SCORE_LOOP
|
||||
else
|
||||
|
||||
! 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(nuc, p % E)&
|
||||
* atom_density * flux
|
||||
end if
|
||||
|
|
@ -519,17 +539,28 @@ contains
|
|||
! Check if the delayed group filter is present
|
||||
if (dg_filter > 0) then
|
||||
|
||||
! Loop over all nuclides in the current material
|
||||
do l = 1, mat % n_nuclides
|
||||
|
||||
! Get atom density
|
||||
atom_density_ = mat % atom_density(l)
|
||||
|
||||
! Get index in nuclides array
|
||||
i_nuc = mat % nuclide(l)
|
||||
|
||||
! Loop over all delayed group bins and tally to them individually
|
||||
do d_bin = 1, t % filters(dg_filter) % n_bins
|
||||
|
||||
! Get the delayed group for this bin
|
||||
d = t % filters(dg_filter) % int_bins(d_bin)
|
||||
|
||||
! Get the current nuclide
|
||||
nuc => nuclides(i_nuc)
|
||||
|
||||
! Get the yield for the desired nuclide and delayed group
|
||||
yield = yield_delayed(nuc, p % E, d)
|
||||
|
||||
! Compute the score and tally to bin
|
||||
score = micro_xs(i_nuc) % fission * yield &
|
||||
* nu_delayed(nuc, p % E) * atom_density_ * flux
|
||||
call score_fission_delayed_dg(t, d_bin, score, score_index)
|
||||
|
|
@ -540,12 +571,19 @@ contains
|
|||
|
||||
score = ZERO
|
||||
|
||||
! Loop over all nuclides in the current material
|
||||
do l = 1, mat % n_nuclides
|
||||
|
||||
! Get atom density
|
||||
atom_density_ = mat % atom_density(l)
|
||||
|
||||
! Get index in nuclides array
|
||||
i_nuc = mat % nuclide(l)
|
||||
|
||||
! Get the current nuclide
|
||||
nuc => nuclides(i_nuc)
|
||||
|
||||
! Accumulate the contribution from each nuclide
|
||||
score = score + micro_xs(i_nuc) % fission &
|
||||
* nu_delayed(nuc, p % E) * atom_density_ * flux
|
||||
end do
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue