Merge pull request #202 from mit-crpg/refactor

Major refactor of physics module
This commit is contained in:
Paul Romano 2013-08-14 19:01:28 -07:00
commit c44d702142
83 changed files with 163097 additions and 163096 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

@ -1,2 +1,2 @@
k-combined:
0.30078030 0.00343315
0.30408759 0.00088008

View file

@ -1,5 +1,5 @@
k-combined:
0.29618376 0.01254762
0.29432037 0.01265543
tallies:
63.10626773
503.50685224
65.39238423
539.83246478

View file

@ -1,2 +1,2 @@
k-combined:
1.73665099 0.01507851
1.75925969 0.02728159

View file

@ -1,2 +1,2 @@
k-combined:
1.08199949 0.01359101
1.12562497 0.01475256

View file

@ -1,2 +1,2 @@
k-combined:
0.81819931 0.00497052
0.77607961 0.02228188

View file

@ -1,2 +1,2 @@
k-combined:
0.32042881 0.00165656
0.32600067 0.01356562

View file

@ -1,2 +1,2 @@
k-combined:
0.29182788 0.00487636
0.28402818 0.02273104

View file

@ -1,2 +1,2 @@
k-combined:
0.30737879 0.00683022
0.30896828 0.01118024

View file

@ -1,2 +1,2 @@
k-combined:
0.31693311 0.00336656
0.31522753 0.00509959

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,3 +1,3 @@
tallies:
471.58945263
22414.09099170
453.85329674
20667.76024307

View file

@ -1,2 +1,2 @@
k-combined:
0.97864897 0.03395480
0.91525327 0.06208235

View file

@ -1,2 +1,2 @@
k-combined:
1.63626998 0.13749537
0.98046852 0.04718832

View file

@ -1,2 +1,2 @@
k-combined:
1.01010427 0.02527489
0.96912628 0.04173669

View file

@ -1,2 +1,2 @@
k-combined:
0.30078030 0.00343315
0.30408759 0.00088008

View file

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

View file

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

View file

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

View file

@ -1,2 +1,2 @@
k-combined:
0.29819611 0.00828720
0.30360946 0.00279271

View file

@ -1,2 +1,2 @@
k-combined:
2.25422952 0.01988955
2.28423621 0.00686033

View file

@ -1,2 +1,2 @@
k-combined:
2.26978548 0.00418283
2.27230443 0.00340049

View file

@ -1,2 +1,2 @@
k-combined:
2.27029660 0.00403683
2.26967362 0.00896221

View file

@ -1,2 +1,2 @@
k-combined:
2.27701025 0.00486242
2.29368643 0.00532865

View file

@ -1,2 +1,2 @@
k-combined:
0.30078030 0.00343315
0.30408759 0.00088008

View file

@ -1,2 +1,2 @@
k-combined:
0.86084578 0.00787947
0.83997725 0.02336172

View file

@ -1,2 +1,2 @@
k-combined:
0.97104592 0.02819879
1.01833778 0.04898906

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,2 +1,2 @@
k-combined:
0.29827380 0.00514217
0.30165553 0.00229391

View file

@ -1,2 +1,2 @@
k-combined:
0.29570992 0.00263411
0.28529893 0.02631808

View file

@ -1,2 +1,2 @@
k-combined:
0.30746423 0.00315919
0.29934658 0.00353145

View file

@ -1,2 +1,2 @@
k-combined:
0.29971337 0.00466687
0.29903670 0.00255560

View file

@ -1,2 +1,2 @@
k-combined:
0.30140708 0.00767575
0.29437360 0.00659562

View file

@ -1,2 +1,2 @@
k-combined:
0.30308270 0.00706340
0.30303393 0.00050903

View file

@ -1,2 +1,2 @@
k-combined:
0.30078030 0.00343315
0.30408759 0.00088008

File diff suppressed because it is too large Load diff

View file

@ -1,2 +1,2 @@
k-combined:
0.30078030 0.00343315
0.30408759 0.00088008

View file

@ -1,2 +1,2 @@
k-combined:
0.30213072 0.00916338
0.30487324 0.00983400

View file

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

View file

@ -1,2 +1,2 @@
k-combined:
0.30078030 0.00343315
0.30408759 0.00088008

View file

@ -1,2 +1,2 @@
k-combined:
0.30078030 0.00343315
0.30408759 0.00088008

View file

@ -1,2 +1,2 @@
k-combined:
0.37562235 0.01141169
0.36037232 0.00458859

View file

@ -1,2 +1,2 @@
k-combined:
0.30078030 0.00343315
0.30408759 0.00088008

View file

@ -1,2 +1,2 @@
k-combined:
1.00121432 0.01443709
1.07666475 0.08436762