mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
Merge pull request #202 from mit-crpg/refactor
Major refactor of physics module
This commit is contained in:
commit
c44d702142
83 changed files with 163097 additions and 163096 deletions
|
|
@ -90,6 +90,7 @@ cross_section.o: error.o
|
|||
cross_section.o: fission.o
|
||||
cross_section.o: global.o
|
||||
cross_section.o: material_header.o
|
||||
cross_section.o: particle_header.o
|
||||
cross_section.o: random_lcg.o
|
||||
cross_section.o: search.o
|
||||
|
||||
|
|
@ -103,13 +104,14 @@ eigenvalue.o: math.o
|
|||
eigenvalue.o: mesh.o
|
||||
eigenvalue.o: mesh_header.o
|
||||
eigenvalue.o: output.o
|
||||
eigenvalue.o: physics.o
|
||||
eigenvalue.o: particle_header.o
|
||||
eigenvalue.o: random_lcg.o
|
||||
eigenvalue.o: search.o
|
||||
eigenvalue.o: source.o
|
||||
eigenvalue.o: state_point.o
|
||||
eigenvalue.o: string.o
|
||||
eigenvalue.o: tally.o
|
||||
eigenvalue.o: tracking.o
|
||||
|
||||
endf.o: constants.o
|
||||
endf.o: string.o
|
||||
|
|
@ -137,12 +139,13 @@ fission.o: search.o
|
|||
fixed_source.o: constants.o
|
||||
fixed_source.o: global.o
|
||||
fixed_source.o: output.o
|
||||
fixed_source.o: physics.o
|
||||
fixed_source.o: particle_header.o
|
||||
fixed_source.o: random_lcg.o
|
||||
fixed_source.o: source.o
|
||||
fixed_source.o: state_point.o
|
||||
fixed_source.o: string.o
|
||||
fixed_source.o: tally.o
|
||||
fixed_source.o: tracking.o
|
||||
|
||||
geometry.o: constants.o
|
||||
geometry.o: error.o
|
||||
|
|
@ -243,6 +246,7 @@ main.o: particle_restart.o
|
|||
main.o: plot.o
|
||||
|
||||
math.o: constants.o
|
||||
math.o: random_lcg.o
|
||||
|
||||
mesh.o: constants.o
|
||||
mesh.o: global.o
|
||||
|
|
@ -272,6 +276,7 @@ output_interface.o: mpiio_interface.o
|
|||
output_interface.o: tally_header.o
|
||||
|
||||
particle_header.o: constants.o
|
||||
particle_header.o: geometry_header.o
|
||||
|
||||
particle_restart.o: bank_header.o
|
||||
particle_restart.o: constants.o
|
||||
|
|
@ -280,13 +285,13 @@ particle_restart.o: global.o
|
|||
particle_restart.o: hdf5_interface.o
|
||||
particle_restart.o: output.o
|
||||
particle_restart.o: particle_header.o
|
||||
particle_restart.o: physics.o
|
||||
particle_restart.o: random_lcg.o
|
||||
particle_restart.o: source.o
|
||||
particle_restart.o: tracking.o
|
||||
|
||||
particle_restart_write.o: bank_header.o
|
||||
particle_restart_write.o: global.o
|
||||
particle_restart_write.o: hdf5_interface.o
|
||||
particle_restart_write.o: particle_header.o
|
||||
particle_restart_write.o: string.o
|
||||
|
||||
physics.o: ace_header.o
|
||||
|
|
@ -295,11 +300,10 @@ physics.o: cross_section.o
|
|||
physics.o: endf.o
|
||||
physics.o: error.o
|
||||
physics.o: fission.o
|
||||
physics.o: geometry.o
|
||||
physics.o: geometry_header.o
|
||||
physics.o: global.o
|
||||
physics.o: interpolation.o
|
||||
physics.o: material_header.o
|
||||
physics.o: math.o
|
||||
physics.o: mesh.o
|
||||
physics.o: output.o
|
||||
physics.o: particle_header.o
|
||||
|
|
@ -307,7 +311,6 @@ physics.o: particle_restart_write.o
|
|||
physics.o: random_lcg.o
|
||||
physics.o: search.o
|
||||
physics.o: string.o
|
||||
physics.o: tally.o
|
||||
|
||||
plot.o: constants.o
|
||||
plot.o: error.o
|
||||
|
|
@ -318,7 +321,6 @@ plot.o: output.o
|
|||
plot.o: particle_header.o
|
||||
plot.o: plot_header.o
|
||||
plot.o: ppmlib.o
|
||||
plot.o: source.o
|
||||
plot.o: string.o
|
||||
|
||||
plot_header.o: constants.o
|
||||
|
|
@ -336,9 +338,9 @@ source.o: constants.o
|
|||
source.o: error.o
|
||||
source.o: geometry_header.o
|
||||
source.o: global.o
|
||||
source.o: math.o
|
||||
source.o: output.o
|
||||
source.o: particle_header.o
|
||||
source.o: physics.o
|
||||
source.o: random_lcg.o
|
||||
source.o: string.o
|
||||
|
||||
|
|
@ -374,3 +376,14 @@ tally_initialize.o: global.o
|
|||
tally_initialize.o: tally_header.o
|
||||
|
||||
timer_header.o: constants.o
|
||||
|
||||
tracking.o: cross_section.o
|
||||
tracking.o: error.o
|
||||
tracking.o: geometry.o
|
||||
tracking.o: geometry_header.o
|
||||
tracking.o: global.o
|
||||
tracking.o: output.o
|
||||
tracking.o: particle_header.o
|
||||
tracking.o: physics.o
|
||||
tracking.o: string.o
|
||||
tracking.o: tally.o
|
||||
|
|
|
|||
|
|
@ -1,17 +1,13 @@
|
|||
program = openmc
|
||||
prefix = /usr/local
|
||||
|
||||
source = $(wildcard *.F90)
|
||||
objects = $(source:.F90=.o)
|
||||
templates = $(wildcard templates/*.o)
|
||||
xml_fort = xml-fortran/xmlparse.o \
|
||||
xml-fortran/read_xml_primitives.o \
|
||||
xml-fortran/write_xml_primitives.o
|
||||
|
||||
#===============================================================================
|
||||
# Object Files
|
||||
#===============================================================================
|
||||
|
||||
include OBJECTS
|
||||
|
||||
#===============================================================================
|
||||
# User Options
|
||||
#===============================================================================
|
||||
|
|
|
|||
62
src/OBJECTS
62
src/OBJECTS
|
|
@ -1,62 +0,0 @@
|
|||
objects = \
|
||||
ace.o \
|
||||
ace_header.o \
|
||||
bank_header.o \
|
||||
cmfd_data.o \
|
||||
cmfd_execute.o \
|
||||
cmfd_header.o \
|
||||
cmfd_input.o \
|
||||
cmfd_jacobian_operator.o \
|
||||
cmfd_loss_operator.o \
|
||||
cmfd_message_passing.o \
|
||||
cmfd_output.o \
|
||||
cmfd_power_solver.o \
|
||||
cmfd_prod_operator.o \
|
||||
cmfd_snes_solver.o \
|
||||
constants.o \
|
||||
cross_section.o \
|
||||
dict_header.o \
|
||||
doppler.o \
|
||||
eigenvalue.o \
|
||||
endf.o \
|
||||
endf_header.o \
|
||||
energy_grid.o \
|
||||
error.o \
|
||||
finalize.o \
|
||||
fission.o \
|
||||
fixed_source.o \
|
||||
geometry.o \
|
||||
geometry_header.o \
|
||||
global.o \
|
||||
hdf5_interface.o \
|
||||
hdf5_summary.o \
|
||||
initialize.o \
|
||||
interpolation.o \
|
||||
input_xml.o \
|
||||
list_header.o \
|
||||
main.o \
|
||||
material_header.o \
|
||||
math.o \
|
||||
mesh_header.o \
|
||||
mesh.o \
|
||||
mpiio_interface.o \
|
||||
output.o \
|
||||
output_interface.o \
|
||||
particle_header.o \
|
||||
particle_restart.o \
|
||||
particle_restart_write.o \
|
||||
physics.o \
|
||||
plot.o \
|
||||
plot_header.o \
|
||||
ppmlib.o \
|
||||
random_lcg.o \
|
||||
search.o \
|
||||
set_header.o \
|
||||
source.o \
|
||||
source_header.o \
|
||||
state_point.o \
|
||||
string.o \
|
||||
tally.o \
|
||||
tally_header.o \
|
||||
tally_initialize.o \
|
||||
timer_header.o
|
||||
|
|
@ -6,10 +6,14 @@ module cross_section
|
|||
use fission, only: nu_total
|
||||
use global
|
||||
use material_header, only: Material
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: prn
|
||||
use search, only: binary_search
|
||||
|
||||
implicit none
|
||||
save
|
||||
|
||||
integer :: union_grid_index
|
||||
|
||||
contains
|
||||
|
||||
|
|
@ -18,7 +22,9 @@ contains
|
|||
! particle is currently traveling through.
|
||||
!===============================================================================
|
||||
|
||||
subroutine calculate_xs()
|
||||
subroutine calculate_xs(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
integer :: i ! loop index over nuclides
|
||||
integer :: i_nuclide ! index into nuclides array
|
||||
|
|
@ -42,7 +48,7 @@ contains
|
|||
mat => materials(p % material)
|
||||
|
||||
! Find energy index on unionized grid
|
||||
if (grid_method == GRID_UNION) call find_energy_index()
|
||||
if (grid_method == GRID_UNION) call find_energy_index(p % E)
|
||||
|
||||
! Determine if this material has S(a,b) tables
|
||||
check_sab = (mat % n_sab > 0)
|
||||
|
|
@ -84,7 +90,7 @@ contains
|
|||
|
||||
! Calculate microscopic cross section for this nuclide
|
||||
if (p % E /= micro_xs(i_nuclide) % last_E) then
|
||||
call calculate_nuclide_xs(i_nuclide, i_sab)
|
||||
call calculate_nuclide_xs(i_nuclide, i_sab, p % E)
|
||||
end if
|
||||
|
||||
! ========================================================================
|
||||
|
|
@ -125,10 +131,11 @@ contains
|
|||
! given index in the nuclides array at the energy of the given particle
|
||||
!===============================================================================
|
||||
|
||||
subroutine calculate_nuclide_xs(i_nuclide, i_sab)
|
||||
subroutine calculate_nuclide_xs(i_nuclide, i_sab, E)
|
||||
|
||||
integer, intent(in) :: i_nuclide ! index into nuclides array
|
||||
integer, intent(in) :: i_sab ! index into sab_tables array
|
||||
real(8), intent(in) :: E ! energy
|
||||
|
||||
integer :: i_grid ! index on nuclide energy grid
|
||||
real(8) :: f ! interp factor on nuclide energy grid
|
||||
|
|
@ -143,19 +150,19 @@ contains
|
|||
! If we're using the unionized grid with pointers, finding the index on
|
||||
! the nuclide energy grid is as simple as looking up the pointer
|
||||
|
||||
i_grid = nuc % grid_index(p % index_grid)
|
||||
i_grid = nuc % grid_index(union_grid_index)
|
||||
|
||||
case (GRID_NUCLIDE)
|
||||
! If we're not using the unionized grid, we have to do a binary search on
|
||||
! the nuclide energy grid in order to determine which points to
|
||||
! interpolate between
|
||||
|
||||
if (p % E < nuc % energy(1)) then
|
||||
if (E < nuc % energy(1)) then
|
||||
i_grid = 1
|
||||
elseif (p % E > nuc % energy(nuc % n_grid)) then
|
||||
elseif (E > nuc % energy(nuc % n_grid)) then
|
||||
i_grid = nuc % n_grid - 1
|
||||
else
|
||||
i_grid = binary_search(nuc % energy, nuc % n_grid, p % E)
|
||||
i_grid = binary_search(nuc % energy, nuc % n_grid, E)
|
||||
end if
|
||||
|
||||
end select
|
||||
|
|
@ -164,7 +171,7 @@ contains
|
|||
if (nuc % energy(i_grid) == nuc % energy(i_grid+1)) i_grid = i_grid + 1
|
||||
|
||||
! calculate interpolation factor
|
||||
f = (p%E - nuc%energy(i_grid))/(nuc%energy(i_grid+1) - nuc%energy(i_grid))
|
||||
f = (E - nuc%energy(i_grid))/(nuc%energy(i_grid+1) - nuc%energy(i_grid))
|
||||
|
||||
micro_xs(i_nuclide) % index_grid = i_grid
|
||||
micro_xs(i_nuclide) % interp_factor = f
|
||||
|
|
@ -213,22 +220,22 @@ contains
|
|||
! need to correct it by subtracting the non-S(a,b) elastic cross section and
|
||||
! then add back in the calculated S(a,b) elastic+inelastic cross section.
|
||||
|
||||
if (i_sab > 0) call calculate_sab_xs(i_nuclide, i_sab)
|
||||
if (i_sab > 0) call calculate_sab_xs(i_nuclide, i_sab, E)
|
||||
|
||||
! if the particle is in the unresolved resonance range and there are
|
||||
! probability tables, we need to determine cross sections from the table
|
||||
|
||||
if (urr_ptables_on .and. nuc % urr_present) then
|
||||
if (p % E > nuc % urr_data % energy(1) .and. &
|
||||
p % E < nuc % urr_data % energy(nuc % urr_data % n_energy)) then
|
||||
call calculate_urr_xs(i_nuclide)
|
||||
if (E > nuc % urr_data % energy(1) .and. &
|
||||
E < nuc % urr_data % energy(nuc % urr_data % n_energy)) then
|
||||
call calculate_urr_xs(i_nuclide, E)
|
||||
end if
|
||||
end if
|
||||
|
||||
! Set last evaluated energy -- if we're in S(a,b) region, force
|
||||
! re-calculation of cross-section
|
||||
if (i_sab == 0) then
|
||||
micro_xs(i_nuclide) % last_E = p % E
|
||||
micro_xs(i_nuclide) % last_E = E
|
||||
else
|
||||
micro_xs(i_nuclide) % last_E = ZERO
|
||||
end if
|
||||
|
|
@ -241,10 +248,11 @@ contains
|
|||
! whatever data were taken from the normal Nuclide table.
|
||||
!===============================================================================
|
||||
|
||||
subroutine calculate_sab_xs(i_nuclide, i_sab)
|
||||
subroutine calculate_sab_xs(i_nuclide, i_sab, E)
|
||||
|
||||
integer, intent(in) :: i_nuclide ! index into nuclides array
|
||||
integer, intent(in) :: i_sab ! index into sab_tables array
|
||||
real(8), intent(in) :: E ! energy
|
||||
|
||||
integer :: i_grid ! index on S(a,b) energy grid
|
||||
real(8) :: f ! interp factor on S(a,b) energy grid
|
||||
|
|
@ -259,12 +267,12 @@ contains
|
|||
sab => sab_tables(i_sab)
|
||||
|
||||
! Get index and interpolation factor for inelastic grid
|
||||
if (p%E < sab % inelastic_e_in(1)) then
|
||||
if (E < sab % inelastic_e_in(1)) then
|
||||
i_grid = 1
|
||||
f = ZERO
|
||||
else
|
||||
i_grid = binary_search(sab % inelastic_e_in, sab % n_inelastic_e_in, p%E)
|
||||
f = (p%E - sab%inelastic_e_in(i_grid)) / &
|
||||
i_grid = binary_search(sab % inelastic_e_in, sab % n_inelastic_e_in, E)
|
||||
f = (E - sab%inelastic_e_in(i_grid)) / &
|
||||
(sab%inelastic_e_in(i_grid+1) - sab%inelastic_e_in(i_grid))
|
||||
end if
|
||||
|
||||
|
|
@ -273,32 +281,32 @@ contains
|
|||
f * sab % inelastic_sigma(i_grid + 1)
|
||||
|
||||
! Check for elastic data
|
||||
if (p % E < sab % threshold_elastic) then
|
||||
if (E < sab % threshold_elastic) then
|
||||
! Determine whether elastic scattering is given in the coherent or
|
||||
! incoherent approximation. For coherent, the cross section is
|
||||
! represented as P/E whereas for incoherent, it is simply P
|
||||
|
||||
if (sab % elastic_mode == SAB_ELASTIC_EXACT) then
|
||||
if (p % E < sab % elastic_e_in(1)) then
|
||||
if (E < sab % elastic_e_in(1)) then
|
||||
! If energy is below that of the lowest Bragg peak, the elastic
|
||||
! cross section will be zero
|
||||
elastic = ZERO
|
||||
else
|
||||
i_grid = binary_search(sab % elastic_e_in, &
|
||||
sab % n_elastic_e_in, p % E)
|
||||
elastic = sab % elastic_P(i_grid) / p % E
|
||||
sab % n_elastic_e_in, E)
|
||||
elastic = sab % elastic_P(i_grid) / E
|
||||
end if
|
||||
else
|
||||
! Determine index on elastic energy grid
|
||||
if (p % E < sab % elastic_e_in(1)) then
|
||||
if (E < sab % elastic_e_in(1)) then
|
||||
i_grid = 1
|
||||
else
|
||||
i_grid = binary_search(sab % elastic_e_in, &
|
||||
sab % n_elastic_e_in, p%E)
|
||||
sab % n_elastic_e_in, E)
|
||||
end if
|
||||
|
||||
! Get interpolation factor for elastic grid
|
||||
f = (p%E - sab%elastic_e_in(i_grid))/(sab%elastic_e_in(i_grid+1) - &
|
||||
f = (E - sab%elastic_e_in(i_grid))/(sab%elastic_e_in(i_grid+1) - &
|
||||
sab%elastic_e_in(i_grid))
|
||||
|
||||
! Calculate S(a,b) elastic scattering cross section
|
||||
|
|
@ -325,9 +333,10 @@ contains
|
|||
! from probability tables
|
||||
!===============================================================================
|
||||
|
||||
subroutine calculate_urr_xs(i_nuclide)
|
||||
subroutine calculate_urr_xs(i_nuclide, E)
|
||||
|
||||
integer, intent(in) :: i_nuclide ! index into nuclides array
|
||||
real(8), intent(in) :: E ! energy
|
||||
|
||||
integer :: i_energy ! index for energy
|
||||
integer :: i_table ! index for table
|
||||
|
|
@ -350,12 +359,12 @@ contains
|
|||
! determine energy table
|
||||
i_energy = 1
|
||||
do
|
||||
if (p % E < urr % energy(i_energy + 1)) exit
|
||||
if (E < urr % energy(i_energy + 1)) exit
|
||||
i_energy = i_energy + 1
|
||||
end do
|
||||
|
||||
! determine interpolation factor on table
|
||||
f = (p % E - urr % energy(i_energy)) / &
|
||||
f = (E - urr % energy(i_energy)) / &
|
||||
(urr % energy(i_energy + 1) - urr % energy(i_energy))
|
||||
|
||||
! sample probability table using the cumulative distribution
|
||||
|
|
@ -377,7 +386,7 @@ contains
|
|||
f * urr % prob(i_energy + 1, URR_N_GAMMA, i_table)
|
||||
elseif (urr % interp == LOG_LOG) then
|
||||
! Get logarithmic interpolation factor
|
||||
f = log(p % E / urr % energy(i_energy)) / &
|
||||
f = log(E / urr % energy(i_energy)) / &
|
||||
log(urr % energy(i_energy + 1) / urr % energy(i_energy))
|
||||
|
||||
! Calculate elastic cross section/factor
|
||||
|
|
@ -440,44 +449,31 @@ contains
|
|||
|
||||
! Determine nu-fission cross section
|
||||
if (nuc % fissionable) then
|
||||
micro_xs(i_nuclide) % nu_fission = nu_total(nuc, p % E) * &
|
||||
micro_xs(i_nuclide) % nu_fission = nu_total(nuc, E) * &
|
||||
micro_xs(i_nuclide) % fission
|
||||
end if
|
||||
|
||||
end subroutine calculate_urr_xs
|
||||
|
||||
!===============================================================================
|
||||
! FIND_ENERGY_INDEX determines the index on the union energy grid and the
|
||||
! interpolation factor for a particle at a certain energy
|
||||
! FIND_ENERGY_INDEX determines the index on the union energy grid at a certain
|
||||
! energy
|
||||
!===============================================================================
|
||||
|
||||
subroutine find_energy_index()
|
||||
subroutine find_energy_index(E)
|
||||
|
||||
integer :: i_grid ! index on union energy grid
|
||||
real(8) :: E ! energy of particle
|
||||
real(8) :: interp ! interpolation factor
|
||||
|
||||
! copy particle's energy
|
||||
E = p % E
|
||||
real(8), intent(in) :: E ! energy of particle
|
||||
|
||||
! if particle's energy is outside of energy grid range, set to first or last
|
||||
! index. Otherwise, do a binary search through the union energy grid.
|
||||
if (E < e_grid(1)) then
|
||||
i_grid = 1
|
||||
union_grid_index = 1
|
||||
elseif (E > e_grid(n_grid)) then
|
||||
i_grid = n_grid - 1
|
||||
union_grid_index = n_grid - 1
|
||||
else
|
||||
i_grid = binary_search(e_grid, n_grid, E)
|
||||
union_grid_index = binary_search(e_grid, n_grid, E)
|
||||
end if
|
||||
|
||||
! calculate the interpolation factor -- note this will be outside of [0,1)
|
||||
! for a particle outside the energy range of the union grid
|
||||
interp = (E - e_grid(i_grid))/(e_grid(i_grid+1) - e_grid(i_grid))
|
||||
|
||||
! set particle attributes
|
||||
p % index_grid = i_grid
|
||||
p % interp = interp
|
||||
|
||||
end subroutine find_energy_index
|
||||
|
||||
end module cross_section
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ module eigenvalue
|
|||
use mesh_header, only: StructuredMesh
|
||||
use output, only: write_message, header, print_columns, &
|
||||
print_batch_keff, print_generation
|
||||
use physics, only: transport
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: prn, set_particle_seed, prn_skip
|
||||
use search, only: binary_search
|
||||
use source, only: get_source_particle
|
||||
|
|
@ -21,6 +21,7 @@ module eigenvalue
|
|||
use string, only: to_str
|
||||
use tally, only: synchronize_tallies, setup_active_usertallies, &
|
||||
reset_result
|
||||
use tracking, only: transport
|
||||
|
||||
private
|
||||
public :: run_eigenvalue
|
||||
|
|
@ -37,10 +38,9 @@ contains
|
|||
|
||||
subroutine run_eigenvalue()
|
||||
|
||||
if (master) call header("K EIGENVALUE SIMULATION", level=1)
|
||||
type(Particle) :: p
|
||||
|
||||
! Allocate particle
|
||||
allocate(p)
|
||||
if (master) call header("K EIGENVALUE SIMULATION", level=1)
|
||||
|
||||
! Display column titles
|
||||
call print_columns()
|
||||
|
|
@ -74,10 +74,10 @@ contains
|
|||
PARTICLE_LOOP: do current_work = 1, work
|
||||
|
||||
! grab source particle from bank
|
||||
call get_source_particle(current_work)
|
||||
call get_source_particle(p, current_work)
|
||||
|
||||
! transport particle
|
||||
call transport()
|
||||
call transport(p)
|
||||
|
||||
end do PARTICLE_LOOP
|
||||
|
||||
|
|
|
|||
|
|
@ -139,9 +139,6 @@ contains
|
|||
if (current_batch > 0) then
|
||||
write(ERROR_UNIT,'(1X,A,I12) ') 'Batch: ', current_batch
|
||||
write(ERROR_UNIT,'(1X,A,I12) ') 'Generation:', current_gen
|
||||
write(ERROR_UNIT,'(1X,A,I12)') 'Particle: ', p % id
|
||||
write(ERROR_UNIT,'(1X,A,3ES12.4)') 'Location: ', p % coord0 % xyz
|
||||
write(ERROR_UNIT,'(1X,A,3ES12.4)') 'Direction: ', p % coord0 % uvw
|
||||
write(ERROR_UNIT,*)
|
||||
end if
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
module fixed_source
|
||||
|
||||
use constants, only: ZERO
|
||||
use constants, only: ZERO
|
||||
use global
|
||||
use output, only: write_message, header
|
||||
use physics, only: transport
|
||||
use random_lcg, only: set_particle_seed
|
||||
use source, only: initialize_particle, sample_external_source, &
|
||||
copy_source_attributes
|
||||
use state_point, only: write_state_point
|
||||
use string, only: to_str
|
||||
use tally, only: synchronize_tallies, setup_active_usertallies
|
||||
use output, only: write_message, header
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: set_particle_seed
|
||||
use source, only: sample_external_source, copy_source_attributes
|
||||
use state_point, only: write_state_point
|
||||
use string, only: to_str
|
||||
use tally, only: synchronize_tallies, setup_active_usertallies
|
||||
use tracking, only: transport
|
||||
|
||||
type(Bank), pointer :: source_site => null()
|
||||
|
||||
|
|
@ -17,12 +17,12 @@ contains
|
|||
|
||||
subroutine run_fixedsource()
|
||||
|
||||
integer(8) :: i ! index over histories in single cycle
|
||||
integer(8) :: i ! index over histories in single cycle
|
||||
type(Particle) :: p
|
||||
|
||||
if (master) call header("FIXED SOURCE TRANSPORT SIMULATION", level=1)
|
||||
|
||||
! Allocate particle and dummy source site
|
||||
allocate(p)
|
||||
allocate(source_site)
|
||||
|
||||
! Turn timer and tallies on
|
||||
|
|
@ -61,10 +61,10 @@ contains
|
|||
call set_particle_seed(p % id)
|
||||
|
||||
! grab source particle from bank
|
||||
call sample_source_particle()
|
||||
call sample_source_particle(p)
|
||||
|
||||
! transport particle
|
||||
call transport()
|
||||
call transport(p)
|
||||
|
||||
end do PARTICLE_LOOP
|
||||
|
||||
|
|
@ -120,16 +120,18 @@ contains
|
|||
! SAMPLE_SOURCE_PARTICLE
|
||||
!===============================================================================
|
||||
|
||||
subroutine sample_source_particle()
|
||||
subroutine sample_source_particle(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
! Set particle
|
||||
call initialize_particle()
|
||||
call p % initialize()
|
||||
|
||||
! Sample the external source distribution
|
||||
call sample_external_source(source_site)
|
||||
|
||||
! Copy source attributes to the particle
|
||||
call copy_source_attributes(source_site)
|
||||
call copy_source_attributes(p, source_site)
|
||||
|
||||
end subroutine sample_source_particle
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ module geometry
|
|||
use geometry_header, only: Cell, Surface, Universe, Lattice
|
||||
use global
|
||||
use output, only: write_message
|
||||
use particle_header, only: LocalCoord, deallocate_coord
|
||||
use particle_header, only: LocalCoord, deallocate_coord, Particle
|
||||
use particle_restart_write, only: write_particle_restart
|
||||
use string, only: to_str
|
||||
use tally, only: score_surface_current
|
||||
|
|
@ -19,10 +19,11 @@ contains
|
|||
! particle are inside a cell defined as the intersection of a series of surfaces
|
||||
!===============================================================================
|
||||
|
||||
function simple_cell_contains(c) result(in_cell)
|
||||
function simple_cell_contains(c, p) result(in_cell)
|
||||
|
||||
type(Cell), pointer :: c
|
||||
logical :: in_cell
|
||||
type(Cell), pointer :: c
|
||||
type(Particle), intent(inout) :: p
|
||||
logical :: in_cell
|
||||
|
||||
integer :: i ! index of surfaces in cell
|
||||
integer :: i_surface ! index in surfaces array (with sign)
|
||||
|
|
@ -47,7 +48,7 @@ contains
|
|||
! Determine the specified sense of the surface in the cell and the actual
|
||||
! sense of the particle with respect to the surface
|
||||
s => surfaces(abs(i_surface))
|
||||
actual_sense = sense(s)
|
||||
actual_sense = sense(p, s)
|
||||
specified_sense = (c % surfaces(i) > 0)
|
||||
|
||||
! Compare sense of point to specified sense
|
||||
|
|
@ -68,7 +69,9 @@ contains
|
|||
! position using simple_cell_contains and the LocalCoord's built up by find_cell
|
||||
!===============================================================================
|
||||
|
||||
subroutine check_cell_overlap()
|
||||
subroutine check_cell_overlap(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
integer :: i ! cell loop index on a level
|
||||
integer :: n ! number of cells to search on a level
|
||||
|
|
@ -92,7 +95,7 @@ contains
|
|||
index_cell = univ % cells(i)
|
||||
c => cells(index_cell)
|
||||
|
||||
if (simple_cell_contains(c)) then
|
||||
if (simple_cell_contains(c, p)) then
|
||||
! the particle should only be contained in one cell per level
|
||||
if (index_cell /= coord % cell) then
|
||||
message = "Overlapping cells detected: " // &
|
||||
|
|
@ -120,10 +123,11 @@ contains
|
|||
! as it's within the geometry
|
||||
!===============================================================================
|
||||
|
||||
recursive subroutine find_cell(found, search_cells)
|
||||
recursive subroutine find_cell(p, found, search_cells)
|
||||
|
||||
logical, intent(inout) :: found
|
||||
integer, optional :: search_cells(:)
|
||||
type(Particle), intent(inout) :: p
|
||||
logical, intent(inout) :: found
|
||||
integer, optional :: search_cells(:)
|
||||
|
||||
integer :: i ! index over cells
|
||||
integer :: i_x, i_y, i_z ! indices in lattice
|
||||
|
|
@ -166,7 +170,7 @@ contains
|
|||
! get pointer to cell
|
||||
c => cells(index_cell)
|
||||
|
||||
if (simple_cell_contains(c)) then
|
||||
if (simple_cell_contains(c, p)) then
|
||||
! Set cell on this level
|
||||
p % coord % cell = index_cell
|
||||
|
||||
|
|
@ -209,7 +213,7 @@ contains
|
|||
p % coord % rotated = .true.
|
||||
end if
|
||||
|
||||
call find_cell(found)
|
||||
call find_cell(p, found)
|
||||
if (.not. found) exit
|
||||
|
||||
elseif (c % type == CELL_LATTICE) then
|
||||
|
|
@ -331,7 +335,7 @@ contains
|
|||
end if
|
||||
|
||||
if (.not. outside_lattice) then
|
||||
call find_cell(found)
|
||||
call find_cell(p, found)
|
||||
if (.not. found) exit
|
||||
end if
|
||||
|
||||
|
|
@ -352,9 +356,10 @@ contains
|
|||
! the geometry, is reflected, or crosses into a new lattice or cell
|
||||
!===============================================================================
|
||||
|
||||
subroutine cross_surface(last_cell)
|
||||
subroutine cross_surface(p, last_cell)
|
||||
|
||||
integer, intent(in) :: last_cell ! last cell particle was in
|
||||
type(Particle), intent(inout) :: p
|
||||
integer, intent(in) :: last_cell ! last cell particle was in
|
||||
|
||||
real(8) :: x ! x-x0 for sphere
|
||||
real(8) :: y ! y-y0 for sphere
|
||||
|
|
@ -395,7 +400,7 @@ contains
|
|||
! physically moving the particle forward slightly
|
||||
|
||||
p % coord0 % xyz = p % coord0 % xyz + TINY_BIT * p % coord0 % uvw
|
||||
call score_surface_current()
|
||||
call score_surface_current(p)
|
||||
end if
|
||||
|
||||
! Score to global leakage tally
|
||||
|
|
@ -417,7 +422,7 @@ contains
|
|||
if (.not. associated(p % coord, p % coord0)) then
|
||||
message = "Cannot reflect particle " // trim(to_str(p % id)) // &
|
||||
" off surface in a lower universe."
|
||||
call handle_lost_particle()
|
||||
call handle_lost_particle(p)
|
||||
return
|
||||
end if
|
||||
|
||||
|
|
@ -427,7 +432,7 @@ contains
|
|||
|
||||
if (active_current_tallies % size() > 0) then
|
||||
p % coord0 % xyz = p % coord0 % xyz - TINY_BIT * p % coord0 % uvw
|
||||
call score_surface_current()
|
||||
call score_surface_current(p)
|
||||
p % coord0 % xyz = p % coord0 % xyz + TINY_BIT * p % coord0 % uvw
|
||||
end if
|
||||
|
||||
|
|
@ -568,10 +573,10 @@ contains
|
|||
|
||||
if (associated(p % coord0 % next)) then
|
||||
call deallocate_coord(p % coord0 % next)
|
||||
call find_cell(found)
|
||||
call find_cell(p, found)
|
||||
if (.not. found) then
|
||||
message = "Couldn't find particle after reflecting from surface."
|
||||
call handle_lost_particle()
|
||||
call handle_lost_particle(p)
|
||||
return
|
||||
end if
|
||||
end if
|
||||
|
|
@ -594,14 +599,14 @@ contains
|
|||
! If coming from negative side of surface, search all the neighboring
|
||||
! cells on the positive side
|
||||
|
||||
call find_cell(found, surf % neighbor_pos)
|
||||
call find_cell(p, found, surf % neighbor_pos)
|
||||
if (found) return
|
||||
|
||||
elseif (p % surface < 0 .and. allocated(surf % neighbor_neg)) then
|
||||
! If coming from positive side of surface, search all the neighboring
|
||||
! cells on the negative side
|
||||
|
||||
call find_cell(found, surf % neighbor_neg)
|
||||
call find_cell(p, found, surf % neighbor_neg)
|
||||
if (found) return
|
||||
|
||||
end if
|
||||
|
|
@ -613,7 +618,7 @@ contains
|
|||
p % surface = NONE
|
||||
p % coord => p % coord0
|
||||
call deallocate_coord(p % coord % next)
|
||||
call find_cell(found)
|
||||
call find_cell(p, found)
|
||||
|
||||
if (run_mode /= MODE_PLOTTING .and. (.not. found)) then
|
||||
! If a cell is still not found, there are two possible causes: 1) there is
|
||||
|
|
@ -624,7 +629,7 @@ contains
|
|||
p % coord => p % coord0
|
||||
call deallocate_coord(p % coord % next)
|
||||
p % coord % xyz = p % coord % xyz + TINY_BIT * p % coord % uvw
|
||||
call find_cell(found)
|
||||
call find_cell(p, found)
|
||||
|
||||
! Couldn't find next cell anywhere! This probably means there is an actual
|
||||
! undefined region in the geometry.
|
||||
|
|
@ -633,7 +638,7 @@ contains
|
|||
message = "After particle " // trim(to_str(p % id)) // " crossed surface " &
|
||||
// trim(to_str(surfaces(i_surface) % id)) // " it could not be &
|
||||
&located in any cell and it did not leak."
|
||||
call handle_lost_particle()
|
||||
call handle_lost_particle(p)
|
||||
return
|
||||
end if
|
||||
end if
|
||||
|
|
@ -644,9 +649,10 @@ contains
|
|||
! CROSS_LATTICE moves a particle into a new lattice element
|
||||
!===============================================================================
|
||||
|
||||
subroutine cross_lattice(lattice_crossed)
|
||||
subroutine cross_lattice(p, lattice_crossed)
|
||||
|
||||
integer, intent(in) :: lattice_crossed
|
||||
type(Particle), intent(inout) :: p
|
||||
integer, intent(in) :: lattice_crossed
|
||||
|
||||
integer :: i_x, i_y, i_z ! indices in lattice
|
||||
integer :: n_x, n_y, n_z ! size of lattice
|
||||
|
|
@ -722,11 +728,11 @@ contains
|
|||
p % coord => p % coord0
|
||||
|
||||
! Search for particle
|
||||
call find_cell(found)
|
||||
call find_cell(p, found)
|
||||
if (.not. found) then
|
||||
message = "Could not locate particle " // trim(to_str(p % id)) // &
|
||||
" after crossing a lattice boundary."
|
||||
call handle_lost_particle()
|
||||
call handle_lost_particle(p)
|
||||
return
|
||||
end if
|
||||
else
|
||||
|
|
@ -734,7 +740,7 @@ contains
|
|||
p % coord % universe = lat % universes(i_x, i_y, i_z)
|
||||
|
||||
! Find cell in next lattice element
|
||||
call find_cell(found)
|
||||
call find_cell(p, found)
|
||||
if (.not. found) then
|
||||
! In some circumstances, a particle crossing the corner of a cell may not
|
||||
! be able to be found in the next universe. In this scenario we cut off
|
||||
|
|
@ -745,11 +751,11 @@ contains
|
|||
p % coord => p % coord0
|
||||
|
||||
! Search for particle
|
||||
call find_cell(found)
|
||||
call find_cell(p, found)
|
||||
if (.not. found) then
|
||||
message = "Could not locate particle " // trim(to_str(p % id)) // &
|
||||
" after crossing a lattice boundary."
|
||||
call handle_lost_particle()
|
||||
call handle_lost_particle(p)
|
||||
return
|
||||
end if
|
||||
end if
|
||||
|
|
@ -763,11 +769,12 @@ contains
|
|||
! that has a parent cell, also include the surfaces of the edge of the universe.
|
||||
!===============================================================================
|
||||
|
||||
subroutine distance_to_boundary(dist, surface_crossed, lattice_crossed)
|
||||
subroutine distance_to_boundary(p, dist, surface_crossed, lattice_crossed)
|
||||
|
||||
real(8), intent(out) :: dist
|
||||
integer, intent(out) :: surface_crossed
|
||||
integer, intent(out) :: lattice_crossed
|
||||
type(Particle), intent(inout) :: p
|
||||
real(8), intent(out) :: dist
|
||||
integer, intent(out) :: surface_crossed
|
||||
integer, intent(out) :: lattice_crossed
|
||||
|
||||
integer :: i ! index for surface in cell
|
||||
integer :: index_surf ! index in surfaces array (with sign)
|
||||
|
|
@ -1342,10 +1349,11 @@ contains
|
|||
! is in.
|
||||
!===============================================================================
|
||||
|
||||
recursive function sense(surf) result(s)
|
||||
recursive function sense(p, surf) result(s)
|
||||
|
||||
type(Surface), pointer :: surf ! surface
|
||||
logical :: s ! sense of particle
|
||||
type(Particle), intent(inout) :: p
|
||||
type(Surface), pointer :: surf ! surface
|
||||
logical :: s ! sense of particle
|
||||
|
||||
real(8) :: x,y,z ! coordinates of particle
|
||||
real(8) :: func ! surface function evaluated at point
|
||||
|
|
@ -1451,7 +1459,7 @@ contains
|
|||
! Particle may be coincident with this surface. Artifically move the
|
||||
! particle forward a tiny bit.
|
||||
p % coord % xyz = p % coord % xyz + TINY_BIT * p % coord % uvw
|
||||
s = sense(surf)
|
||||
s = sense(p, surf)
|
||||
elseif (func > 0) then
|
||||
s = .true.
|
||||
else
|
||||
|
|
@ -1544,11 +1552,13 @@ contains
|
|||
! HANDLE_LOST_PARTICLE
|
||||
!===============================================================================
|
||||
|
||||
subroutine handle_lost_particle()
|
||||
subroutine handle_lost_particle(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
! Print warning and write lost particle file
|
||||
call warning()
|
||||
call write_particle_restart()
|
||||
call write_particle_restart(p)
|
||||
|
||||
! Increment number of lost particles
|
||||
p % alive = .false.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ module global
|
|||
use geometry_header, only: Cell, Universe, Lattice, Surface
|
||||
use material_header, only: Material
|
||||
use mesh_header, only: StructuredMesh
|
||||
use particle_header, only: Particle
|
||||
use plot_header, only: ObjectPlot
|
||||
use set_header, only: SetInt
|
||||
use source_header, only: ExtSource
|
||||
|
|
@ -27,11 +26,6 @@ module global
|
|||
implicit none
|
||||
save
|
||||
|
||||
! ============================================================================
|
||||
! THE PARTICLE
|
||||
|
||||
type(Particle), pointer :: p => null()
|
||||
|
||||
! ============================================================================
|
||||
! GEOMETRY-RELATED VARIABLES
|
||||
|
||||
|
|
|
|||
51
src/math.F90
51
src/math.F90
|
|
@ -1,6 +1,7 @@
|
|||
module math
|
||||
|
||||
use constants, only: PI, ONE, TWO
|
||||
use constants, only: PI, ONE, TWO
|
||||
use random_lcg, only: prn
|
||||
|
||||
implicit none
|
||||
|
||||
|
|
@ -162,4 +163,52 @@ contains
|
|||
|
||||
end function calc_pn
|
||||
|
||||
!===============================================================================
|
||||
! MAXWELL_SPECTRUM samples an energy from the Maxwell fission distribution based
|
||||
! on a direct sampling scheme. The probability distribution function for a
|
||||
! Maxwellian is given as p(x) = 2/(T*sqrt(pi))*sqrt(x/T)*exp(-x/T). This PDF can
|
||||
! be sampled using rule C64 in the Monte Carlo Sampler LA-9721-MS.
|
||||
!===============================================================================
|
||||
|
||||
function maxwell_spectrum(T) result(E_out)
|
||||
|
||||
real(8), intent(in) :: T ! tabulated function of incoming E
|
||||
real(8) :: E_out ! sampled energy
|
||||
|
||||
real(8) :: r1, r2, r3 ! random numbers
|
||||
real(8) :: c ! cosine of pi/2*r3
|
||||
|
||||
r1 = prn()
|
||||
r2 = prn()
|
||||
r3 = prn()
|
||||
|
||||
! determine cosine of pi/2*r
|
||||
c = cos(PI/TWO*r3)
|
||||
|
||||
! determine outgoing energy
|
||||
E_out = -T*(log(r1) + log(r2)*c*c)
|
||||
|
||||
end function maxwell_spectrum
|
||||
|
||||
!===============================================================================
|
||||
! WATT_SPECTRUM samples the outgoing energy from a Watt energy-dependent fission
|
||||
! spectrum. Although fitted parameters exist for many nuclides, generally the
|
||||
! continuous tabular distributions (LAW 4) should be used in lieu of the Watt
|
||||
! spectrum. This direct sampling scheme is an unpublished scheme based on the
|
||||
! original Watt spectrum derivation (See F. Brown's MC lectures).
|
||||
!===============================================================================
|
||||
|
||||
function watt_spectrum(a, b) result(E_out)
|
||||
|
||||
real(8), intent(in) :: a ! Watt parameter a
|
||||
real(8), intent(in) :: b ! Watt parameter b
|
||||
real(8) :: E_out ! energy of emitted neutron
|
||||
|
||||
real(8) :: w ! sampled from Maxwellian
|
||||
|
||||
w = maxwell_spectrum(a)
|
||||
E_out = w + a*a*b/4. + (TWO*prn() - ONE)*sqrt(a*a*b*w)
|
||||
|
||||
end function watt_spectrum
|
||||
|
||||
end module math
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ module output
|
|||
use math, only: t_percentile
|
||||
use mesh_header, only: StructuredMesh
|
||||
use mesh, only: mesh_indices_to_bin, bin_to_mesh_indices
|
||||
use particle_header, only: LocalCoord
|
||||
use particle_header, only: LocalCoord, Particle
|
||||
use plot_header
|
||||
use string, only: upper_case, to_str
|
||||
use tally_header, only: TallyObject
|
||||
|
|
@ -235,7 +235,9 @@ contains
|
|||
! PRINT_PARTICLE displays the attributes of a particle
|
||||
!===============================================================================
|
||||
|
||||
subroutine print_particle()
|
||||
subroutine print_particle(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
integer :: i ! index for coordinate levels
|
||||
type(Cell), pointer :: c => null()
|
||||
|
|
@ -301,8 +303,6 @@ contains
|
|||
! Display weight, energy, grid index, and interpolation factor
|
||||
write(ou,*) ' Weight = ' // to_str(p % wgt)
|
||||
write(ou,*) ' Energy = ' // to_str(p % E)
|
||||
write(ou,*) ' Energy grid index = ' // to_str(p % index_grid)
|
||||
write(ou,*) ' Interpolation factor = ' // to_str(p % interp)
|
||||
write(ou,*)
|
||||
|
||||
end subroutine print_particle
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
module particle_header
|
||||
|
||||
use constants, only: NEUTRON, ONE, NONE, ZERO
|
||||
use constants, only: NEUTRON, ONE, NONE, ZERO
|
||||
use geometry_header, only: BASE_UNIVERSE
|
||||
|
||||
implicit none
|
||||
|
||||
|
|
@ -65,10 +66,6 @@ module particle_header
|
|||
integer :: n_bank ! number of fission sites banked
|
||||
real(8) :: wgt_bank ! weight of fission sites banked
|
||||
|
||||
! Energy grid data
|
||||
integer :: index_grid ! index on unionized energy grid
|
||||
real(8) :: interp ! interpolation factor for energy grid
|
||||
|
||||
! Indices for various arrays
|
||||
integer :: surface ! index for surface particle is on
|
||||
integer :: cell_born ! index for cell particle was born in
|
||||
|
|
@ -78,6 +75,8 @@ module particle_header
|
|||
! Statistical data
|
||||
integer :: n_collision ! # of collisions
|
||||
|
||||
contains
|
||||
procedure :: initialize => initialize_particle
|
||||
end type Particle
|
||||
|
||||
contains
|
||||
|
|
@ -102,4 +101,39 @@ contains
|
|||
|
||||
end subroutine deallocate_coord
|
||||
|
||||
!===============================================================================
|
||||
! INITIALIZE_PARTICLE sets default attributes for a particle from the source
|
||||
! bank
|
||||
!===============================================================================
|
||||
|
||||
subroutine initialize_particle(this)
|
||||
|
||||
class(Particle) :: this
|
||||
|
||||
! Set particle to neutron that's alive
|
||||
this % type = NEUTRON
|
||||
this % alive = .true.
|
||||
|
||||
! clear attributes
|
||||
this % surface = NONE
|
||||
this % cell_born = NONE
|
||||
this % material = NONE
|
||||
this % last_material = NONE
|
||||
this % wgt = ONE
|
||||
this % last_wgt = ONE
|
||||
this % absorb_wgt = ZERO
|
||||
this % n_bank = 0
|
||||
this % wgt_bank = ZERO
|
||||
this % n_collision = 0
|
||||
|
||||
! remove any original coordinates
|
||||
call deallocate_coord(this % coord0)
|
||||
|
||||
! Set up base level coordinates
|
||||
allocate(this % coord0)
|
||||
this % coord0 % universe = BASE_UNIVERSE
|
||||
this % coord => this % coord0
|
||||
|
||||
end subroutine initialize_particle
|
||||
|
||||
end module particle_header
|
||||
|
|
|
|||
|
|
@ -6,11 +6,10 @@ module particle_restart
|
|||
use constants
|
||||
use geometry_header, only: BASE_UNIVERSE
|
||||
use global
|
||||
use particle_header, only: deallocate_coord
|
||||
use output, only: write_message, print_particle
|
||||
use physics, only: transport
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: set_particle_seed
|
||||
use source, only: initialize_particle
|
||||
use tracking, only: transport
|
||||
|
||||
#ifdef HDF5
|
||||
use hdf5_interface
|
||||
|
|
@ -36,7 +35,9 @@ contains
|
|||
! READ_HDF5_PARTICLE_RESTART
|
||||
!===============================================================================
|
||||
|
||||
subroutine read_hdf5_particle_restart()
|
||||
subroutine read_hdf5_particle_restart(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
! write meessage
|
||||
message = "Loading particle restart file " // trim(path_particle_restart) &
|
||||
|
|
@ -77,7 +78,9 @@ contains
|
|||
! READ_BINARY_PARTICLE_RESTART
|
||||
!===============================================================================
|
||||
|
||||
subroutine read_binary_particle_restart()
|
||||
subroutine read_binary_particle_restart(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
integer :: filetype
|
||||
integer :: revision
|
||||
|
|
@ -121,16 +124,16 @@ contains
|
|||
subroutine run_particle_restart()
|
||||
|
||||
integer(8) :: particle_seed
|
||||
type(Particle) :: p
|
||||
|
||||
! initialize the particle to be tracked
|
||||
allocate(p)
|
||||
call initialize_particle()
|
||||
call p % initialize()
|
||||
|
||||
! read in the restart information
|
||||
#ifdef HDF5
|
||||
call read_hdf5_particle_restart()
|
||||
call read_hdf5_particle_restart(p)
|
||||
#else
|
||||
call read_binary_particle_restart()
|
||||
call read_binary_particle_restart(p)
|
||||
#endif
|
||||
|
||||
! set all tallies to 0 for now (just tracking errors)
|
||||
|
|
@ -142,10 +145,10 @@ contains
|
|||
call set_particle_seed(particle_seed)
|
||||
|
||||
! transport neutron
|
||||
call transport()
|
||||
call transport(p)
|
||||
|
||||
! write output if particle made it
|
||||
call print_particle()
|
||||
call print_particle(p)
|
||||
|
||||
end subroutine run_particle_restart
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@ module particle_restart_write
|
|||
|
||||
use, intrinsic :: ISO_FORTRAN_ENV
|
||||
|
||||
use bank_header, only: Bank
|
||||
use bank_header, only: Bank
|
||||
use global
|
||||
use string, only: to_str
|
||||
use particle_header, only: Particle
|
||||
use string, only: to_str
|
||||
|
||||
#ifdef HDF5
|
||||
use hdf5_interface
|
||||
|
|
@ -24,16 +25,18 @@ contains
|
|||
! WRITE_PARTICLE_RESTART
|
||||
!===============================================================================
|
||||
|
||||
subroutine write_particle_restart()
|
||||
subroutine write_particle_restart(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
! Dont write another restart file if in particle restart mode
|
||||
if (run_mode == MODE_PARTICLE) return
|
||||
|
||||
! write out binary or HDF5 file
|
||||
#ifdef HDF5
|
||||
call write_particle_restart_hdf5()
|
||||
call write_particle_restart_hdf5(p)
|
||||
#else
|
||||
call write_particle_restart_binary()
|
||||
call write_particle_restart_binary(p)
|
||||
#endif
|
||||
|
||||
end subroutine write_particle_restart
|
||||
|
|
@ -44,7 +47,9 @@ contains
|
|||
! WRITE_PARTICLE_RESTART_HDF5
|
||||
!===============================================================================
|
||||
|
||||
subroutine write_particle_restart_hdf5()
|
||||
subroutine write_particle_restart_hdf5(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
character(MAX_FILE_LEN) :: filename
|
||||
type(Bank), pointer :: src => null()
|
||||
|
|
@ -88,7 +93,9 @@ contains
|
|||
! WRITE_PARTICLE_RESTART_BINARY
|
||||
!===============================================================================
|
||||
|
||||
subroutine write_particle_restart_binary()
|
||||
subroutine write_particle_restart_binary(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
character(MAX_FILE_LEN) :: filename
|
||||
type(Bank), pointer :: src => null()
|
||||
|
|
|
|||
1057
src/physics.F90
1057
src/physics.F90
File diff suppressed because it is too large
Load diff
24
src/plot.F90
24
src/plot.F90
|
|
@ -6,11 +6,10 @@ module plot
|
|||
use geometry_header, only: Cell, BASE_UNIVERSE
|
||||
use global
|
||||
use output, only: write_message
|
||||
use particle_header, only: deallocate_coord
|
||||
use particle_header, only: deallocate_coord, Particle
|
||||
use plot_header
|
||||
use ppmlib, only: Image, init_image, allocate_image, &
|
||||
deallocate_image, set_pixel
|
||||
use source, only: initialize_particle
|
||||
use string, only: to_str
|
||||
|
||||
implicit none
|
||||
|
|
@ -49,8 +48,9 @@ contains
|
|||
! current particle's position
|
||||
!===============================================================================
|
||||
|
||||
subroutine position_rgb(pl, rgb, id)
|
||||
|
||||
subroutine position_rgb(p, pl, rgb, id)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
type(ObjectPlot), pointer, intent(in) :: pl
|
||||
integer, intent(out) :: rgb(3)
|
||||
integer, intent(out) :: id
|
||||
|
|
@ -61,8 +61,8 @@ contains
|
|||
call deallocate_coord(p % coord0 % next)
|
||||
p % coord => p % coord0
|
||||
|
||||
call find_cell(found_cell)
|
||||
if (check_overlaps) call check_cell_overlap()
|
||||
call find_cell(p, found_cell)
|
||||
if (check_overlaps) call check_cell_overlap(p)
|
||||
|
||||
if (.not. found_cell) then
|
||||
! If no cell, revert to default color
|
||||
|
|
@ -110,6 +110,7 @@ contains
|
|||
real(8) :: out_pixel
|
||||
real(8) :: xyz(3)
|
||||
type(Image) :: img
|
||||
type(Particle) :: p
|
||||
|
||||
! Initialize and allocate space for image
|
||||
call init_image(img)
|
||||
|
|
@ -142,8 +143,7 @@ contains
|
|||
end if
|
||||
|
||||
! allocate and initialize particle
|
||||
allocate(p)
|
||||
call initialize_particle()
|
||||
call p % initialize()
|
||||
p % coord % xyz = xyz
|
||||
p % coord % uvw = (/ 0.5, 0.5, 0.5 /)
|
||||
p % coord % universe = BASE_UNIVERSE
|
||||
|
|
@ -152,7 +152,7 @@ contains
|
|||
do x = 1, img % width
|
||||
|
||||
! get pixel color
|
||||
call position_rgb(pl, rgb, id)
|
||||
call position_rgb(p, pl, rgb, id)
|
||||
|
||||
! Create a pixel at (x,y) with color (r,g,b)
|
||||
call set_pixel(img, x, y, rgb(1), rgb(2), rgb(3))
|
||||
|
|
@ -228,6 +228,7 @@ contains
|
|||
integer :: id ! id of cell or material
|
||||
real(8) :: vox(3) ! x, y, and z voxel widths
|
||||
real(8) :: ll(3) ! lower left starting point for each sweep direction
|
||||
type(Particle) :: p
|
||||
|
||||
! compute voxel widths in each direction
|
||||
vox = pl % width/dble(pl % pixels)
|
||||
|
|
@ -236,8 +237,7 @@ contains
|
|||
ll = pl % origin - pl % width / 2.0
|
||||
|
||||
! allocate and initialize particle
|
||||
allocate(p)
|
||||
call initialize_particle()
|
||||
call p % initialize()
|
||||
p % coord0 % xyz = ll
|
||||
p % coord0 % uvw = (/ 0.5, 0.5, 0.5 /)
|
||||
p % coord0 % universe = BASE_UNIVERSE
|
||||
|
|
@ -257,7 +257,7 @@ contains
|
|||
do z = 1, pl % pixels(3)
|
||||
|
||||
! get voxel color
|
||||
call position_rgb(pl, rgb, id)
|
||||
call position_rgb(p, pl, rgb, id)
|
||||
|
||||
! write to plot file
|
||||
write(UNIT_PLOT) id
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ module source
|
|||
use error, only: fatal_error
|
||||
use geometry_header, only: BASE_UNIVERSE
|
||||
use global
|
||||
use math, only: maxwell_spectrum, watt_spectrum
|
||||
use output, only: write_message
|
||||
use particle_header, only: deallocate_coord
|
||||
use physics, only: maxwell_spectrum, watt_spectrum
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: prn, set_particle_seed
|
||||
use string, only: to_str
|
||||
|
||||
|
|
@ -149,19 +149,20 @@ contains
|
|||
! GET_SOURCE_PARTICLE returns the next source particle
|
||||
!===============================================================================
|
||||
|
||||
subroutine get_source_particle(index_source)
|
||||
subroutine get_source_particle(p, index_source)
|
||||
|
||||
integer(8), intent(in) :: index_source
|
||||
type(Particle), intent(inout) :: p
|
||||
integer(8), intent(in) :: index_source
|
||||
|
||||
integer(8) :: particle_seed ! unique index for particle
|
||||
type(Bank), pointer :: src => null()
|
||||
|
||||
! set defaults
|
||||
call initialize_particle()
|
||||
call p % initialize()
|
||||
|
||||
! Copy attributes from source to particle
|
||||
src => source_bank(index_source)
|
||||
call copy_source_attributes(src)
|
||||
call copy_source_attributes(p, src)
|
||||
|
||||
! set identifier for particle
|
||||
p % id = bank_first + index_source - 1
|
||||
|
|
@ -181,9 +182,10 @@ contains
|
|||
! COPY_SOURCE_ATTRIBUTES
|
||||
!===============================================================================
|
||||
|
||||
subroutine copy_source_attributes(src)
|
||||
subroutine copy_source_attributes(p, src)
|
||||
|
||||
type(Bank), pointer :: src
|
||||
type(Particle), intent(inout) :: p
|
||||
type(Bank), pointer :: src
|
||||
|
||||
! copy attributes from source bank site
|
||||
p % wgt = src % wgt
|
||||
|
|
@ -196,37 +198,4 @@ contains
|
|||
|
||||
end subroutine copy_source_attributes
|
||||
|
||||
!===============================================================================
|
||||
! INITIALIZE_PARTICLE sets default attributes for a particle from the source
|
||||
! bank
|
||||
!===============================================================================
|
||||
|
||||
subroutine initialize_particle()
|
||||
|
||||
! Set particle to neutron that's alive
|
||||
p % type = NEUTRON
|
||||
p % alive = .true.
|
||||
|
||||
! clear attributes
|
||||
p % surface = NONE
|
||||
p % cell_born = NONE
|
||||
p % material = NONE
|
||||
p % last_material = NONE
|
||||
p % wgt = ONE
|
||||
p % last_wgt = ONE
|
||||
p % absorb_wgt = ZERO
|
||||
p % n_bank = 0
|
||||
p % wgt_bank = ZERO
|
||||
p % n_collision = 0
|
||||
|
||||
! remove any original coordinates
|
||||
call deallocate_coord(p % coord0)
|
||||
|
||||
! Set up base level coordinates
|
||||
allocate(p % coord0)
|
||||
p % coord0 % universe = BASE_UNIVERSE
|
||||
p % coord => p % coord0
|
||||
|
||||
end subroutine initialize_particle
|
||||
|
||||
end module source
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ module tally
|
|||
mesh_intersects_2d, mesh_intersects_3d
|
||||
use mesh_header, only: StructuredMesh
|
||||
use output, only: header
|
||||
use particle_header, only: LocalCoord
|
||||
use particle_header, only: LocalCoord, Particle
|
||||
use search, only: binary_search
|
||||
use string, only: to_str
|
||||
use tally_header, only: TallyResult, TallyMapItem, TallyMapElement
|
||||
|
|
@ -32,7 +32,9 @@ contains
|
|||
! triggered at every collision, not every event
|
||||
!===============================================================================
|
||||
|
||||
subroutine score_analog_tally()
|
||||
subroutine score_analog_tally(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
integer :: i
|
||||
integer :: i_tally
|
||||
|
|
@ -70,7 +72,7 @@ contains
|
|||
! =======================================================================
|
||||
! DETERMINE SCORING BIN COMBINATION
|
||||
|
||||
call get_scoring_bins(i_tally, found_bin)
|
||||
call get_scoring_bins(p, i_tally, found_bin)
|
||||
if (.not. found_bin) cycle
|
||||
|
||||
! =======================================================================
|
||||
|
|
@ -285,7 +287,7 @@ contains
|
|||
! outgoing energy bins may have been scored to. The following
|
||||
! logic treats this special case and results to multiple bins
|
||||
|
||||
call score_fission_eout(t, score_index)
|
||||
call score_fission_eout(p, t, score_index)
|
||||
cycle SCORE_LOOP
|
||||
|
||||
else
|
||||
|
|
@ -364,8 +366,9 @@ contains
|
|||
! neutrons produced with different energies.
|
||||
!===============================================================================
|
||||
|
||||
subroutine score_fission_eout(t, i_score)
|
||||
subroutine score_fission_eout(p, t, i_score)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
type(TallyObject), pointer :: t
|
||||
integer, intent(in) :: i_score ! index for score
|
||||
|
||||
|
|
@ -424,9 +427,10 @@ contains
|
|||
! that require post-collision information.
|
||||
!===============================================================================
|
||||
|
||||
subroutine score_tracklength_tally(distance)
|
||||
subroutine score_tracklength_tally(p, distance)
|
||||
|
||||
real(8), intent(in) :: distance
|
||||
type(Particle), intent(in) :: p
|
||||
real(8), intent(in) :: distance
|
||||
|
||||
integer :: i
|
||||
integer :: i_tally
|
||||
|
|
@ -464,14 +468,14 @@ contains
|
|||
! since multiple bins can be scored to with a single track
|
||||
|
||||
if (t % find_filter(FILTER_MESH) > 0) then
|
||||
call score_tl_on_mesh(i_tally, distance)
|
||||
call score_tl_on_mesh(p, i_tally, distance)
|
||||
cycle
|
||||
end if
|
||||
|
||||
! =======================================================================
|
||||
! DETERMINE SCORING BIN COMBINATION
|
||||
|
||||
call get_scoring_bins(i_tally, found_bin)
|
||||
call get_scoring_bins(p, i_tally, found_bin)
|
||||
if (.not. found_bin) cycle
|
||||
|
||||
! =======================================================================
|
||||
|
|
@ -485,7 +489,7 @@ contains
|
|||
filter_index = sum((t % matching_bins - 1) * t % stride) + 1
|
||||
|
||||
if (t % all_nuclides) then
|
||||
call score_all_nuclides(i_tally, flux, filter_index)
|
||||
call score_all_nuclides(p, i_tally, flux, filter_index)
|
||||
else
|
||||
|
||||
NUCLIDE_BIN_LOOP: do k = 1, t % n_nuclide_bins
|
||||
|
|
@ -721,11 +725,12 @@ contains
|
|||
! the user requests <nuclides>all</nuclides>.
|
||||
!===============================================================================
|
||||
|
||||
subroutine score_all_nuclides(i_tally, flux, filter_index)
|
||||
subroutine score_all_nuclides(p, i_tally, flux, filter_index)
|
||||
|
||||
integer, intent(in) :: i_tally
|
||||
real(8), intent(in) :: flux
|
||||
integer, intent(in) :: filter_index
|
||||
type(Particle), intent(in) :: p
|
||||
integer, intent(in) :: i_tally
|
||||
real(8), intent(in) :: flux
|
||||
integer, intent(in) :: filter_index
|
||||
|
||||
integer :: i ! loop index for nuclides in material
|
||||
integer :: j ! loop index for scoring bin types
|
||||
|
|
@ -946,10 +951,11 @@ contains
|
|||
! these tallies, it is possible to score to multiple mesh cells for each track.
|
||||
!===============================================================================
|
||||
|
||||
subroutine score_tl_on_mesh(i_tally, d_track)
|
||||
subroutine score_tl_on_mesh(p, i_tally, d_track)
|
||||
|
||||
integer, intent(in) :: i_tally
|
||||
real(8), intent(in) :: d_track
|
||||
type(Particle), intent(in) :: p
|
||||
integer, intent(in) :: i_tally
|
||||
real(8), intent(in) :: d_track
|
||||
|
||||
integer :: i ! loop index for filter/score bins
|
||||
integer :: j ! loop index for direction
|
||||
|
|
@ -1145,7 +1151,7 @@ contains
|
|||
|
||||
if (t % all_nuclides) then
|
||||
! Score reaction rates for each nuclide in material
|
||||
call score_all_nuclides(i_tally, flux, filter_index)
|
||||
call score_all_nuclides(p, i_tally, flux, filter_index)
|
||||
|
||||
else
|
||||
NUCLIDE_BIN_LOOP: do b = 1, t % n_nuclide_bins
|
||||
|
|
@ -1260,10 +1266,11 @@ contains
|
|||
! for a tally based on the particle's current attributes.
|
||||
!===============================================================================
|
||||
|
||||
subroutine get_scoring_bins(i_tally, found_bin)
|
||||
subroutine get_scoring_bins(p, i_tally, found_bin)
|
||||
|
||||
integer, intent(in) :: i_tally
|
||||
logical, intent(out) :: found_bin
|
||||
type(Particle), intent(in) :: p
|
||||
integer, intent(in) :: i_tally
|
||||
logical, intent(out) :: found_bin
|
||||
|
||||
integer :: i ! loop index for filters
|
||||
integer :: n ! number of bins for single filter
|
||||
|
|
@ -1370,7 +1377,9 @@ contains
|
|||
! determining which mesh surfaces were crossed
|
||||
!===============================================================================
|
||||
|
||||
subroutine score_surface_current()
|
||||
subroutine score_surface_current(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
integer :: i
|
||||
integer :: i_tally
|
||||
|
|
|
|||
191
src/tracking.F90
Normal file
191
src/tracking.F90
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
module tracking
|
||||
|
||||
use cross_section, only: calculate_xs
|
||||
use error, only: fatal_error, warning
|
||||
use geometry, only: find_cell, distance_to_boundary, cross_surface, &
|
||||
cross_lattice, check_cell_overlap
|
||||
use geometry_header, only: Universe, BASE_UNIVERSE
|
||||
use global
|
||||
use output, only: write_message
|
||||
use particle_header, only: LocalCoord, Particle
|
||||
use physics, only: collision
|
||||
use random_lcg, only: prn
|
||||
use string, only: to_str
|
||||
use tally, only: score_analog_tally, score_tracklength_tally, &
|
||||
score_surface_current
|
||||
|
||||
contains
|
||||
|
||||
!===============================================================================
|
||||
! TRANSPORT encompasses the main logic for moving a particle through geometry.
|
||||
!===============================================================================
|
||||
|
||||
subroutine transport(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
integer :: surface_crossed ! surface which particle is on
|
||||
integer :: lattice_crossed ! lattice boundary which particle crossed
|
||||
integer :: last_cell ! most recent cell particle was in
|
||||
integer :: n_event ! number of collisions/crossings
|
||||
real(8) :: d_boundary ! distance to nearest boundary
|
||||
real(8) :: d_collision ! sampled distance to collision
|
||||
real(8) :: distance ! distance particle travels
|
||||
logical :: found_cell ! found cell which particle is in?
|
||||
type(LocalCoord), pointer :: coord => null()
|
||||
|
||||
! Display message if high verbosity or trace is on
|
||||
if (verbosity >= 9 .or. trace) then
|
||||
message = "Simulating Particle " // trim(to_str(p % id))
|
||||
call write_message()
|
||||
end if
|
||||
|
||||
! If the cell hasn't been determined based on the particle's location,
|
||||
! initiate a search for the current cell
|
||||
if (p % coord % cell == NONE) then
|
||||
call find_cell(p, found_cell)
|
||||
|
||||
! Particle couldn't be located
|
||||
if (.not. found_cell) then
|
||||
message = "Could not locate particle " // trim(to_str(p % id))
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
! set birth cell attribute
|
||||
p % cell_born = p % coord % cell
|
||||
end if
|
||||
|
||||
! Initialize number of events to zero
|
||||
n_event = 0
|
||||
|
||||
! Add paricle's starting weight to count for normalizing tallies later
|
||||
total_weight = total_weight + p % wgt
|
||||
|
||||
! Force calculation of cross-sections by setting last energy to zero
|
||||
micro_xs % last_E = ZERO
|
||||
|
||||
do while (p % alive)
|
||||
|
||||
if (check_overlaps) call check_cell_overlap(p)
|
||||
|
||||
! Calculate microscopic and macroscopic cross sections -- note: if the
|
||||
! material is the same as the last material and the energy of the
|
||||
! particle hasn't changed, we don't need to lookup cross sections again.
|
||||
|
||||
if (p % material /= p % last_material) call calculate_xs(p)
|
||||
|
||||
! Find the distance to the nearest boundary
|
||||
call distance_to_boundary(p, d_boundary, surface_crossed, lattice_crossed)
|
||||
|
||||
! Sample a distance to collision
|
||||
if (material_xs % total == ZERO) then
|
||||
d_collision = INFINITY
|
||||
else
|
||||
d_collision = -log(prn()) / material_xs % total
|
||||
end if
|
||||
|
||||
! Select smaller of the two distances
|
||||
distance = min(d_boundary, d_collision)
|
||||
|
||||
! Advance particle
|
||||
coord => p % coord0
|
||||
do while (associated(coord))
|
||||
coord % xyz = coord % xyz + distance * coord % uvw
|
||||
coord => coord % next
|
||||
end do
|
||||
|
||||
! Score track-length tallies
|
||||
if (active_tracklength_tallies % size() > 0) &
|
||||
call score_tracklength_tally(p, distance)
|
||||
|
||||
! Score track-length estimate of k-eff
|
||||
global_tallies(K_TRACKLENGTH) % value = &
|
||||
global_tallies(K_TRACKLENGTH) % value + p % wgt * distance * &
|
||||
material_xs % nu_fission
|
||||
|
||||
if (d_collision > d_boundary) then
|
||||
! ====================================================================
|
||||
! PARTICLE CROSSES SURFACE
|
||||
|
||||
last_cell = p % coord % cell
|
||||
p % coord % cell = NONE
|
||||
if (lattice_crossed /= NONE) then
|
||||
! Particle crosses lattice boundary
|
||||
p % surface = NONE
|
||||
call cross_lattice(p, lattice_crossed)
|
||||
p % event = EVENT_LATTICE
|
||||
else
|
||||
! Particle crosses surface
|
||||
p % surface = surface_crossed
|
||||
call cross_surface(p, last_cell)
|
||||
p % event = EVENT_SURFACE
|
||||
end if
|
||||
else
|
||||
! ====================================================================
|
||||
! PARTICLE HAS COLLISION
|
||||
|
||||
! Score collision estimate of keff
|
||||
global_tallies(K_COLLISION) % value = &
|
||||
global_tallies(K_COLLISION) % value + p % wgt * &
|
||||
material_xs % nu_fission / material_xs % total
|
||||
|
||||
! score surface current tallies -- this has to be done before the collision
|
||||
! since the direction of the particle will change and we need to use the
|
||||
! pre-collision direction to figure out what mesh surfaces were crossed
|
||||
|
||||
if (active_current_tallies % size() > 0) call score_surface_current(p)
|
||||
|
||||
! Clear surface component
|
||||
p % surface = NONE
|
||||
|
||||
call collision(p)
|
||||
|
||||
! Score collision estimator tallies -- this is done after a collision
|
||||
! has occurred rather than before because we need information on the
|
||||
! outgoing energy for any tallies with an outgoing energy filter
|
||||
|
||||
if (active_analog_tallies % size() > 0) call score_analog_tally(p)
|
||||
|
||||
! Reset banked weight during collision
|
||||
p % n_bank = 0
|
||||
p % wgt_bank = ZERO
|
||||
|
||||
! Save coordinates for tallying purposes
|
||||
p % last_xyz = p % coord0 % xyz
|
||||
|
||||
! Set last material to none since cross sections will need to be
|
||||
! re-evaluated
|
||||
p % last_material = NONE
|
||||
|
||||
! Set all uvws to base level -- right now, after a collision, only the
|
||||
! base level uvws are changed
|
||||
coord => p % coord0
|
||||
do while(associated(coord % next))
|
||||
if (coord % next % rotated) then
|
||||
! If next level is rotated, apply rotation matrix
|
||||
coord % next % uvw = matmul(cells(coord % cell) % &
|
||||
rotation, coord % uvw)
|
||||
else
|
||||
! Otherwise, copy this level's direction
|
||||
coord % next % uvw = coord % uvw
|
||||
end if
|
||||
|
||||
! Advance coordinate level
|
||||
coord => coord % next
|
||||
end do
|
||||
end if
|
||||
|
||||
! If particle has too many events, display warning and kill it
|
||||
n_event = n_event + 1
|
||||
if (n_event == MAX_EVENTS) then
|
||||
message = "Particle " // trim(to_str(p%id)) // " underwent maximum &
|
||||
&number of events."
|
||||
call warning()
|
||||
p % alive = .false.
|
||||
end if
|
||||
|
||||
end do
|
||||
|
||||
end subroutine transport
|
||||
|
||||
end module tracking
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
k-combined:
|
||||
0.29618376 0.01254762
|
||||
0.29432037 0.01265543
|
||||
tallies:
|
||||
63.10626773
|
||||
503.50685224
|
||||
65.39238423
|
||||
539.83246478
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
1.73665099 0.01507851
|
||||
1.75925969 0.02728159
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
1.08199949 0.01359101
|
||||
1.12562497 0.01475256
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.81819931 0.00497052
|
||||
0.77607961 0.02228188
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.32042881 0.00165656
|
||||
0.32600067 0.01356562
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.29182788 0.00487636
|
||||
0.28402818 0.02273104
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30737879 0.00683022
|
||||
0.30896828 0.01118024
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.31693311 0.00336656
|
||||
0.31522753 0.00509959
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
entropy:
|
||||
6.42970620
|
||||
6.39285931
|
||||
6.64491815
|
||||
6.58470936
|
||||
6.53553278
|
||||
6.67552398
|
||||
6.69709001
|
||||
6.71408313
|
||||
6.55064371
|
||||
6.52434363
|
||||
6.22453002
|
||||
7.34335892
|
||||
7.76336209
|
||||
7.76885034
|
||||
7.78607726
|
||||
7.72581193
|
||||
7.76121795
|
||||
7.84101403
|
||||
7.92560054
|
||||
7.86038189
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
0.00000000
|
||||
0.00000000
|
||||
14.61025046
|
||||
42.83560866
|
||||
3.02756209
|
||||
1.85367509
|
||||
43.03081152
|
||||
373.87004631
|
||||
8.78237650
|
||||
15.55794571
|
||||
1.84482312
|
||||
0.70297682
|
||||
26.52660205
|
||||
142.33423161
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
0.00000000
|
||||
0.00000000
|
||||
70.51534006
|
||||
1005.98848688
|
||||
43.50660698
|
||||
385.10698472
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
25.74196069
|
||||
133.03240675
|
||||
43.64898460
|
||||
381.13934139
|
||||
49.33108948
|
||||
487.94654213
|
||||
10.19385040
|
||||
21.01729435
|
||||
25.67612478
|
||||
135.06234071
|
||||
43.69328739
|
||||
384.31331185
|
||||
53.66385216
|
||||
577.08087569
|
||||
9.12440078
|
||||
17.45738591
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
25.70000000
|
||||
132.50500000
|
||||
43.69000000
|
||||
382.00870000
|
||||
50.51000000
|
||||
511.00830000
|
||||
7.29000000
|
||||
10.77570000
|
||||
25.59000000
|
||||
133.54390000
|
||||
42.96000000
|
||||
370.54460000
|
||||
51.41000000
|
||||
529.20190000
|
||||
6.14000000
|
||||
7.84340000
|
||||
|
|
|
|||
|
|
@ -1,67 +1,67 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
23.25000000
|
||||
108.58030000
|
||||
22.97000000
|
||||
108.08230000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.04000000
|
||||
0.00060000
|
||||
0.06000000
|
||||
0.00140000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
2.62000000
|
||||
1.37720000
|
||||
0.00000000
|
||||
0.00000000
|
||||
38.33000000
|
||||
295.26630000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
4.56000000
|
||||
4.15920000
|
||||
0.00000000
|
||||
0.00000000
|
||||
48.48000000
|
||||
470.68580000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.90510047
|
||||
0.18059702
|
||||
0.00000000
|
||||
0.00000000
|
||||
1.98972892
|
||||
0.82131425
|
||||
2.44000000
|
||||
1.20220000
|
||||
0.00000000
|
||||
0.00000000
|
||||
39.14000000
|
||||
306.60460000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.40588342
|
||||
0.03640636
|
||||
0.00000000
|
||||
0.00000000
|
||||
1.09242018
|
||||
0.25050799
|
||||
0.01000000
|
||||
0.00010000
|
||||
0.00000000
|
||||
0.00000000
|
||||
4.51000000
|
||||
4.06950000
|
||||
2.93000000
|
||||
1.78470000
|
||||
0.00000000
|
||||
0.00000000
|
||||
47.16000000
|
||||
445.44060000
|
||||
0.06122379
|
||||
0.00151503
|
||||
6.14000000
|
||||
7.84340000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.15018808
|
||||
0.00921578
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
3.35000000
|
||||
2.25490000
|
||||
0.14107661
|
||||
0.00423825
|
||||
7.29000000
|
||||
10.77570000
|
||||
0.47841947
|
||||
0.05293898
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
27.90283654
|
||||
156.04281895
|
||||
6.49484348
|
||||
8.44894829
|
||||
51.28129429
|
||||
530.26885468
|
||||
41.25744302
|
||||
345.89946671
|
||||
28.88595756
|
||||
167.70454782
|
||||
6.68679307
|
||||
8.94919165
|
||||
35.19283765
|
||||
254.25938930
|
||||
60.96487727
|
||||
750.99609930
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -9,22 +9,22 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.74472191
|
||||
0.48415133
|
||||
1.07230723
|
||||
0.63947485
|
||||
0.01468382
|
||||
0.00021561
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.69375275
|
||||
0.27938164
|
||||
0.03732162
|
||||
0.00139290
|
||||
0.08588844
|
||||
0.00737682
|
||||
1.29395418
|
||||
0.61345354
|
||||
3.17605552
|
||||
2.84377280
|
||||
2.97221609
|
||||
2.28098649
|
||||
2.26795333
|
||||
1.83191774
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -39,40 +39,60 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.21020517
|
||||
0.04418622
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.09463872
|
||||
0.00895649
|
||||
0.37654782
|
||||
0.10977332
|
||||
0.18150317
|
||||
0.03294340
|
||||
0.75237153
|
||||
0.28460845
|
||||
0.12767750
|
||||
0.01563459
|
||||
1.09635635
|
||||
0.81124602
|
||||
1.31009450
|
||||
0.78424448
|
||||
4.48862660
|
||||
4.40176027
|
||||
2.61476684
|
||||
2.29263337
|
||||
2.73483247
|
||||
2.44147576
|
||||
0.00222491
|
||||
0.00000495
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.86806631
|
||||
0.40595616
|
||||
0.11621475
|
||||
0.01350587
|
||||
0.00155887
|
||||
0.00000243
|
||||
0.35916061
|
||||
0.12899634
|
||||
0.09416182
|
||||
0.00886645
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.09474020
|
||||
0.00897571
|
||||
0.49862162
|
||||
0.24862352
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.18606180
|
||||
0.03461899
|
||||
0.06427301
|
||||
0.00413102
|
||||
1.19911234
|
||||
0.45648739
|
||||
1.42142705
|
||||
0.53678749
|
||||
3.60239192
|
||||
2.89778626
|
||||
0.13297308
|
||||
0.01768184
|
||||
1.12151012
|
||||
0.32281932
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -89,18 +109,20 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.12565322
|
||||
0.01578873
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.51743466
|
||||
0.08773882
|
||||
2.23251355
|
||||
1.30172211
|
||||
1.48995876
|
||||
0.76671676
|
||||
0.21954538
|
||||
0.04820018
|
||||
0.00273377
|
||||
0.00000747
|
||||
0.87406271
|
||||
0.30888052
|
||||
0.39960895
|
||||
0.08005836
|
||||
2.30080722
|
||||
2.04968651
|
||||
1.66625586
|
||||
0.78412054
|
||||
0.26891589
|
||||
0.03246764
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -121,22 +143,34 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.24152882
|
||||
0.05833617
|
||||
0.25632992
|
||||
0.03814006
|
||||
4.65349777
|
||||
5.94071891
|
||||
2.10515795
|
||||
1.52728004
|
||||
2.58079707
|
||||
1.55536111
|
||||
3.50569432
|
||||
2.61321114
|
||||
2.11589300
|
||||
2.23703372
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
2.84411701
|
||||
2.10746075
|
||||
1.73928674
|
||||
0.75261879
|
||||
0.35109881
|
||||
0.06875410
|
||||
0.33100566
|
||||
0.06581549
|
||||
0.58991041
|
||||
0.34799429
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.15104665
|
||||
0.02281509
|
||||
0.42889841
|
||||
0.18395384
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -147,8 +181,30 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.35426490
|
||||
0.12550362
|
||||
0.75912683
|
||||
0.15788880
|
||||
1.49035861
|
||||
0.65263822
|
||||
1.54069090
|
||||
1.58982707
|
||||
0.05440226
|
||||
0.00295961
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.06189472
|
||||
0.00383096
|
||||
0.07567228
|
||||
0.00572629
|
||||
0.76895320
|
||||
0.55973718
|
||||
1.82808885
|
||||
1.17843830
|
||||
0.31960577
|
||||
0.10214785
|
||||
0.04014117
|
||||
0.00161131
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -159,18 +215,26 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.20203442
|
||||
0.04081791
|
||||
2.14589720
|
||||
1.30673604
|
||||
1.04409600
|
||||
0.55136268
|
||||
0.15536029
|
||||
0.02413682
|
||||
0.00869849
|
||||
0.00007566
|
||||
0.19463946
|
||||
0.03788452
|
||||
0.19061650
|
||||
0.03633465
|
||||
0.35525829
|
||||
0.12620845
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.14948493
|
||||
0.02234575
|
||||
0.26642025
|
||||
0.04919614
|
||||
0.18119903
|
||||
0.01648042
|
||||
0.33066766
|
||||
0.04503538
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -179,192 +243,174 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00513180
|
||||
0.00002634
|
||||
0.07855383
|
||||
0.00617070
|
||||
0.03875096
|
||||
0.00150164
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.10984979
|
||||
0.01206698
|
||||
0.30039876
|
||||
0.05912935
|
||||
0.04004197
|
||||
0.00160336
|
||||
0.17230860
|
||||
0.02969025
|
||||
0.57320487
|
||||
0.17068193
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.04772221
|
||||
0.00227741
|
||||
0.01276581
|
||||
0.00009446
|
||||
1.37698488
|
||||
0.71236268
|
||||
0.11787532
|
||||
0.01389459
|
||||
0.00849153
|
||||
0.00007211
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00780257
|
||||
0.00006088
|
||||
1.00575506
|
||||
0.22150470
|
||||
0.60010441
|
||||
0.10130221
|
||||
0.01309371
|
||||
0.00017145
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.02731512
|
||||
0.00074612
|
||||
0.67798922
|
||||
0.21862908
|
||||
0.56975986
|
||||
0.07959617
|
||||
0.90520028
|
||||
0.37868800
|
||||
3.15953485
|
||||
3.14097026
|
||||
1.22452698
|
||||
0.53508531
|
||||
0.03235360
|
||||
0.00104676
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.37908147
|
||||
0.14370276
|
||||
1.79568135
|
||||
0.97362404
|
||||
0.52713813
|
||||
0.15711720
|
||||
2.01208278
|
||||
1.44662466
|
||||
0.51864206
|
||||
0.12992534
|
||||
0.09434319
|
||||
0.00810502
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.10419829
|
||||
0.01085728
|
||||
0.54172701
|
||||
0.26622227
|
||||
2.42479802
|
||||
1.71667857
|
||||
0.27493570
|
||||
0.02825591
|
||||
0.51225326
|
||||
0.09119064
|
||||
1.67247656
|
||||
0.94402049
|
||||
0.32669397
|
||||
0.03903995
|
||||
0.22350340
|
||||
0.04995377
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.09358292
|
||||
0.00875776
|
||||
2.05048252
|
||||
0.97499136
|
||||
0.77723197
|
||||
0.20948225
|
||||
3.64937855
|
||||
3.37346600
|
||||
2.10034559
|
||||
1.14562791
|
||||
2.15067765
|
||||
1.17838886
|
||||
0.10058305
|
||||
0.00509728
|
||||
1.11245884
|
||||
0.39389784
|
||||
0.05371565
|
||||
0.00288537
|
||||
2.72011298
|
||||
1.79114629
|
||||
2.80563673
|
||||
3.20603706
|
||||
1.56560089
|
||||
1.03725516
|
||||
0.24456194
|
||||
0.05981054
|
||||
3.90325239
|
||||
4.14221991
|
||||
3.08364316
|
||||
2.45517354
|
||||
2.32748465
|
||||
1.52115323
|
||||
4.52477924
|
||||
5.12896423
|
||||
2.64295725
|
||||
1.74944646
|
||||
0.66721965
|
||||
0.14668973
|
||||
0.00000000
|
||||
0.00000000
|
||||
1.42467052
|
||||
1.01691768
|
||||
0.02534426
|
||||
0.00064233
|
||||
0.00000000
|
||||
0.00000000
|
||||
1.43623311
|
||||
0.70640842
|
||||
0.25035386
|
||||
0.03446661
|
||||
1.24322754
|
||||
0.52709506
|
||||
1.75784221
|
||||
1.65092830
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.10967184
|
||||
0.01202791
|
||||
0.16773827
|
||||
0.01894693
|
||||
1.91479726
|
||||
0.78757483
|
||||
2.41935507
|
||||
1.29538357
|
||||
0.36430513
|
||||
0.07349228
|
||||
1.40713814
|
||||
0.61086928
|
||||
4.54764589
|
||||
4.35761936
|
||||
1.83828726
|
||||
0.85551667
|
||||
3.08761795
|
||||
2.73522382
|
||||
1.57971747
|
||||
0.70597082
|
||||
0.96473671
|
||||
0.52496554
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.16158527
|
||||
0.02610980
|
||||
0.72141422
|
||||
0.17801309
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.03373481
|
||||
0.00113804
|
||||
1.57605576
|
||||
0.80561508
|
||||
2.47246255
|
||||
1.77773457
|
||||
2.60036982
|
||||
1.55878535
|
||||
3.21120690
|
||||
2.33678026
|
||||
4.24458477
|
||||
4.44119713
|
||||
0.91438183
|
||||
0.33422901
|
||||
0.60473444
|
||||
0.18557226
|
||||
0.00000000
|
||||
0.00000000
|
||||
1.44569376
|
||||
0.75022322
|
||||
0.99247413
|
||||
0.31036171
|
||||
0.84162339
|
||||
0.28807337
|
||||
0.00270497
|
||||
0.00000732
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.23549827
|
||||
0.05545943
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.05554385
|
||||
0.00205221
|
||||
0.69435360
|
||||
0.18927613
|
||||
0.58611724
|
||||
0.10989826
|
||||
1.60379118
|
||||
0.80637857
|
||||
4.65562049
|
||||
4.63027782
|
||||
0.60478168
|
||||
0.14355354
|
||||
0.15101575
|
||||
0.01467227
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.06002436
|
||||
0.00360292
|
||||
1.01351346
|
||||
0.54569143
|
||||
0.20762778
|
||||
0.01641673
|
||||
0.57527086
|
||||
0.22871026
|
||||
0.18057558
|
||||
0.03011038
|
||||
1.00598096
|
||||
0.45972185
|
||||
0.88036591
|
||||
0.37710745
|
||||
0.53086453
|
||||
0.14090904
|
||||
0.17632445
|
||||
0.03109031
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.46360700
|
||||
0.10779299
|
||||
1.10169619
|
||||
0.63759013
|
||||
0.78089598
|
||||
0.32633537
|
||||
2.81720674
|
||||
2.43564074
|
||||
0.00942578
|
||||
0.00008885
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.43827225
|
||||
0.10338742
|
||||
0.54484882
|
||||
0.29686024
|
||||
0.15425169
|
||||
0.01266291
|
||||
1.26762031
|
||||
0.44060322
|
||||
2.09024150
|
||||
0.94471998
|
||||
1.13935875
|
||||
0.35699140
|
||||
0.68636832
|
||||
0.34703673
|
||||
0.30149553
|
||||
0.09089955
|
||||
0.02907163
|
||||
0.00084516
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -379,32 +425,22 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.56039932
|
||||
0.31404739
|
||||
0.00450316
|
||||
0.00002028
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.98220821
|
||||
0.37392273
|
||||
0.37748063
|
||||
0.05413146
|
||||
0.04691481
|
||||
0.00220100
|
||||
0.82835415
|
||||
0.28793825
|
||||
2.81424519
|
||||
1.70212902
|
||||
3.95394912
|
||||
4.40509457
|
||||
1.30726660
|
||||
0.81132828
|
||||
0.04413060
|
||||
0.00194751
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.52140618
|
||||
0.11042605
|
||||
1.91904108
|
||||
1.34050514
|
||||
0.10411834
|
||||
0.00745036
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.13853735
|
||||
0.01919260
|
||||
0.16517048
|
||||
0.02728129
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -415,30 +451,10 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
1.45408713
|
||||
0.70652243
|
||||
1.72907180
|
||||
0.78497986
|
||||
0.64459053
|
||||
0.09719184
|
||||
3.31664285
|
||||
3.11297340
|
||||
2.68352188
|
||||
2.15648607
|
||||
0.73300980
|
||||
0.21098135
|
||||
0.10557112
|
||||
0.01114526
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.04819227
|
||||
0.00232249
|
||||
3.78428408
|
||||
3.03646716
|
||||
0.72513650
|
||||
0.20773606
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -449,18 +465,14 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.74369161
|
||||
0.19301837
|
||||
3.05242967
|
||||
2.33710198
|
||||
0.78556672
|
||||
0.22606852
|
||||
0.35911920
|
||||
0.04642426
|
||||
1.20587602
|
||||
0.65712804
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.02751492
|
||||
0.00075707
|
||||
0.99249418
|
||||
0.32868074
|
||||
0.00856223
|
||||
0.00007331
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -469,12 +481,6 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
2.01675496
|
||||
1.11467055
|
||||
0.30880200
|
||||
0.09518932
|
||||
0.04423921
|
||||
0.00195711
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -483,12 +489,6 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.58068425
|
||||
0.12617857
|
||||
0.76146083
|
||||
0.36729056
|
||||
0.06851630
|
||||
0.00469448
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -503,8 +503,16 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.03752577
|
||||
0.00140818
|
||||
0.38273195
|
||||
0.10389392
|
||||
0.01182298
|
||||
0.00013978
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -515,12 +523,6 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
1.97392057
|
||||
3.89636241
|
||||
2.22472504
|
||||
2.25625720
|
||||
2.71251096
|
||||
1.57130187
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -553,8 +555,6 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.25824375
|
||||
0.06668984
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
58.88788583
|
||||
698.82477708
|
||||
7.36606228
|
||||
11.28273141
|
||||
48.41813539
|
||||
477.46899859
|
||||
5.65702668
|
||||
6.56676259
|
||||
36.02063446
|
||||
262.67869132
|
||||
4.68789690
|
||||
4.50704437
|
||||
74.02502234
|
||||
1111.88560685
|
||||
8.53811818
|
||||
14.72177988
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
tallies:
|
||||
471.58945263
|
||||
22414.09099170
|
||||
453.85329674
|
||||
20667.76024307
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.97864897 0.03395480
|
||||
0.91525327 0.06208235
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
1.01010427 0.02527489
|
||||
0.96912628 0.04173669
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ sys.path.append('../../src/utils')
|
|||
import particle_restart as pr
|
||||
|
||||
# read in particle restart file
|
||||
p = pr.Particle('particle_10_638.binary')
|
||||
p = pr.Particle('particle_10_903.binary')
|
||||
|
||||
# set up output string
|
||||
outstr = ''
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@ current batch:
|
|||
current gen:
|
||||
1.00000000
|
||||
particle id:
|
||||
638.00000000
|
||||
903.00000000
|
||||
particle weight:
|
||||
1.00000000
|
||||
particle energy:
|
||||
2.19644588
|
||||
4.05657055
|
||||
particle xyz:
|
||||
30.87637144 57.78785719 35.19837347
|
||||
-15.93841321 24.03836865 48.92880257
|
||||
particle uvw:
|
||||
-0.69841548 -0.09803596 0.70894624
|
||||
-0.17761482 0.97467032 0.13590711
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ def test_run():
|
|||
assert stderr != ''
|
||||
|
||||
def test_created_restart():
|
||||
assert os.path.exists(pwd + '/particle_10_638.binary')
|
||||
assert os.path.exists(pwd + '/particle_10_903.binary')
|
||||
|
||||
def test_results():
|
||||
os.system('python results.py')
|
||||
|
|
@ -26,13 +26,13 @@ def test_results():
|
|||
assert compare
|
||||
|
||||
def test_run_restart():
|
||||
proc = Popen([pwd + '/../../src/openmc -r particle_10_638.binary'],
|
||||
proc = Popen([pwd + '/../../src/openmc -r particle_10_903.binary'],
|
||||
stderr=PIPE, stdout=PIPE, shell=True)
|
||||
stdout, stderr = proc.communicate()
|
||||
assert stderr != ''
|
||||
|
||||
def teardown():
|
||||
output = [pwd + '/particle_10_638.binary', pwd + '/results_test.dat']
|
||||
output = [pwd + '/particle_10_903.binary', pwd + '/results_test.dat']
|
||||
for f in output:
|
||||
if os.path.exists(f):
|
||||
os.remove(f)
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.29819611 0.00828720
|
||||
0.30360946 0.00279271
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
2.25422952 0.01988955
|
||||
2.28423621 0.00686033
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
2.26978548 0.00418283
|
||||
2.27230443 0.00340049
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
2.27029660 0.00403683
|
||||
2.26967362 0.00896221
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
2.27701025 0.00486242
|
||||
2.29368643 0.00532865
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.86084578 0.00787947
|
||||
0.83997725 0.02336172
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.97104592 0.02819879
|
||||
1.01833778 0.04898906
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
@ -9,27 +9,27 @@ tallies:
|
|||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00779560
|
||||
0.00002384
|
||||
0.00779560
|
||||
0.00002384
|
||||
0.32663574
|
||||
0.02158530
|
||||
1.33715285
|
||||
0.36231473
|
||||
0.00050120
|
||||
0.00000015
|
||||
0.00050120
|
||||
0.00000015
|
||||
0.03041830
|
||||
0.00018839
|
||||
0.01659841
|
||||
0.00006394
|
||||
0.00000999
|
||||
0.00000000
|
||||
0.00000999
|
||||
0.00000000
|
||||
0.21087220
|
||||
0.00917268
|
||||
0.73494541
|
||||
0.11133353
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00010215
|
||||
0.01386040
|
||||
0.00004269
|
||||
0.01123359
|
||||
0.00002709
|
||||
0.00000000
|
||||
0.06300369
|
||||
0.00081033
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00001666
|
||||
0.00000000
|
||||
0.04302898
|
||||
0.00037069
|
||||
|
|
|
|||
|
|
@ -1,20 +1,20 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tally 1:
|
||||
0.00000000
|
||||
0.00000000
|
||||
2.31940201
|
||||
1.08685050
|
||||
0.01665408
|
||||
0.00006429
|
||||
0.30408802
|
||||
0.01884221
|
||||
1.38403954
|
||||
0.38795574
|
||||
0.01124864
|
||||
0.00002715
|
||||
0.20585652
|
||||
0.00848355
|
||||
tally 2:
|
||||
0.00000000
|
||||
0.00000000
|
||||
2.30000000
|
||||
1.06720000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.37000000
|
||||
0.02950000
|
||||
1.29000000
|
||||
0.34930000
|
||||
0.01000000
|
||||
0.00010000
|
||||
0.29000000
|
||||
0.01890000
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,12 +1,12 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tally 1:
|
||||
54.82000000
|
||||
604.23160000
|
||||
49.45000000
|
||||
498.91950000
|
||||
32.11000000
|
||||
209.71810000
|
||||
73.39000000
|
||||
1096.36910000
|
||||
tally 2:
|
||||
14.82000000
|
||||
44.29340000
|
||||
13.49000000
|
||||
37.03590000
|
||||
8.35000000
|
||||
14.14870000
|
||||
19.58000000
|
||||
77.70300000
|
||||
|
|
|
|||
|
|
@ -1,20 +1,20 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tally 1:
|
||||
0.97781050
|
||||
0.19423327
|
||||
0.64776968
|
||||
0.08434925
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.77289598
|
||||
0.12336152
|
||||
1.28044244
|
||||
0.33521026
|
||||
tally 2:
|
||||
1.09000000
|
||||
0.23830000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.83000000
|
||||
0.14070000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
32.10026540
|
||||
207.48228702
|
||||
11.24489229
|
||||
25.58304331
|
||||
54.24279599
|
||||
593.34126048
|
||||
29.62576194
|
||||
179.38435850
|
||||
10.11137407
|
||||
20.92401335
|
||||
48.66868147
|
||||
486.42701474
|
||||
19.26122972
|
||||
75.54613096
|
||||
6.73652906
|
||||
9.36673113
|
||||
31.86041974
|
||||
208.41096895
|
||||
44.30984076
|
||||
401.45119385
|
||||
14.80519869
|
||||
44.65616635
|
||||
72.13983866
|
||||
1064.07936529
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
191.58659270
|
||||
7456.15820695
|
||||
126.94081234
|
||||
3239.28231696
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
151.66906983
|
||||
4750.73833937
|
||||
251.05021427
|
||||
12885.65557182
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
2.57303120
|
||||
1.34385615
|
||||
1.70263677
|
||||
0.58270937
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
0.00000000
|
||||
2.05273052
|
||||
0.87054801
|
||||
3.36809105
|
||||
2.32023393
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
0.00000000
|
||||
0.00000000
|
||||
12.52000000
|
||||
31.63760000
|
||||
3.53000000
|
||||
2.51970000
|
||||
43.38000000
|
||||
380.96820000
|
||||
7.06000000
|
||||
10.07900000
|
||||
2.17000000
|
||||
1.03550000
|
||||
26.62000000
|
||||
144.17900000
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
0.00000000
|
||||
0.00000000
|
||||
12.29084845
|
||||
30.32621571
|
||||
3.01090801
|
||||
1.83321328
|
||||
42.72672350
|
||||
368.62058776
|
||||
7.39833696
|
||||
11.05882445
|
||||
1.83357448
|
||||
0.69443493
|
||||
26.32074554
|
||||
140.15855722
|
||||
|
|
|
|||
|
|
@ -1,33 +1,33 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
12.52000000
|
||||
31.63760000
|
||||
0.98756223
|
||||
0.21542730
|
||||
0.45047247
|
||||
0.04228472
|
||||
0.31795301
|
||||
0.03892891
|
||||
0.05365941
|
||||
0.01062510
|
||||
3.53000000
|
||||
2.51970000
|
||||
0.39957808
|
||||
0.03853015
|
||||
0.11242633
|
||||
0.00644611
|
||||
0.05649785
|
||||
0.01272789
|
||||
0.06730127
|
||||
0.00232340
|
||||
43.38000000
|
||||
380.96820000
|
||||
22.36892729
|
||||
102.01729343
|
||||
8.35400999
|
||||
14.46115375
|
||||
0.49890639
|
||||
0.18335238
|
||||
-1.46199676
|
||||
0.45033259
|
||||
7.06000000
|
||||
10.07900000
|
||||
0.57628500
|
||||
0.09057735
|
||||
0.16393312
|
||||
0.00710897
|
||||
0.10812742
|
||||
0.01738566
|
||||
-0.05518860
|
||||
0.01170613
|
||||
2.17000000
|
||||
1.03550000
|
||||
0.15627688
|
||||
0.01347659
|
||||
0.07161707
|
||||
0.01004427
|
||||
-0.04113472
|
||||
0.00491929
|
||||
0.00147404
|
||||
0.00304207
|
||||
26.62000000
|
||||
144.17900000
|
||||
13.17579549
|
||||
35.62860351
|
||||
4.47692962
|
||||
4.13563188
|
||||
0.05339990
|
||||
0.01603587
|
||||
-0.68933362
|
||||
0.13685298
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tally 1:
|
||||
12.52000000
|
||||
31.63760000
|
||||
0.98756223
|
||||
0.21542730
|
||||
0.45047247
|
||||
0.04228472
|
||||
0.31795301
|
||||
0.03892891
|
||||
0.05365941
|
||||
0.01062510
|
||||
7.06000000
|
||||
10.07900000
|
||||
0.57628500
|
||||
0.09057735
|
||||
0.16393312
|
||||
0.00710897
|
||||
0.10812742
|
||||
0.01738566
|
||||
-0.05518860
|
||||
0.01170613
|
||||
tally 2:
|
||||
12.52000000
|
||||
31.63760000
|
||||
0.98756223
|
||||
0.21542730
|
||||
0.45047247
|
||||
0.04228472
|
||||
0.31795301
|
||||
0.03892891
|
||||
0.05365941
|
||||
0.01062510
|
||||
7.06000000
|
||||
10.07900000
|
||||
0.57628500
|
||||
0.09057735
|
||||
0.16393312
|
||||
0.00710897
|
||||
0.10812742
|
||||
0.01738566
|
||||
-0.05518860
|
||||
0.01170613
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tallies:
|
||||
0.00000000
|
||||
0.00000000
|
||||
14.61025046
|
||||
42.83560866
|
||||
3.02756209
|
||||
1.85367509
|
||||
43.03081152
|
||||
373.87004631
|
||||
8.78237650
|
||||
15.55794571
|
||||
1.84482312
|
||||
0.70297682
|
||||
26.52660205
|
||||
142.33423161
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.29827380 0.00514217
|
||||
0.30165553 0.00229391
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.29570992 0.00263411
|
||||
0.28529893 0.02631808
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30746423 0.00315919
|
||||
0.29934658 0.00353145
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.29971337 0.00466687
|
||||
0.29903670 0.00255560
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30140708 0.00767575
|
||||
0.29437360 0.00659562
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30308270 0.00706340
|
||||
0.30303393 0.00050903
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30213072 0.00916338
|
||||
0.30487324 0.00983400
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
k-combined:
|
||||
1.63626998 0.13749537
|
||||
0.98046852 0.04718832
|
||||
tally 1:
|
||||
14.61025046
|
||||
42.83560866
|
||||
8.78237650
|
||||
15.55794571
|
||||
tally 2:
|
||||
3.02756209
|
||||
1.85367509
|
||||
1.84482312
|
||||
0.70297682
|
||||
tally 3:
|
||||
3.02756209
|
||||
1.85367509
|
||||
1.84482312
|
||||
0.70297682
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.37562235 0.01141169
|
||||
0.36037232 0.00458859
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
0.30078030 0.00343315
|
||||
0.30408759 0.00088008
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
k-combined:
|
||||
1.00121432 0.01443709
|
||||
1.07666475 0.08436762
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue