mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-25 12:35:29 -04:00
Make cross section arrays in sum_xs contiguous
This commit is contained in:
parent
b9286c0322
commit
ac29b7c719
2 changed files with 42 additions and 42 deletions
|
|
@ -266,29 +266,29 @@ contains
|
|||
micro_xs(i_nuclide) % interp_factor = f
|
||||
|
||||
! Calculate microscopic nuclide total cross section
|
||||
micro_xs(i_nuclide) % total = (ONE - f) * xs % total(i_grid) &
|
||||
+ f * xs % total(i_grid + 1)
|
||||
micro_xs(i_nuclide) % total = (ONE - f) * xs % value(SUM_XS_TOTAL,i_grid) &
|
||||
+ f * xs % value(SUM_XS_TOTAL,i_grid + 1)
|
||||
|
||||
! Calculate microscopic nuclide elastic cross section
|
||||
micro_xs(i_nuclide) % elastic = (ONE - f) * xs % elastic(i_grid) &
|
||||
+ f * xs % elastic(i_grid + 1)
|
||||
|
||||
! Calculate microscopic nuclide absorption cross section
|
||||
micro_xs(i_nuclide) % absorption = (ONE - f) * xs % absorption( &
|
||||
i_grid) + f * xs % absorption(i_grid + 1)
|
||||
micro_xs(i_nuclide) % elastic = (ONE - f) * xs % value(SUM_XS_ELASTIC,i_grid) &
|
||||
+ f * xs % value(SUM_XS_ELASTIC,i_grid + 1)
|
||||
|
||||
if (nuc % fissionable) then
|
||||
! Calculate microscopic nuclide total cross section
|
||||
micro_xs(i_nuclide) % fission = (ONE - f) * xs % fission(i_grid) &
|
||||
+ f * xs % fission(i_grid + 1)
|
||||
micro_xs(i_nuclide) % fission = (ONE - f) * xs % value(SUM_XS_FISSION,i_grid) &
|
||||
+ f * xs % value(SUM_XS_FISSION,i_grid + 1)
|
||||
|
||||
! Calculate microscopic nuclide nu-fission cross section
|
||||
micro_xs(i_nuclide) % nu_fission = (ONE - f) * xs % nu_fission( &
|
||||
i_grid) + f * xs % nu_fission(i_grid + 1)
|
||||
micro_xs(i_nuclide) % nu_fission = (ONE - f) * xs % value(SUM_XS_NU_FISSION, &
|
||||
i_grid) + f * xs % value(SUM_XS_NU_FISSION,i_grid + 1)
|
||||
else
|
||||
micro_xs(i_nuclide) % fission = ZERO
|
||||
micro_xs(i_nuclide) % nu_fission = ZERO
|
||||
end if
|
||||
|
||||
! Calculate microscopic nuclide absorption cross section
|
||||
micro_xs(i_nuclide) % absorption = (ONE - f) * xs % value(SUM_XS_ABSORPTION, &
|
||||
i_grid) + f * xs % value(SUM_XS_ABSORPTION,i_grid + 1)
|
||||
end associate
|
||||
|
||||
! Depletion-related reactions
|
||||
|
|
|
|||
|
|
@ -36,13 +36,22 @@ module nuclide_header
|
|||
real(8), allocatable :: energy(:) ! energy values corresponding to xs
|
||||
end type EnergyGrid
|
||||
|
||||
integer, parameter :: &
|
||||
SUM_XS_TOTAL = 1, &
|
||||
SUM_XS_ELASTIC = 2, &
|
||||
SUM_XS_FISSION = 3, &
|
||||
SUM_XS_NU_FISSION = 4, &
|
||||
SUM_XS_ABSORPTION = 5, &
|
||||
SUM_XS_HEATING = 6
|
||||
|
||||
type SumXS
|
||||
real(8), allocatable :: total(:) ! total cross section
|
||||
real(8), allocatable :: elastic(:) ! elastic scattering
|
||||
real(8), allocatable :: fission(:) ! fission
|
||||
real(8), allocatable :: nu_fission(:) ! neutron production
|
||||
real(8), allocatable :: absorption(:) ! absorption (MT > 100)
|
||||
real(8), allocatable :: heating(:) ! heating
|
||||
real(8), allocatable :: value(:,:)
|
||||
!!$ real(8), allocatable :: total(:) ! total cross section
|
||||
!!$ real(8), allocatable :: elastic(:) ! elastic scattering
|
||||
!!$ real(8), allocatable :: fission(:) ! fission
|
||||
!!$ real(8), allocatable :: nu_fission(:) ! neutron production
|
||||
!!$ real(8), allocatable :: absorption(:) ! absorption (MT > 100)
|
||||
!!$ real(8), allocatable :: heating(:) ! heating
|
||||
end type SumXS
|
||||
|
||||
type :: Nuclide
|
||||
|
|
@ -571,16 +580,8 @@ contains
|
|||
do i = 1, n_temperature
|
||||
! Allocate and initialize derived cross sections
|
||||
n_grid = size(this % grid(i) % energy)
|
||||
allocate(this % sum_xs(i) % total(n_grid))
|
||||
allocate(this % sum_xs(i) % elastic(n_grid))
|
||||
allocate(this % sum_xs(i) % fission(n_grid))
|
||||
allocate(this % sum_xs(i) % nu_fission(n_grid))
|
||||
allocate(this % sum_xs(i) % absorption(n_grid))
|
||||
this % sum_xs(i) % total(:) = ZERO
|
||||
this % sum_xs(i) % elastic(:) = ZERO
|
||||
this % sum_xs(i) % fission(:) = ZERO
|
||||
this % sum_xs(i) % nu_fission(:) = ZERO
|
||||
this % sum_xs(i) % absorption(:) = ZERO
|
||||
allocate(this % sum_xs(i) % value(6,n_grid))
|
||||
this % sum_xs(i) % value(:,:) = ZERO
|
||||
end do
|
||||
|
||||
i_fission = 0
|
||||
|
|
@ -608,16 +609,17 @@ contains
|
|||
n = size(rx % xs(t) % value)
|
||||
|
||||
! Copy elastic
|
||||
if (rx % MT == ELASTIC) this % sum_xs(t) % elastic(:) = rx % xs(t) % value
|
||||
if (rx % MT == ELASTIC) this % sum_xs(t) % value(SUM_XS_ELASTIC,:) = &
|
||||
rx % xs(t) % value
|
||||
|
||||
! Add contribution to total cross section
|
||||
this % sum_xs(t) % total(j:j+n-1) = this % sum_xs(t) % total(j:j+n-1) + &
|
||||
rx % xs(t) % value
|
||||
this % sum_xs(t) % value(SUM_XS_TOTAL,j:j+n-1) = this % sum_xs(t) % &
|
||||
value(SUM_XS_TOTAL,j:j+n-1) + rx % xs(t) % value
|
||||
|
||||
! Add contribution to absorption cross section
|
||||
if (is_disappearance(rx % MT)) then
|
||||
this % sum_xs(t) % absorption(j:j+n-1) = this % sum_xs(t) % &
|
||||
absorption(j:j+n-1) + rx % xs(t) % value
|
||||
this % sum_xs(t) % value(SUM_XS_ABSORPTION,j:j+n-1) = this % sum_xs(t) % &
|
||||
value(SUM_XS_ABSORPTION,j:j+n-1) + rx % xs(t) % value
|
||||
end if
|
||||
|
||||
! Information about fission reactions
|
||||
|
|
@ -633,12 +635,12 @@ contains
|
|||
! Add contribution to fission cross section
|
||||
if (is_fission(rx % MT)) then
|
||||
this % fissionable = .true.
|
||||
this % sum_xs(t) % fission(j:j+n-1) = this % sum_xs(t) % &
|
||||
fission(j:j+n-1) + rx % xs(t) % value
|
||||
this % sum_xs(t) % value(SUM_XS_FISSION,j:j+n-1) = this % sum_xs(t) % &
|
||||
value(SUM_XS_FISSION,j:j+n-1) + rx % xs(t) % value
|
||||
|
||||
! Also need to add fission cross sections to absorption
|
||||
this % sum_xs(t) % absorption(j:j+n-1) = this % sum_xs(t) % &
|
||||
absorption(j:j+n-1) + rx % xs(t) % value
|
||||
this % sum_xs(t) % value(SUM_XS_ABSORPTION,j:j+n-1) = this % sum_xs(t) % &
|
||||
value(SUM_XS_ABSORPTION,j:j+n-1) + rx % xs(t) % value
|
||||
|
||||
! If total fission reaction is present, there's no need to store the
|
||||
! reaction cross-section since it was copied to this % fission
|
||||
|
|
@ -689,12 +691,10 @@ contains
|
|||
! Calculate nu-fission cross section
|
||||
do t = 1, n_temperature
|
||||
if (this % fissionable) then
|
||||
do i = 1, size(this % sum_xs(t) % fission)
|
||||
this % sum_xs(t) % nu_fission(i) = this % nu(this % grid(t) % energy(i), &
|
||||
EMISSION_TOTAL) * this % sum_xs(t) % fission(i)
|
||||
do i = 1, n_grid
|
||||
this % sum_xs(t) % value(SUM_XS_NU_FISSION,i) = this % nu(this % grid(t) % energy(i), &
|
||||
EMISSION_TOTAL) * this % sum_xs(t) % value(SUM_XS_FISSION,i)
|
||||
end do
|
||||
else
|
||||
this % sum_xs(t) % nu_fission(:) = ZERO
|
||||
end if
|
||||
end do
|
||||
end subroutine nuclide_create_derived
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue